feat: implement various feature and fix various bug
15
.metadata
|
|
@ -18,21 +18,6 @@ migration:
|
|||
- platform: android
|
||||
create_revision: 72432c3f15b26fe55f8fd822e5fb3581260f75dd
|
||||
base_revision: 72432c3f15b26fe55f8fd822e5fb3581260f75dd
|
||||
- platform: ios
|
||||
create_revision: 72432c3f15b26fe55f8fd822e5fb3581260f75dd
|
||||
base_revision: 72432c3f15b26fe55f8fd822e5fb3581260f75dd
|
||||
- platform: linux
|
||||
create_revision: 72432c3f15b26fe55f8fd822e5fb3581260f75dd
|
||||
base_revision: 72432c3f15b26fe55f8fd822e5fb3581260f75dd
|
||||
- platform: macos
|
||||
create_revision: 72432c3f15b26fe55f8fd822e5fb3581260f75dd
|
||||
base_revision: 72432c3f15b26fe55f8fd822e5fb3581260f75dd
|
||||
- platform: web
|
||||
create_revision: 72432c3f15b26fe55f8fd822e5fb3581260f75dd
|
||||
base_revision: 72432c3f15b26fe55f8fd822e5fb3581260f75dd
|
||||
- platform: windows
|
||||
create_revision: 72432c3f15b26fe55f8fd822e5fb3581260f75dd
|
||||
base_revision: 72432c3f15b26fe55f8fd822e5fb3581260f75dd
|
||||
|
||||
# User provided section
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,7 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
|
||||
<application
|
||||
android:label="english_learning"
|
||||
android:name="${applicationName}"
|
||||
|
|
|
|||
3
devtools_options.yaml
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
description: This file stores settings for Dart & Flutter DevTools.
|
||||
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
|
||||
extensions:
|
||||
339
lib/core/services/dio_client.dart
Normal file
|
|
@ -0,0 +1,339 @@
|
|||
import 'package:dio/dio.dart';
|
||||
import 'package:english_learning/core/services/repositories/constants.dart';
|
||||
|
||||
class DioClient {
|
||||
final Dio _dio = Dio();
|
||||
|
||||
DioClient() {
|
||||
_dio.options.baseUrl = baseUrl;
|
||||
_dio.options.connectTimeout = const Duration(seconds: 5);
|
||||
_dio.options.receiveTimeout = const Duration(seconds: 3);
|
||||
}
|
||||
|
||||
Future<Response> post(String path, {dynamic data, Options? options}) async {
|
||||
try {
|
||||
final response = await _dio.post(
|
||||
path,
|
||||
data: data,
|
||||
options:
|
||||
options ?? Options(headers: {'Content-Type': 'application/json'}),
|
||||
);
|
||||
return response;
|
||||
} on DioError catch (e) {
|
||||
print('DioError: ${e.response?.data ?? e.message}');
|
||||
rethrow; // or handle specific DioError here
|
||||
} catch (e) {
|
||||
print('Unexpected error: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<Response> refreshAccessToken(String refreshToken) async {
|
||||
try {
|
||||
final response = await _dio.post(
|
||||
'/refreshToken',
|
||||
data: {'REFRESH_TOKEN': refreshToken},
|
||||
options: Options(
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
),
|
||||
);
|
||||
return response;
|
||||
} catch (e) {
|
||||
print('Refresh Token error: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<Response> updateUserProfile(
|
||||
String id, FormData formData, String token) async {
|
||||
try {
|
||||
final response = await _dio.put(
|
||||
'/user/update/$id',
|
||||
data: formData,
|
||||
options: Options(
|
||||
headers: {
|
||||
'Authorization': 'Bearer $token',
|
||||
'Content-Type': 'multipart/form-data',
|
||||
},
|
||||
),
|
||||
);
|
||||
return response;
|
||||
} catch (e) {
|
||||
print('Update Profile error: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<Response> updatePassword(
|
||||
String id,
|
||||
Map<String, dynamic> data,
|
||||
String token,
|
||||
) async {
|
||||
try {
|
||||
final response = await _dio.put(
|
||||
'/user/update/password/$id',
|
||||
data: data,
|
||||
options: Options(
|
||||
headers: {
|
||||
'Authorization': 'Bearer $token',
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
),
|
||||
);
|
||||
return response;
|
||||
} catch (e) {
|
||||
print('Update Password error: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<Response> reportIssue(
|
||||
Map<String, dynamic> data,
|
||||
String token,
|
||||
) async {
|
||||
try {
|
||||
final response = await _dio.post('/report',
|
||||
data: data,
|
||||
options: Options(headers: {
|
||||
'Authorization': 'Bearer $token',
|
||||
'Content-Type': 'application/json',
|
||||
}));
|
||||
return response;
|
||||
} catch (e) {
|
||||
print('Update Password error: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<Response> registerStudent(Map<String, dynamic> data) async {
|
||||
try {
|
||||
// Send POST request to the registration endpoint
|
||||
final response = await _dio.post(
|
||||
'/register/student',
|
||||
data: data,
|
||||
options: Options(
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
),
|
||||
);
|
||||
return response;
|
||||
} catch (e) {
|
||||
// Handle the error
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<Response> loginStudent(Map<String, dynamic> data) async {
|
||||
try {
|
||||
final response = await _dio.post(
|
||||
'/login',
|
||||
data: data,
|
||||
options: Options(
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
),
|
||||
);
|
||||
return response;
|
||||
} catch (e) {
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<Response> forgotPassword(Map<String, dynamic> data) async {
|
||||
try {
|
||||
final response = await _dio.post(
|
||||
'/forgotPassword',
|
||||
data: data,
|
||||
options: Options(
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
),
|
||||
);
|
||||
return response;
|
||||
} catch (e) {
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<Response> getMe(String token) async {
|
||||
try {
|
||||
print('Sending getMe request with token: Bearer $token');
|
||||
final response = await _dio.get(
|
||||
'/getMe',
|
||||
options: Options(
|
||||
headers: {
|
||||
'Authorization': 'Bearer $token', // Add 'Bearer ' prefix here
|
||||
},
|
||||
),
|
||||
);
|
||||
print('getMe response: ${response.data}');
|
||||
return response;
|
||||
} catch (e) {
|
||||
print('GetMe error: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<Response> getSections(String token) async {
|
||||
try {
|
||||
final response = await _dio.get(
|
||||
'/section',
|
||||
options: Options(
|
||||
headers: {
|
||||
'Authorization': 'Bearer $token',
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
),
|
||||
);
|
||||
print('getSections response: ${response.data}');
|
||||
return response;
|
||||
} catch (e) {
|
||||
print('GetSections error: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<Response> getTopics(String sectionId, String token) async {
|
||||
try {
|
||||
final response = await _dio.get(
|
||||
'/topic/section/$sectionId',
|
||||
options: Options(
|
||||
headers: {
|
||||
'Authorization': 'Bearer $token',
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
),
|
||||
);
|
||||
print('getTopics response: ${response.data}');
|
||||
return response;
|
||||
} catch (e) {
|
||||
print('GetTopics error: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<Response> getLevels(String topicsId, String token) async {
|
||||
try {
|
||||
final response = await _dio.get(
|
||||
'/level/topic/$topicsId',
|
||||
options: Options(
|
||||
headers: {
|
||||
'Authorization': 'Bearer $token',
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
),
|
||||
);
|
||||
print('getLevels response: ${response.data}');
|
||||
return response;
|
||||
} catch (e) {
|
||||
print('GetLevels error: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<Response> createStudentLearning(String idLevel, String token) async {
|
||||
try {
|
||||
final response = await _dio.post(
|
||||
'/stdLearning',
|
||||
data: {'ID_LEVEL': idLevel},
|
||||
options: Options(
|
||||
headers: {
|
||||
'Authorization': 'Bearer $token',
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
),
|
||||
);
|
||||
return response;
|
||||
} catch (e) {
|
||||
print('Create Student Learning error: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<Response> getExercises(String levelId, String token) async {
|
||||
try {
|
||||
final response = await _dio.get(
|
||||
'/exercise/level/$levelId',
|
||||
options: Options(
|
||||
headers: {
|
||||
'Authorization': 'Bearer $token',
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
),
|
||||
);
|
||||
print('getExercises response: ${response.data}');
|
||||
return response;
|
||||
} on DioError catch (e) {
|
||||
print(
|
||||
'DioError: ${e.response?.statusCode} - ${e.response?.data ?? e.message}');
|
||||
rethrow;
|
||||
} catch (e) {
|
||||
print('Unexpected error: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<Response> submitExerciseAnswers(
|
||||
List<Map<String, dynamic>> answers, String token) async {
|
||||
try {
|
||||
final response = await _dio.post(
|
||||
'/stdExercise',
|
||||
data: {'answers': answers},
|
||||
options: Options(
|
||||
headers: {
|
||||
'Authorization': 'Bearer $token',
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
),
|
||||
);
|
||||
print('submitExerciseAnswers response: ${response.data}');
|
||||
return response;
|
||||
} catch (e) {
|
||||
print('SubmitExerciseAnswers error: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<Response> getScore(String stdLearningId, String token) async {
|
||||
try {
|
||||
final response = await _dio.get(
|
||||
'/stdLearning/score/$stdLearningId',
|
||||
options: Options(
|
||||
headers: {
|
||||
'Authorization': 'Bearer $token',
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
),
|
||||
);
|
||||
print('getScore response: ${response.data}');
|
||||
return response;
|
||||
} catch (e) {
|
||||
print('GetScore error: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<Response> getLearningHistory(String sectionId, String token) async {
|
||||
try {
|
||||
final response = await _dio.get(
|
||||
'/learningHistory/section/$sectionId',
|
||||
options: Options(
|
||||
headers: {
|
||||
'Authorization': 'Bearer $token',
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
),
|
||||
);
|
||||
print('getLearningHistory response: ${response.data}');
|
||||
return response;
|
||||
} catch (e) {
|
||||
print('GetLearningHistory error: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
}
|
||||
1
lib/core/services/repositories/constants.dart
Normal file
|
|
@ -0,0 +1 @@
|
|||
const String baseUrl = 'https://3311-114-6-25-184.ngrok-free.app/';
|
||||
41
lib/core/services/repositories/exercise_repository.dart
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
import 'package:english_learning/core/services/dio_client.dart';
|
||||
|
||||
class ExerciseRepository {
|
||||
final DioClient _dioClient;
|
||||
|
||||
ExerciseRepository(this._dioClient);
|
||||
|
||||
Future<Map<String, dynamic>> getExercises(
|
||||
String levelId, String token) async {
|
||||
try {
|
||||
final response = await _dioClient.getExercises(levelId, token);
|
||||
if (response.statusCode == 200) {
|
||||
return response.data['payload'];
|
||||
} else {
|
||||
throw Exception('Failed to load exercises');
|
||||
}
|
||||
} catch (e) {
|
||||
throw Exception('Error fetching exercises: $e');
|
||||
}
|
||||
}
|
||||
|
||||
Future<Map<String, dynamic>> submitAnswersAndGetScore(
|
||||
List<Map<String, dynamic>> answers,
|
||||
String studentLearningId,
|
||||
String token) async {
|
||||
try {
|
||||
// Submit answers
|
||||
await _dioClient.submitExerciseAnswers(answers, token);
|
||||
|
||||
// Get score
|
||||
final response = await _dioClient.getScore(studentLearningId, token);
|
||||
if (response.statusCode == 200) {
|
||||
return response.data['payload'];
|
||||
} else {
|
||||
throw Exception('Failed to get score');
|
||||
}
|
||||
} catch (e) {
|
||||
throw Exception('Error submitting answers and getting score: $e');
|
||||
}
|
||||
}
|
||||
}
|
||||
37
lib/core/services/repositories/history_repository.dart
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
import 'package:dio/dio.dart';
|
||||
import 'package:english_learning/core/services/dio_client.dart';
|
||||
import 'package:english_learning/features/history/models/history_model.dart';
|
||||
|
||||
class HistoryRepository {
|
||||
final DioClient _dioClient;
|
||||
|
||||
HistoryRepository(this._dioClient);
|
||||
|
||||
Future<List<LearningHistory>> getLearningHistory(
|
||||
String sectionId, String token) async {
|
||||
try {
|
||||
final response = await _dioClient.getLearningHistory(sectionId, token);
|
||||
if (response.statusCode == 200 && response.data != null) {
|
||||
if (response.data['payload'] != null) {
|
||||
final List<dynamic> historyData = response.data['payload'];
|
||||
return historyData
|
||||
.map((json) => LearningHistory.fromJson(json))
|
||||
.toList();
|
||||
} else {
|
||||
throw Exception('No history data available');
|
||||
}
|
||||
} else {
|
||||
throw Exception(
|
||||
'Failed to load learning history: ${response.statusMessage}');
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
if (e.response != null) {
|
||||
throw Exception('Server error: ${e.response?.statusMessage}');
|
||||
} else {
|
||||
throw Exception('Network error: ${e.message}');
|
||||
}
|
||||
} catch (e) {
|
||||
throw Exception('Unexpected error: $e');
|
||||
}
|
||||
}
|
||||
}
|
||||
35
lib/core/services/repositories/level_repository.dart
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
import 'package:english_learning/core/services/dio_client.dart';
|
||||
import 'package:english_learning/features/learning/modules/level/models/level_model.dart';
|
||||
|
||||
class LevelRepository {
|
||||
final DioClient _dioClient = DioClient();
|
||||
|
||||
Future<Map<String, dynamic>> getLevels(String topicId, String token) async {
|
||||
try {
|
||||
final response = await _dioClient.getLevels(topicId, token);
|
||||
if (response.statusCode == 200 && response.data != null) {
|
||||
final Map<String, dynamic> responseData = response.data;
|
||||
if (responseData.containsKey('data')) {
|
||||
final Map<String, dynamic> data = responseData['data'];
|
||||
final List<dynamic> levelsData = data['levels'] ?? [];
|
||||
final List<Level> levels =
|
||||
levelsData.map((json) => Level.fromJson(json)).toList();
|
||||
final Map<String, dynamic>? lastCompletedLevel =
|
||||
data['lastCompletedLevel'];
|
||||
|
||||
return {
|
||||
'levels': levels,
|
||||
'lastCompletedLevel': lastCompletedLevel,
|
||||
};
|
||||
} else {
|
||||
throw Exception('Invalid response structure: missing "data" key');
|
||||
}
|
||||
} else {
|
||||
throw Exception('Failed to load levels: ${response.statusCode}');
|
||||
}
|
||||
} catch (e) {
|
||||
print('Error in LevelRepository: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
}
|
||||
22
lib/core/services/repositories/section_repository.dart
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
import 'package:english_learning/core/services/dio_client.dart';
|
||||
import 'package:english_learning/features/learning/modules/model/section_model.dart';
|
||||
|
||||
class SectionRepository {
|
||||
final DioClient _dioClient = DioClient();
|
||||
|
||||
Future<List<Section>> getSections(String token) async {
|
||||
try {
|
||||
final response = await _dioClient.getSections(token);
|
||||
if (response.statusCode == 200) {
|
||||
final Map<String, dynamic> responseData = response.data;
|
||||
final List<dynamic> data = responseData['payload'];
|
||||
return data.map((json) => Section.fromJson(json)).toList();
|
||||
} else {
|
||||
throw Exception('Failed to load sections: ${response.statusCode}');
|
||||
}
|
||||
} catch (e) {
|
||||
print('Error in SectionRepository: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
import 'package:english_learning/core/services/dio_client.dart';
|
||||
|
||||
class StudentLearningRepository {
|
||||
final DioClient _dioClient;
|
||||
|
||||
StudentLearningRepository(this._dioClient);
|
||||
|
||||
Future<Map<String, dynamic>> createStudentLearning(
|
||||
String idLevel, String token) async {
|
||||
try {
|
||||
final response = await _dioClient.createStudentLearning(idLevel, token);
|
||||
return response.data;
|
||||
} catch (e) {
|
||||
throw Exception('Failed to create student learning: $e');
|
||||
}
|
||||
}
|
||||
}
|
||||
22
lib/core/services/repositories/topic_repository.dart
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
import 'package:english_learning/core/services/dio_client.dart';
|
||||
import 'package:english_learning/features/learning/modules/topics/models/topic_model.dart';
|
||||
|
||||
class TopicRepository {
|
||||
final DioClient _dioClient = DioClient();
|
||||
|
||||
Future<List<Topic>> getTopics(String sectionId, String token) async {
|
||||
try {
|
||||
final response = await _dioClient.getTopics(sectionId, token);
|
||||
if (response.statusCode == 200) {
|
||||
final Map<String, dynamic> responseData = response.data;
|
||||
final List<dynamic> data = responseData['payload'];
|
||||
return data.map((json) => Topic.fromJson(json)).toList();
|
||||
} else {
|
||||
throw Exception('Failed to load topics: ${response.statusCode}');
|
||||
}
|
||||
} catch (e) {
|
||||
print('Error in TopicRepository: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
}
|
||||
119
lib/core/services/repositories/user_repository.dart
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:english_learning/core/services/dio_client.dart';
|
||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
|
||||
class UserRepository {
|
||||
final DioClient dioClient = DioClient();
|
||||
final FlutterSecureStorage _secureStorage = const FlutterSecureStorage();
|
||||
|
||||
// Authentication methods
|
||||
Future<Response> registerUser(Map<String, dynamic> data) async {
|
||||
return await dioClient.registerStudent(data);
|
||||
}
|
||||
|
||||
Future<Response> loginUser(Map<String, dynamic> data) async {
|
||||
return await dioClient.loginStudent(data);
|
||||
}
|
||||
|
||||
Future<Response> logoutUser() async {
|
||||
return await dioClient.post('/logout');
|
||||
}
|
||||
|
||||
Future<Response> forgotPassword(String email) async {
|
||||
return await dioClient.forgotPassword({'EMAIL': email});
|
||||
}
|
||||
|
||||
// User data methods
|
||||
Future<Response> getMe(String token) async {
|
||||
return await dioClient.getMe(token);
|
||||
}
|
||||
|
||||
Future<Response> updateUserProfile(
|
||||
String id,
|
||||
Map<String, dynamic> data,
|
||||
String token, {
|
||||
File? imageFile,
|
||||
}) async {
|
||||
try {
|
||||
FormData formData = FormData.fromMap(data);
|
||||
if (imageFile != null) {
|
||||
formData.files.add(MapEntry(
|
||||
'PICTURE',
|
||||
await MultipartFile.fromFile(imageFile.path,
|
||||
filename: imageFile.path.split('/').last),
|
||||
));
|
||||
}
|
||||
return await dioClient.updateUserProfile(id, formData, token);
|
||||
} catch (e) {
|
||||
print('Update Profile error: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<Response> updatePassword(
|
||||
String id,
|
||||
String oldPassword,
|
||||
String newPassword,
|
||||
String confirmPassword,
|
||||
String token,
|
||||
) async {
|
||||
try {
|
||||
final data = {
|
||||
"OLD_PASSWORD": oldPassword,
|
||||
"PASSWORD": newPassword,
|
||||
"CONFIRM_PASSWORD": confirmPassword
|
||||
};
|
||||
return await dioClient.updatePassword(id, data, token);
|
||||
} catch (e) {
|
||||
print('Update Password error: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<Response> reportIssue(String report, String token) async {
|
||||
return await dioClient.reportIssue({'REPORTS': report}, token);
|
||||
}
|
||||
|
||||
// Token management methods
|
||||
Future<void> saveRefreshToken(String refreshToken) async {
|
||||
await _secureStorage.write(key: 'refreshToken', value: refreshToken);
|
||||
}
|
||||
|
||||
Future<String?> getRefreshToken() async {
|
||||
return await _secureStorage.read(key: 'refreshToken');
|
||||
}
|
||||
|
||||
Future<void> deleteRefreshToken() async {
|
||||
await _secureStorage.delete(key: 'refreshToken');
|
||||
}
|
||||
|
||||
Future<void> saveToken(String token) async {
|
||||
await _secureStorage.write(key: 'jwtToken', value: token);
|
||||
}
|
||||
|
||||
Future<String?> getToken() async {
|
||||
return await _secureStorage.read(key: 'jwtToken');
|
||||
}
|
||||
|
||||
Future<void> deleteToken() async {
|
||||
await _secureStorage.delete(key: 'jwtToken');
|
||||
}
|
||||
|
||||
// User data storage methods
|
||||
Future<void> saveUserData(Map<String, dynamic> userData) async {
|
||||
await _secureStorage.write(key: 'userData', value: json.encode(userData));
|
||||
}
|
||||
|
||||
Future<Map<String, dynamic>?> getUserData() async {
|
||||
String? cachedUserData = await _secureStorage.read(key: 'userData');
|
||||
return cachedUserData != null
|
||||
? Map<String, dynamic>.from(json.decode(cachedUserData))
|
||||
: null;
|
||||
}
|
||||
|
||||
Future<void> deleteUserData() async {
|
||||
await _secureStorage.delete(key: 'userData');
|
||||
}
|
||||
}
|
||||
88
lib/core/utils/styles/theme.dart
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
|
||||
class AppColors {
|
||||
static const Color whiteColor = Color(0xFFFFFFFF);
|
||||
static const Color blackColor = Color(0xFF262626);
|
||||
static const Color blackButtonColor = Color(0xFF404040);
|
||||
static const Color darkColor = Color(0xFF526071);
|
||||
static const Color greyColor = Color(0xFF737373);
|
||||
static const Color cardDisabledColor = Color(0xFFF2F2F2);
|
||||
static const Color cardButtonColor = Color(0xFFE0E0E0);
|
||||
static const Color yellowColor = Color(0xFFFDE047);
|
||||
static const Color tetriaryColor = Color(0xFF959EA9);
|
||||
static const Color blueColor = Color(0xFF0090FF);
|
||||
static const Color redColor = Color(0xFFE9342C);
|
||||
static const Color disableColor = Color(0xFFBDBDBD);
|
||||
static const Color bgSoftColor = Color(0xFFF1F5FC);
|
||||
static const Color sliderInActive = Color(0xFFBFDBFE);
|
||||
static const Color secondaryColor = Color(0xFF5674ED);
|
||||
static const Color primaryColor = Color(0xFF34C3F9);
|
||||
static const Color yellowButtonColor = Color(0xFFFACC15);
|
||||
|
||||
static LinearGradient get gradientTheme => const LinearGradient(
|
||||
colors: [secondaryColor, primaryColor],
|
||||
begin: Alignment.centerLeft,
|
||||
end: Alignment.centerRight,
|
||||
);
|
||||
}
|
||||
|
||||
class AppTextStyles {
|
||||
static TextStyle blackTextStyle = GoogleFonts.inter(
|
||||
color: AppColors.blackColor,
|
||||
);
|
||||
|
||||
static TextStyle logoTextStyle = GoogleFonts.comfortaa(
|
||||
color: AppColors.whiteColor,
|
||||
fontSize: 30,
|
||||
fontWeight: FontWeight.bold,
|
||||
);
|
||||
|
||||
static TextStyle greyTextStyle = GoogleFonts.inter(
|
||||
color: AppColors.greyColor,
|
||||
);
|
||||
|
||||
static TextStyle yellowTextStyle = GoogleFonts.inter(
|
||||
color: AppColors.yellowColor,
|
||||
);
|
||||
|
||||
static TextStyle redTextStyle = GoogleFonts.inter(
|
||||
color: AppColors.redColor,
|
||||
);
|
||||
|
||||
static TextStyle disableTextStyle = GoogleFonts.inter(
|
||||
color: AppColors.disableColor,
|
||||
);
|
||||
|
||||
static TextStyle primaryTextStyle = GoogleFonts.inter(
|
||||
color: AppColors.primaryColor,
|
||||
);
|
||||
|
||||
static TextStyle blueTextStyle = GoogleFonts.inter(
|
||||
color: AppColors.blueColor,
|
||||
);
|
||||
|
||||
static TextStyle secondaryTextStyle = GoogleFonts.inter(
|
||||
color: AppColors.secondaryColor,
|
||||
);
|
||||
|
||||
static TextStyle whiteTextStyle = GoogleFonts.inter(
|
||||
color: AppColors.whiteColor,
|
||||
);
|
||||
|
||||
static TextStyle tetriaryTextStyle = GoogleFonts.inter(
|
||||
color: AppColors.tetriaryColor,
|
||||
);
|
||||
|
||||
static TextStyle blackButtonTextStyle = GoogleFonts.inter(
|
||||
color: AppColors.blackButtonColor,
|
||||
);
|
||||
}
|
||||
|
||||
ThemeData appTheme() {
|
||||
return ThemeData(
|
||||
textTheme: GoogleFonts.interTextTheme(),
|
||||
fontFamily: GoogleFonts.inter().fontFamily,
|
||||
scaffoldBackgroundColor: AppColors.whiteColor,
|
||||
);
|
||||
}
|
||||
103
lib/core/widgets/confirm_password_field.dart
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
import 'package:english_learning/features/auth/provider/validator_provider.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:bootstrap_icons/bootstrap_icons.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class ConfirmPasswordFieldWidget extends StatefulWidget {
|
||||
final String labelText;
|
||||
final String hintText;
|
||||
const ConfirmPasswordFieldWidget({
|
||||
super.key,
|
||||
required this.labelText,
|
||||
required this.hintText,
|
||||
});
|
||||
|
||||
@override
|
||||
_ConfirmPasswordFieldWidgetState createState() =>
|
||||
_ConfirmPasswordFieldWidgetState();
|
||||
}
|
||||
|
||||
class _ConfirmPasswordFieldWidgetState
|
||||
extends State<ConfirmPasswordFieldWidget> {
|
||||
late FocusNode _focusNode;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_focusNode = FocusNode();
|
||||
|
||||
_focusNode.addListener(() {
|
||||
if (!_focusNode.hasFocus) {
|
||||
final validatorProvider =
|
||||
Provider.of<ValidatorProvider>(context, listen: false);
|
||||
validatorProvider.validateField(
|
||||
'confirmPassword', validatorProvider.getError('confirmPassword'),
|
||||
validator: validatorProvider.confirmPasswordValidator);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_focusNode.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final validatorProvider = Provider.of<ValidatorProvider>(context);
|
||||
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
widget.labelText,
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
TextField(
|
||||
focusNode: _focusNode,
|
||||
obscureText: validatorProvider.isObscure('confirmPassword'),
|
||||
onChanged: (value) {
|
||||
validatorProvider.validateField('confirmPassword', value,
|
||||
validator: validatorProvider.confirmPasswordValidator);
|
||||
},
|
||||
decoration: InputDecoration(
|
||||
hintText: widget.hintText,
|
||||
hintStyle: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
),
|
||||
suffixIcon: GestureDetector(
|
||||
onTap: () =>
|
||||
validatorProvider.toggleVisibility('confirmPassword'),
|
||||
child: AnimatedSwitcher(
|
||||
duration: const Duration(milliseconds: 300),
|
||||
transitionBuilder: (Widget child, Animation<double> animation) {
|
||||
return ScaleTransition(scale: animation, child: child);
|
||||
},
|
||||
child: Icon(
|
||||
validatorProvider.isObscure('confirmPassword')
|
||||
? BootstrapIcons.eye_slash
|
||||
: BootstrapIcons.eye,
|
||||
color: AppColors.greyColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
borderSide: const BorderSide(
|
||||
width: 1,
|
||||
color: AppColors.disableColor,
|
||||
),
|
||||
),
|
||||
errorText: validatorProvider.getError('confirmPassword'),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
59
lib/core/widgets/custom_button.dart
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class CustomButton extends StatelessWidget {
|
||||
final String text;
|
||||
final double width;
|
||||
final double height;
|
||||
final Color color;
|
||||
final VoidCallback onPressed;
|
||||
final TextStyle? textStyle;
|
||||
|
||||
const CustomButton({
|
||||
super.key,
|
||||
required this.text,
|
||||
required this.width,
|
||||
required this.height,
|
||||
required this.color,
|
||||
required this.onPressed,
|
||||
this.textStyle,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SizedBox(
|
||||
width: width,
|
||||
height: height,
|
||||
child: DecoratedBox(
|
||||
decoration: BoxDecoration(
|
||||
color: color,
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: Colors.transparent,
|
||||
shadowColor: Colors.transparent,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0),
|
||||
),
|
||||
),
|
||||
onPressed: onPressed,
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
text,
|
||||
style: textStyle ??
|
||||
AppTextStyles.blackButtonTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
81
lib/core/widgets/email_field.dart
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
import 'package:english_learning/features/auth/provider/validator_provider.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class EmailFieldWidget extends StatefulWidget {
|
||||
final String labelText;
|
||||
final String hintText;
|
||||
const EmailFieldWidget(
|
||||
{super.key, required this.labelText, required this.hintText});
|
||||
|
||||
@override
|
||||
_EmailFieldWidgetState createState() => _EmailFieldWidgetState();
|
||||
}
|
||||
|
||||
class _EmailFieldWidgetState extends State<EmailFieldWidget> {
|
||||
late FocusNode _focusNode;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_focusNode = FocusNode();
|
||||
|
||||
_focusNode.addListener(() {
|
||||
if (!_focusNode.hasFocus) {
|
||||
final validatorProvider =
|
||||
Provider.of<ValidatorProvider>(context, listen: false);
|
||||
validatorProvider.validateField(
|
||||
'email', validatorProvider.getError('email'),
|
||||
validator: validatorProvider.emailValidator);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_focusNode.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final validatorProvider = Provider.of<ValidatorProvider>(context);
|
||||
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
widget.labelText,
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
TextField(
|
||||
focusNode: _focusNode,
|
||||
keyboardType: TextInputType.emailAddress,
|
||||
onChanged: (value) {
|
||||
validatorProvider.validateField('email', value,
|
||||
validator: validatorProvider.emailValidator);
|
||||
},
|
||||
decoration: InputDecoration(
|
||||
hintText: widget.hintText,
|
||||
hintStyle: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
),
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
borderSide: const BorderSide(
|
||||
width: 1,
|
||||
color: AppColors.disableColor,
|
||||
),
|
||||
),
|
||||
errorText: validatorProvider.getError('email'),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
95
lib/core/widgets/form_field/class_field.dart
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
import 'package:bootstrap_icons/bootstrap_icons.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
|
||||
class ClassFieldWidget extends StatefulWidget {
|
||||
final bool isRequired;
|
||||
final String labelText;
|
||||
final String hintText;
|
||||
const ClassFieldWidget({
|
||||
super.key,
|
||||
required this.labelText,
|
||||
required this.hintText,
|
||||
this.isRequired = false,
|
||||
});
|
||||
|
||||
@override
|
||||
State<ClassFieldWidget> createState() => _ClassFieldWidgetState();
|
||||
}
|
||||
|
||||
class _ClassFieldWidgetState extends State<ClassFieldWidget> {
|
||||
String? selectedClass;
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text.rich(
|
||||
TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: widget.labelText,
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
if (widget.isRequired)
|
||||
TextSpan(
|
||||
text: ' *',
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.bold,
|
||||
color: AppColors.redColor, // Red color for asterisk
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
DropdownButtonFormField(
|
||||
value: selectedClass,
|
||||
hint: Text(
|
||||
widget.hintText,
|
||||
style: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
),
|
||||
),
|
||||
decoration: InputDecoration(
|
||||
contentPadding:
|
||||
const EdgeInsets.symmetric(vertical: 12, horizontal: 12),
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
borderSide: const BorderSide(
|
||||
color: AppColors.disableColor,
|
||||
width: 1,
|
||||
),
|
||||
),
|
||||
),
|
||||
icon: const Icon(
|
||||
BootstrapIcons.chevron_down,
|
||||
color: AppColors.greyColor,
|
||||
size: 16,
|
||||
),
|
||||
items: <String>['Class 1', 'Class 2', 'Class 3', 'Class 4']
|
||||
.map<DropdownMenuItem<String>>((String value) {
|
||||
return DropdownMenuItem<String>(
|
||||
value: value,
|
||||
child: Text(
|
||||
value,
|
||||
style: AppTextStyles.greyTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
),
|
||||
),
|
||||
);
|
||||
}).toList(),
|
||||
onChanged: (String? newValue) {
|
||||
setState(() {
|
||||
selectedClass = newValue;
|
||||
});
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
164
lib/core/widgets/form_field/custom_field_widget.dart
Normal file
|
|
@ -0,0 +1,164 @@
|
|||
import 'package:bootstrap_icons/bootstrap_icons.dart';
|
||||
import 'package:english_learning/features/auth/provider/validator_provider.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class CustomFieldWidget extends StatefulWidget {
|
||||
final String fieldName;
|
||||
final String labelText;
|
||||
final dynamic hintText;
|
||||
final String? Function(String?)? validator;
|
||||
final bool obscureText;
|
||||
final TextEditingController? controller;
|
||||
final IconButton? suffixIcon;
|
||||
final TextInputAction textInputAction;
|
||||
final TextInputType? keyboardType;
|
||||
final bool? isError;
|
||||
final FocusNode? focusNode;
|
||||
final Function(String?)? onChanged;
|
||||
final String? errorText;
|
||||
final Function()? onSuffixIconTap;
|
||||
final bool isRequired;
|
||||
final bool isEnabled;
|
||||
|
||||
const CustomFieldWidget({
|
||||
super.key,
|
||||
required this.fieldName,
|
||||
required this.labelText,
|
||||
required this.textInputAction,
|
||||
this.hintText,
|
||||
this.validator,
|
||||
this.obscureText = false,
|
||||
this.controller,
|
||||
this.suffixIcon,
|
||||
this.focusNode,
|
||||
this.keyboardType,
|
||||
this.isError = false,
|
||||
this.errorText,
|
||||
this.onChanged,
|
||||
this.onSuffixIconTap,
|
||||
this.isRequired = false,
|
||||
this.isEnabled = true,
|
||||
});
|
||||
|
||||
@override
|
||||
State<CustomFieldWidget> createState() => _CustomFieldWidgetState();
|
||||
}
|
||||
|
||||
class _CustomFieldWidgetState extends State<CustomFieldWidget> {
|
||||
late TextEditingController _controller;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_controller = TextEditingController();
|
||||
context
|
||||
.read<ValidatorProvider>()
|
||||
.setController(widget.fieldName, _controller);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
context.read<ValidatorProvider>().removeController(widget.fieldName);
|
||||
_controller.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text.rich(
|
||||
TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: widget.labelText,
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
if (widget.isRequired)
|
||||
TextSpan(
|
||||
text: ' *',
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.bold,
|
||||
color: AppColors.redColor, // Red color for asterisk
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
TextFormField(
|
||||
controller: widget.controller,
|
||||
keyboardType: widget.keyboardType,
|
||||
textInputAction: widget.textInputAction,
|
||||
obscureText: widget.obscureText,
|
||||
focusNode: widget.focusNode,
|
||||
onChanged: widget.onChanged,
|
||||
enabled: widget.isEnabled,
|
||||
decoration: InputDecoration(
|
||||
hintText: widget.hintText,
|
||||
hintStyle: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
),
|
||||
fillColor: widget.isEnabled
|
||||
? AppColors.whiteColor
|
||||
: AppColors.cardDisabledColor,
|
||||
filled: true,
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
borderSide: const BorderSide(
|
||||
width: 1,
|
||||
color: AppColors.cardDisabledColor,
|
||||
),
|
||||
),
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
borderSide: const BorderSide(
|
||||
width: 1,
|
||||
color: AppColors.cardDisabledColor,
|
||||
),
|
||||
),
|
||||
disabledBorder: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
borderSide: const BorderSide(
|
||||
width: 1,
|
||||
color: AppColors
|
||||
.cardDisabledColor, // Adjust this color if necessary
|
||||
),
|
||||
),
|
||||
suffixIcon: widget.onSuffixIconTap != null
|
||||
? GestureDetector(
|
||||
onTap: widget.onSuffixIconTap,
|
||||
child: AnimatedSwitcher(
|
||||
duration: const Duration(milliseconds: 300),
|
||||
transitionBuilder:
|
||||
(Widget child, Animation<double> animation) {
|
||||
return ScaleTransition(scale: animation, child: child);
|
||||
},
|
||||
child: Icon(
|
||||
widget.obscureText
|
||||
? BootstrapIcons.eye_slash
|
||||
: BootstrapIcons.eye,
|
||||
color: AppColors.greyColor,
|
||||
size: 20,
|
||||
),
|
||||
),
|
||||
)
|
||||
: null,
|
||||
errorText: widget.errorText,
|
||||
),
|
||||
validator: widget.validator,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
83
lib/core/widgets/fullname_field.dart
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
import 'package:english_learning/features/auth/provider/validator_provider.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class FullNameFieldWidget extends StatefulWidget {
|
||||
final String labelText;
|
||||
final String hintText;
|
||||
const FullNameFieldWidget({
|
||||
super.key,
|
||||
required this.labelText,
|
||||
required this.hintText,
|
||||
});
|
||||
|
||||
@override
|
||||
_FullNameFieldWidgetState createState() => _FullNameFieldWidgetState();
|
||||
}
|
||||
|
||||
class _FullNameFieldWidgetState extends State<FullNameFieldWidget> {
|
||||
late FocusNode _focusNode;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_focusNode = FocusNode();
|
||||
|
||||
_focusNode.addListener(() {
|
||||
if (!_focusNode.hasFocus) {
|
||||
final validatorProvider =
|
||||
Provider.of<ValidatorProvider>(context, listen: false);
|
||||
validatorProvider.validateField(
|
||||
'fullName', validatorProvider.getError('fullName'),
|
||||
validator: validatorProvider.fullNameValidator);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_focusNode.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final validatorProvider = Provider.of<ValidatorProvider>(context);
|
||||
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
widget.labelText,
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
TextField(
|
||||
focusNode: _focusNode,
|
||||
onChanged: (value) {
|
||||
validatorProvider.validateField('fullName', value,
|
||||
validator: validatorProvider.fullNameValidator);
|
||||
},
|
||||
decoration: InputDecoration(
|
||||
hintText: widget.hintText,
|
||||
hintStyle: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
),
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
borderSide: const BorderSide(
|
||||
width: 1,
|
||||
color: AppColors.disableColor,
|
||||
),
|
||||
),
|
||||
errorText: validatorProvider.getError('fullName'),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
109
lib/core/widgets/global_button.dart
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class GlobalButton extends StatelessWidget {
|
||||
final String text;
|
||||
final VoidCallback? onPressed;
|
||||
final double? width;
|
||||
final double? height;
|
||||
final IconData? icon;
|
||||
final double? iconSize;
|
||||
final bool spaceBetween;
|
||||
final Gradient? gradient;
|
||||
final Color? textColor;
|
||||
final Color? backgroundColor;
|
||||
final Color? borderColor;
|
||||
final double borderWidth;
|
||||
final bool transparentBackground;
|
||||
|
||||
const GlobalButton({
|
||||
super.key,
|
||||
required this.text,
|
||||
required this.onPressed,
|
||||
this.width = double.infinity,
|
||||
this.height = 49.0,
|
||||
this.icon,
|
||||
this.iconSize = 24.0,
|
||||
this.spaceBetween = false,
|
||||
this.gradient,
|
||||
this.textColor = Colors.white,
|
||||
this.backgroundColor,
|
||||
this.borderColor,
|
||||
this.borderWidth = 1.0,
|
||||
this.transparentBackground = false,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SizedBox(
|
||||
width: width,
|
||||
height: height,
|
||||
child: DecoratedBox(
|
||||
decoration: BoxDecoration(
|
||||
gradient: transparentBackground
|
||||
? null
|
||||
: (gradient ??
|
||||
(backgroundColor != null ? null : AppColors.gradientTheme)),
|
||||
color: gradient == null
|
||||
? backgroundColor
|
||||
: null, // Use solid color if no gradient
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
border: borderColor != null
|
||||
? Border.all(color: borderColor!, width: borderWidth)
|
||||
: null,
|
||||
),
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: Colors.transparent,
|
||||
shadowColor: Colors.transparent,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(30.0),
|
||||
),
|
||||
),
|
||||
onPressed: onPressed,
|
||||
child: spaceBetween && icon != null
|
||||
? Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
text,
|
||||
style: AppTextStyles.whiteTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.bold,
|
||||
color: textColor,
|
||||
),
|
||||
),
|
||||
Icon(
|
||||
icon,
|
||||
size: iconSize,
|
||||
color: textColor ?? Colors.white,
|
||||
),
|
||||
],
|
||||
)
|
||||
: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
text,
|
||||
style: AppTextStyles.whiteTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.bold,
|
||||
color: textColor,
|
||||
),
|
||||
),
|
||||
if (icon != null)
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 8.0),
|
||||
child: Icon(
|
||||
icon,
|
||||
size: iconSize,
|
||||
color: textColor ?? Colors.white,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
84
lib/core/widgets/nisn_field.dart
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
import 'package:english_learning/features/auth/provider/validator_provider.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class NISNFieldWidget extends StatefulWidget {
|
||||
final String labelText;
|
||||
final String hintText;
|
||||
const NISNFieldWidget({
|
||||
super.key,
|
||||
required this.labelText,
|
||||
required this.hintText,
|
||||
});
|
||||
|
||||
@override
|
||||
_NISNFieldWidgetState createState() => _NISNFieldWidgetState();
|
||||
}
|
||||
|
||||
class _NISNFieldWidgetState extends State<NISNFieldWidget> {
|
||||
late FocusNode _focusNode;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_focusNode = FocusNode();
|
||||
|
||||
_focusNode.addListener(() {
|
||||
if (!_focusNode.hasFocus) {
|
||||
final validatorProvider =
|
||||
Provider.of<ValidatorProvider>(context, listen: false);
|
||||
validatorProvider.validateField(
|
||||
'nisn', validatorProvider.getError('nisn'),
|
||||
validator: validatorProvider.nisnValidator);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_focusNode.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final validatorProvider = Provider.of<ValidatorProvider>(context);
|
||||
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
widget.labelText,
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
TextField(
|
||||
keyboardType: TextInputType.number,
|
||||
focusNode: _focusNode,
|
||||
onChanged: (value) {
|
||||
validatorProvider.validateField('nisn', value,
|
||||
validator: validatorProvider.nisnValidator);
|
||||
},
|
||||
decoration: InputDecoration(
|
||||
hintText: widget.hintText,
|
||||
hintStyle: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
),
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
borderSide: const BorderSide(
|
||||
width: 1,
|
||||
color: AppColors.disableColor,
|
||||
),
|
||||
),
|
||||
errorText: validatorProvider.getError('nisn'),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
100
lib/core/widgets/password_field.dart
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
import 'package:english_learning/features/auth/provider/validator_provider.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:bootstrap_icons/bootstrap_icons.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class PasswordFieldWidget extends StatefulWidget {
|
||||
final String hintText;
|
||||
final String labelText;
|
||||
const PasswordFieldWidget({
|
||||
super.key,
|
||||
required this.hintText,
|
||||
required this.labelText,
|
||||
});
|
||||
|
||||
@override
|
||||
_PasswordFieldWidgetState createState() => _PasswordFieldWidgetState();
|
||||
}
|
||||
|
||||
class _PasswordFieldWidgetState extends State<PasswordFieldWidget> {
|
||||
late FocusNode _focusNode;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_focusNode = FocusNode();
|
||||
|
||||
_focusNode.addListener(() {
|
||||
if (!_focusNode.hasFocus) {
|
||||
final validatorProvider =
|
||||
Provider.of<ValidatorProvider>(context, listen: false);
|
||||
validatorProvider.validateField(
|
||||
'password', validatorProvider.getError('password'),
|
||||
validator: validatorProvider.passwordValidator);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_focusNode.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final validatorProvider = Provider.of<ValidatorProvider>(context);
|
||||
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
widget.labelText,
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
TextField(
|
||||
focusNode: _focusNode,
|
||||
obscureText: validatorProvider.isObscure('password'),
|
||||
onChanged: (value) {
|
||||
validatorProvider.validateField('password', value,
|
||||
validator: validatorProvider.passwordValidator);
|
||||
},
|
||||
decoration: InputDecoration(
|
||||
hintText: widget.hintText,
|
||||
hintStyle: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
),
|
||||
suffixIcon: GestureDetector(
|
||||
onTap: () => validatorProvider.toggleVisibility('password'),
|
||||
child: AnimatedSwitcher(
|
||||
duration: const Duration(milliseconds: 300),
|
||||
transitionBuilder: (Widget child, Animation<double> animation) {
|
||||
return ScaleTransition(scale: animation, child: child);
|
||||
},
|
||||
child: Icon(
|
||||
validatorProvider.isObscure('password')
|
||||
? BootstrapIcons.eye_slash
|
||||
: BootstrapIcons.eye,
|
||||
color: AppColors.greyColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
borderSide: const BorderSide(
|
||||
width: 1,
|
||||
color: AppColors.disableColor,
|
||||
),
|
||||
),
|
||||
errorText: validatorProvider.getError('password'),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
40
lib/core/widgets/slider_widget.dart
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class SliderWidget extends StatelessWidget {
|
||||
final int currentPage;
|
||||
final int itemCount;
|
||||
|
||||
const SliderWidget({
|
||||
super.key,
|
||||
required this.currentPage,
|
||||
required this.itemCount,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: List.generate(
|
||||
itemCount,
|
||||
(index) => AnimatedContainer(
|
||||
duration: const Duration(milliseconds: 300),
|
||||
margin: const EdgeInsets.symmetric(horizontal: 4.0),
|
||||
height: 8,
|
||||
width: currentPage == index ? 24 : 8,
|
||||
decoration: BoxDecoration(
|
||||
gradient: currentPage == index
|
||||
? AppColors.gradientTheme
|
||||
: const LinearGradient(
|
||||
colors: [
|
||||
AppColors.sliderInActive,
|
||||
AppColors.sliderInActive,
|
||||
],
|
||||
),
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
164
lib/features/auth/assets/images/forgot_password_illustration.svg
Normal file
|
After Width: | Height: | Size: 88 KiB |
284
lib/features/auth/assets/images/login_illustration.svg
Normal file
|
|
@ -0,0 +1,284 @@
|
|||
<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="happy-student/cuate">
|
||||
<g id="background-complete">
|
||||
<path id="Vector" d="M196 190.137H4.0526V199.784H196V190.137Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_2" d="M113.406 199.784H191.771L191.771 23.936H113.406L113.406 199.784Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_3" d="M191.771 199.784H196V19.7709L191.771 23.9361V199.784Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_4" d="M123.657 116.091H181.525V34.3372H123.657V116.091Z" fill="white"/>
|
||||
<path id="Vector_5" d="M180.983 149.225C181.273 158.989 181.392 169.943 181.426 179.712C181.426 183.254 181.473 186.796 181.449 190.338H180.974L171.665 190.296C162.718 190.263 152.682 190.127 143.734 189.879C152.682 189.626 162.718 189.495 171.665 189.457L180.974 189.42L180.498 189.888C180.498 186.501 180.498 183.113 180.527 179.726C180.56 169.957 180.679 159.003 180.964 149.239L180.983 149.225Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_6" d="M124.194 170.768C123.814 155.648 123.766 139.1 123.719 123.948V123.479H124.194C139.182 123.526 155.521 123.578 170.476 123.948C159.36 124.21 146.888 124.341 135.753 124.374L124.18 124.416L124.656 123.948L124.618 135.661C124.584 146.906 124.456 159.528 124.18 170.777L124.194 170.768Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_7" d="M113.411 23.9361H191.771L196 19.7709H113.411V23.9361Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_8" d="M181.521 122.003H171.618V140.365H181.521V122.003Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_9" d="M173.977 126.028V130.193L181.525 129.594V126.028H173.977Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_10" d="M187.105 123.948H173.977V128.113H187.105V123.948Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_11" d="M96.8393 24.6437H5.82683V86.6814H96.8393V24.6437Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_12" d="M93.1149 28.3074H9.54178V83.0502H93.1149V28.3074Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_13" d="M32.4542 38.9619H15.1783V59.1273H32.4542V38.9619Z" fill="white"/>
|
||||
<path id="Vector_14" d="M24.4393 40.3345C24.4393 40.4559 24.4028 40.5745 24.3343 40.6755C24.2659 40.7764 24.1686 40.8551 24.0547 40.9015C23.9408 40.948 23.8155 40.9601 23.6947 40.9365C23.5738 40.9128 23.4628 40.8543 23.3756 40.7685C23.2885 40.6826 23.2291 40.5733 23.2051 40.4542C23.1811 40.3352 23.1934 40.2117 23.2406 40.0996C23.2877 39.9874 23.3676 39.8916 23.4701 39.8241C23.5725 39.7567 23.693 39.7207 23.8162 39.7207C23.9815 39.7207 24.14 39.7854 24.2568 39.9005C24.3737 40.0156 24.4393 40.1717 24.4393 40.3345Z" fill="#455A64"/>
|
||||
<path id="Vector_15" d="M18.4651 43.0004C20.2155 42.8692 21.9611 42.8599 23.6973 42.8411C25.4335 42.8224 27.1934 42.8692 28.9295 43.0004C27.1839 43.1363 25.4335 43.141 23.6973 43.1597C21.9611 43.1785 20.2155 43.1316 18.4651 43.0004Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_16" d="M18.4651 44.5934C19.4121 44.4819 20.3653 44.4287 21.319 44.4341C22.2728 44.4261 23.2262 44.4793 24.173 44.5934C22.2765 44.8065 20.3615 44.8065 18.4651 44.5934Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_17" d="M18.4651 46.1864C19.6827 46.0646 20.8957 46.0365 22.1086 46.0271C23.3215 46.0177 24.5345 46.0646 25.7474 46.1864C24.538 46.3003 23.3235 46.3534 22.1086 46.3457C20.8921 46.3533 19.6761 46.3002 18.4651 46.1864Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_18" d="M18.4651 47.7794C19.9872 47.6576 21.5045 47.6295 23.0219 47.6201C24.5392 47.6107 26.0566 47.6576 27.5787 47.7794C26.0566 47.9059 24.5392 47.934 23.0219 47.9434C21.5045 47.9528 19.9872 47.9059 18.4651 47.7794Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_19" d="M18.4651 49.3771C19.7874 49.2506 21.105 49.2224 22.4225 49.2131C23.7401 49.2037 25.0624 49.2506 26.38 49.3771C25.0624 49.4989 23.7449 49.5317 22.4225 49.5364C21.1002 49.541 19.7874 49.4989 18.4651 49.3771Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_20" d="M18.4651 50.9701C20.1536 50.8342 21.8422 50.8295 23.5308 50.8108C25.2194 50.7921 26.908 50.8108 28.5966 50.9701C26.908 51.1013 25.2194 51.1106 23.5308 51.1294C21.8422 51.1481 20.1536 51.1013 18.4651 50.9701Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_21" d="M18.4651 52.5632C19.552 52.4495 20.6446 52.3963 21.7376 52.4039C22.8306 52.3962 23.9232 52.4494 25.0101 52.5632C23.9232 52.6769 22.8306 52.7301 21.7376 52.7225C20.6446 52.7277 19.5522 52.6745 18.4651 52.5632Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_22" d="M18.4651 54.1562C20.2155 54.025 21.9611 54.0156 23.6973 53.9969C25.4335 53.9781 27.1934 54.025 28.9295 54.1562C27.1839 54.2874 25.4335 54.2967 23.6973 54.3155C21.9611 54.3342 20.2155 54.3014 18.4651 54.1562Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_23" d="M18.4651 55.7492C20.2155 55.618 21.9611 55.6086 23.6973 55.5899C25.4335 55.5712 27.1934 55.618 28.9295 55.7492C27.1839 55.8851 25.4335 55.8898 23.6973 55.9085C21.9611 55.9272 20.2155 55.8804 18.4651 55.7492Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_24" d="M65.9976 49.1804H45.5538V73.0425H65.9976V49.1804Z" fill="white"/>
|
||||
<path id="Vector_25" d="M56.3988 52.3993C56.3998 52.5209 56.364 52.64 56.2961 52.7416C56.2283 52.8431 56.1313 52.9225 56.0175 52.9697C55.9037 53.0169 55.7783 53.0297 55.6571 53.0065C55.5359 52.9834 55.4245 52.9253 55.3368 52.8397C55.2492 52.754 55.1894 52.6447 55.165 52.5255C55.1405 52.4063 55.1526 52.2826 55.1996 52.1702C55.2466 52.0578 55.3265 51.9617 55.4291 51.894C55.5316 51.8263 55.6523 51.7902 55.7757 51.7902C55.9402 51.7902 56.0979 51.8542 56.2147 51.9683C56.3314 52.0824 56.3976 52.2373 56.3988 52.3993Z" fill="#455A64"/>
|
||||
<path id="Vector_26" d="M48.4173 55.1352C49.9202 54.9165 51.4475 54.9165 52.9503 55.1352C52.201 55.2463 51.444 55.2996 50.6862 55.2945C49.9269 55.2974 49.1685 55.2441 48.4173 55.1352Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_27" d="M48.4173 56.9346C50.3675 56.716 52.3367 56.716 54.2869 56.9346C53.3128 57.0461 52.3327 57.0993 51.3521 57.0939C50.3715 57.0969 49.3916 57.0437 48.4173 56.9346Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_28" d="M48.4173 58.7336C50.2228 58.515 52.0486 58.515 53.8541 58.7336C52.9532 58.845 52.046 58.8983 51.1381 58.8929C50.2286 58.896 49.3199 58.8428 48.4173 58.7336Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_29" d="M48.4173 60.5327C50.2228 60.314 52.0486 60.314 53.8541 60.5327C52.9532 60.6441 52.046 60.6973 51.1381 60.6919C50.2286 60.6951 49.3199 60.6419 48.4173 60.5327Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_30" d="M48.4173 62.3319C49.9839 62.1132 51.574 62.1132 53.1406 62.3319C51.5735 62.5443 49.9843 62.5443 48.4173 62.3319Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_31" d="M48.4173 64.1404C50.4264 63.9217 52.4538 63.9217 54.4629 64.1404C52.4535 64.3528 50.4267 64.3528 48.4173 64.1404Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_32" d="M48.4173 65.9304C50.0731 65.7118 51.7511 65.7118 53.407 65.9304C51.7507 66.1428 50.0735 66.1428 48.4173 65.9304Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_33" d="M48.4173 67.7246C50.4967 67.5122 52.5928 67.5122 54.6722 67.7246C52.5931 67.9433 50.4964 67.9433 48.4173 67.7246Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_34" d="M48.4173 69.5237C50.4967 69.3113 52.5928 69.3113 54.6722 69.5237C52.5931 69.7423 50.4964 69.7423 48.4173 69.5237Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_35" d="M57.3501 55.1352C59.3242 54.9165 61.317 54.9165 63.2911 55.1352C62.3059 55.2466 61.3147 55.2998 60.323 55.2945C59.3298 55.2976 58.3372 55.2444 57.3501 55.1352Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_36" d="M57.3501 56.9346C58.6424 56.716 59.963 56.716 61.2553 56.9346C60.6114 57.0456 59.9587 57.0989 59.3051 57.0939C58.65 57.0967 57.9959 57.0434 57.3501 56.9346Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_37" d="M57.3501 58.7336C59.2065 58.515 61.0827 58.515 62.9391 58.7336C62.0128 58.8449 61.0802 58.8981 60.147 58.8929C59.2123 58.8959 58.2783 58.8427 57.3501 58.7336Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_38" d="M57.3501 60.5327C59.1556 60.314 60.9814 60.314 62.7869 60.5327C61.8861 60.6441 60.9788 60.6973 60.0709 60.6919C59.1615 60.6949 58.2528 60.6417 57.3501 60.5327Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_39" d="M57.3501 62.3319C59.3242 62.1132 61.317 62.1132 63.2911 62.3319C61.3166 62.5443 59.3246 62.5443 57.3501 62.3319Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_40" d="M57.3501 64.1404C58.9167 63.9217 60.5068 63.9217 62.0734 64.1404C60.5064 64.3528 58.9172 64.3528 57.3501 64.1404Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_41" d="M57.3501 65.9303C59.2065 65.7116 61.0827 65.7116 62.9391 65.9303C61.0824 66.1427 59.2069 66.1427 57.3501 65.9303Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_42" d="M57.3501 67.7246C58.7833 67.5122 60.2407 67.5122 61.6739 67.7246C60.2412 67.9432 58.7828 67.9432 57.3501 67.7246Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_43" d="M57.3501 69.5237C58.7243 69.3114 60.1237 69.3114 61.4979 69.5237C60.1242 69.7424 58.7238 69.7424 57.3501 69.5237Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_44" d="M41.2586 33.4191H30.8655V43.6565H41.2586V33.4191Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_45" d="M36.6875 34.4594C36.6875 34.5807 36.651 34.6994 36.5825 34.8003C36.514 34.9013 36.4167 34.9799 36.3029 35.0264C36.189 35.0729 36.0637 35.085 35.9428 35.0613C35.822 35.0376 35.7109 34.9792 35.6238 34.8934C35.5367 34.8075 35.4773 34.6982 35.4533 34.5791C35.4292 34.46 35.4416 34.3366 35.4887 34.2245C35.5359 34.1123 35.6158 34.0165 35.7182 33.949C35.8207 33.8816 35.9412 33.8456 36.0644 33.8456C36.1462 33.8456 36.2273 33.8615 36.3029 33.8923C36.3785 33.9231 36.4472 33.9684 36.505 34.0254C36.5629 34.0823 36.6088 34.15 36.6401 34.2245C36.6714 34.2989 36.6875 34.3788 36.6875 34.4594Z" fill="#455A64"/>
|
||||
<path id="Vector_46" d="M93.0721 28.3074H91.6689V83.1111H93.0721V28.3074Z" fill="#C7C7C7"/>
|
||||
</g>
|
||||
<g id="Floor">
|
||||
<path id="Vector_47" d="M4.05261 199.784C65.5409 199.498 134.511 199.493 196 199.784C134.511 200.074 65.5409 200.07 4.05261 199.784Z" fill="#263238"/>
|
||||
</g>
|
||||
<g id="Plant">
|
||||
<path id="Vector_48" d="M28.6394 157.977C28.6394 157.977 24.2966 151.418 14.5694 152.687C5.32739 153.901 -0.423318 169.85 8.53333 172.661C17.49 175.472 17.3282 160.198 20.9004 157.94C23.5308 156.286 27.0079 157.021 28.6394 157.977Z" fill="#407BFF"/>
|
||||
<path id="Vector_49" d="M6.35957 160.924C7.03126 160.447 7.73353 160.014 8.46198 159.626C9.15044 159.248 9.88821 158.964 10.6548 158.783C11.0725 158.266 11.5322 157.783 12.0294 157.34C12.9533 156.527 13.9974 155.857 15.126 155.353C15.0308 155.353 14.9357 155.316 14.8453 155.306C14.3421 155.238 13.8356 155.196 13.328 155.18C12.3069 155.149 11.2886 155.3 10.3218 155.625C10.3114 155.626 10.3009 155.624 10.292 155.618C10.283 155.613 10.2761 155.605 10.2723 155.595C10.2685 155.586 10.2681 155.575 10.271 155.565C10.2739 155.555 10.2801 155.547 10.2885 155.541C11.2687 155.228 12.2822 155.029 13.3089 154.946C13.8074 154.901 14.3088 154.901 14.8073 154.946C15.0736 154.969 15.34 155.016 15.6016 155.063L15.7538 155.091C16.6734 154.738 17.6309 154.489 18.6078 154.351L18.3462 154.257C17.8921 154.111 17.4299 153.99 16.962 153.896C16.024 153.704 15.065 153.63 14.108 153.676C14.051 153.676 14.0415 153.587 14.108 153.587C15.0745 153.562 16.0415 153.612 17 153.737C17.8084 153.836 18.605 154.014 19.3783 154.266C19.962 154.218 20.5484 154.207 21.1335 154.233C24.4631 154.407 27.964 155.967 29.7477 158.844C31.5314 161.721 31.5885 165.347 31.6503 168.627C31.7742 173.2 31.4556 177.775 30.699 182.289C30.6514 182.556 30.2757 182.472 30.2899 182.214C30.5373 178.349 30.7656 174.483 30.7656 170.608C30.7656 168.814 30.7656 167.01 30.6134 165.22C30.5394 163.684 30.2398 162.165 29.7239 160.713C29.1508 159.227 28.1467 157.94 26.8367 157.012C25.5173 156.096 24.0081 155.48 22.4178 155.208C21.0017 154.963 19.553 154.963 18.1369 155.208C18.1582 155.487 18.1389 155.768 18.0798 156.042C18.0181 156.387 17.9143 156.724 17.7706 157.045C17.6394 157.35 17.4802 157.644 17.295 157.921C17.0904 158.225 16.8193 158.492 16.6148 158.783C16.5767 158.825 16.5006 158.783 16.5434 158.722C16.9874 158.208 17.302 157.598 17.4614 156.942C17.5485 156.633 17.6168 156.321 17.666 156.004C17.6993 155.761 17.704 155.536 17.7373 155.278C16.1835 155.594 14.7038 156.195 13.3755 157.049C13.1234 157.213 12.8999 157.382 12.6478 157.56C12.9323 157.878 13.1723 158.233 13.3613 158.614C13.6193 159.119 13.831 159.646 13.9939 160.188C14.3333 161.272 14.5252 162.396 14.5647 163.529C14.5647 163.541 14.5597 163.553 14.5507 163.562C14.5418 163.571 14.5297 163.576 14.5171 163.576C14.5045 163.576 14.4924 163.571 14.4835 163.562C14.4746 163.553 14.4695 163.541 14.4695 163.529C14.3994 162.428 14.1338 161.349 13.6847 160.338C13.4803 159.84 13.2436 159.355 12.976 158.886C12.8333 158.647 12.6906 158.417 12.5384 158.174C12.4575 158.047 12.3671 157.921 12.291 157.79C11.0676 158.765 10.0304 159.947 9.22779 161.28C9.62716 161.792 9.94772 162.358 10.1791 162.962C10.4604 163.6 10.6972 164.256 10.8878 164.925C11.2285 166.216 11.4843 167.528 11.6536 168.851C11.6536 168.908 11.5728 168.917 11.5633 168.851C11.4083 167.527 11.0855 166.227 10.6024 164.981C10.3741 164.368 10.1268 163.763 9.86517 163.164C9.58907 162.602 9.34297 162.026 9.1279 161.439C8.36359 162.748 7.85385 164.186 7.62482 165.68C7.62482 165.736 7.52493 165.722 7.53445 165.68C7.93982 163.342 8.89073 161.128 10.3123 159.214C9.7082 159.401 9.10412 159.584 8.5143 159.828C7.76337 160.135 7.054 160.534 6.40238 161.013C6.36433 161.036 6.32152 160.961 6.35957 160.924Z" fill="#263238"/>
|
||||
<path id="Vector_50" d="M13.3089 161.922C13.504 162.859 13.7846 163.796 13.9463 164.766C14.1216 165.693 14.1728 166.638 14.0985 167.577C14.0985 167.601 14.0557 167.601 14.0557 167.577C13.9771 165.68 13.6965 163.795 13.2186 161.955C13.1995 161.88 13.2947 161.861 13.3089 161.922Z" fill="#263238"/>
|
||||
<path id="Vector_51" d="M7.49634 159.064C7.90645 158.752 8.35975 158.5 8.84245 158.314C9.3336 158.148 9.83796 158.023 10.3503 157.94C10.4074 157.94 10.4216 158.024 10.3503 158.033C9.84593 158.113 9.35478 158.26 8.89002 158.469C8.42004 158.658 7.9639 158.879 7.52487 159.13C7.50109 159.13 7.4678 159.087 7.49634 159.064Z" fill="#263238"/>
|
||||
<path id="Vector_52" d="M23.9208 150.35C23.9208 150.35 23.0075 139.33 14.693 135.76C7.74842 132.78 3.78619 140.468 8.69974 145.196C12.6667 148.977 19.0358 147.262 23.9208 150.35Z" fill="#407BFF"/>
|
||||
<path id="Vector_53" d="M10.2362 137.896C11.5008 138.4 12.7348 138.976 13.932 139.62C14.9212 140.187 15.8743 140.813 16.786 141.494C16.648 141.218 16.5244 140.923 16.3864 140.651C16.1676 140.229 15.9393 139.812 15.6824 139.409C15.1712 138.575 14.556 137.807 13.8512 137.123C13.8083 137.085 13.8512 137.02 13.913 137.062C14.617 137.746 15.2629 138.486 15.8442 139.273C16.1379 139.67 16.4079 140.083 16.6528 140.51C16.8998 140.905 17.0873 141.333 17.2093 141.78L17.3044 141.846C18.7567 142.986 20.0875 144.268 21.2762 145.674C21.2762 145.561 21.2286 145.453 21.2001 145.355C21.0431 144.816 20.8766 144.287 20.6959 143.753C20.34 142.622 19.8347 141.543 19.1928 140.543C19.1595 140.492 19.2451 140.449 19.2737 140.496C19.927 141.5 20.5087 142.547 21.0146 143.631C21.2439 144.161 21.4362 144.706 21.5901 145.261C21.7088 145.623 21.7994 145.992 21.8612 146.367C22.2227 146.836 22.5795 147.276 22.9124 147.744C26.4846 152.753 28.2731 158.806 28.706 164.864C28.8312 166.67 28.8613 168.481 28.7963 170.29C28.7857 172.116 28.6266 173.938 28.3207 175.739C28.3207 175.851 28.1161 175.819 28.1209 175.706C28.159 174.113 28.3254 172.53 28.3587 170.937C28.3892 169.345 28.3368 167.753 28.2018 166.167C27.9391 162.989 27.3315 159.847 26.3895 156.796C25.4223 153.672 23.9978 150.703 22.1609 147.983C21.8089 147.918 21.4617 147.824 21.1192 147.735C20.7054 147.627 20.2868 147.524 19.873 147.412C19.0747 147.208 18.2988 146.927 17.5565 146.573C17.5042 146.55 17.5565 146.465 17.6041 146.498C18.3368 146.891 19.131 147.16 19.9539 147.295C20.6055 147.426 21.2809 147.506 21.9326 147.655C21.3336 146.789 20.689 145.954 20.0014 145.154C18.4149 145.295 16.8157 145.176 15.2686 144.802C14.4457 144.609 13.6369 144.361 12.8475 144.062C12.0151 143.743 11.2255 143.34 10.4074 142.998C10.3456 142.975 10.4074 142.886 10.4407 142.919C11.9315 143.718 13.558 144.242 15.2401 144.465C16.7236 144.699 18.2231 144.821 19.7255 144.83C19.131 144.165 18.5221 143.514 17.8705 142.9C15.6872 140.852 13.1139 138.969 10.2171 137.99C10.2045 137.987 10.1934 137.98 10.1863 137.969C10.1791 137.959 10.1766 137.946 10.1791 137.934C10.1816 137.921 10.189 137.91 10.1997 137.903C10.2104 137.896 10.2235 137.894 10.2362 137.896Z" fill="#263238"/>
|
||||
<path id="Vector_54" d="M17 137.934C17.3742 138.399 17.7159 138.889 18.0227 139.4C18.3308 139.941 18.5765 140.515 18.7552 141.11C18.7552 141.11 18.7552 141.138 18.7219 141.11C18.4413 140.571 18.2082 140.009 17.9275 139.475C17.6546 138.943 17.321 138.443 16.9334 137.985C16.8954 137.948 16.9667 137.887 17 137.934Z" fill="#263238"/>
|
||||
<path id="Vector_55" d="M9.27057 141.597C9.81055 141.892 10.3815 142.128 10.9734 142.3C11.5427 142.489 12.1223 142.645 12.7096 142.769C12.7381 142.769 12.7096 142.82 12.7096 142.816C12.0996 142.751 11.4984 142.622 10.9163 142.431C10.3403 142.217 9.77804 141.968 9.23252 141.686C9.17544 141.649 9.21825 141.569 9.27057 141.597Z" fill="#263238"/>
|
||||
<path id="Vector_56" d="M29.9427 148.728C29.995 149.197 31.1984 144.727 38.2287 140.764C44.6167 137.156 52.2368 127.767 45.9771 121.84C40.9209 117.042 27.6072 127.476 29.9427 148.728Z" fill="#407BFF"/>
|
||||
<path id="Vector_57" d="M25.1005 174.39C25.204 169.731 25.5772 165.082 26.2183 160.465C26.775 156.224 27.7695 152.049 29.1864 148.007C29.7096 146.554 30.3089 145.121 30.9558 143.71C30.92 143.161 30.9295 142.609 30.9844 142.061C31.0177 141.354 31.0843 140.656 31.1509 139.948C31.2175 139.241 31.2888 138.543 31.3744 137.84C31.46 137.137 31.6123 136.434 31.6408 135.741C31.6408 135.675 31.7454 135.689 31.7312 135.741C31.5883 136.477 31.5024 137.222 31.4743 137.971C31.4236 138.652 31.3855 139.331 31.3602 140.009C31.3602 140.693 31.3602 141.372 31.3602 142.057C31.3602 142.3 31.3602 142.563 31.3602 142.825C32.0213 141.447 32.73 140.093 33.5006 138.772C33.025 135.9 33.6386 132.902 34.2379 130.095C34.2379 130.039 34.3378 130.062 34.3235 130.118C34.0273 131.585 33.8681 133.075 33.8478 134.569C33.8193 135.75 33.8764 136.912 33.8811 138.107C34.0476 137.826 34.2141 137.54 34.3901 137.264C35.2986 135.797 36.2927 134.359 37.3106 132.962C37.2257 132.282 37.2481 131.593 37.3772 130.92C37.492 130.162 37.6621 129.414 37.8862 128.68C38.1082 127.949 38.3682 127.229 38.6663 126.52C38.9707 125.794 39.375 125.115 39.6699 124.374C39.6699 124.313 39.7888 124.351 39.7508 124.407C39.3791 125.099 39.0841 125.827 38.8708 126.581C38.6411 127.289 38.449 128.009 38.2952 128.736C38.1478 129.467 38.0289 130.193 37.9242 130.934C37.8529 131.402 37.8101 131.922 37.7245 132.419C39.2294 130.426 40.8745 128.539 42.6475 126.773C42.6903 126.731 42.7474 126.797 42.7094 126.839C40.0335 129.805 37.6448 133.011 35.5745 136.415C35.4936 136.547 35.4223 136.673 35.3462 136.804C35.7315 136.565 36.1786 136.373 36.5448 136.172C37.225 135.802 37.9052 135.432 38.5949 135.066L40.5832 133.993C40.9256 133.806 41.2634 133.614 41.6106 133.436C42.0248 133.252 42.4226 133.034 42.7997 132.784C42.8521 132.747 42.9091 132.827 42.8521 132.859C42.1766 133.225 41.5773 133.768 40.9494 134.181C40.3216 134.593 39.6223 134.991 38.9421 135.366C37.6912 136.055 36.3355 136.547 35.1036 137.24C34.2506 138.711 33.4578 140.217 32.7253 141.757C33.4721 141.288 34.2331 140.82 35.0085 140.412C35.4841 140.136 36.0073 139.864 36.5115 139.601C37.0179 139.374 37.4966 139.091 37.9385 138.758C37.9813 138.721 38.0431 138.786 38.0003 138.824C37.1821 139.55 36.2744 140.171 35.2986 140.674C34.3949 141.194 33.4816 141.7 32.5445 142.15C31.793 143.774 31.1144 145.427 30.5087 147.107C27.5501 155.363 26.4609 164.124 25.9424 172.825C25.7854 175.42 25.7093 178.011 25.676 180.612C25.6427 183.212 25.7807 185.798 25.7759 188.389C25.7759 188.469 25.6475 188.488 25.638 188.389C25.3193 186.089 25.267 183.746 25.1623 181.432C25.0577 179.117 25.0482 176.746 25.1005 174.39Z" fill="#263238"/>
|
||||
<path id="Vector_58" d="M37.8767 137.02C39.1602 136.463 40.4072 135.827 41.6106 135.117C42.8321 134.441 44.0166 133.701 45.159 132.901C45.159 132.901 45.2018 132.901 45.159 132.934C44.0811 133.793 42.943 134.576 41.7533 135.277C40.5083 135.965 39.2198 136.574 37.8957 137.099C37.8671 137.123 37.8196 137.043 37.8767 137.02Z" fill="#263238"/>
|
||||
<path id="Vector_59" d="M35.836 127.691C35.9407 127.288 36.0691 126.895 36.2071 126.501C36.2039 126.498 36.2014 126.495 36.1997 126.491C36.1979 126.487 36.1971 126.482 36.1971 126.478C36.1971 126.474 36.1979 126.469 36.1997 126.465C36.2014 126.461 36.2039 126.458 36.2071 126.454C36.2927 126.23 36.3878 126.009 36.4782 125.789L36.5115 125.71C36.5115 125.667 36.5495 125.625 36.5638 125.583C36.5781 125.541 36.5923 125.583 36.5638 125.583C36.5353 125.583 36.521 125.738 36.4972 125.813C36.4867 125.855 36.474 125.898 36.4592 125.939C35.9944 127.473 35.6462 129.039 35.4175 130.624C35.4175 130.671 35.3318 130.676 35.3318 130.624C35.4081 129.634 35.5769 128.652 35.836 127.691Z" fill="#263238"/>
|
||||
<path id="Vector_60" d="M28.6774 160.657C31.127 153.161 36.6637 148.71 43.7843 149.741C50.9049 150.771 53.2975 160.001 48.5647 163.089C43.8319 166.176 37.7054 159.973 34.8086 158.928C31.9119 157.884 28.6774 160.657 28.6774 160.657Z" fill="#407BFF"/>
|
||||
<path id="Vector_61" d="M28.0258 179.796C27.9211 178.948 27.8355 178.1 27.7404 177.248C27.5596 175.551 27.3694 173.855 27.1886 172.159C26.8604 169.058 26.7605 165.979 27.6643 162.953C28.4356 160.206 30.0364 157.755 32.2544 155.925C33.0786 155.261 33.9907 154.711 34.9656 154.29C35.7541 153.245 36.8329 152.448 38.0717 151.994C39.6087 151.455 41.2301 151.187 42.8615 151.202C42.9186 151.202 42.9281 151.286 42.8615 151.291C41.3132 151.305 39.7834 151.624 38.3618 152.228C37.7528 152.489 37.1726 152.811 36.6304 153.189C36.2931 153.435 35.9751 153.706 35.6791 153.999C37.0167 153.523 38.4427 153.336 39.8601 153.451C40.3711 153.498 40.8771 153.587 41.3727 153.718C41.7352 153.584 42.1144 153.499 42.5 153.465C43.001 153.409 43.5069 153.409 44.0079 153.465C45.0367 153.599 46.0419 153.871 46.995 154.276C47.0473 154.299 46.995 154.379 46.957 154.36C46.0279 154.016 45.0543 153.804 44.065 153.727C43.59 153.69 43.1129 153.69 42.638 153.727C42.3741 153.75 42.112 153.789 41.8531 153.845C43.9277 154.455 45.7157 155.77 46.8999 157.555C46.9284 157.607 46.8571 157.658 46.8238 157.612C46.1256 156.577 45.1992 155.711 44.1136 155.078C43.0281 154.445 41.8115 154.062 40.5546 153.957C40.3976 153.957 40.2407 153.957 40.0789 153.957C40.1488 154.177 40.206 154.401 40.2502 154.627C40.3453 154.96 40.4547 155.292 40.5689 155.62C40.8129 156.294 41.0989 156.953 41.4251 157.593C41.7513 158.242 42.1232 158.869 42.5381 159.467C42.9398 160.109 43.4189 160.7 43.9651 161.229C43.9715 161.232 43.977 161.237 43.9811 161.243C43.9852 161.25 43.9878 161.257 43.9886 161.264C43.9894 161.271 43.9885 161.279 43.9859 161.285C43.9834 161.292 43.9792 161.299 43.9737 161.304C43.9683 161.308 43.9617 161.312 43.9545 161.314C43.9474 161.316 43.9398 161.317 43.9325 161.315C43.9252 161.314 43.9183 161.311 43.9124 161.306C43.9065 161.302 43.9017 161.296 43.8985 161.289C43.3943 160.713 42.833 160.198 42.3669 159.593C41.9167 159.015 41.5113 158.404 41.1539 157.766C40.7955 157.118 40.4901 156.443 40.2407 155.747C40.1122 155.381 39.9981 155.007 39.8982 154.632C39.8198 154.409 39.7718 154.178 39.7555 153.943C38.9343 153.934 38.1154 154.032 37.3201 154.233C37.8671 155.864 38.4427 157.56 39.608 158.881C39.6461 158.923 39.57 158.984 39.5319 158.937C38.9752 158.229 38.4682 157.484 38.0146 156.707C37.5825 155.953 37.2621 155.142 37.0633 154.299C35.6857 154.68 34.3943 155.316 33.258 156.173C31.118 157.837 29.5462 160.107 28.7535 162.676C27.9232 165.438 27.6565 168.335 27.9687 171.199C28.2588 174.816 28.7345 178.428 28.8867 182.055C28.8867 182.289 28.53 182.42 28.4491 182.162C28.2329 181.389 28.0911 180.596 28.0258 179.796Z" fill="#263238"/>
|
||||
<path id="Vector_62" d="M32.6492 155.311C32.8382 155.007 33.0687 154.729 33.3341 154.487C33.5812 154.212 33.8432 153.951 34.119 153.704C34.659 153.213 35.2798 152.815 35.955 152.528C36.0073 152.528 36.0454 152.589 35.9883 152.613C35.3053 152.886 34.6892 153.3 34.1808 153.826C33.924 154.074 33.6766 154.337 33.4435 154.608C33.2361 154.889 33.002 155.149 32.7443 155.386C32.6968 155.419 32.6206 155.367 32.6492 155.311Z" fill="#263238"/>
|
||||
<path id="Vector_63" d="M44.0697 156.3C44.7437 156.874 45.3792 157.491 45.9723 158.146C46.5499 158.808 47.0582 159.525 47.4897 160.287C47.4897 160.31 47.4659 160.329 47.4516 160.31C46.4368 158.895 45.2902 157.576 44.0269 156.37C43.9698 156.333 44.0269 156.262 44.0697 156.3Z" fill="#263238"/>
|
||||
<path id="Vector_64" d="M36.521 156.651C36.6577 157.073 36.8513 157.475 37.0966 157.846C37.3422 158.211 37.6157 158.557 37.9147 158.882C37.9147 158.882 37.9147 158.933 37.8814 158.914C37.1945 158.319 36.6986 157.539 36.4544 156.67C36.4164 156.633 36.502 156.6 36.521 156.651Z" fill="#263238"/>
|
||||
<path id="Vector_65" d="M17.6707 176.062L18.1749 181.919L19.7113 199.784H36.1595L37.6959 181.919L38.2001 176.062H17.6707Z" fill="#455A64"/>
|
||||
<path id="Vector_66" d="M17.6707 176.062L18.1749 181.919H37.6959L38.2001 176.062H17.6707Z" fill="#263238"/>
|
||||
<path id="Vector_67" d="M16.0582 179.333H39.8126V173.715H16.0582V179.333Z" fill="#455A64"/>
|
||||
</g>
|
||||
<g id="character-1">
|
||||
<path id="Vector_68" d="M73.4654 144.015L61.7309 160.882C59.4715 164.087 57.5499 166.94 56.6937 168.505V168.533C56.4469 168.876 56.2841 169.271 56.218 169.686C56.2153 169.698 56.2153 169.711 56.218 169.723C56.7317 171.03 82.2318 189.565 83.3305 189.917C84.4293 190.268 85.5423 187.176 85.138 185.7C84.7337 184.224 78.1839 172.801 78.1839 172.801L89.7424 155.864L73.4654 144.015Z" fill="#D3766A"/>
|
||||
<path id="Vector_69" d="M65.2317 155.841L82.2793 166.795C82.2793 166.795 98.8655 146.339 102.733 133.633C105.468 124.581 88.6008 80.689 88.6008 80.689L70.0501 80.3048C70.0501 80.3048 84.1677 122.66 83.0213 126.891C81.5896 132.077 65.2317 155.841 65.2317 155.841Z" fill="#263238"/>
|
||||
<path id="Vector_70" d="M82.2651 121.263C79.4492 108.613 70.0121 80.314 70.0121 80.314L80.6193 80.5295L82.2651 121.263Z" fill="#37474F"/>
|
||||
<path id="Vector_71" d="M56.2228 169.672C56.2228 169.672 56.2228 169.695 56.2228 169.7C56.7413 171.012 82.2413 189.547 83.3353 189.898C84.4293 190.25 85.5519 187.157 85.1428 185.682C84.9193 184.866 82.9167 181.179 81.114 177.951C82.7788 181.081 86.0703 190.133 59.5809 163.961C58.2824 165.863 57.2455 167.47 56.6794 168.505C56.6773 168.51 56.6762 168.514 56.6762 168.519C56.6762 168.524 56.6773 168.529 56.6794 168.533C56.4432 168.875 56.2872 169.264 56.2228 169.672Z" fill="#263238"/>
|
||||
<path id="Vector_72" d="M49.1688 109.869L37.3297 95.944C34.5899 93.1328 30.7085 88.7896 29.976 88.7006C28.549 88.9348 4.69955 110.005 4.12876 111.007C3.55797 112.01 6.40717 113.692 7.98159 113.598C9.55602 113.504 22.199 109.466 22.199 109.466L34.7516 123.362L49.1688 109.869Z" fill="#D3766A"/>
|
||||
<path id="Vector_73" d="M7.97684 113.598C8.77119 113.547 12.3244 112.516 15.6825 111.495C11.8439 111.963 4.47124 111.448 36.835 95.4288C34.1475 92.6176 30.6515 88.785 29.9808 88.7054C28.5538 88.9396 4.69956 110.005 4.12877 111.007C3.55798 112.01 6.40717 113.692 7.97684 113.598Z" fill="#263238"/>
|
||||
<path id="Vector_74" d="M88.4296 80.6937C88.4296 80.6937 84.1487 95.0026 83.5589 95.3305C82.8882 95.7007 79.7821 96.6705 78.6976 97.0922C78.6976 97.0922 71.715 126.141 66.1735 134.279C64.2709 137.09 55.1763 140.192 50.5244 137.489C39.6175 131.14 26.0137 113.687 26.0137 113.687L40.5689 99.7487L54.4105 114.84C57.3358 108.833 58.5154 96.9329 58.5154 96.9329C58.5154 96.9329 58.6867 85.2197 62.7964 80.1596L88.4296 80.6937Z" fill="#263238"/>
|
||||
<path id="Vector_75" d="M85.528 94.7681C82.3819 95.2797 79.3479 96.3176 76.5571 97.8369C76.4905 97.8744 76.519 97.9962 76.5999 97.9681C79.6013 96.9889 82.5694 95.9207 85.5613 94.9274C85.5828 94.923 85.6016 94.9105 85.6136 94.8925C85.6256 94.8744 85.6299 94.8525 85.6255 94.8313C85.6211 94.8102 85.6084 94.7917 85.5901 94.7798C85.5718 94.768 85.5495 94.7637 85.528 94.7681Z" fill="#37474F"/>
|
||||
<path id="Vector_76" d="M84.3532 83.2752C84.3532 83.2143 84.2438 83.2096 84.2295 83.2752C83.9251 84.4278 83.6397 87.6231 83.4875 88.8038C83.4066 89.4129 83.3162 90.022 83.2401 90.6311C83.164 91.2401 83.1069 91.8633 82.9785 92.463C82.9499 92.7288 82.859 92.9844 82.7129 93.2097C82.5667 93.4349 82.3695 93.6236 82.1366 93.7608C81.9136 93.8453 81.6665 93.844 81.4444 93.7572C81.2223 93.6703 81.0415 93.5044 80.9379 93.2923C80.7163 92.7701 80.6439 92.1982 80.7287 91.6384C80.7572 91.0199 80.7952 90.4062 80.8285 89.7877C80.9094 88.3821 81.2376 85.0134 81.3042 83.6078C81.3042 83.5469 81.2091 83.5235 81.1996 83.5844C80.8951 84.9619 80.4766 88.3025 80.3339 89.6987C80.2578 90.4265 80.2007 91.1527 80.1626 91.8773C80.092 92.4569 80.198 93.044 80.467 93.564C80.5852 93.7861 80.7592 93.9746 80.9723 94.1116C81.1855 94.2486 81.4308 94.3295 81.6847 94.3465C81.6556 94.42 81.6379 94.4974 81.6324 94.5761C81.6134 94.7427 81.6134 94.9108 81.6324 95.0774C81.6432 95.1502 81.6591 95.2222 81.68 95.2929C81.6987 95.377 81.7309 95.4576 81.7751 95.5319L81.7466 95.4756C81.7799 95.5787 81.8369 95.6677 81.8702 95.7708C81.8702 95.7807 81.8742 95.7903 81.8814 95.7973C81.8885 95.8043 81.8982 95.8083 81.9083 95.8083C81.9184 95.8083 81.9281 95.8043 81.9352 95.7973C81.9423 95.7903 81.9463 95.7807 81.9463 95.7708C81.9463 95.6209 82.0082 95.485 82.0272 95.3351C82.0438 95.1699 82.0438 95.0036 82.0272 94.8384C82.0272 94.7073 81.9891 94.562 81.9796 94.4402C81.9796 94.398 81.9796 94.3559 81.9796 94.309C82.3573 94.2199 82.6928 94.0068 82.931 93.7046C83.2637 93.2198 83.4621 92.6577 83.5065 92.0741C83.6111 91.376 83.7158 90.6685 83.7919 89.9798C83.8823 89.1786 83.9631 88.3774 84.0392 87.5716C84.1153 86.7657 84.415 84.0389 84.3532 83.2752Z" fill="#37474F"/>
|
||||
<path id="Vector_77" d="M72.1954 46.1257C70.3355 45.3808 65.1271 45.9055 63.0247 48.1638C60.9223 50.4221 60.3467 54.5592 61.122 55.1027C61.8974 55.6462 65.6408 55.9601 68.4044 55.009C71.1679 54.0579 73.1086 46.4959 72.1954 46.1257Z" fill="#263238"/>
|
||||
<path id="Vector_78" d="M72.1953 46.1397C72.2619 46.1397 72.2904 46.0319 72.1953 46.0179C70.5115 45.6899 68.6041 45.9476 66.9108 46.135C65.525 46.212 64.1707 46.5726 62.9343 47.1939C62.3571 47.5198 61.8585 47.965 61.4726 48.4988C61.0867 49.0326 60.8227 49.6423 60.6987 50.2861C60.3895 51.7479 60.2943 53.5658 60.8033 54.9714C60.8033 55.0136 60.8937 55.0136 60.8889 54.9714C60.5893 52.0619 60.4989 48.5573 63.624 47.1376C66.2972 45.9382 69.3747 46.2662 72.1953 46.1397Z" fill="#263238"/>
|
||||
<path id="Vector_79" d="M61.5407 54.4281C59.814 54.3578 54.8815 56.7707 53.5877 59.8255C52.2939 62.8803 54.0966 67.9826 54.8624 68.4652C55.6282 68.9477 59.8949 66.5348 61.4979 64.5155C62.5728 63.1614 62.2304 61.3154 62.159 59.5256C62.0591 56.8878 61.807 54.4374 61.5407 54.4281Z" fill="#263238"/>
|
||||
<path id="Vector_80" d="M62.5823 64.2857C63.643 61.1465 62.3445 57.6373 61.7309 54.5356C61.7309 54.5075 61.6738 54.5122 61.6738 54.5356C61.807 57.4358 63.077 60.2329 62.6251 63.1612C62.5276 64.0265 62.2206 64.8561 61.7297 65.5802C61.2388 66.3042 60.5786 66.9015 59.8045 67.3217C58.3775 68.0292 56.7317 68.1885 55.1858 68.4509C55.0859 68.4509 55.124 68.6195 55.2239 68.6055C58.2919 68.1651 61.4978 67.5279 62.5823 64.2857Z" fill="#263238"/>
|
||||
<path id="Vector_81" d="M61.1221 54.6622C61.2172 54.6388 61.1791 54.4936 61.0888 54.5217C58.4917 55.2338 55.3143 56.3958 53.6114 58.5651C51.7659 60.9077 52.6934 63.8828 53.5258 66.4363C53.528 66.4413 53.5317 66.4456 53.5363 66.4486C53.541 66.4516 53.5464 66.4532 53.552 66.4532C53.5575 66.4532 53.5629 66.4516 53.5676 66.4486C53.5722 66.4456 53.5759 66.4413 53.5781 66.4363C52.7647 63.85 51.9894 60.6828 54.011 58.4151C55.7519 56.4567 58.6677 55.3791 61.1221 54.6622Z" fill="#263238"/>
|
||||
<path id="Vector_82" d="M55.6235 67.9543C53.3308 69.5379 50.4673 71.9649 50.8669 74.4622C51.2664 76.9594 54.1109 80.7264 54.3963 80.7357C54.6817 80.7451 59.267 78.1635 60.2944 75.2399C61.3219 72.3163 55.9184 67.7482 55.6235 67.9543Z" fill="#263238"/>
|
||||
<path id="Vector_83" d="M54.6198 80.9371C52.7838 79.2691 50.6481 76.9968 50.6243 74.3777C50.6243 71.843 53.3736 69.5659 55.2763 68.2306V68.1931C53.2071 69.3972 50.5197 71.6462 50.4388 74.2184C50.3579 76.7906 52.5555 79.6346 54.5913 81.0167C54.6103 81.0401 54.6579 80.9699 54.6198 80.9371Z" fill="#263238"/>
|
||||
<path id="Vector_84" d="M55.3618 79.6956C54.0823 79.555 51.6089 80.2531 50.0154 81.9304C47.2899 84.7978 46.486 83.336 42.3288 81.8695C38.8184 80.6139 35.9264 83.5234 36.4259 86.2268C36.4259 86.2268 36.8777 83.5562 39.5937 83.8842C42.8425 84.2731 46.7286 90.4436 51.7706 88.874C58.3252 86.85 55.3618 79.6956 55.3618 79.6956Z" fill="#263238"/>
|
||||
<path id="Vector_85" d="M53.0692 80.3468C53.0856 80.3431 53.0998 80.3331 53.1087 80.319C53.1176 80.305 53.1205 80.288 53.1167 80.2718C53.1129 80.2557 53.1028 80.2417 53.0885 80.2329C53.0742 80.2241 53.057 80.2213 53.0406 80.225C52.3555 80.3607 51.7012 80.6179 51.1094 80.984C50.3389 81.4525 49.8252 82.1928 49.1022 82.7222C47.2566 84.0669 45.1304 82.5817 43.4799 81.6634C41.2728 80.4265 38.7233 80.5858 37.1156 82.6848C37.1105 82.691 37.1082 82.6989 37.1091 82.7068C37.11 82.7147 37.114 82.722 37.1203 82.7269C37.1266 82.7319 37.1347 82.7342 37.1427 82.7333C37.1508 82.7324 37.1581 82.7285 37.1631 82.7222C37.6639 82.077 38.3354 81.58 39.1039 81.2857C39.8725 80.9915 40.7085 80.9114 41.5202 81.0543C43.0994 81.3495 44.3075 82.5301 45.8011 83.0643C46.8142 83.4297 47.932 83.6312 48.9071 83.0643C49.4132 82.7049 49.8802 82.2951 50.3008 81.8414C51.0801 81.1201 52.0327 80.6058 53.0692 80.3468Z" fill="#263238"/>
|
||||
<path id="Vector_86" d="M55.652 80.4498C55.652 80.4217 55.5949 80.4498 55.5996 80.4498C56.0087 82.3942 56.4891 84.3854 55.6853 86.3111C54.8196 88.382 52.6268 89.5908 50.4245 89.7313C47.9558 89.8953 46.6192 88.1618 45.021 86.6156C43.8699 85.4959 42.6427 84.4604 41.035 84.0575C40.9874 84.0575 40.9636 84.1231 41.035 84.1418C43.4418 85.032 44.9401 86.8921 46.7429 88.56C48.2365 89.9234 49.9393 90.2139 51.88 89.6376C56.1609 88.3867 56.8839 84.2074 55.652 80.4498Z" fill="#263238"/>
|
||||
<path id="Vector_87" d="M70.6685 42.6351C70.1262 41.9557 69.0607 42.799 69.6078 43.4831C70.1548 44.1671 71.2155 43.3144 70.6685 42.6351Z" fill="#407BFF"/>
|
||||
<path id="Vector_88" d="M71.2012 43.7736C71.0864 43.6363 70.9213 43.5492 70.7416 43.5312C70.562 43.5133 70.3824 43.5659 70.2419 43.6777C70.1015 43.7895 70.0115 43.9514 69.9917 44.1281C69.9718 44.3049 70.0236 44.4823 70.1357 44.6217C70.2505 44.759 70.4157 44.8461 70.5953 44.864C70.775 44.882 70.9546 44.8294 71.095 44.7176C71.2355 44.6058 71.3254 44.4439 71.3453 44.2671C71.3652 44.0903 71.3134 43.913 71.2012 43.7736Z" fill="#407BFF"/>
|
||||
<path id="Vector_89" d="M71.929 44.8138C71.8104 44.6899 71.6486 44.6148 71.4761 44.6034C71.3036 44.5921 71.1332 44.6454 70.9989 44.7528C70.8647 44.8601 70.7766 45.0134 70.7524 45.1821C70.7282 45.3507 70.7696 45.5221 70.8683 45.6619C71.4105 46.3366 72.4712 45.4979 71.929 44.8138Z" fill="#407BFF"/>
|
||||
<path id="Vector_90" d="M72.7661 45.7275C72.6476 45.6036 72.4858 45.5284 72.3133 45.5171C72.1408 45.5057 71.9703 45.5591 71.8361 45.6664C71.7018 45.7737 71.6138 45.9271 71.5895 46.0957C71.5653 46.2643 71.6067 46.4357 71.7054 46.5755C72.2477 47.2736 73.3131 46.4068 72.7661 45.7275Z" fill="#407BFF"/>
|
||||
<path id="Vector_91" d="M73.7745 46.5005C73.6597 46.3632 73.4946 46.2761 73.3149 46.2581C73.1353 46.2401 72.9557 46.2928 72.8153 46.4045C72.6748 46.5163 72.5848 46.6782 72.565 46.855C72.5451 47.0318 72.5969 47.2092 72.7091 47.3485C72.8238 47.4858 72.989 47.5729 73.1686 47.5909C73.3483 47.6089 73.5279 47.5562 73.6683 47.4445C73.8088 47.3327 73.8987 47.1708 73.9186 46.994C73.9385 46.8172 73.8867 46.6398 73.7745 46.5005Z" fill="#407BFF"/>
|
||||
<path id="Vector_92" d="M74.8638 47.0627C74.749 46.9254 74.5838 46.8383 74.4042 46.8203C74.2245 46.8023 74.045 46.855 73.9045 46.9667C73.7641 47.0785 73.6741 47.2404 73.6542 47.4172C73.6343 47.594 73.6861 47.7713 73.7983 47.9107C74.3406 48.5901 75.406 47.742 74.8638 47.0627Z" fill="#407BFF"/>
|
||||
<path id="Vector_93" d="M55.9849 77.9902C57.4357 75.4414 63.7714 66.0708 64.7608 62.3226C65.7502 58.5744 69.446 53.5846 71.1822 52.8349C72.9183 52.0853 71.3058 53.7486 70.1215 55.0839C68.9371 56.4192 67.1343 62.3554 66.0546 64.7449C64.9748 67.1344 59.1195 78.693 57.9113 80.0704C56.7031 81.4479 55.9849 77.9902 55.9849 77.9902Z" fill="#407BFF"/>
|
||||
<path id="Vector_94" opacity="0.3" d="M55.9849 77.9902C57.4357 75.4414 63.7714 66.0708 64.7608 62.3226C65.7502 58.5744 69.446 53.5846 71.1822 52.8349C72.9183 52.0853 71.3058 53.7486 70.1215 55.0839C68.9371 56.4192 67.1343 62.3554 66.0546 64.7449C64.9748 67.1344 59.1195 78.693 57.9113 80.0704C56.7031 81.4479 55.9849 77.9902 55.9849 77.9902Z" fill="black"/>
|
||||
<path id="Vector_95" d="M75.5059 57.6608C79.178 59.6192 95.6833 63.8922 101.025 60.322C106.471 56.6816 111.242 41.0046 111.965 39.0603C113.697 34.5062 99.1223 33.0631 98.5944 34.3141C96.7869 38.751 94.3134 50.5485 92.3347 51.0499C88.1679 52.1134 84.2152 52.0666 77.5893 52.835C72.9516 53.3644 71.4533 55.5056 75.5059 57.6608Z" fill="#D3766A"/>
|
||||
<path id="Vector_96" d="M111.337 40.1612C112.289 38.6947 116.061 31.5497 116.641 29.3523C117.221 27.1549 118.42 20.7126 116.755 20.1035C115.09 19.4945 114.586 21.3545 114.586 21.3545C114.586 21.3545 114.657 18.5433 112.926 18.0748C111.195 17.6063 110.491 20.5674 110.491 20.5674C110.491 20.5674 110.353 17.6859 108.588 17.3486C106.823 17.0113 106.633 20.0567 106.633 20.0567C106.633 20.0567 106.633 17.4189 105.059 17.7141C103.156 18.1029 103.736 22.9662 102.913 25.3464C102.728 25.8852 98.328 36.0288 98.328 36.0288L111.337 40.1612Z" fill="#D3766A"/>
|
||||
<path id="Vector_97" d="M106.685 19.7758C107.09 23.3553 106.642 24.9905 105.073 28.1812C105.04 28.2421 105.13 28.303 105.168 28.2374C106.99 25.2529 107.855 23.2851 106.857 19.7477C106.799 19.5743 106.657 19.6305 106.685 19.7758Z" fill="#263238"/>
|
||||
<path id="Vector_98" d="M110.491 20.2629C110.581 24.0111 110.11 25.7962 108.716 29.254C108.716 29.3055 108.778 29.343 108.802 29.2961C110.457 26.0164 111.275 24.0299 110.681 20.291C110.638 20.1224 110.491 20.0989 110.491 20.2629Z" fill="#263238"/>
|
||||
<path id="Vector_99" d="M114.51 21.528C114.334 25.1684 113.901 27.1503 112.132 30.3269C112.122 30.3418 112.119 30.3598 112.123 30.377C112.127 30.3941 112.138 30.409 112.153 30.4183C112.168 30.4276 112.186 30.4306 112.204 30.4267C112.221 30.4227 112.236 30.4121 112.246 30.3972C114.391 27.3237 114.952 24.8686 114.624 21.5467C114.6 21.3171 114.524 21.2984 114.51 21.528Z" fill="#263238"/>
|
||||
<path id="Vector_100" d="M97.3054 38.0527C97.3054 38.0527 95.964 33.7375 95.7975 31.7135C95.6311 29.6895 97.8334 21.926 99.5505 22.3008C101.786 22.7693 101.41 27.5108 100.92 29.7972C100.92 29.7972 106.086 30.9076 106.566 34.356C107.047 37.8044 97.3054 38.0527 97.3054 38.0527Z" fill="#D3766A"/>
|
||||
<path id="Vector_101" d="M100.131 22.629C101.848 24.5031 101.006 27.4829 100.697 29.7459C100.692 29.7788 100.695 29.8124 100.706 29.844C100.716 29.8756 100.735 29.9042 100.759 29.9275C100.783 29.9508 100.812 29.9681 100.844 29.9781C100.877 29.9881 100.911 29.9904 100.944 29.9849C103.08 30.5939 105.91 32.0604 106.652 34.2485C106.652 34.2621 106.658 34.2752 106.667 34.2849C106.677 34.2946 106.691 34.3 106.704 34.3C106.718 34.3 106.732 34.2946 106.741 34.2849C106.751 34.2752 106.757 34.2621 106.757 34.2485C106.281 31.7934 103.613 30.1254 101.23 29.61C101.582 27.3002 102.29 24.2829 100.14 22.6383C100.136 22.6055 100.121 22.6196 100.131 22.629Z" fill="#263238"/>
|
||||
<path id="Vector_102" d="M88.734 80.6981L62.5728 80.1547C62.5728 80.1547 66.2496 60.0455 69.232 55.1587C71.2155 51.879 73.8221 51.7806 76.3383 53.0738C76.9662 53.397 85.3758 60.2469 86.5555 63.0065C87.6019 65.4429 86.1226 68.7085 86.1226 68.7085L88.734 80.6981Z" fill="#407BFF"/>
|
||||
<path id="Vector_103" d="M77.1945 68.7929C78.3167 68.6409 79.4486 68.5705 80.5812 68.5821C81.1473 68.5821 81.7038 68.6336 82.2651 68.6852C82.5457 68.7086 82.8216 68.7274 83.1022 68.7414C83.3958 68.7634 83.6911 68.7523 83.9822 68.7086C84.006 68.7086 84.0155 68.7367 83.9822 68.7461C83.7154 68.8211 83.4436 68.8775 83.1688 68.9148C82.902 68.9445 82.6333 68.9555 82.3649 68.9476C81.7942 68.9476 81.2234 68.9054 80.6526 68.8913C79.5015 68.8585 78.3504 68.8304 77.1993 68.8913C77.1945 68.8867 77.1612 68.7976 77.1945 68.7929Z" fill="#263238"/>
|
||||
<path id="Vector_104" d="M74.7211 70.3673C75.6047 70.0677 76.5052 69.819 77.4181 69.6223C77.8938 69.5239 78.3361 69.4537 78.7975 69.3928L79.4635 69.3178C79.7108 69.2944 79.9391 69.3178 80.2007 69.2756C80.2245 69.2756 80.234 69.3084 80.2007 69.3131C79.9724 69.3459 79.7251 69.4162 79.5205 69.463L78.8356 69.5989L77.4657 69.8753C76.5477 70.0534 75.6392 70.2361 74.7307 70.4423C74.6879 70.4563 74.6783 70.386 74.7211 70.3673Z" fill="#263238"/>
|
||||
<path id="Vector_105" d="M71.2155 53.4206C74.1788 52.9521 72.2715 66.3192 68.666 70.6297C66.4256 73.3143 65.4695 65.9444 66.3257 62.6225C67.1819 59.3007 69.9265 53.6268 71.2155 53.4206Z" fill="#D3766A"/>
|
||||
<path id="Vector_106" d="M71.696 59.1507C66.0356 67.8934 59.5334 77.8637 53.992 77.9855C48.9833 78.098 40.8067 74.1811 31.9024 69.9878C30.1329 69.1538 37.4343 55.9319 39.2275 57.0142C42.7617 59.132 50.3484 64.8621 52.7267 65.1338C53.7494 65.2556 62.3017 58.7197 68.5471 54.4795C74.0362 50.75 72.7947 57.45 71.696 59.1507Z" fill="#D3766A"/>
|
||||
<path id="Vector_107" d="M68.3188 64.909L67.9382 65.2557C68.4329 64.5623 68.9086 63.8454 69.3652 63.1052H69.3414C68.7326 63.8501 68.1428 64.6045 67.5672 65.3869C67.2961 65.757 66.3924 67.1158 66.0784 67.5234C66.0451 67.5702 66.1165 67.678 66.1545 67.6311C66.4494 67.2376 67.3912 66.0428 67.6433 65.7008C67.746 65.6266 67.8445 65.5468 67.9382 65.4619C68.0952 65.3213 68.2427 65.1807 68.3901 65.0261C68.6803 64.7216 68.9609 64.4077 69.2415 64.0891C68.9371 64.3655 68.6327 64.6419 68.3188 64.909Z" fill="#263238"/>
|
||||
<path id="Vector_108" d="M34.9038 71.1684C33.1914 70.7889 25.3906 68.3854 23.3881 67.2375C21.3856 66.0896 15.9203 62.3789 16.6575 60.7906C17.3948 59.2022 19.0882 60.1627 19.0882 60.1627C19.0882 60.1627 17.0286 58.2324 17.918 56.7003C18.8075 55.1682 21.3903 56.7472 21.3903 56.7472C21.3903 56.7472 19.4211 54.6154 20.439 53.1489C21.4569 51.6824 23.7686 53.697 23.7686 53.697C23.7686 53.697 21.866 51.8229 23.2121 50.9608C24.8246 49.9207 27.9211 53.7486 30.2138 54.8543C30.737 55.1026 41.1301 59.1976 41.1301 59.1976L34.9038 71.1684Z" fill="#D3766A"/>
|
||||
<path id="Vector_109" d="M23.5403 53.5144C25.8282 56.3256 27.3455 57.1642 30.7227 58.3215C30.7893 58.3215 30.7703 58.448 30.7227 58.4292C27.2504 57.5812 25.2336 56.8081 23.3976 53.6128C23.3072 53.4582 23.4451 53.3645 23.5403 53.5144Z" fill="#263238"/>
|
||||
<path id="Vector_110" d="M21.2143 56.5035C23.8447 59.221 25.4572 60.144 28.9295 61.6152C28.9771 61.6152 28.9295 61.7229 28.8962 61.7042C25.3478 60.5422 23.3643 59.7129 21.0954 56.6441C20.9908 56.5176 21.0906 56.3817 21.2143 56.5035Z" fill="#263238"/>
|
||||
<path id="Vector_111" d="M19.2689 60.219C22.0087 62.6647 23.7306 63.7563 27.2885 64.7543C27.3062 64.758 27.3216 64.7685 27.3314 64.7835C27.3412 64.7984 27.3446 64.8166 27.3408 64.8339C27.337 64.8513 27.3264 64.8665 27.3112 64.8762C27.2961 64.8859 27.2776 64.8892 27.26 64.8855C23.5308 64.2108 21.3713 62.8661 19.2023 60.308C19.0549 60.1299 19.0929 60.0643 19.2689 60.219Z" fill="#263238"/>
|
||||
<path id="Vector_112" d="M32.461 33.9211L10.3586 52.4301L12.9743 55.4607L35.0767 36.9517L32.461 33.9211Z" fill="#37474F"/>
|
||||
<path id="Vector_113" d="M35.0744 36.9489L12.972 55.4579L23.9032 68.1229L46.0056 49.6139L35.0744 36.9489Z" fill="#455A64"/>
|
||||
<path id="Vector_114" d="M32.7321 34.2352L10.6298 52.7441L12.7032 55.1465L34.8056 36.6375L32.7321 34.2352Z" fill="white"/>
|
||||
<path id="Vector_115" d="M13.7037 53.4581C20.2725 47.7421 27.6072 41.609 34.3853 36.146C27.8164 41.848 20.4818 47.9904 13.7132 53.4581H13.7037Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_116" d="M13.2946 52.9847C19.8635 47.2827 27.1981 41.1403 33.9715 35.6726C27.4026 41.3746 20.068 47.517 13.2946 53.0081V52.9847Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_117" d="M12.8903 52.5116C19.4592 46.8049 26.7748 40.6672 33.5624 35.2042C26.9983 40.9061 19.6399 47.0439 12.8903 52.5116Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_118" d="M12.505 52.0431C19.0501 46.3364 26.3847 40.1987 33.1581 34.731C26.5893 40.4329 19.2546 46.5753 12.4812 52.0665L12.505 52.0431Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_119" d="M43.2944 59.8816C43.2944 59.8816 41.1397 55.8991 39.8031 54.3577C38.4665 52.8162 31.3316 48.8618 30.3803 50.333C29.1483 52.2305 32.8109 55.3088 34.8039 56.5832C34.8039 56.5832 31.95 60.9733 34.0999 63.7423C36.2499 66.5113 43.2944 59.8816 43.2944 59.8816Z" fill="#D3766A"/>
|
||||
<path id="Vector_120" d="M30.2138 50.9654C30.3565 53.4908 33.0677 54.9994 34.9276 56.3816C34.956 56.4005 34.9793 56.4259 34.9954 56.4557C35.0115 56.4856 35.02 56.5188 35.02 56.5526C35.02 56.5864 35.0115 56.6196 34.9954 56.6495C34.9793 56.6793 34.956 56.7047 34.9276 56.7236C33.8573 58.6399 32.9155 61.6525 33.9762 63.7234C33.9832 63.7358 33.9848 63.7505 33.9808 63.7641C33.9768 63.7777 33.9675 63.7892 33.9548 63.796C33.9422 63.8029 33.9274 63.8045 33.9135 63.8005C33.8997 63.7966 33.8881 63.7874 33.8811 63.775C32.4541 61.7087 33.1438 58.6727 34.4519 56.6486C32.5493 55.2431 29.8713 53.6266 30.209 50.9654C30.19 50.9467 30.2138 50.9467 30.2138 50.9654Z" fill="#263238"/>
|
||||
<path id="Vector_121" d="M65.5026 98.886L73.7502 82.9487L71.5168 81.8274L63.2693 97.7646L65.5026 98.886Z" fill="#407BFF"/>
|
||||
<path id="Vector_122" d="M63.2684 97.7671L71.516 81.8298L65.689 78.9041L57.4415 94.8414L63.2684 97.7671Z" fill="#407BFF"/>
|
||||
<path id="Vector_123" opacity="0.1" d="M63.2684 97.7671L71.516 81.8298L65.689 78.9041L57.4415 94.8414L63.2684 97.7671Z" fill="black"/>
|
||||
<path id="Vector_124" d="M66.3793 97.1998L67.1484 95.7138L64.9151 94.5925L64.146 96.0785L66.3793 97.1998Z" fill="#455A64"/>
|
||||
<path id="Vector_125" d="M67.6485 94.7328L67.9466 94.1567L65.7133 93.0354L65.4152 93.6114L67.6485 94.7328Z" fill="#455A64"/>
|
||||
<path id="Vector_126" d="M61.9162 97.5642L70.7773 80.4415L67.9846 79.0392L59.1235 96.162L61.9162 97.5642Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_127" d="M69.3589 83.1649L70.2208 81.4994L67.4281 80.0972L66.5662 81.7627L69.3589 83.1649Z" fill="#407BFF"/>
|
||||
<path id="Vector_128" d="M68.6815 84.48L69.0401 83.787L66.2474 82.3848L65.8888 83.0778L68.6815 84.48Z" fill="#407BFF"/>
|
||||
<path id="Vector_129" d="M62.9929 95.4779L63.8548 93.8124L61.0621 92.4102L60.2002 94.0757L62.9929 95.4779Z" fill="#407BFF"/>
|
||||
<path id="Vector_130" d="M53.847 93.5337L59.123 96.1829L67.9927 79.0434L62.7167 76.3943L53.847 93.5337Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_131" d="M58.7123 95.6401L66.8929 79.8322L64.5748 78.6683L56.3942 94.4762L58.7123 95.6401Z" fill="#455A64"/>
|
||||
<path id="Vector_132" d="M56.3964 94.472L64.5771 78.6641L58.695 75.7107L50.5144 91.5186L56.3964 94.472Z" fill="#37474F"/>
|
||||
<path id="Vector_133" d="M58.4708 95.5187L66.6514 79.7108L64.8122 78.7874L56.6316 94.5952L58.4708 95.5187Z" fill="white"/>
|
||||
<path id="Vector_134" d="M64.6657 80.0093C62.3398 84.8492 59.6238 90.0967 57.0172 94.7961C59.3431 89.9562 62.0591 84.7087 64.6657 80.0093Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_135" d="M65.0272 80.1921C62.6965 85.0273 59.9852 90.2749 57.3786 94.9742C59.7046 90.1343 62.4206 84.8915 65.0272 80.1921Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_136" d="M65.3887 80.3703C63.058 85.2102 60.3467 90.4577 57.7354 95.157C60.0661 90.3171 62.7821 85.0696 65.3887 80.3703Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_137" d="M65.7502 80.539C63.4195 85.3789 60.7035 90.6264 58.0969 95.3257C60.4276 90.4858 63.1436 85.2383 65.7502 80.539Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_138" d="M55.9849 77.9902C54.9337 77.1421 42.1908 94.4823 42.5571 97.8323C42.8615 100.456 55.1906 109.545 64.4136 108.805C67.8669 108.524 74.7164 86.166 74.5594 85.079C74.4452 84.32 68.9086 85.7162 63.3434 83.7905C60.889 82.9425 58.8627 80.3234 55.9849 77.9902Z" fill="#407BFF"/>
|
||||
<path id="Vector_139" opacity="0.3" d="M55.9849 77.9902C54.9337 77.1421 42.1908 94.4823 42.5571 97.8323C42.8615 100.456 55.1906 109.545 64.4136 108.805C67.8669 108.524 74.7164 86.166 74.5594 85.079C74.4452 84.32 68.9086 85.7162 63.3434 83.7905C60.889 82.9425 58.8627 80.3234 55.9849 77.9902Z" fill="black"/>
|
||||
<path id="Vector_140" opacity="0.1" d="M51.3425 97.6167C50.4598 96.8779 49.6153 96.096 48.812 95.274C49.2396 94.3983 49.7259 93.5515 50.2675 92.7393C50.2675 92.7159 50.2675 92.7393 50.2675 92.7393C49.6998 93.5114 49.1757 94.3138 48.6979 95.1428C48.422 94.8523 48.1509 94.5525 47.8845 94.2386C48.5267 92.969 49.2728 91.7531 50.1153 90.6028C50.1391 90.57 50.0915 90.5231 50.0678 90.5559C49.2153 91.666 48.4215 92.8185 47.6895 94.009C47.3803 93.6295 47.0806 93.2359 46.7905 92.8142C46.7867 92.8087 46.7808 92.8048 46.7741 92.8035C46.7674 92.8021 46.7605 92.8035 46.7548 92.8072C46.7491 92.8109 46.7452 92.8167 46.7438 92.8233C46.7425 92.8299 46.7439 92.8368 46.7477 92.8424C46.9918 93.3169 47.2666 93.7754 47.5706 94.2151C47.2614 94.7352 46.9807 95.2693 46.7191 95.8128C46.3862 95.4052 46.0675 94.9788 45.7678 94.5291C45.7628 94.5204 45.7544 94.514 45.7446 94.5114C45.7348 94.5087 45.7243 94.51 45.7155 94.515C45.7067 94.52 45.7002 94.5282 45.6975 94.5379C45.6948 94.5475 45.6962 94.5578 45.7012 94.5665C45.9874 95.0637 46.3051 95.5425 46.6525 96.0002C46.4014 96.5434 46.1823 97.1003 45.9961 97.6682C45.9628 97.7713 46.1341 97.8275 46.1816 97.7291C46.4147 97.2606 46.6573 96.7686 46.8761 96.2907C47.133 96.6093 47.3993 96.9185 47.6847 97.2278C47.2909 98.1339 46.9867 99.0753 46.7762 100.039C46.7524 100.156 46.9237 100.184 46.9617 100.076C47.2519 99.1815 47.561 98.3101 47.913 97.448C48.5165 98.0553 49.1884 98.5929 49.9156 99.0503C49.9774 99.0878 50.044 98.9941 49.9869 98.9473C49.2958 98.402 48.6352 97.8202 48.0082 97.2044C48.227 96.6702 48.4505 96.1408 48.6931 95.6254C49.4446 96.4672 50.3277 97.1853 51.3092 97.7525C51.3183 97.7547 51.3277 97.7551 51.3369 97.7536C51.3461 97.7522 51.3549 97.749 51.3629 97.7442C51.3708 97.7394 51.3777 97.7332 51.3832 97.7257C51.3887 97.7183 51.3927 97.7099 51.3948 97.701C51.397 97.6921 51.3974 97.6828 51.396 97.6737C51.3945 97.6647 51.3913 97.656 51.3864 97.6481C51.3816 97.6403 51.3752 97.6335 51.3677 97.6281C51.3601 97.6227 51.3516 97.6188 51.3425 97.6167ZM46.9474 96.0705C47.2091 95.5317 47.4707 94.9929 47.7466 94.4588C47.9844 94.7914 48.2222 95.1147 48.5076 95.4239C48.2317 95.9253 47.9891 96.4407 47.7561 96.9607C47.4754 96.6749 47.2281 96.3751 46.9474 96.0705Z" fill="black"/>
|
||||
<path id="Vector_141" opacity="0.1" d="M70.3261 94.8712C70.0089 94.7962 69.7093 94.7165 69.4271 94.6322C69.5698 94.2246 69.7029 93.8123 69.8409 93.4C70.1146 93.4745 70.3949 93.5231 70.678 93.5452C70.7446 93.5452 70.7541 93.4422 70.678 93.4328C70.4069 93.3766 70.1453 93.3016 69.8837 93.2266C70.1548 92.388 70.4164 91.5446 70.6828 90.7106C70.6828 90.6732 70.6305 90.6591 70.6162 90.7106C70.3498 91.5493 70.0407 92.3739 69.722 93.1891C69.4936 93.1189 69.2701 93.0345 69.0465 92.9455C69.5222 91.6617 69.898 90.3546 70.2832 89.0708C70.2832 89.0239 70.2214 89.0099 70.2071 89.0708C69.7648 90.3452 69.2558 91.5962 68.7802 92.8518C68.1053 92.552 67.4493 92.2124 66.8157 91.8351C66.8157 91.8351 66.7824 91.8351 66.8157 91.8632C67.4213 92.2901 68.0571 92.6737 68.7183 93.0111C68.5518 93.4281 68.3854 93.8498 68.2427 94.2668C67.7177 94.0653 67.2116 93.8192 66.7301 93.5312C66.7301 93.5312 66.692 93.5312 66.7301 93.564C67.1831 93.8671 67.6603 94.1335 68.1571 94.3605C67.943 94.918 67.7337 95.4802 67.5387 96.0425C67.5054 96.1409 67.6671 96.1924 67.7099 96.1034C67.9763 95.5786 68.2189 95.0351 68.4472 94.487C68.6602 94.5746 68.8777 94.6512 69.0989 94.7165C68.6232 95.8644 68.1475 97.0076 67.7432 98.1696C67.7052 98.268 67.8717 98.3242 67.9192 98.2305C68.4711 97.1163 68.9478 95.9675 69.3462 94.7915C69.6578 94.8746 69.9761 94.931 70.2975 94.9602C70.3641 94.9649 70.3879 94.8852 70.3261 94.8712ZM68.5186 94.3464C68.685 93.9341 68.842 93.5218 68.9942 93.1048C69.2123 93.2013 69.4363 93.2843 69.6649 93.3531L69.1892 94.5619L68.5186 94.3464Z" fill="black"/>
|
||||
<path id="Vector_142" d="M74.5594 85.079C76.1005 81.1902 78.6072 77.203 80.8999 73.0612C83.1926 68.9195 83.0308 58.4994 81.5848 56.1942C80.1388 53.8891 75.6962 52.0618 74.293 52.3476C72.8898 52.6334 78.8879 54.3764 79.7916 56.391C80.6954 58.4057 80.234 69.6316 79.4111 70.728C78.5882 71.8243 71.8909 83.9498 71.8719 84.9244C71.8529 85.8989 74.5594 85.079 74.5594 85.079Z" fill="#407BFF"/>
|
||||
<path id="Vector_143" opacity="0.3" d="M74.5594 85.079C76.1005 81.1902 78.6072 77.203 80.8999 73.0612C83.1926 68.9195 83.0308 58.4994 81.5848 56.1942C80.1388 53.8891 75.6962 52.0618 74.293 52.3476C72.8898 52.6334 78.8879 54.3764 79.7916 56.391C80.6954 58.4057 80.234 69.6316 79.4111 70.728C78.5882 71.8243 71.8909 83.9498 71.8719 84.9244C71.8529 85.8989 74.5594 85.079 74.5594 85.079Z" fill="black"/>
|
||||
<path id="Vector_144" d="M72.3904 53.8657C72.5664 54.3342 75.3062 57.1922 77.537 56.8174C78.2648 56.6909 77.7558 52.7506 77.7558 52.7506L77.7844 52.4554L78.1982 48.2668L72.966 45.7836L72.2144 45.465C72.2144 45.465 72.1764 46.6175 72.1478 48.0512C72.1478 48.1215 72.1478 48.1871 72.1478 48.2574C72.1478 48.3277 72.1478 48.4167 72.1478 48.4917C72.1478 48.7072 72.1478 48.9274 72.1478 49.1429C72.1478 49.3584 72.1478 49.4709 72.1478 49.6442C72.1478 49.8176 72.1478 49.9909 72.1478 50.169C72.143 51.4052 72.2241 52.6403 72.3904 53.8657Z" fill="#D3766A"/>
|
||||
<path id="Vector_145" d="M72.1335 48.0512C72.6938 49.1457 73.4897 50.1068 74.4656 50.8674C75.4415 51.628 76.5741 52.1699 77.7843 52.4554L78.1981 48.2668L72.9659 45.7836L72.2143 45.465C72.2143 45.465 72.162 46.6175 72.1335 48.0512Z" fill="#263238"/>
|
||||
<path id="Vector_146" d="M81.8607 39.2054C85.4615 45.6805 81.9321 48.5385 80.5099 49.3022C79.2208 49.9956 74.7449 52.193 70.483 46.1162C66.2211 40.0394 68.157 36.3427 71.011 34.6232C73.8649 32.9037 78.26 32.7491 81.8607 39.2054Z" fill="#D3766A"/>
|
||||
<path id="Vector_147" d="M79.6584 39.0319C79.5025 39.0858 79.3437 39.1311 79.1828 39.1678C79.0137 39.241 78.8248 39.2575 78.6453 39.2146C78.5922 39.1893 78.5488 39.1478 78.5214 39.0964C78.494 39.0449 78.4841 38.9862 78.4931 38.9288C78.5315 38.819 78.599 38.7212 78.6884 38.6455C78.7778 38.5698 78.886 38.5188 79.002 38.4978C79.2266 38.4103 79.4766 38.4103 79.7012 38.4978C79.7573 38.5203 79.8047 38.5598 79.8365 38.6106C79.8683 38.6613 79.8829 38.7208 79.8781 38.7802C79.8733 38.8397 79.8495 38.8962 79.81 38.9414C79.7705 38.9866 79.7174 39.0183 79.6584 39.0319Z" fill="#263238"/>
|
||||
<path id="Vector_148" d="M75.1254 41.4637C75.2729 41.3653 75.3918 41.2482 75.5297 41.1404C75.6865 41.0455 75.8069 40.9022 75.8722 40.7328C75.8837 40.6752 75.8748 40.6155 75.8471 40.5635C75.8195 40.5115 75.7746 40.4704 75.72 40.447C75.6075 40.4147 75.4883 40.4124 75.3747 40.4404C75.261 40.4684 75.1569 40.5256 75.0731 40.6063C74.8766 40.7468 74.7395 40.9536 74.6878 41.1872C74.6799 41.2407 74.6878 41.2953 74.7106 41.3444C74.7333 41.3936 74.77 41.4352 74.8162 41.4644C74.8623 41.4935 74.916 41.509 74.9709 41.5089C75.0257 41.5087 75.0794 41.4931 75.1254 41.4637Z" fill="#263238"/>
|
||||
<path id="Vector_149" d="M77.028 42.532C77.028 42.532 77.028 42.5695 77.028 42.5882C77.2849 43.0239 77.5037 43.5627 77.1898 43.9282C77.6702 43.6143 77.3467 42.9021 77.028 42.532Z" fill="#263238"/>
|
||||
<path id="Vector_150" d="M76.3716 42.2883C75.6248 42.6209 76.3716 44.0734 77.0566 43.7641C77.7415 43.4549 77.0042 42.0071 76.3716 42.2883Z" fill="#263238"/>
|
||||
<path id="Vector_151" d="M76.1243 42.5039C76.034 42.6538 75.9816 42.86 75.8342 42.9724C75.6867 43.0848 75.4537 42.9724 75.2586 42.9068C75.2586 42.9068 75.2349 42.9068 75.2586 42.9349C75.3966 43.216 75.6487 43.4456 75.9721 43.3379C76.1088 43.2718 76.2153 43.1577 76.2708 43.0181C76.3263 42.8784 76.3266 42.7234 76.2718 42.5835C76.2433 42.5039 76.1576 42.4477 76.1243 42.5039Z" fill="#263238"/>
|
||||
<path id="Vector_152" d="M79.4824 41.0795C79.4824 41.0795 79.53 41.0795 79.5395 41.0795C79.7488 41.548 80.0675 42.0165 80.5574 41.979C80.5574 41.979 80.5812 41.979 80.5574 42.0072C80.0485 42.1992 79.6061 41.5433 79.4824 41.0795Z" fill="#263238"/>
|
||||
<path id="Vector_153" d="M79.6585 40.4094C80.3672 39.9971 81.152 41.4262 80.4909 41.815C79.8297 42.2039 79.0639 40.7515 79.6585 40.4094Z" fill="#263238"/>
|
||||
<path id="Vector_154" d="M80.0104 40.3394C80.1674 40.3394 80.3576 40.4331 80.4861 40.3722C80.6145 40.3113 80.6811 40.077 80.7001 39.8755C80.7001 39.8755 80.7001 39.8755 80.7334 39.8755C80.8904 40.1473 80.9522 40.48 80.7334 40.672C80.5146 40.8641 80.2102 40.7095 79.9961 40.4706C79.9533 40.4331 79.9486 40.3347 80.0104 40.3394Z" fill="#263238"/>
|
||||
<path id="Vector_155" d="M80.3625 44.4343C80.3217 44.785 80.1889 45.1193 79.9772 45.4041C79.8551 45.5544 79.689 45.664 79.5015 45.718C79.0924 45.8352 78.8879 45.5212 78.788 45.2073C78.7347 45.0417 78.7027 44.8701 78.6929 44.6966C79.2636 44.7884 79.8491 44.6964 80.3625 44.4343Z" fill="#263238"/>
|
||||
<path id="Vector_156" d="M79.9771 45.3994C79.855 45.5497 79.689 45.6593 79.5015 45.7133C79.0924 45.8305 78.8879 45.5166 78.788 45.2026C78.9787 45.0951 79.2014 45.0559 79.4182 45.0917C79.635 45.1276 79.8325 45.2363 79.9771 45.3994Z" fill="#FF9BBC"/>
|
||||
<path id="Vector_157" d="M80.0485 43.4783C80.0485 43.4783 80.4909 44.0967 80.6526 44.4153C80.6526 44.4481 80.6003 44.4997 80.4956 44.5606C80.2465 44.7486 79.9496 44.8655 79.6376 44.8985C79.3255 44.9316 79.0102 44.8795 78.7262 44.748C78.6881 44.748 78.7262 44.673 78.7547 44.6777C79.3043 44.7468 79.8618 44.6383 80.3434 44.3685C80.3434 44.2701 79.5538 43.3284 79.6014 43.3003C79.8606 43.1969 80.1325 43.1276 80.41 43.0941C79.53 41.7775 78.436 40.6062 77.5561 39.2803C77.5479 39.2703 77.544 39.2576 77.5454 39.2449C77.5467 39.2321 77.5531 39.2204 77.5632 39.2124C77.5733 39.2043 77.5862 39.2005 77.5992 39.2018C77.6121 39.2031 77.624 39.2094 77.6322 39.2194C78.8418 40.4349 79.9239 41.7676 80.8619 43.1972C80.9998 43.3705 80.2007 43.4642 80.0485 43.4783Z" fill="#263238"/>
|
||||
<path id="Vector_158" d="M70.7398 46.3084C71.4724 45.9055 72.4237 42.9163 70.7113 39.2805C70.7113 39.2805 72.0241 42.6305 72.0099 43.2208C71.9956 43.8112 72.5378 41.5435 71.1965 38.6105C72.4444 38.8188 73.7162 38.8504 74.9732 38.7042C76.5476 38.4184 77.3896 38.0014 77.4419 37.8562C77.4942 37.711 75.1349 38.053 74.274 37.6922C74.274 37.6922 78.7975 37.6126 80.5622 36.9238C80.7667 36.8442 79.0211 33.4192 75.5583 32.9882C72.0955 32.5571 68.842 35.7103 68.2474 37.3127C68.2474 37.3127 67.2342 37.9499 66.887 40.569C66.5112 43.4129 69.9503 46.7489 70.7398 46.3084Z" fill="#263238"/>
|
||||
<path id="Vector_159" d="M77.2516 45.7978C76.8075 45.9857 76.3188 46.0472 75.841 45.9751C75.3632 45.903 74.9155 45.7003 74.5488 45.39C74.1822 45.0797 73.9113 44.6744 73.767 44.2199C73.6226 43.7655 73.6107 43.2803 73.7324 42.8196C73.8541 42.3588 74.1047 41.9409 74.4556 41.6134C74.8065 41.286 75.2437 41.0621 75.7174 40.9672C76.191 40.8723 76.6822 40.9103 77.1351 41.0768C77.588 41.2433 77.9843 41.5316 78.2791 41.909C78.6959 42.4448 78.88 43.1216 78.7908 43.791C78.7016 44.4603 78.3465 45.0674 77.8034 45.4792C77.6349 45.6093 77.4493 45.7165 77.2516 45.7978ZM75.349 41.4358C75.179 41.5073 75.0191 41.6003 74.8733 41.7122C74.4206 42.0557 74.1179 42.5564 74.0269 43.1121C73.9359 43.6679 74.0635 44.2369 74.3837 44.7031C74.7039 45.1694 75.1925 45.4979 75.75 45.6216C76.3076 45.7453 76.892 45.6549 77.3842 45.3688C77.8764 45.0828 78.2394 44.6226 78.399 44.0821C78.5587 43.5416 78.5031 42.9615 78.2436 42.4599C77.9841 41.9584 77.5402 41.5732 77.0023 41.3829C76.4645 41.1926 75.8732 41.2115 75.349 41.4358Z" fill="#407BFF"/>
|
||||
<path id="Vector_160" d="M82.1699 42.9445C81.2614 43.3287 80.0342 42.7618 79.3636 41.6092C79.0341 41.0646 78.8845 40.4327 78.9355 39.8007C78.9417 39.5289 79.0188 39.2633 79.1594 39.0295C79.3 38.7956 79.4993 38.6013 79.7382 38.4652C79.9772 38.3292 80.2476 38.2561 80.5235 38.2528C80.7995 38.2495 81.0716 38.3163 81.3138 38.4467C81.8966 38.7186 82.3776 39.1645 82.6884 39.721C83.3971 40.9345 83.2307 42.3495 82.3079 42.8696C82.2638 42.8978 82.2177 42.9228 82.1699 42.9445ZM80.0485 38.6997C80.0086 38.7146 79.9704 38.7334 79.9343 38.7559C79.7476 38.8725 79.5921 39.0317 79.4811 39.2202C79.3702 39.4086 79.307 39.6206 79.297 39.8382C79.2537 40.3987 79.3884 40.9586 79.6822 41.4405C80.2958 42.4947 81.4089 43.0054 82.1652 42.5744C82.9215 42.1433 83.0309 40.9439 82.4173 39.8897C82.14 39.3969 81.7147 39.0008 81.1996 38.7559C81.0222 38.6682 80.8283 38.6179 80.6301 38.6082C80.4319 38.5985 80.2338 38.6297 80.0485 38.6997Z" fill="#407BFF"/>
|
||||
<path id="Vector_161" d="M78.3789 42.1946L78.103 42.0962C78.2505 41.698 78.7261 41.0046 79.4729 41.2295L79.3873 41.5012C78.7214 41.2997 78.3932 42.1572 78.3789 42.1946Z" fill="#407BFF"/>
|
||||
<path id="Vector_162" d="M69.5507 47.8403H69.2558C69.2558 47.7091 69.213 46.5237 69.7315 46.1161C70.2499 45.7085 73.7746 44.1249 73.9268 44.0593L74.0504 44.3216C73.0278 44.7902 70.288 46.0411 69.917 46.3363C69.5459 46.6315 69.5364 47.517 69.5507 47.8403Z" fill="#407BFF"/>
|
||||
<path id="Vector_163" d="M71.8006 48.5104C71.92 48.5077 72.0384 48.4888 72.1526 48.4542C72.4197 48.3905 72.6565 48.2383 72.8233 48.0231C72.894 47.928 72.9515 47.824 72.9945 47.7139C73.0518 47.5559 73.0823 47.3897 73.0849 47.222L71.8957 45.5821C71.8957 45.5821 69.4556 44.1203 68.7183 45.0714C67.9811 46.0225 70.4735 48.5901 71.8006 48.5104Z" fill="#D3766A"/>
|
||||
<path id="Vector_164" d="M69.4508 45.7881V45.8209C70.4021 45.7928 71.1442 46.341 71.7768 46.9735C71.6953 46.9143 71.6017 46.8732 71.5025 46.853C71.4033 46.8329 71.3009 46.8343 71.2023 46.857C71.1037 46.8797 71.0112 46.9233 70.9314 46.9847C70.8515 47.046 70.7862 47.1237 70.7398 47.2124C70.7398 47.2124 70.7636 47.2593 70.7827 47.2452C70.9033 47.14 71.0543 47.0744 71.2146 47.0576C71.3748 47.0408 71.5364 47.0737 71.6769 47.1515C71.9115 47.2851 72.1314 47.4421 72.3333 47.6201C72.3999 47.6716 72.5141 47.5779 72.4522 47.5123C72.0099 46.4769 70.5924 45.3992 69.4508 45.7881Z" fill="#263238"/>
|
||||
<path id="Vector_165" d="M71.7673 48.2105C71.8202 48.285 71.9011 48.3358 71.9921 48.3516C72.0831 48.3674 72.1767 48.347 72.2524 48.2948C72.3281 48.2426 72.3797 48.1629 72.3957 48.0733C72.4118 47.9837 72.391 47.8915 72.338 47.8169C72.2851 47.7423 72.2042 47.6916 72.1132 47.6758C72.0222 47.6599 71.9286 47.6804 71.8529 47.7326C71.7772 47.7848 71.7256 47.8644 71.7096 47.9541C71.6935 48.0437 71.7143 48.1359 71.7673 48.2105Z" fill="white"/>
|
||||
<path id="Vector_166" d="M70.9063 47.9951C70.9244 48.0217 70.9478 48.0443 70.9749 48.0618C71.0021 48.0793 71.0326 48.0912 71.0645 48.0969C71.0964 48.1026 71.1292 48.1019 71.1608 48.0949C71.1925 48.0879 71.2224 48.0747 71.2488 48.056C71.3014 48.0185 71.3369 47.962 71.3475 47.8989C71.3582 47.8358 71.3432 47.7711 71.3059 47.7187C71.2687 47.6665 71.2119 47.631 71.1481 47.62C71.0844 47.6091 71.0188 47.6235 70.9658 47.6601C70.9128 47.6968 70.8768 47.7527 70.8656 47.8155C70.8545 47.8783 70.8691 47.9429 70.9063 47.9951Z" fill="white"/>
|
||||
</g>
|
||||
<g id="character-2">
|
||||
<path id="Vector_167" d="M177.754 108.44C178.267 109.522 175.156 111.04 173.534 110.82C172.148 110.454 170.788 109.998 169.463 109.457C165.149 107.835 159.093 105.371 159.093 105.371L156.339 108.065L142.165 119.389L128.675 104.509C128.675 104.509 135.268 98.3337 141.603 92.6458C142.555 91.7696 143.544 90.9169 144.457 90.0876L144.633 89.933C148.914 86.1848 152.506 83.2096 153.043 83.3502C154.513 83.7109 177.24 107.353 177.754 108.44Z" fill="#FFC4C0"/>
|
||||
<path id="Vector_168" d="M177.754 108.44C178.267 109.527 175.156 111.04 173.534 110.82C172.148 110.453 170.788 109.996 169.463 109.452C165.149 107.84 159.093 105.371 159.093 105.371L156.335 108.069L155.859 108.444L141.408 92.8282L141.613 92.6408L144.467 90.0873C144.524 90.0311 144.586 89.9796 144.643 89.9327C148.924 86.1845 152.515 83.2094 153.057 83.3452C154.513 83.706 177.24 107.353 177.754 108.44Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_169" d="M178.196 108.744C177.692 107.629 154.855 83.2705 153.386 82.8863C152.834 82.7317 149.033 85.8052 144.557 89.6424L144.415 89.7643L158.97 105.643L159.236 105.39C159.236 105.39 172.212 110.862 173.872 111.115C175.532 111.368 178.71 109.855 178.196 108.744Z" fill="#407BFF"/>
|
||||
<path id="Vector_170" opacity="0.1" d="M178.196 108.744C177.692 107.629 154.855 83.2705 153.386 82.8863C152.834 82.7317 149.033 85.8052 144.557 89.6424L144.415 89.7643L158.97 105.643L159.236 105.39C159.236 105.39 172.212 110.862 173.872 111.115C175.532 111.368 178.71 109.855 178.196 108.744Z" fill="black"/>
|
||||
<path id="Vector_171" d="M176.978 109.339C173.03 105.329 157.476 88.7756 153.875 84.5073C153.847 84.4745 153.875 84.4511 153.904 84.5073C157.909 88.4008 173.325 105.076 177.05 109.297C177.126 109.367 177.083 109.424 176.978 109.339Z" fill="#263238"/>
|
||||
<path id="Vector_172" d="M160.658 107.353C158.837 106.013 157.234 103.806 157.248 101.51C157.248 101.421 157.376 101.421 157.405 101.51C158.348 103.514 159.506 105.413 160.858 107.174C160.87 107.201 160.872 107.231 160.866 107.26C160.86 107.288 160.844 107.314 160.822 107.333C160.8 107.353 160.773 107.365 160.743 107.369C160.714 107.372 160.684 107.366 160.658 107.353Z" fill="#263238"/>
|
||||
<path id="Vector_173" d="M162.461 107.868C160.644 106.533 159.041 104.326 159.051 102.026C159.051 101.937 159.184 101.941 159.212 102.026C160.153 104.03 161.311 105.93 162.666 107.69C162.678 107.718 162.682 107.748 162.675 107.778C162.669 107.807 162.653 107.834 162.63 107.854C162.607 107.874 162.579 107.886 162.548 107.888C162.518 107.891 162.487 107.884 162.461 107.868Z" fill="#263238"/>
|
||||
<path id="Vector_174" d="M164.269 108.383C162.452 107.048 160.849 104.841 160.858 102.546C160.858 102.457 160.987 102.457 161.02 102.546C161.965 104.54 163.122 106.429 164.473 108.182C164.487 108.195 164.497 108.211 164.504 108.228C164.512 108.245 164.516 108.264 164.516 108.283C164.516 108.301 164.512 108.32 164.504 108.337C164.497 108.355 164.487 108.37 164.473 108.383C164.46 108.397 164.444 108.407 164.426 108.414C164.409 108.421 164.39 108.425 164.371 108.425C164.352 108.425 164.333 108.421 164.316 108.414C164.298 108.407 164.282 108.397 164.269 108.383Z" fill="#263238"/>
|
||||
<path id="Vector_175" d="M160.706 109.859C160.535 107.892 159.512 106.069 158.76 104.279C158.74 104.242 158.71 104.21 158.675 104.185C158.639 104.161 158.599 104.145 158.556 104.138C158.513 104.132 158.469 104.135 158.428 104.148C158.387 104.162 158.349 104.184 158.318 104.214C158.313 104.206 158.306 104.2 158.298 104.195C158.289 104.191 158.28 104.189 158.271 104.189C158.261 104.189 158.252 104.191 158.244 104.195C158.235 104.2 158.228 104.206 158.223 104.214C157.228 106.025 156.736 108.063 156.796 110.122C156.853 111.321 157.562 112.863 159.046 112.694C160.435 112.544 160.806 110.993 160.706 109.859ZM159.755 111.471C158.218 113.392 157.376 110.628 157.376 109.742C157.383 109.17 157.427 108.599 157.509 108.032C157.702 106.865 157.954 105.707 158.266 104.565C158.58 105.469 158.97 106.336 159.312 107.222C159.745 108.285 160.616 110.408 159.774 111.462L159.755 111.471Z" fill="#263238"/>
|
||||
<path id="Vector_176" d="M150.67 101.107C150.008 102.429 151.255 103.6 152.387 104.05C154.342 104.792 156.463 105.01 158.532 104.682C158.541 104.681 158.55 104.677 158.558 104.672C158.566 104.667 158.572 104.66 158.577 104.652C158.582 104.643 158.584 104.634 158.585 104.625C158.585 104.616 158.583 104.606 158.58 104.598C158.619 104.579 158.653 104.552 158.679 104.518C158.705 104.484 158.723 104.445 158.731 104.403C158.739 104.361 158.737 104.317 158.724 104.276C158.712 104.235 158.69 104.198 158.661 104.167C157.196 102.878 155.807 101.318 153.966 100.512C152.881 100.039 151.288 99.8611 150.67 101.107ZM156.011 102.658C156.748 103.277 157.438 103.923 158.213 104.532C157.02 104.406 155.835 104.331 154.641 104.087C154.07 103.978 153.508 103.831 152.957 103.647C152.111 103.347 149.742 101.651 152.092 100.864C153.386 100.414 155.136 101.923 156.011 102.658Z" fill="#263238"/>
|
||||
<path id="Vector_177" d="M154.622 112.399C154.622 112.399 122.444 133.403 108.588 135.909C101.967 137.109 94.4895 130.91 95.1697 123.784C95.8023 117.136 111.894 102.161 115.438 97.0779C116.555 95.4849 118.054 85.032 118.054 85.032L133.451 87.5668C133.451 87.5668 133.313 94.9133 132.718 99.0457C132.71 99.1171 132.696 99.1877 132.675 99.2565L137.551 95.0398L154.622 112.399Z" fill="#37474F"/>
|
||||
<path id="Vector_178" d="M143.24 105.891C140.685 103.403 138.008 101.037 135.453 98.5772C135.401 98.5303 135.32 98.5772 135.368 98.6428C137.87 101.163 140.281 103.759 142.831 106.233C145.38 108.707 148.03 111.096 150.636 113.523C150.703 113.584 150.812 113.495 150.746 113.43C148.239 110.923 145.78 108.365 143.24 105.891Z" fill="#263238"/>
|
||||
<path id="Vector_179" d="M132.813 99.3829C132.133 100.203 131.524 101.093 130.887 101.941C130.25 102.789 129.617 103.614 128.956 104.434C127.619 106.078 126.216 107.676 124.775 109.236C121.874 112.383 118.763 115.335 115.461 118.072C113.616 119.595 111.746 121.109 109.753 122.453C109.711 122.481 109.753 122.547 109.806 122.514C111.233 121.549 112.702 120.593 114.087 119.572C113.454 120.396 112.84 121.244 112.208 122.074C112.179 122.116 112.241 122.167 112.274 122.125C112.978 121.249 113.701 120.387 114.386 119.501C114.394 119.492 114.4 119.48 114.403 119.468C114.406 119.456 114.407 119.443 114.404 119.431C114.402 119.418 114.397 119.406 114.39 119.396C114.383 119.386 114.373 119.377 114.363 119.37L115.081 118.841C116.803 117.523 118.466 116.139 120.07 114.69C123.244 111.818 126.161 108.683 128.789 105.319C129.531 104.382 130.254 103.422 130.958 102.438C131.675 101.483 132.329 100.484 132.918 99.4485C132.989 99.3829 132.847 99.3173 132.813 99.3829Z" fill="#263238"/>
|
||||
<path id="Vector_180" d="M192.394 98.6195C193.146 99.5566 190.492 101.735 188.841 101.899C187.407 101.855 185.977 101.718 184.56 101.492C179.98 100.892 173.511 99.8612 173.511 99.8612L171.46 103.113L160.725 117.037L143.711 105.905C143.711 105.905 148.686 98.4087 153.523 91.4323C154.27 90.3641 155.007 89.3146 155.73 88.2932L155.859 88.1058C159.15 83.4861 161.957 79.7801 162.518 79.7941C164.007 79.8082 191.643 97.6778 192.394 98.6195Z" fill="#FFC4C0"/>
|
||||
<path id="Vector_181" d="M192.394 98.6193C193.146 99.5563 190.492 101.74 188.841 101.899C187.407 101.855 185.977 101.719 184.56 101.491C179.984 100.892 173.511 99.8609 173.511 99.8609L171.465 103.112L171.161 103.506L153.252 91.8209L153.533 91.4227C154.275 90.3544 155.012 89.3049 155.731 88.2835C155.778 88.2226 155.821 88.157 155.864 88.0961C159.155 83.4764 161.962 79.7751 162.523 79.7844C164.007 79.8032 191.638 97.6775 192.394 98.6193Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_182" d="M192.808 98.6708C192.042 97.7338 163.879 79.5502 162.366 79.5315C161.79 79.5315 158.865 83.4015 155.464 88.1993C155.432 88.251 155.397 88.3011 155.359 88.3492L173.396 100.264L173.591 99.9593C173.591 99.9593 187.528 102.157 189.203 102.007C190.877 101.857 193.579 99.6266 192.808 98.6708Z" fill="#407BFF"/>
|
||||
<path id="Vector_183" d="M191.776 99.5378C186.953 96.5954 167.779 84.2638 163.236 80.9888C163.198 80.9606 163.236 80.9372 163.236 80.9606C168.083 83.7718 187.153 96.2628 191.809 99.4628C191.923 99.5284 191.876 99.6034 191.776 99.5378Z" fill="#263238"/>
|
||||
<path id="Vector_184" d="M175.451 101.52C173.354 100.657 171.256 98.9005 170.695 96.6703C170.695 96.586 170.799 96.5532 170.847 96.6141C172.257 98.3398 173.852 99.9107 175.604 101.299C175.622 101.323 175.632 101.351 175.632 101.381C175.633 101.41 175.625 101.439 175.608 101.463C175.591 101.488 175.567 101.506 175.539 101.516C175.511 101.526 175.48 101.528 175.451 101.52Z" fill="#263238"/>
|
||||
<path id="Vector_185" d="M177.33 101.585C175.233 100.728 173.135 98.9708 172.574 96.7407C172.574 96.6516 172.678 96.6235 172.726 96.6797C174.137 98.4042 175.732 99.9749 177.482 101.365C177.5 101.388 177.511 101.417 177.511 101.446C177.512 101.476 177.503 101.505 177.487 101.529C177.47 101.553 177.446 101.572 177.418 101.582C177.39 101.592 177.359 101.593 177.33 101.585Z" fill="#263238"/>
|
||||
<path id="Vector_186" d="M179.209 101.655C177.116 100.793 175.018 99.0408 174.452 96.8059C174.429 96.7216 174.552 96.6935 174.605 96.7497C176.016 98.4743 177.61 100.045 179.361 101.435C179.379 101.458 179.389 101.487 179.39 101.516C179.391 101.546 179.382 101.575 179.365 101.599C179.349 101.623 179.324 101.642 179.296 101.652C179.268 101.662 179.238 101.663 179.209 101.655Z" fill="#263238"/>
|
||||
<path id="Vector_187" d="M176.132 103.937C175.48 102.063 174.039 100.55 172.868 98.9942C172.84 98.9615 172.803 98.9361 172.763 98.92C172.722 98.904 172.678 98.8977 172.634 98.9019C172.59 98.906 172.548 98.9204 172.511 98.9437C172.474 98.9671 172.443 98.9989 172.421 99.0364C172.414 99.0317 172.405 99.0289 172.395 99.0283C172.386 99.0278 172.377 99.0294 172.369 99.0331C172.36 99.0368 172.353 99.0424 172.347 99.0495C172.341 99.0566 172.337 99.0649 172.336 99.0738C171.82 101.068 171.846 103.16 172.412 105.141C172.759 106.294 173.839 107.62 175.228 107.1C176.531 106.603 176.493 105.024 176.132 103.937ZM175.623 105.727C174.609 107.957 173.116 105.479 172.888 104.621C172.753 104.064 172.656 103.499 172.597 102.93C172.459 101.749 172.493 100.587 172.474 99.3831C173.002 100.184 173.591 100.934 174.148 101.726C174.8 102.639 176.165 104.495 175.608 105.727H175.623Z" fill="#263238"/>
|
||||
<path id="Vector_188" d="M164.24 97.8744C163.926 99.3127 165.424 100.151 166.618 100.315C168.692 100.564 170.795 100.269 172.716 99.4627C172.725 99.4594 172.734 99.4541 172.74 99.4472C172.747 99.4403 172.752 99.432 172.754 99.4229C172.757 99.4138 172.758 99.4042 172.756 99.3948C172.754 99.3854 172.751 99.3766 172.745 99.369C172.778 99.3411 172.804 99.306 172.821 99.2666C172.837 99.2272 172.845 99.1844 172.842 99.1417C172.839 99.0991 172.826 99.0576 172.805 99.0206C172.783 98.9836 172.753 98.9521 172.716 98.9285C170.975 98.029 169.225 96.8576 167.256 96.5109C166.105 96.2907 164.511 96.4969 164.24 97.8744ZM169.805 98.0992C170.676 98.5209 171.518 98.9801 172.398 99.3736C171.208 99.5376 170.019 99.7485 168.825 99.7953C168.244 99.825 167.66 99.8172 167.08 99.7719C166.19 99.6829 163.474 98.6053 165.558 97.2793C166.685 96.5297 168.754 97.5792 169.786 98.0805L169.805 98.0992Z" fill="#263238"/>
|
||||
<path id="Vector_189" d="M120.879 85.5005L142.112 89.0754C142.112 89.0754 145.994 95.5223 146.393 99.6828C146.793 103.843 132.028 119.923 132.028 119.923L150.156 94.6649L170.814 107.685C170.814 107.685 145.532 133.656 128.746 142.478C122.449 145.791 113.568 140.656 113.05 132.541C112.498 124.004 122.515 100.03 122.515 100.03L120.879 85.5005Z" fill="#37474F"/>
|
||||
<path id="Vector_190" d="M149.495 95.0633C144.329 103.356 138.997 111.541 133.213 119.427C132.409 120.523 131.605 121.615 130.787 122.706C129.969 123.798 129.151 125.021 128.228 126.089C128.18 126.141 128.271 126.211 128.314 126.155C129.046 125.143 129.888 124.21 130.663 123.231C131.439 122.252 132.176 121.31 132.918 120.336L133.869 119.071L133.736 119.408C133.522 119.914 133.313 120.42 133.113 120.935C132.704 121.99 132.419 123.109 131.929 124.131C131.895 124.192 132 124.234 132.024 124.173C132.433 123.114 133.027 122.13 133.479 121.09C133.695 120.584 133.899 120.073 134.093 119.558C134.289 119.103 134.448 118.633 134.569 118.152C135.496 116.906 136.419 115.66 137.327 114.404C140.181 110.431 142.907 106.37 145.504 102.222C146.955 99.9126 148.358 97.5746 149.709 95.1945C149.766 95.0633 149.552 94.9134 149.495 95.0633Z" fill="#263238"/>
|
||||
<path id="Vector_191" d="M158.532 103.497C155.469 101.655 152.325 99.9546 149.247 98.1414C149.19 98.1086 149.124 98.1883 149.185 98.2257C152.206 100.1 155.16 102.091 158.223 103.923C161.286 105.755 164.407 107.479 167.522 109.25C167.603 109.297 167.689 109.185 167.608 109.133C164.568 107.268 161.581 105.338 158.532 103.497Z" fill="#263238"/>
|
||||
<path id="Vector_192" d="M122.496 100.03C121.15 102.578 117.335 112.6 116.36 115.308C115.385 118.016 114.539 120.724 113.839 123.489C113.487 124.894 113.192 126.3 112.94 127.706C112.679 129.056 112.541 130.426 112.526 131.8C112.515 134.275 113.342 136.682 114.876 138.641C115.692 139.68 116.68 140.576 117.797 141.293C118.929 141.976 120.152 142.501 121.431 142.853C121.478 142.853 121.497 142.783 121.431 142.773C120.241 142.465 119.128 141.921 118.158 141.176C116.721 140.154 115.533 138.831 114.678 137.302C113.823 135.774 113.324 134.077 113.216 132.335C113.083 129.622 113.725 126.872 114.324 124.243C114.95 121.53 115.714 118.85 116.612 116.213C117.117 114.732 117.654 113.261 118.211 111.799C118.767 110.337 122.135 101.599 122.644 100.114C122.653 100.095 122.654 100.073 122.648 100.053C122.641 100.033 122.627 100.016 122.609 100.006C122.591 99.995 122.569 99.9916 122.548 99.9961C122.527 100 122.509 100.012 122.496 100.03Z" fill="#263238"/>
|
||||
<path id="Vector_193" d="M127.909 101.234C126.308 100.62 124.638 100.2 122.934 99.9828C121.271 99.7223 119.596 99.5456 117.916 99.4534C117.868 99.4534 117.868 99.5236 117.916 99.533C119.619 99.7626 121.312 100.067 122.991 100.414C124.67 100.761 126.244 101.196 127.89 101.407C127.985 101.421 127.99 101.267 127.909 101.234Z" fill="#263238"/>
|
||||
<path id="Vector_194" d="M142.331 98.4974C141.1 98.613 139.862 98.649 138.626 98.6052C137.603 98.5818 136.552 98.5583 135.639 98.0383C133.86 97.0262 132.937 94.9882 132.357 93.1328C132.357 93.0906 132.266 93.1328 132.281 93.1562C132.809 95.1849 133.194 97.5369 135.201 98.7036C136.198 99.2163 137.328 99.4219 138.445 99.2939C139.766 99.1875 141.073 98.9505 142.345 98.5864C142.355 98.5822 142.363 98.575 142.367 98.566C142.372 98.557 142.374 98.5467 142.372 98.5366C142.371 98.5266 142.366 98.5173 142.359 98.5102C142.351 98.5031 142.341 98.4987 142.331 98.4974Z" fill="#263238"/>
|
||||
<path id="Vector_195" d="M144.795 99.397C144.452 98.2376 144.024 97.1039 143.516 96.0049C143.011 94.871 142.461 93.759 141.865 92.6689C141.19 91.432 140.438 90.2279 139.696 89.0379C139.69 89.0291 139.682 89.0228 139.671 89.0201C139.661 89.0174 139.65 89.0184 139.641 89.0231C139.632 89.0277 139.624 89.0356 139.62 89.0452C139.617 89.0549 139.616 89.0656 139.62 89.0753C140.771 91.1087 141.856 93.1843 142.835 95.3068C143.321 96.3563 143.777 97.4198 144.205 98.4974C144.676 99.5259 144.888 100.651 144.824 101.777C144.708 102.923 144.25 104.009 143.506 104.898C143.506 104.898 143.506 104.921 143.506 104.898C144.165 104.156 144.627 103.266 144.852 102.307C145.077 101.347 145.057 100.347 144.795 99.397Z" fill="#263238"/>
|
||||
<path id="Vector_196" d="M150.184 100.685C149.114 101.88 148.139 103.164 147.145 104.434C146.151 105.703 145.147 106.945 144.158 108.205C142.179 110.731 140.229 113.279 138.279 115.823C137.17 117.271 136.095 118.742 135.016 120.204C134.982 120.246 135.044 120.298 135.077 120.256C139.14 115.289 143.103 110.248 146.969 105.132C148.068 103.679 149.214 102.25 150.227 100.742C150.246 100.713 150.208 100.685 150.184 100.685Z" fill="#263238"/>
|
||||
<path id="Vector_197" d="M121.212 88.3538C121.264 89.675 121.44 93.6809 121.54 95.0022C121.583 95.6066 121.626 96.2251 121.726 96.8248C121.811 97.3308 121.978 97.9211 122.506 98.1413C123.115 98.3943 123.41 97.8977 123.457 97.3729C123.504 96.7791 123.52 96.1833 123.505 95.5879C123.505 94.9085 123.357 88.6911 123.357 88.6724C123.357 88.6536 123.357 88.6115 123.41 88.5881C123.417 88.5811 123.428 88.5773 123.438 88.5773C123.449 88.5773 123.459 88.5811 123.467 88.5881C123.576 88.6818 123.942 94.1776 123.942 94.8148C123.942 95.452 123.99 96.0892 124.009 96.7264C124.073 97.202 124.012 97.6859 123.833 98.132C123.73 98.3428 123.56 98.515 123.349 98.6223C123.138 98.7297 122.897 98.7664 122.663 98.727C122.663 98.7738 122.691 98.816 122.701 98.8629C122.729 98.9987 122.744 99.1393 122.763 99.2752C122.782 99.411 122.801 99.5563 122.81 99.6968C122.815 99.7639 122.815 99.8312 122.81 99.8983C122.81 99.9733 122.772 100.039 122.767 100.114C122.763 100.189 122.587 100.268 122.553 100.147C122.52 100.025 122.496 100.015 122.473 99.9452C122.45 99.8702 122.434 99.7933 122.425 99.7156C122.425 99.5797 122.401 99.4485 122.392 99.3127C122.382 99.1768 122.392 99.0409 122.392 98.9097C122.395 98.8297 122.403 98.7499 122.415 98.6708C122.155 98.5922 121.921 98.4447 121.74 98.2444C121.442 97.8672 121.262 97.4132 121.222 96.9372C121.141 96.375 121.107 95.8034 121.069 95.2365C120.984 93.8309 120.793 89.7359 120.96 88.3351C120.962 88.3021 120.978 88.2715 121.004 88.25C121.029 88.2285 121.062 88.2178 121.095 88.2203C121.129 88.2227 121.16 88.2382 121.182 88.2633C121.204 88.2883 121.215 88.3209 121.212 88.3538Z" fill="#263238"/>
|
||||
<path id="Vector_198" d="M139.092 40.3721C137.099 39.2055 132.333 38.3574 129.103 43.0849C124.499 49.7989 130.088 63.9671 131.439 66.0099C131.439 66.0099 142.379 67.2375 150.246 60.1158C150.246 60.1158 143.064 51.3075 142.702 46.06C142.625 44.8918 142.255 43.7608 141.625 42.7681C140.994 41.7755 140.124 40.9522 139.092 40.3721Z" fill="#263238"/>
|
||||
<path id="Vector_199" d="M144.871 51.3681C144.919 51.4431 144.966 51.5181 145.019 51.593C145.67 52.5287 146.408 53.4038 147.221 54.2074C147.981 54.9966 148.852 55.6735 149.809 56.2174C149.809 56.2174 149.861 56.194 149.809 56.1799C148.859 55.58 148.017 54.8296 147.316 53.9591C146.598 53.1469 145.931 52.2926 145.318 51.4009C144.065 49.59 143.051 47.63 142.298 45.5678C142.298 45.5256 142.208 45.5678 142.222 45.5678C142.303 45.8629 142.388 46.1581 142.483 46.4486C142.477 46.4476 142.471 46.4481 142.465 46.4502C142.459 46.4523 142.453 46.4558 142.449 46.4605C142.445 46.4652 142.442 46.4708 142.44 46.4769C142.439 46.483 142.439 46.4894 142.441 46.4954C143.032 48.4463 143.829 50.3307 144.819 52.1178C145.865 53.8428 147.145 55.4191 148.624 56.803C149.451 57.5924 150.326 58.3309 151.245 59.0145C151.245 59.0145 151.274 59.0145 151.245 58.9911C148.686 56.8352 146.529 54.2554 144.871 51.3681Z" fill="#263238"/>
|
||||
<path id="Vector_200" d="M130.744 41.8337C126.264 46.0926 126.145 52.5583 127.415 58.0026C127.787 59.6825 128.325 61.3224 129.022 62.8987C129.022 62.9049 129.025 62.9109 129.029 62.9153C129.034 62.9197 129.04 62.9222 129.046 62.9222C129.052 62.9222 129.058 62.9197 129.063 62.9153C129.067 62.9109 129.07 62.9049 129.07 62.8987C128.047 60.0994 127.441 57.1687 127.272 54.1982C127.124 51.4151 127.248 48.4728 128.285 45.8115C128.828 44.3501 129.689 43.023 130.806 41.9227C130.839 41.8665 130.782 41.7962 130.744 41.8337Z" fill="#263238"/>
|
||||
<path id="Vector_201" d="M129.879 88.9303C130.107 89.2255 149.671 90.617 150.612 90.3781C150.658 90.3646 150.703 90.3474 150.746 90.3265C151.911 89.8252 157.405 85.1352 157.8 84.7417C158.561 84.0108 153.257 71.4027 148.838 63.8594C147.364 61.3434 144.976 59.1741 144.296 58.4947C143.616 57.8154 131.453 57.211 129.274 58.1293C128.323 58.5182 126.007 60.7343 125.945 61.1419C125.864 61.737 129.655 88.6258 129.879 88.9303Z" fill="#455A64"/>
|
||||
<path id="Vector_202" d="M129.879 88.9301C130.107 89.2253 149.671 90.6168 150.612 90.3779C150.658 90.3644 150.703 90.3472 150.746 90.3263C149.005 85.2756 140.828 61.5775 140.581 61.4229C140.333 61.2682 128.723 61.0199 125.935 61.1464C125.864 61.7368 129.655 88.6256 129.879 88.9301Z" fill="#263238"/>
|
||||
<path id="Vector_203" d="M137.898 59.2772C138.098 59.0991 138.302 56.466 137.955 55.9506C137.608 55.4353 132.899 55.5196 132.614 56.0115C132.328 56.5035 132.138 59.1179 132.257 59.2163C132.376 59.3147 133.17 59.4271 133.279 59.2631C133.389 59.0991 133.441 56.9205 133.527 56.8174C133.612 56.7143 136.88 56.5831 136.99 56.7518C137.099 56.9205 136.761 59.0945 136.89 59.2022C137.018 59.31 137.703 59.4552 137.898 59.2772Z" fill="#37474F"/>
|
||||
<path id="Vector_204" d="M130.24 57.9281C129.95 49.6492 129.137 42.9071 127.795 32.6791C127.091 27.352 125.64 18.6467 125.298 16.3509C124.822 13.3243 110.419 18.4921 110.957 20.5255C111.309 21.8515 113.097 29.8961 115.499 36.0619C118.586 43.9707 120.418 50.8721 124.061 59.2166C126.815 65.5136 130.435 63.4099 130.24 57.9281Z" fill="#FFC4C0"/>
|
||||
<path id="Vector_205" d="M112.664 24.695C110.448 22.6242 104.764 13.8533 104.036 11.8808C103.308 9.90831 101.634 4.07983 103.113 3.37704C104.592 2.67425 105.216 4.3422 105.216 4.3422C105.216 4.3422 104.835 1.53104 106.457 1.19838C107.751 0.931322 108.764 3.23179 108.764 3.23179C108.764 3.23179 108.507 0.13014 110.162 0.00363796C111.666 -0.113494 112.122 2.63676 112.122 2.63676C112.122 2.63676 112.174 0.0223796 113.649 0.181679C115.418 0.378461 115.328 4.90444 116.298 7.02218C116.517 7.49071 124.123 17.6015 124.123 17.6015L112.664 24.695Z" fill="#FFC4C0"/>
|
||||
<path id="Vector_206" d="M112.227 2.54294C112.512 5.93976 112.731 7.34066 114.458 10.1425C114.491 10.194 114.415 10.2549 114.377 10.2034C112.431 7.61241 112.051 5.98662 112.065 2.53357C112.065 2.3649 112.217 2.38364 112.227 2.54294Z" fill="#263238"/>
|
||||
<path id="Vector_207" d="M108.797 3.23106C109.04 6.69817 109.696 8.23494 111.285 11.2991C111.309 11.3413 111.233 11.3834 111.209 11.3413C109.392 8.46451 108.464 6.70754 108.678 3.21232C108.688 3.06708 108.783 3.08582 108.797 3.23106Z" fill="#263238"/>
|
||||
<path id="Vector_208" d="M105.296 4.49696C105.772 7.83288 106.352 9.6086 108.284 12.3917C108.289 12.3981 108.292 12.4055 108.294 12.4133C108.296 12.4212 108.297 12.4294 108.296 12.4374C108.295 12.4455 108.292 12.4532 108.288 12.4602C108.284 12.4673 108.278 12.4734 108.272 12.4783C108.265 12.4833 108.258 12.4869 108.25 12.4889C108.242 12.491 108.233 12.4915 108.225 12.4904C108.217 12.4893 108.209 12.4867 108.202 12.4826C108.195 12.4785 108.189 12.4731 108.184 12.4666C105.934 9.81944 105.206 7.60799 105.197 4.50165C105.197 4.30955 105.258 4.28613 105.296 4.49696Z" fill="#263238"/>
|
||||
<path id="Vector_209" d="M125.636 19.3915C125.636 19.3915 126.311 14.7296 122.891 11.5296C121.507 10.2364 121.212 4.50166 119.661 3.99096C117.916 3.41467 117.326 8.25457 118.41 11.4218C118.41 11.4218 113.868 14.6172 114.762 17.7141C114.957 18.3841 117.245 21.1812 118.039 21.3312L125.636 19.3915Z" fill="#FFC4C0"/>
|
||||
<path id="Vector_210" d="M118.406 11.7873C116.593 12.968 114.762 15.1419 114.814 17.2737C114.811 17.2842 114.804 17.2934 114.795 17.2999C114.786 17.3064 114.776 17.3099 114.764 17.3099C114.753 17.3099 114.742 17.3064 114.733 17.2999C114.724 17.2934 114.718 17.2842 114.715 17.2737C114.344 14.992 116.436 12.4526 118.12 11.4968C118.444 11.3281 118.872 11.478 118.406 11.7873Z" fill="#263238"/>
|
||||
<path id="Vector_211" opacity="0.1" d="M130.254 58.3636L121.664 20.4128L121.431 19.2837L120.636 15.7557L119.69 11.6654L118.225 5.19505C118.529 4.28611 119.014 3.76136 119.652 3.9722C121.203 4.48758 121.497 10.2177 122.882 11.5108C125.545 14.0034 125.736 17.3861 125.669 18.7542C126.249 22.39 127.239 28.5371 127.786 32.6601C129.127 42.8881 129.94 49.6302 130.235 57.9091C130.25 58.0731 130.254 58.2183 130.254 58.3636Z" fill="black"/>
|
||||
<path id="Vector_212" d="M119.471 50.6513L130.226 44.3402C130.226 44.3402 130.982 57.8853 130.064 61.9287C129.032 66.4828 126.891 64.9648 124.451 61.24C122.011 57.5152 119.471 50.6513 119.471 50.6513Z" fill="#407BFF"/>
|
||||
<path id="Vector_213" d="M125.683 53.8327C125.403 53.2236 124.922 52.0148 124.004 52.3334C123.291 52.5771 123.281 53.4813 123.338 54.0857C123.433 55.0585 123.813 55.9831 124.432 56.747C124.684 57.0703 125.098 57.4779 125.483 57.4544C125.864 57.5013 126.126 57.2061 126.221 56.7423C126.361 55.7408 126.173 54.7213 125.683 53.8327ZM128.651 51.5323C128.214 51.4901 127.6 52.31 127.591 53.5891C127.591 54.9947 128.123 55.7256 128.504 55.6834C129.255 55.5944 129.488 54.4418 129.493 53.5469C129.517 52.8676 129.179 51.5978 128.651 51.5463V51.5323Z" fill="#263238"/>
|
||||
<path id="Vector_214" d="M121.007 52.3476C122.487 51.7244 126.663 49.2459 127.353 48.843C127.719 48.6322 129.141 47.7185 129.507 47.5124C129.555 47.4843 129.507 47.4187 129.46 47.4421C128.761 47.845 128.033 48.173 127.31 48.5666C126.587 48.9601 122.268 51.3309 120.979 52.3148C120.978 52.3188 120.978 52.323 120.98 52.327C120.981 52.331 120.983 52.3346 120.985 52.3378C120.988 52.3409 120.992 52.3434 120.995 52.3451C120.999 52.3468 121.003 52.3476 121.007 52.3476Z" fill="#263238"/>
|
||||
<path id="Vector_215" opacity="0.1" d="M130.468 57.7732C130.45 59.1671 130.315 60.5571 130.064 61.929C129.032 66.4784 126.896 64.9651 124.451 61.245C124.114 60.7296 123.781 60.1533 123.443 59.5489L130.468 57.7732Z" fill="black"/>
|
||||
<path id="Vector_216" d="M146.688 99.0551C146.593 99.1207 115 95.7192 114.781 95.3069C114.667 95.1008 120.903 64.3326 130.269 56.9392C132.014 55.5617 136.504 56.3863 138.203 58.4385C143.235 64.534 147.026 98.8115 146.688 99.0551Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_217" d="M130.563 56.6439C127.5 61.3901 122.658 75.2913 121.945 80.9324C121.626 83.4343 121.569 102.991 121.569 102.991L113.345 98.1367C113.345 98.1367 117.269 80.3327 119.495 74.2887C121.721 68.2447 127.453 59.5488 128.632 58.2416C129.902 56.8079 130.563 56.6439 130.563 56.6439Z" fill="#407BFF"/>
|
||||
<path id="Vector_218" d="M136.547 56.883C136.547 56.883 138.093 57.5905 139.368 59.7644C140.643 61.9384 144.957 79.7331 146.712 82.2538C148.467 84.7745 154.874 82.8816 154.874 82.8816C154.859 84.1465 155.019 85.4076 155.35 86.6298C155.859 88.087 146.431 103.497 145.875 103.497C145.318 103.497 135.991 92.299 135.111 86.8735C134.231 81.4479 135.701 63.9718 135.872 61.7979C136.043 59.6239 136.547 56.883 136.547 56.883Z" fill="#407BFF"/>
|
||||
<path id="Vector_219" d="M121.236 86.3063C120.77 86.9532 120.456 87.6942 120.318 88.4756C120.251 88.9066 120.242 89.5672 120.793 89.6281C120.962 89.6244 121.127 89.5833 121.277 89.5078C121.427 89.4324 121.557 89.3245 121.659 89.1924C121.659 87.9414 121.697 86.7373 121.721 85.655C121.524 85.8445 121.36 86.0645 121.236 86.3063ZM118.215 88.4146C118.13 87.8524 117.821 87.2152 117.14 87.4776C116.46 87.74 116.161 88.7801 116.08 89.4735C115.996 90.0391 116.014 90.6147 116.132 91.1743C116.171 91.4803 116.312 91.7651 116.532 91.9848C117.169 92.5049 117.521 91.5725 117.721 91.1134C118.138 90.277 118.31 89.3421 118.215 88.4146ZM146.165 99.8092C146.2 98.8753 145.969 97.9503 145.499 97.1386C145.18 96.6701 144.638 96.2016 144.129 96.7263C143.62 97.2511 143.772 98.3099 143.987 98.9846C144.146 99.531 144.401 100.046 144.738 100.507C144.901 100.772 145.149 100.976 145.442 101.088C146.208 101.304 146.165 100.311 146.165 99.8092ZM120.955 82.6096C120.522 82.4222 120.161 82.6845 119.894 83.0781C119.562 83.5474 119.329 84.0781 119.209 84.6383C119.148 84.971 119.038 85.5754 119.366 85.819C119.695 86.0626 120.113 85.7815 120.318 85.5285C120.717 85.074 121.878 83.0406 120.927 82.6096H120.955ZM116.108 94.1494C115.842 93.5825 115.409 92.4908 114.61 92.608C114.363 93.6575 114.134 94.6039 113.968 95.4191C114.157 96.0222 114.457 96.586 114.852 97.0824C115.109 97.3963 115.523 97.8086 115.908 97.7899C116.294 97.7711 116.551 97.5416 116.646 97.0777C116.778 96.0672 116.58 95.0415 116.08 94.1494H116.108ZM119.076 91.8489C118.639 91.8068 118.025 92.6314 118.016 93.9105C118.016 95.3161 118.548 96.047 118.929 96.0048C119.68 95.9111 119.913 94.7632 119.918 93.8683C119.899 93.1889 119.576 91.9052 119.053 91.8489H119.076ZM119.714 77.4089C119.238 77.5401 119.057 78.0274 119.019 78.5428C118.974 78.927 118.99 79.3159 119.067 79.6953C119.124 79.9437 119.271 80.2576 119.585 80.1639C119.899 80.0702 120.089 79.5595 120.161 79.2783C120.223 78.9223 120.603 77.1419 119.685 77.4089H119.714ZM147.668 94.6273C147.192 94.7585 147.016 95.2458 146.978 95.7658C146.933 96.1501 146.949 96.539 147.026 96.9184C147.078 97.1621 147.226 97.4807 147.54 97.387C147.854 97.2932 148.049 96.7872 148.115 96.5061C148.177 96.1407 148.543 94.3603 147.64 94.6273H147.668ZM142.231 68.6053C141.831 69.1577 141.585 69.8039 141.518 70.4794C141.356 71.0557 141.366 71.6039 141.908 71.6554C142.279 71.6929 142.655 71.2478 142.907 70.9339C142.65 70.1467 142.426 69.369 142.203 68.6053H142.231ZM144.886 77.5073C144.546 77.7815 144.242 78.0963 143.982 78.4444C143.715 78.7911 143.406 79.3814 143.887 79.686C144.367 79.9905 145.033 79.6532 145.509 79.4002C145.28 78.8286 145.071 78.196 144.857 77.5214L144.886 77.5073ZM141.622 76.1017C140.823 76.0361 140.138 76.8186 139.72 77.3949C139.386 77.8602 139.135 78.3784 138.978 78.927C138.87 79.2161 138.862 79.5322 138.954 79.8265C139.273 80.5715 140.024 79.9109 140.419 79.5923C141.181 79.0362 141.771 78.2817 142.122 77.4136C142.298 76.8842 142.326 76.1814 141.594 76.1158L141.622 76.1017ZM136.771 79.4376C136.024 79.3346 135.596 80.1264 135.344 80.698C134.981 81.6028 134.885 82.5905 135.068 83.5466C135.149 83.9496 135.32 84.4837 135.672 84.6617C136.024 84.8398 136.357 84.7273 136.661 84.3572C137.252 83.5364 137.562 82.5518 137.546 81.546C137.565 80.876 137.703 79.6016 136.742 79.4517L136.771 79.4376ZM141.271 80.8432C140.904 80.6043 139.977 81.0541 139.368 82.1926C138.711 83.4108 138.84 84.3244 139.201 84.4556C139.915 84.7226 140.628 83.8043 141.08 83.0172C141.38 82.4128 141.689 81.1384 141.242 80.8526L141.271 80.8432ZM143.982 86.1376C143.397 86.2172 143.078 86.7701 142.94 87.3886C142.815 87.8463 142.765 88.3209 142.793 88.7941C142.793 89.0987 142.94 89.5016 143.335 89.4501C143.73 89.3986 144.053 88.8082 144.191 88.4802C144.339 88.0632 145.114 85.9783 143.953 86.161L143.982 86.1376Z" fill="#263238"/>
|
||||
<path id="Vector_220" d="M138.141 56.7986C142.935 49.3724 146.826 44.0359 153.647 35.3915C157.2 30.889 161.657 25.5103 163.232 23.594C165.306 21.064 175.675 33.4331 174.072 35.0214C173.025 36.0475 169.586 39.36 163.607 44.6075C156.777 50.5812 151.007 55.5476 143.107 61.2496C137.128 65.546 134.973 61.7087 138.141 56.7986Z" fill="#FFC4C0"/>
|
||||
<path id="Vector_221" d="M170.728 37.2754C173.886 36.5539 183.885 31.5453 185.626 30.1257C187.367 28.706 192.09 24.2644 191.124 22.8354C190.159 21.4064 188.67 22.6011 188.67 22.6011C188.67 22.6011 190.572 20.2585 189.255 19.0684C188.213 18.1314 186.03 19.7056 186.03 19.7056C186.03 19.7056 187.961 17.0022 186.506 16.0089C185.193 15.1 183.271 17.377 183.271 17.377C183.271 17.377 184.651 14.9548 183.219 14.3222C181.502 13.5398 179.109 17.7565 177.083 19.1621C176.607 19.4854 164.14 24.6908 164.14 24.6908L170.728 37.2754Z" fill="#FFC4C0"/>
|
||||
<path id="Vector_222" d="M183.238 17.2361C181.121 20.1925 180.16 21.3591 177.054 23.0037C176.992 23.0365 177.03 23.1349 177.097 23.1068C180.294 21.7668 181.535 20.4643 183.404 17.3111C183.485 17.1611 183.338 17.1002 183.238 17.2361Z" fill="#263238"/>
|
||||
<path id="Vector_223" d="M185.997 19.6959C183.88 22.7367 182.443 23.7955 179.309 25.754C179.266 25.7821 179.309 25.8617 179.356 25.8336C182.591 24.1657 184.403 23.0506 186.111 19.7428C186.192 19.5928 186.12 19.56 185.997 19.6959Z" fill="#263238"/>
|
||||
<path id="Vector_224" d="M188.499 22.699C186.234 25.5102 184.736 26.8173 181.449 28.3213C181.435 28.3287 181.423 28.3411 181.417 28.3563C181.411 28.3714 181.411 28.3882 181.417 28.4034C181.423 28.4186 181.435 28.431 181.449 28.4384C181.464 28.4457 181.481 28.4474 181.497 28.4431C185.003 27.2156 186.881 25.5804 188.579 22.7646C188.708 22.5865 188.656 22.5256 188.499 22.699Z" fill="#263238"/>
|
||||
<path id="Vector_225" d="M196.017 24.6735L178.747 1.37036L175.454 3.73785L192.725 27.041L196.017 24.6735Z" fill="#407BFF"/>
|
||||
<path id="Vector_226" d="M192.723 27.0396L175.453 3.73645L161.691 13.6318L178.962 36.935L192.723 27.0396Z" fill="#407BFF"/>
|
||||
<path id="Vector_227" opacity="0.1" d="M192.723 27.0396L175.453 3.73645L161.691 13.6318L178.962 36.935L192.723 27.0396Z" fill="black"/>
|
||||
<path id="Vector_228" d="M195.675 24.9194L178.405 1.61621L175.796 3.49197L193.067 26.7951L195.675 24.9194Z" fill="white"/>
|
||||
<path id="Vector_229" d="M177.435 4.63745C182.791 11.5623 188.499 19.293 193.583 26.4146C188.247 19.4757 182.52 11.7403 177.435 4.63745Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_230" d="M177.949 4.25305C183.266 11.1966 189.012 18.9273 194.097 26.049C188.76 19.1101 183.033 11.3747 177.949 4.25305Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_231" d="M178.457 3.88306C183.794 10.8266 189.526 18.5573 194.63 25.679C189.293 18.7401 183.561 11.0047 178.457 3.88306Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_232" d="M178.985 3.5177C184.322 10.4566 190.054 18.192 195.134 25.3136C189.783 18.37 184.056 10.6393 178.985 3.5177Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_233" d="M161.757 25.5384C161.757 25.5384 163.693 20.9141 168.569 19.8037C170.543 19.3351 173.943 14.2657 175.646 14.6171C177.549 15.0153 175.456 19.7709 172.726 22.0807C172.726 22.0807 175.137 27.4125 172.626 29.7692C172.079 30.2799 168.459 31.6433 167.651 31.3435L161.757 25.5384Z" fill="#FFC4C0"/>
|
||||
<path id="Vector_234" d="M172.536 22.4134C173.549 24.4562 174.029 27.4173 172.816 29.3429C172.812 29.3484 172.809 29.3547 172.808 29.3614C172.806 29.368 172.806 29.3749 172.807 29.3816C172.808 29.3884 172.81 29.3948 172.814 29.4007C172.818 29.4065 172.822 29.4115 172.828 29.4155C172.834 29.4195 172.84 29.4224 172.847 29.424C172.854 29.4255 172.861 29.4258 172.867 29.4247C172.874 29.4236 172.881 29.4212 172.887 29.4176C172.893 29.414 172.898 29.4094 172.902 29.4038C174.491 27.5297 173.963 24.086 172.945 22.315C172.75 21.973 172.274 21.8886 172.536 22.4134Z" fill="#263238"/>
|
||||
<path id="Vector_235" d="M151.164 56.2832L145.076 45.507C145.076 45.507 137.522 56.8501 136.257 60.8045C134.83 65.2555 137.451 64.9978 141.466 62.9831C145.48 60.9684 151.164 56.2832 151.164 56.2832Z" fill="#407BFF"/>
|
||||
<path id="Vector_236" d="M144.5 54.8776C144.067 54.6855 143.706 54.9478 143.44 55.3461C143.112 55.8163 142.879 56.3445 142.755 56.9016C142.693 57.239 142.583 57.8387 142.916 58.087C143.249 58.3353 143.658 58.0448 143.868 57.7965C144.291 57.3373 145.452 55.3039 144.5 54.8776ZM142.935 48.8148C142.222 49.9205 141.408 51.2231 140.595 52.563C140.625 52.7188 140.686 52.867 140.775 52.999C140.864 53.1309 140.979 53.244 141.114 53.3314C141.428 53.5423 141.799 53.4017 142.103 53.0316C142.857 51.7592 143.15 50.2727 142.935 48.8148ZM146.698 49.5129C146.327 49.2787 145.404 49.7284 144.795 50.8576C144.139 52.0805 144.267 52.9941 144.629 53.1253C145.337 53.3877 146.079 52.474 146.508 51.6869C146.836 51.0684 147.145 49.8034 146.698 49.5129Z" fill="#263238"/>
|
||||
<path id="Vector_237" d="M148.971 56.9907C148.02 55.7209 145.642 51.5136 145.266 50.8201C145.057 50.4547 144.291 48.946 144.082 48.604C144.053 48.5571 144.134 48.5244 144.158 48.5712C144.562 49.2599 145.038 49.9112 145.447 50.6046C145.856 51.298 148.396 55.4867 149.024 56.9579C149.019 56.9906 148.99 57.0188 148.971 56.9907Z" fill="#263238"/>
|
||||
<path id="Vector_238" d="M140.091 64.253C140.248 64.0984 140.41 63.9485 140.567 63.7845C139.653 64.328 138.721 64.8293 137.765 65.2978C137.765 65.2978 137.727 65.2744 137.765 65.2603C138.759 64.581 139.758 63.925 140.785 63.3019C141.261 63.0067 141.989 62.5851 142.526 62.2383C142.588 62.1962 142.659 62.2899 142.598 62.3274C142.079 62.6553 141.594 63.1801 141.142 63.4565C141.037 63.5804 140.924 63.6977 140.804 63.8079C140.614 63.9906 140.414 64.1687 140.21 64.3327C139.796 64.6653 139.368 64.9839 138.949 65.3072C139.33 64.9746 139.715 64.6091 140.091 64.253Z" fill="#263238"/>
|
||||
<path id="Vector_239" d="M130.968 56.0676C127.253 55.6694 119.776 65.9067 117.882 70.4421C116.931 72.7425 117.459 80.1031 117.592 80.1874C117.725 80.2718 118.12 78.5616 118.311 77.9198C118.501 77.2779 119.961 72.4802 120.908 70.2312C122.563 66.2956 131.168 56.7892 131.306 56.6439C131.443 56.4987 131.31 56.1051 130.968 56.0676Z" fill="#455A64"/>
|
||||
<path id="Vector_240" d="M130.559 62.4067C131.9 62.7956 135.349 61.0012 136.975 59.127C137.085 59.0005 137.199 57.445 137.451 55.5615C137.594 54.4137 137.784 53.1439 138.041 52.0007L130.345 52.16C130.441 53.6837 130.347 55.2131 130.064 56.7141C130.029 56.8753 129.976 57.0323 129.907 57.1826C129.905 57.2076 129.905 57.2327 129.907 57.2576C129.517 58.1384 128.461 61.7976 130.559 62.4067Z" fill="#FFC4C0"/>
|
||||
<path id="Vector_241" d="M129.893 57.2016C129.879 57.2254 129.868 57.2505 129.859 57.2766C130.103 57.3633 130.352 57.4307 130.606 57.478C134.778 58.2886 136.909 53.5237 137.465 52.0338L130.33 52.179C130.427 53.7055 130.334 55.238 130.054 56.7425C130.01 56.8986 129.956 57.0519 129.893 57.2016Z" fill="#263238"/>
|
||||
<path id="Vector_242" d="M141.884 43.5252C141.856 46.252 138.212 53.0316 135.9 54.0765C132.547 55.5898 128.204 54.4841 127.191 50.7968C126.206 47.1985 131.115 38.4464 133.593 37.6124C137.218 36.3474 141.884 39.4724 141.884 43.5252Z" fill="#FFC4C0"/>
|
||||
<path id="Vector_243" d="M135.605 44.687C135.42 44.5324 135.282 44.3637 135.13 44.2185C134.934 44.0688 134.793 43.8597 134.73 43.6235C134.725 43.5461 134.746 43.4692 134.79 43.4047C134.834 43.3403 134.898 43.292 134.973 43.2674C135.128 43.2396 135.288 43.2532 135.436 43.3068C135.584 43.3603 135.715 43.4519 135.815 43.5719C136.056 43.7853 136.208 44.079 136.243 44.3965C136.246 44.4704 136.226 44.5435 136.187 44.6066C136.148 44.6696 136.091 44.7198 136.022 44.7509C135.954 44.7819 135.878 44.7924 135.804 44.7811C135.73 44.7697 135.661 44.737 135.605 44.687Z" fill="#263238"/>
|
||||
<path id="Vector_244" d="M130.968 42.4381C131.191 42.4973 131.419 42.5427 131.648 42.574C131.882 42.6536 132.137 42.6536 132.371 42.574C132.44 42.5362 132.494 42.4771 132.524 42.4059C132.555 42.3347 132.562 42.2555 132.542 42.1805C132.482 42.0369 132.383 41.912 132.257 41.8188C132.13 41.7257 131.981 41.6677 131.824 41.651C131.506 41.5624 131.166 41.5959 130.873 41.7447C130.805 41.7811 130.751 41.8369 130.716 41.9045C130.681 41.9721 130.668 42.0485 130.678 42.1236C130.689 42.1987 130.722 42.269 130.774 42.3251C130.825 42.3813 130.893 42.4207 130.968 42.4381Z" fill="#263238"/>
|
||||
<path id="Vector_245" d="M132.585 49.9161C132.424 50.0035 132.238 50.0333 132.057 50.0004C131.883 49.9112 131.73 49.7885 131.605 49.6396H131.572C131.596 49.7628 131.653 49.8774 131.736 49.972C131.82 50.0666 131.927 50.1378 132.048 50.1785C132.156 50.1996 132.268 50.1891 132.37 50.1483C132.472 50.1076 132.56 50.0382 132.623 49.9489C132.642 49.9395 132.609 49.9114 132.585 49.9161Z" fill="#263238"/>
|
||||
<path id="Vector_246" d="M132.785 48.2901C132.573 48.4168 132.337 48.4988 132.091 48.5311C131.846 48.5633 131.596 48.5451 131.358 48.4776C131.151 48.4187 130.953 48.3336 130.768 48.2245C130.731 48.2054 130.696 48.1835 130.663 48.1589L130.568 48.0934C130.546 48.0761 130.529 48.0523 130.522 48.0253C130.514 47.9983 130.515 47.9696 130.525 47.9434L130.554 47.8966V47.8544C130.72 47.4936 131.03 46.9689 131.03 46.9689C130.863 46.9689 130.04 46.9408 130.14 46.758C130.985 45.1693 131.991 43.6686 133.142 42.2789C133.145 42.2737 133.149 42.2692 133.155 42.2657C133.16 42.2621 133.166 42.2596 133.172 42.2583C133.178 42.257 133.184 42.2569 133.191 42.258C133.197 42.2592 133.203 42.2615 133.208 42.2649C133.213 42.2683 133.218 42.2726 133.222 42.2778C133.225 42.2829 133.228 42.2887 133.229 42.2948C133.23 42.3008 133.23 42.3071 133.229 42.3133C133.228 42.3194 133.226 42.3252 133.222 42.3305C132.452 43.8063 131.424 45.1416 130.625 46.6034C130.921 46.6105 131.214 46.6578 131.496 46.744C131.539 46.7815 130.887 47.7513 130.825 47.92C131.106 48.0922 131.419 48.2068 131.746 48.2567C132.073 48.3066 132.407 48.2909 132.728 48.2105C132.809 48.2105 132.847 48.2667 132.785 48.2901Z" fill="#263238"/>
|
||||
<path id="Vector_247" d="M131.077 48.1449C131.154 48.4916 131.317 48.8138 131.553 49.082C131.687 49.225 131.863 49.3233 132.057 49.3631C132.48 49.4474 132.661 49.1101 132.737 48.7868C132.775 48.6144 132.793 48.4383 132.79 48.262C132.221 48.4033 131.621 48.3623 131.077 48.1449Z" fill="#263238"/>
|
||||
<path id="Vector_248" d="M131.548 49.096C131.682 49.239 131.859 49.3373 132.052 49.3771C132.476 49.4614 132.656 49.1241 132.732 48.8008C132.53 48.7115 132.303 48.692 132.088 48.7456C131.873 48.7991 131.683 48.9226 131.548 49.096Z" fill="#FF9BBC"/>
|
||||
<path id="Vector_249" d="M134.968 45.8115C135.006 45.6765 135.006 45.5341 134.968 45.3992C134.942 45.3273 134.901 45.2615 134.848 45.2059C134.794 45.1503 134.73 45.106 134.659 45.0759C134.582 45.0444 134.499 45.0319 134.416 45.0392C134.333 45.0466 134.253 45.0736 134.183 45.118C134.066 45.1915 133.969 45.291 133.898 45.4085C133.855 45.4786 133.818 45.5523 133.788 45.6287C133.719 45.7849 133.688 45.9551 133.698 46.1254C133.738 46.0086 133.793 45.8969 133.86 45.7927C133.916 45.6966 133.982 45.6057 134.055 45.521C134.202 45.3476 134.388 45.2305 134.53 45.3055C134.673 45.3804 134.773 45.5585 134.754 45.774C134.732 46.0076 134.686 46.2384 134.616 46.4627C134.784 46.276 134.904 46.0528 134.968 45.8115Z" fill="#263238"/>
|
||||
<path id="Vector_250" d="M130.421 43.4735C130.51 43.3664 130.627 43.284 130.759 43.2346C130.832 43.2092 130.911 43.1995 130.989 43.2059C131.066 43.2124 131.142 43.2349 131.21 43.272C131.279 43.3122 131.337 43.3672 131.381 43.433C131.425 43.4988 131.453 43.5735 131.463 43.6516C131.476 43.7884 131.456 43.9264 131.405 44.0545C131.376 44.131 131.339 44.2047 131.296 44.2747C131.213 44.4245 131.096 44.5529 130.954 44.6495C131.079 44.451 131.168 44.2321 131.215 44.003C131.263 43.7827 131.244 43.5625 131.087 43.4876C130.998 43.4476 130.899 43.4379 130.804 43.46C130.709 43.4821 130.625 43.5346 130.564 43.6094C130.387 43.7707 130.227 43.9497 130.088 44.1435C130.143 43.8972 130.257 43.6674 130.421 43.4735Z" fill="#263238"/>
|
||||
<path id="Vector_251" d="M139.073 49.3722C138.764 48.9037 138.93 46.3596 138.93 46.3596C138.93 46.3596 134.83 43.3141 135.439 39.0646C135.439 39.0646 132.552 40.8825 130.468 40.8872C130.468 40.8872 131.724 36.6704 135.839 37.1671C135.839 37.1671 140.119 36.7501 142.407 41.2761C144.695 45.802 140.234 49.7845 140.234 49.7845L139.073 49.3722Z" fill="#263238"/>
|
||||
<path id="Vector_252" d="M135.777 38.3199C135.439 38.9657 135.285 39.6892 135.33 40.4142C135.342 41.1313 135.459 41.8428 135.677 42.5273C135.879 43.2342 136.201 43.9025 136.628 44.5045C137.156 45.1576 137.779 45.7293 138.478 46.2006C138.478 46.2006 138.478 46.2521 138.45 46.238C137.71 45.7687 137.037 45.2047 136.447 44.5607C135.974 43.9579 135.606 43.2818 135.358 42.5601C135.075 41.8444 134.947 41.0784 134.982 40.3112C135.055 39.5869 135.301 38.89 135.701 38.2777C135.724 38.2309 135.805 38.2731 135.777 38.3199Z" fill="#263238"/>
|
||||
<path id="Vector_253" d="M135.001 36.3052C135.905 35.9444 138.012 35.3025 139.71 35.5555C141.408 35.8085 143.516 37.0361 144.248 37.4296C144.847 37.7576 146.955 38.3667 148.429 39.5614C148.849 39.9642 149.151 40.4708 149.303 41.0281C149.455 41.5854 149.453 42.1728 149.295 42.7287C148.853 43.8438 146.569 42.7287 146.374 43.1504C146.246 43.4362 146.374 44.987 145.513 45.5445C144.652 46.1021 144.7 46.0131 144.21 46.2989C143.016 47.0345 142.783 41.3512 140.98 39.5005C139.178 37.6499 135.001 36.3052 135.001 36.3052Z" fill="#407BFF"/>
|
||||
<path id="Vector_254" opacity="0.1" d="M135.158 36.4177C135.158 36.4177 139.187 37.6546 140.98 39.5053C142.774 41.356 142.731 46.7675 143.929 46.0319C144.453 45.7086 144.719 45.212 144.957 44.3733C144.757 42.785 144.182 40.3112 142.893 38.5729C141.684 36.9425 139.563 36.0757 137.246 35.7618C136.533 35.9235 135.835 36.1429 135.158 36.4177Z" fill="black"/>
|
||||
<path id="Vector_255" d="M143.549 48.6508C142.702 46.7767 142.074 43.8859 140.576 41.6229C139.078 39.3599 134.526 37.9403 133.884 37.959C132.319 38.0059 131.957 38.7274 131.715 38.5822C131.472 38.4369 133.08 36.7409 133.527 36.4925C134.207 36.1797 134.95 36.0197 135.701 36.024C136.376 36.0568 140.543 36.5862 142.008 38.3666C143.473 40.1471 145.48 45.1462 145.052 46.3925C144.947 46.6924 144.534 46.8611 144.391 47.3015C144.205 47.859 144.063 48.5056 143.882 48.8945C143.73 49.2318 143.601 48.7633 143.549 48.6508Z" fill="#407BFF"/>
|
||||
<path id="Vector_256" d="M140.248 40.625C140.612 40.42 140.957 40.1849 141.28 39.9222C141.612 39.6619 141.912 39.3648 142.174 39.0367C142.174 39.0367 142.231 39.0367 142.217 39.0367C142.005 39.4176 141.732 39.7625 141.408 40.0581C141.078 40.3383 140.697 40.5559 140.286 40.7C140.234 40.714 140.205 40.6484 140.248 40.625Z" fill="#263238"/>
|
||||
<path id="Vector_257" d="M143.568 47.7981C143.619 47.6962 143.676 47.5976 143.739 47.5029C143.798 47.39 143.847 47.2725 143.887 47.1515C143.921 46.9142 143.984 46.6815 144.072 46.4581C144.172 46.2886 144.292 46.1313 144.429 45.9896C144.599 45.8345 144.708 45.6256 144.738 45.3992C144.738 45.3664 144.79 45.3664 144.786 45.3992C144.709 45.804 144.529 46.1828 144.262 46.5003C144.167 46.7418 144.094 46.991 144.044 47.2452C143.976 47.4793 143.834 47.686 143.639 47.8356C143.601 47.8637 143.554 47.8309 143.568 47.7981Z" fill="#263238"/>
|
||||
<path id="Vector_258" d="M143.107 46.2239C143.254 46.0599 143.406 45.9193 143.535 45.7554C143.658 45.5857 143.767 45.4071 143.863 45.2212C143.963 45.0432 144.044 44.8558 144.139 44.6731C144.234 44.4903 144.391 44.2514 144.491 44.0312C144.491 44.0031 144.543 44.0312 144.529 44.0593C144.429 44.2842 144.362 44.5278 144.267 44.7668C144.172 45.0057 144.077 45.1603 143.972 45.3477C143.867 45.5266 143.746 45.6959 143.611 45.8537C143.481 46.0162 143.319 46.1515 143.135 46.252C143.135 46.252 143.097 46.2333 143.107 46.2239Z" fill="#263238"/>
|
||||
<path id="Vector_259" d="M142.079 43.4315C142.233 43.3303 142.369 43.2035 142.479 43.0567C142.607 42.8974 142.736 42.7381 142.859 42.5882L143.216 42.1196C143.346 41.9671 143.441 41.7878 143.492 41.5949C143.494 41.5899 143.498 41.5856 143.502 41.5826C143.507 41.5796 143.512 41.578 143.518 41.578C143.524 41.578 143.529 41.5796 143.534 41.5826C143.538 41.5856 143.542 41.5899 143.544 41.5949C143.518 41.7904 143.455 41.9795 143.359 42.1524C143.258 42.3464 143.14 42.5314 143.007 42.7053C142.877 42.8788 142.736 43.0432 142.583 43.1972C142.46 43.344 142.294 43.4503 142.108 43.5018C142.065 43.4971 142.041 43.4503 142.079 43.4315Z" fill="#263238"/>
|
||||
<path id="Vector_260" d="M141.708 41.7071C141.851 41.5806 141.989 41.4494 142.117 41.3135C142.246 41.1777 142.369 41.0324 142.488 40.8872C142.607 40.7419 142.74 40.5826 142.854 40.4187C142.853 40.4151 142.852 40.4111 142.852 40.4072C142.852 40.4032 142.854 40.3994 142.856 40.396C142.858 40.3926 142.861 40.3899 142.864 40.3879C142.868 40.386 142.872 40.385 142.876 40.385C142.88 40.385 142.884 40.386 142.887 40.3879C142.891 40.3899 142.894 40.3926 142.896 40.396C142.898 40.3994 142.899 40.4032 142.9 40.4072C142.9 40.4111 142.899 40.4151 142.897 40.4187C142.816 40.5977 142.721 40.77 142.612 40.934C142.388 41.2496 142.126 41.5375 141.832 41.7914C141.696 41.9267 141.535 42.0334 141.356 42.1053C141.328 42.1053 141.299 42.1053 141.318 42.0585C141.436 41.9285 141.566 41.8108 141.708 41.7071Z" fill="#263238"/>
|
||||
<path id="Vector_261" d="M139.149 39.7768C139.299 39.6017 139.457 39.4343 139.625 39.2755C139.793 39.1093 139.971 38.9528 140.157 38.807C140.514 38.5239 140.901 38.2818 141.313 38.0854C141.337 38.0854 141.366 38.0855 141.347 38.1229C140.633 38.6852 139.92 39.2193 139.197 39.7909L139.149 39.7768Z" fill="#263238"/>
|
||||
<path id="Vector_262" d="M138.298 38.5119C138.449 38.3373 138.62 38.1801 138.807 38.0433C139.207 37.7822 139.634 37.5639 140.081 37.3921C140.11 37.3921 140.134 37.3921 140.11 37.4343C139.72 37.6732 139.33 37.9028 138.959 38.1605C138.773 38.2873 138.593 38.4234 138.421 38.5681C138.25 38.718 138.122 38.8961 137.946 39.0366H137.912C138.006 38.8395 138.137 38.6615 138.298 38.5119Z" fill="#263238"/>
|
||||
<path id="Vector_263" d="M137.094 37.9027C137.235 37.73 137.394 37.5729 137.57 37.4342C137.895 37.1791 138.262 36.9795 138.654 36.8439C138.683 36.8439 138.697 36.8767 138.654 36.8907C138.292 37.0909 137.949 37.3213 137.627 37.5795C137.465 37.7106 137.308 37.8512 137.151 37.9871C136.994 38.123 136.861 38.2963 136.676 38.4134C136.676 38.4134 136.647 38.4134 136.652 38.39C136.785 38.2153 136.933 38.0523 137.094 37.9027Z" fill="#263238"/>
|
||||
<path id="Vector_264" d="M136.233 37.1673C136.395 37.0517 136.554 36.9392 136.709 36.8299C136.866 36.7146 137.041 36.6245 137.227 36.5629C137.256 36.5629 137.265 36.591 137.227 36.605C136.918 36.8346 136.619 37.0736 136.314 37.2985C136.052 37.5339 135.815 37.7945 135.605 38.0762C135.605 38.0762 135.577 38.0762 135.582 38.0762C135.7 37.7152 135.928 37.3983 136.233 37.1673Z" fill="#263238"/>
|
||||
<path id="Vector_265" d="M135.144 36.9048C135.435 36.6526 135.772 36.4584 136.138 36.3332C136.162 36.3332 136.181 36.366 136.138 36.3754C135.806 36.5412 135.499 36.7543 135.23 37.0079C134.957 37.2607 134.713 37.5419 134.502 37.8465C134.502 37.8465 134.464 37.8465 134.473 37.8465C134.618 37.4846 134.848 37.1618 135.144 36.9048Z" fill="#263238"/>
|
||||
<path id="Vector_266" d="M133.684 37.5092C133.724 37.4347 133.768 37.3628 133.817 37.2937C133.915 37.154 134.028 37.0251 134.155 36.9095C134.415 36.6801 134.699 36.4776 135.001 36.3051C135.03 36.3051 135.054 36.3051 135.03 36.3473C134.739 36.5229 134.471 36.7321 134.231 36.9704C134.114 37.0876 134.006 37.2129 133.907 37.3452C133.857 37.4094 133.811 37.4767 133.769 37.5467C133.734 37.6182 133.691 37.6857 133.641 37.7482H133.603C133.613 37.6639 133.641 37.5826 133.684 37.5092Z" fill="#263238"/>
|
||||
<path id="Vector_267" d="M132.799 37.5607C132.889 37.453 132.98 37.3452 133.08 37.2468C133.177 37.1459 133.282 37.052 133.394 36.9657C133.503 36.8767 133.622 36.7924 133.731 36.6987C133.736 36.6949 133.743 36.6933 133.749 36.6942C133.755 36.6951 133.761 36.6984 133.765 36.7033C133.768 36.7083 133.77 36.7146 133.769 36.7207C133.768 36.7269 133.765 36.7324 133.76 36.7361C133.647 36.8272 133.54 36.9258 133.441 37.0313L133.161 37.3265L132.875 37.6217C132.78 37.72 132.699 37.8372 132.594 37.9262H132.561C132.627 37.7966 132.707 37.6742 132.799 37.5607Z" fill="#263238"/>
|
||||
<path id="Vector_268" d="M138.417 48.8805C138.417 48.8805 140.852 47.1188 141.718 48.0465C142.583 48.9742 140.2 51.9212 138.792 51.9587C138.613 51.9767 138.431 51.9586 138.258 51.9055C138.086 51.8525 137.926 51.7655 137.789 51.6499C137.651 51.5342 137.539 51.3924 137.459 51.2329C137.379 51.0734 137.333 50.8995 137.323 50.7218L138.417 48.8805Z" fill="#FFC4C0"/>
|
||||
<path id="Vector_269" d="M141.014 48.8756C141.037 48.8756 141.014 48.9084 141.014 48.9084C140.02 48.9647 139.282 49.6159 138.673 50.314C138.754 50.2443 138.848 50.1925 138.951 50.1624C139.053 50.1323 139.161 50.1246 139.267 50.1398C139.373 50.1549 139.475 50.1926 139.564 50.2502C139.654 50.3078 139.73 50.3839 139.786 50.4733C139.786 50.4968 139.786 50.5249 139.748 50.5108C139.609 50.4151 139.443 50.3638 139.273 50.3638C139.103 50.3638 138.937 50.4151 138.797 50.5108C138.562 50.6716 138.343 50.8553 138.145 51.059C138.079 51.1246 137.955 51.0356 138.012 50.9559C138.378 49.8361 139.777 48.5852 141.014 48.8756Z" fill="#263238"/>
|
||||
<path id="Vector_270" d="M137.465 57.3185C134.83 59.9376 138.231 72.6909 140.643 76.9686C141.87 79.1472 146.56 82.2817 146.712 82.2348C146.864 82.188 147.102 79.7376 146.712 79.1894C146.322 78.6412 144.239 76.6359 143.045 74.5041C140.952 70.7559 138.16 57.6371 138.145 57.431C138.131 57.2248 137.703 57.0796 137.465 57.3185Z" fill="#455A64"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 110 KiB |
BIN
lib/features/auth/assets/images/shrug.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
185
lib/features/auth/assets/images/signup_verification.svg
Normal file
|
|
@ -0,0 +1,185 @@
|
|||
<svg width="165" height="149" viewBox="0 0 165 149" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="ok/cuate">
|
||||
<g id="background-complete">
|
||||
<path id="Vector" d="M145.936 59.7924H107.149V113.471H145.936V59.7924Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_2" d="M147.815 57.8014H105.27V59.7924H147.815V57.8014Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_3" d="M161.197 57.8014H147.815V59.7924H161.197V57.8014Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_4" d="M159.079 59.7924H145.936V113.471H159.079V59.7924Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_5" d="M141.757 84.6352H111.325V67.4395H141.757V84.6352ZM111.418 84.542H141.664V67.5327H111.418V84.542Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_6" d="M128.219 72.4655H122.294V75.8696H128.219V72.4655Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_7" d="M130.019 75.6608H123.998V72.678H130.019V75.6608ZM124.091 75.5676H129.926V72.7675H124.091V75.5676Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_8" d="M141.757 106.246H111.325V89.0498H141.757V106.246ZM111.418 106.152H141.664V89.143H111.418V106.152Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_9" d="M128.219 94.0757H122.294V97.4798H128.219V94.0757Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_10" d="M130.019 97.271H123.998V94.2883H130.019V97.271ZM124.091 97.1778H129.926V94.3777H124.091V97.1778Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_11" d="M10.1154 1.30759H71.5905V81.6562H10.1154V1.30759ZM69.9686 2.92947H11.7373V80.0344H69.9686V2.92947Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_12" d="M42.2958 3.35071H40.674V80.8434H42.2958V3.35071Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_13" d="M8.64261 6.84064L73.0595 6.84064V4.58491L8.64261 4.58491V6.84064Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_14" d="M8.64261 9.37973L73.0595 9.37973V7.124L8.64261 7.124V9.37973Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_15" d="M8.64261 11.9188L73.0595 11.9188V9.66304L8.64261 9.66304V11.9188Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_16" d="M8.64261 14.4579L73.0595 14.4579V12.2022L8.64261 12.2022V14.4579Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_17" d="M8.64261 16.997L73.0595 16.997V14.7413L8.64261 14.7413V16.997Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_18" d="M8.64261 19.5361L73.0595 19.5361V17.2804L8.64261 17.2804V19.5361Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_19" d="M8.64261 22.0752L73.0595 22.0752V19.8195L8.64261 19.8195V22.0752Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_20" d="M8.64261 24.6142L73.0595 24.6142V22.3585L8.64261 22.3585V24.6142Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_21" d="M8.64261 27.1571L73.0595 27.1571V24.9013L8.64261 24.9013V27.1571Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_22" d="M13.8662 4.1225H13.4598V56.1534H13.8662V4.1225Z" fill="#263238"/>
|
||||
<path id="Vector_23" d="M12.9416 58.0437H14.3808L14.0192 55.9744H13.3033L12.9416 58.0437Z" fill="#263238"/>
|
||||
<path id="Vector_24" d="M12.4046 4.1225H11.9982V79.393H12.4046V4.1225Z" fill="#263238"/>
|
||||
<path id="Vector_25" d="M11.4837 80.9143H12.9229L12.5612 78.8487H11.8416L11.4837 80.9143Z" fill="#263238"/>
|
||||
<path id="Vector_26" d="M6.12967 5.71082L75.5763 5.71082V0.986835L6.12967 0.986835V5.71082Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_27" d="M131.612 33.0629C135.713 37.0598 136.384 43.2454 135.523 48.6666C135.5 48.7896 135.31 48.7561 135.31 48.6405C135.31 47.4063 135.347 46.1834 135.344 44.9642L135.28 44.8001C134.18 44.0766 133.27 43.0997 132.626 41.9516C131.943 40.6093 131.675 39.0956 131.153 37.6937C131.104 37.5594 131.25 37.6005 131.343 37.6676C133.826 39.502 134.62 41.4743 135.333 44.1066C135.318 42.729 135.173 41.3558 134.9 40.0053C134.363 37.5035 133.3 35.0241 131.503 33.171C131.436 33.1002 131.541 32.9995 131.612 33.0629Z" fill="#A6A6A6"/>
|
||||
<path id="Vector_28" d="M130.843 33.5291C130.143 33.5515 129.703 34.6738 129.154 35.0205C129.097 35.0675 129.03 35.1018 128.959 35.1212C128.887 35.1405 128.812 35.1445 128.739 35.1329C128.666 35.1213 128.596 35.0943 128.534 35.0537C128.472 35.0132 128.419 34.9599 128.379 34.8975C127.835 34.1518 128.58 33.2085 129.281 32.6828C128.778 32.8916 128.364 33.2532 127.823 33.3539C127.755 33.3763 127.682 33.3838 127.61 33.3758C127.538 33.3677 127.468 33.3444 127.406 33.3073C127.344 33.2702 127.291 33.2202 127.249 33.1607C127.208 33.1013 127.18 33.0336 127.167 32.9624C126.929 31.9296 128.226 31.471 129.113 31.4486C128.681 31.1466 127.447 30.3301 128.103 29.9311C128.759 29.5322 130.217 30.6768 130.691 31.0795C131.384 31.6425 132.212 32.4851 132.245 33.3651C132.286 34.3755 131.384 33.7454 130.843 33.5291Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_29" d="M131.049 33.7006C130.15 33.2904 128.439 33.8795 128.278 33.5402C127.98 32.8467 129.36 32.3732 130.101 32.28C129.415 32.0936 128.103 31.799 128.144 31.1391C128.193 30.33 130.157 31.0235 131.153 31.7879C132.409 32.7498 132.398 33.6782 132.193 33.8609C131.906 34.1182 131.198 33.7677 131.049 33.7006Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_30" d="M140.914 32.664C136.682 36.5043 135.761 42.6638 136.414 48.1111C136.414 48.2341 136.623 48.208 136.626 48.0924C136.675 46.8583 136.686 45.6353 136.734 44.4199C136.761 44.3639 136.779 44.3117 136.805 44.2558C137.933 43.5755 138.88 42.6328 139.564 41.5079C140.31 40.1955 140.623 38.6929 141.197 37.3134C141.25 37.1792 141.108 37.2127 141.011 37.2798C138.457 39.0173 137.592 40.9561 136.779 43.5623C136.846 42.1799 137.042 40.8068 137.365 39.461C137.998 36.9816 139.154 34.5469 141.019 32.7497C141.021 32.7362 141.019 32.7224 141.014 32.7097C141.01 32.6969 141.001 32.6856 140.991 32.6769C140.98 32.6683 140.968 32.6625 140.954 32.6602C140.941 32.658 140.927 32.6593 140.914 32.664Z" fill="#A6A6A6"/>
|
||||
<path id="Vector_31" d="M141.664 33.1599C142.364 33.2121 142.763 34.3492 143.297 34.6997C143.353 34.7483 143.418 34.7847 143.489 34.8064C143.56 34.8282 143.635 34.8349 143.709 34.8261C143.782 34.8174 143.853 34.7933 143.917 34.7555C143.981 34.7177 144.036 34.6669 144.08 34.6065C144.65 33.8608 143.942 32.9063 143.259 32.3694C143.755 32.5931 144.154 32.9734 144.691 33.1151C144.759 33.1396 144.832 33.1492 144.905 33.1432C144.977 33.1373 145.048 33.1159 145.111 33.0806C145.175 33.0453 145.23 32.9969 145.273 32.9386C145.316 32.8802 145.347 32.8133 145.362 32.7423C145.638 31.7169 144.363 31.2099 143.476 31.1539C143.916 30.8706 145.183 30.1062 144.542 29.6626C143.901 29.2189 142.402 30.3411 141.932 30.7065C141.216 31.2434 140.355 32.0562 140.291 32.9436C140.195 33.954 141.115 33.3724 141.664 33.1599Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_32" d="M141.455 33.324C142.368 32.9511 144.065 33.6036 144.229 33.2718C144.553 32.5895 143.192 32.0638 142.454 31.9444C143.144 31.7841 144.471 31.538 144.456 30.8744C144.437 30.0653 142.446 30.6842 141.421 31.4113C140.131 32.3247 140.105 33.2494 140.303 33.4433C140.579 33.708 141.306 33.3725 141.455 33.324Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_33" d="M136.585 42.8092C136.298 44.8637 135.858 46.8939 135.269 48.8829C135.265 48.9023 135.258 48.9206 135.247 48.937C135.236 48.9534 135.221 48.9674 135.205 48.9783C135.188 48.9892 135.17 48.9968 135.151 49.0006C135.131 49.0043 135.111 49.0043 135.092 49.0004C135.073 48.9964 135.054 48.9888 135.038 48.9777C135.022 48.9667 135.008 48.9526 134.997 48.9361C134.986 48.9197 134.978 48.9013 134.974 48.8819C134.971 48.8625 134.971 48.8426 134.975 48.8233C135.254 46.959 135.761 45.1134 136.037 43.2305C136.342 41.3378 136.452 39.4188 136.365 37.5036C136.186 34.3493 135.329 30.9937 133.271 28.5254C133.226 28.4695 133.323 28.3875 133.368 28.4397C137.488 33.2457 136.831 39.1329 136.828 39.6624C137.413 37.6714 138.013 35.3933 140.221 33.3687C140.314 33.2792 140.388 33.324 140.373 33.4694C139.978 37.1606 138.953 39.0845 136.813 41.0568C136.753 41.6534 136.679 42.235 136.585 42.8092Z" fill="#A6A6A6"/>
|
||||
<path id="Vector_34" d="M133.233 29.0921C132.488 28.7603 131.47 29.7036 130.735 29.7707C130.652 29.7908 130.565 29.793 130.481 29.7772C130.397 29.7613 130.317 29.7279 130.246 29.6789C130.176 29.6299 130.116 29.5666 130.072 29.4931C130.028 29.4196 130 29.3376 129.99 29.2524C129.807 28.1936 131.052 27.6007 132.04 27.4106C131.418 27.3696 130.806 27.5373 130.176 27.3733C130.093 27.3617 130.013 27.3323 129.942 27.287C129.871 27.2417 129.81 27.1815 129.765 27.1108C129.719 27.04 129.689 26.9601 129.677 26.8768C129.665 26.7934 129.671 26.7084 129.695 26.6276C129.967 25.4382 131.541 25.6134 132.477 26.0385C132.178 25.509 131.306 24.0438 132.189 23.958C133.073 23.8722 133.998 25.8222 134.296 26.4486C134.732 27.3845 135.168 28.6857 134.758 29.6029C134.3 30.6954 133.685 29.588 133.233 29.0921Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_35" d="M133.356 29.3717C132.629 28.4955 130.545 28.2532 130.564 27.8095C130.601 26.9445 132.271 27.1458 133.092 27.4367C132.473 26.896 131.261 25.9453 131.634 25.263C132.093 24.4502 133.782 26.1615 134.43 27.4516C135.247 29.0809 134.773 30.0391 134.464 30.1286C134.039 30.2367 133.476 29.5171 133.356 29.3717Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_36" d="M139.296 43.9203L141.112 57.8014H130.057C130.284 56.571 132.342 43.9016 132.342 43.9016L139.296 43.9203Z" fill="#EBEBEB"/>
|
||||
<g id="xsrjP0">
|
||||
<path id="Vector_37" fill-rule="evenodd" clip-rule="evenodd" d="M101.653 48.8903C101.31 48.6219 101.027 48.2565 100.535 48.2528C100.345 48.2528 100.4 48.0999 100.412 47.9955L100.982 42.4736C100.982 42.3394 101.016 42.2313 101.172 42.1716C102.664 41.6123 103.409 40.2813 104.39 39.1888C104.894 38.6428 105.283 38.0009 105.533 37.3014C105.784 36.6019 105.891 35.8591 105.848 35.1173C105.848 34.6997 106.045 34.532 106.426 34.4872C106.62 34.4413 106.824 34.4593 107.007 34.5385C107.191 34.6178 107.344 34.7541 107.444 34.9272C107.769 35.7209 107.956 36.5646 107.995 37.4215C107.995 38.1299 107.682 38.7824 107.522 39.4647C107.406 39.9644 107.235 40.4528 107.086 40.9561C107.197 41.0605 107.347 41.027 107.481 41.0419C109.034 41.2084 110.589 41.3712 112.145 41.5303C112.801 41.6012 113.1 41.8211 113.148 42.276C113.17 42.5495 113.101 42.8225 112.953 43.0535C112.805 43.2844 112.585 43.4605 112.328 43.5549C112.205 43.5996 112.003 43.525 111.955 43.7077C111.907 43.8904 112.138 43.8942 112.238 43.9799C112.76 44.4273 112.574 45.2103 111.866 45.6018C111.698 45.6987 111.399 45.6018 111.37 45.8442C111.34 46.0865 111.631 46.053 111.742 46.217C112.149 46.7129 111.836 47.5257 111.12 47.7941C111.023 47.8127 110.929 47.8389 110.836 47.8724C110.754 47.9135 110.672 47.9657 110.81 48.0887C111.433 48.6368 111.351 49.3079 110.62 49.7255L110.404 49.8485C110.142 49.972 109.847 50.0048 109.565 49.9418C107.127 49.6932 104.688 49.4446 102.25 49.1961C102.018 49.1765 101.804 49.0666 101.653 48.8903Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_38" fill-rule="evenodd" clip-rule="evenodd" d="M95.0576 44.9307C95.1806 43.7637 95.3074 42.593 95.4304 41.4222C95.4528 41.1836 95.4901 41.0718 95.7809 41.1053C97.2101 41.2694 98.6369 41.4185 100.061 41.5527C100.341 41.5788 100.374 41.6795 100.348 41.9256C100.1 44.2795 99.8511 46.6334 99.6026 48.9873C99.5727 49.2893 99.4833 49.3602 99.185 49.3266C97.8005 49.1675 96.4172 49.0246 95.0352 48.8978C94.6884 48.868 94.6623 48.7412 94.6884 48.4392C94.8264 47.261 94.9345 46.0903 95.0576 44.9307Z" fill="#EBEBEB"/>
|
||||
</g>
|
||||
<g id="xsrjp0">
|
||||
<path id="Vector_39" fill-rule="evenodd" clip-rule="evenodd" d="M92.1531 33.3276C91.8436 33.2083 91.5565 33.007 91.1986 33.1114C91.0606 33.1524 91.0681 33.0293 91.0532 32.9548L90.2478 28.8124C90.2478 28.7118 90.218 28.6297 90.3187 28.5514C91.2694 27.8057 91.523 26.6872 91.9965 25.6619C92.2422 25.1538 92.383 24.6014 92.4106 24.0377C92.4381 23.4739 92.3518 22.9105 92.1568 22.3808C92.1301 22.3247 92.1163 22.2633 92.1163 22.2011C92.1164 22.139 92.1303 22.0776 92.1571 22.0215C92.1839 21.9654 92.2229 21.916 92.2712 21.8769C92.3195 21.8378 92.376 21.81 92.4364 21.7954C92.5679 21.7195 92.7203 21.6876 92.8712 21.7044C93.0221 21.7211 93.1637 21.7857 93.2753 21.8887C93.6852 22.3954 94.0067 22.9677 94.2261 23.5814C94.3238 24.1048 94.3601 24.6379 94.3342 25.1697C94.3603 25.5426 94.3342 25.9527 94.3342 26.3479C94.4386 26.4001 94.5393 26.3479 94.64 26.3255L98.141 25.6507C98.6294 25.5538 98.8867 25.6507 99.0284 25.9639C99.1082 26.1582 99.1211 26.3736 99.0651 26.5761C99.009 26.7786 98.8873 26.9567 98.7189 27.0824C98.6406 27.1421 98.4728 27.1346 98.4878 27.2726C98.5027 27.4105 98.6667 27.3695 98.7562 27.4105C99.2335 27.6156 99.2707 28.2308 98.8494 28.6708C98.7488 28.7752 98.5139 28.7789 98.54 28.9541C98.5661 29.1294 98.7786 29.0511 98.8942 29.1256C99.3006 29.3978 99.267 30.0615 98.7935 30.412C98.727 30.4465 98.6634 30.4864 98.6033 30.5313C98.5511 30.5797 98.5027 30.6357 98.6294 30.6953C99.2074 30.9563 99.2931 31.441 98.8531 31.9257L98.7227 32.0637C98.5608 32.2103 98.355 32.2995 98.1373 32.3172C96.3054 32.6751 94.4759 33.0293 92.649 33.3798C92.567 33.4043 92.4809 33.4122 92.3958 33.4033C92.3107 33.3943 92.2282 33.3686 92.1531 33.3276Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_40" fill-rule="evenodd" clip-rule="evenodd" d="M86.482 31.8997C86.3105 31.0235 86.1465 30.1436 85.9675 29.2674C85.9339 29.0922 85.9339 28.9989 86.1539 28.9579C87.2277 28.7641 88.2941 28.559 89.3642 28.339C89.5729 28.298 89.6177 28.3614 89.655 28.5478C89.9905 30.3151 90.3323 32.0811 90.6803 33.846C90.725 34.0697 90.6803 34.1442 90.4491 34.1853C89.4089 34.3754 88.3724 34.5581 87.3359 34.7893C87.0786 34.8415 87.0264 34.7594 86.9854 34.532C86.8288 33.6521 86.6498 32.7759 86.482 31.8997Z" fill="#EBEBEB"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Shadow">
|
||||
<path id="Vector_41" d="M82.5 149C128.064 149 165 144.506 165 138.963C165 133.42 128.064 128.926 82.5 128.926C36.9365 128.926 0 133.42 0 138.963C0 144.506 36.9365 149 82.5 149Z" fill="#EBEBEB"/>
|
||||
</g>
|
||||
<g id="Floor">
|
||||
<path id="Vector_42" d="M6.12966 113.535L25.2232 113.445L44.3167 113.412L82.5001 113.348L120.687 113.412L139.777 113.445L158.87 113.535L139.777 113.628L120.687 113.658L82.5001 113.721L44.3167 113.658L25.2232 113.624L6.12966 113.535Z" fill="#263238"/>
|
||||
</g>
|
||||
<g id="Plant">
|
||||
<path id="Vector_43" d="M22.7288 81.6526C25.4059 76.153 30.0888 73.3269 35.3646 74.8891C40.6404 76.4513 41.4607 83.8076 37.5197 85.6681C33.5787 87.5286 29.6414 82.1 27.5609 80.9852C25.4805 79.8703 22.7288 81.6526 22.7288 81.6526Z" fill="#407BFF"/>
|
||||
<path id="Vector_44" d="M20.1375 96.2943C20.1375 95.6306 20.1785 94.9669 20.2009 94.307C20.2494 92.9834 20.2941 91.656 20.3426 90.3324C20.4321 87.9126 20.6931 85.5339 21.696 83.3043C22.5817 81.2812 24.0614 79.5752 25.939 78.4125C26.637 77.9906 27.3898 77.6669 28.1761 77.4505C28.8887 76.7301 29.7955 76.2326 30.786 76.0188C32.0136 75.768 33.2759 75.7365 34.5145 75.9256C34.5593 75.9256 34.5593 76.0002 34.5145 75.9964C33.3389 75.8439 32.1445 75.9288 31.0023 76.2462C30.5125 76.38 30.0378 76.5637 29.5855 76.7943C29.3017 76.9482 29.0289 77.1213 28.7689 77.3126C29.8342 77.0945 30.9336 77.1059 31.9941 77.3461C32.3762 77.4405 32.7503 77.5652 33.1126 77.719C33.4011 77.6535 33.6972 77.6284 33.9925 77.6444C34.3778 77.6561 34.7605 77.7112 35.1334 77.8085C35.898 78.023 36.6294 78.3417 37.3071 78.7555C37.3444 78.7779 37.3071 78.8375 37.2699 78.8152C36.6033 78.4516 35.8893 78.1831 35.1484 78.0173C34.7902 77.9357 34.4262 77.8821 34.0596 77.8569C33.8585 77.8458 33.6568 77.8458 33.4556 77.8569C34.9592 78.5513 36.1679 79.7561 36.8672 81.2573C36.8672 81.2983 36.8224 81.3319 36.8075 81.2909C36.391 80.4201 35.7834 79.6544 35.0301 79.0509C34.2768 78.4473 33.3971 78.0214 32.4564 77.8047C32.3408 77.7749 32.2215 77.76 32.1059 77.7376C32.1336 77.9143 32.1522 78.0923 32.1618 78.2708C32.1954 78.5355 32.2401 78.804 32.2961 79.0687C32.4034 79.6144 32.5467 80.1525 32.7248 80.6794C32.9032 81.2122 33.1162 81.7329 33.3624 82.2379C33.6002 82.7689 33.9006 83.2696 34.2573 83.7293C34.2871 83.7703 34.2274 83.8151 34.2013 83.7703C33.8844 83.2744 33.5153 82.8158 33.2245 82.3013C32.9469 81.8083 32.7076 81.2948 32.5086 80.7652C32.3057 80.2301 32.1486 79.6788 32.0388 79.1172C31.9792 78.8189 31.9344 78.5206 31.9009 78.2223C31.8636 78.0422 31.8523 77.8576 31.8673 77.6743C31.25 77.5826 30.6235 77.5701 30.0031 77.637C30.238 78.9494 30.4878 80.3177 31.226 81.4587C31.2484 81.4959 31.185 81.5295 31.1626 81.4922C30.8188 80.892 30.5161 80.2692 30.2566 79.628C30.014 79.0015 29.8621 78.3436 29.8055 77.6743C28.7157 77.82 27.664 78.1731 26.7071 78.7145C24.904 79.763 23.464 81.3369 22.5797 83.2259C21.6508 85.2611 21.1314 87.4592 21.051 89.6949C20.8758 92.5061 20.8385 95.336 20.5588 98.1361C20.5588 98.3226 20.2494 98.3822 20.2158 98.1771C20.1301 97.5534 20.1039 96.923 20.1375 96.2943Z" fill="#263238"/>
|
||||
<path id="Vector_45" d="M26.3231 77.9688C26.5008 77.757 26.705 77.569 26.9308 77.4095C27.1508 77.2268 27.3745 77.0367 27.6094 76.8913C28.0741 76.574 28.5881 76.3359 29.1306 76.1866C29.1754 76.1866 29.1903 76.2463 29.1306 76.2537C28.5874 76.3968 28.0797 76.6507 27.6392 76.9994C27.4155 77.1635 27.203 77.3387 26.9942 77.5214C26.8079 77.7164 26.6017 77.8913 26.379 78.0434C26.3692 78.0471 26.3584 78.0476 26.3483 78.0447C26.3381 78.0418 26.3292 78.0356 26.3229 78.0272C26.3166 78.0188 26.3132 78.0085 26.3132 77.998C26.3133 77.9874 26.3167 77.9772 26.3231 77.9688Z" fill="#263238"/>
|
||||
<path id="Vector_46" d="M34.865 79.9784C35.3074 80.4941 35.7171 81.0371 36.0916 81.604C36.4571 82.174 36.7632 82.7799 37.0051 83.4123C37.0051 83.431 36.9827 83.4421 36.9716 83.4123C36.3591 82.2155 35.6364 81.0783 34.8128 80.0157C34.7755 79.9784 34.8351 79.9299 34.865 79.9784Z" fill="#263238"/>
|
||||
<path id="Vector_47" d="M29.1082 79.4192C29.1639 79.7631 29.2655 80.0979 29.4103 80.4147C29.556 80.7221 29.7255 81.0175 29.9173 81.2984C29.9173 81.2984 29.9173 81.3357 29.8875 81.3208C29.4296 80.7947 29.1343 80.1471 29.0374 79.4565C29.0337 79.3931 29.1008 79.3745 29.1082 79.4192Z" fill="#263238"/>
|
||||
<path id="Vector_48" d="M20.5103 81.7868C20.5103 81.7868 16.7222 77.0255 9.42184 78.7145C2.46823 80.3177 -0.73826 93.0654 6.28619 94.5903C13.3106 96.1153 12.0728 84.3184 14.6305 82.3162C16.5059 80.8472 19.1979 81.1641 20.5103 81.7868Z" fill="#407BFF"/>
|
||||
<path id="Vector_49" d="M3.76209 85.6756C4.23298 85.2576 4.73122 84.8715 5.25348 84.5198C5.75332 84.1741 6.2993 83.9005 6.87537 83.707C7.6784 82.4765 8.76201 81.4543 10.0371 80.7242H9.82086C9.44801 80.7242 9.04534 80.7242 8.65758 80.7242C7.87809 80.7757 7.11412 80.9664 6.40185 81.2872C6.39344 81.2912 6.38381 81.2916 6.37507 81.2885C6.36633 81.2853 6.3592 81.2788 6.35524 81.2704C6.35129 81.262 6.35083 81.2524 6.35398 81.2436C6.35713 81.2349 6.36362 81.2278 6.37202 81.2238C7.08961 80.9136 7.84012 80.686 8.60911 80.5452C8.98559 80.4777 9.36754 80.4452 9.75002 80.4483C9.95509 80.4483 10.1639 80.4483 10.3652 80.4818H10.4845C11.1546 80.1433 11.8615 79.8831 12.5911 79.7063C12.524 79.6877 12.4569 79.6653 12.3861 79.6504C12.029 79.572 11.6681 79.5123 11.3048 79.4714C10.5768 79.3894 9.84131 79.4006 9.11618 79.505C9.07144 79.505 9.06025 79.4416 9.11618 79.4379C9.85081 79.3485 10.5915 79.3185 11.3309 79.3484C11.9501 79.3651 12.566 79.4451 13.169 79.587C13.6097 79.5042 14.0558 79.4531 14.5038 79.4341C17.0541 79.326 19.8318 80.2805 21.4015 82.3759C22.9712 84.4713 23.2657 87.2714 23.5566 89.803C23.9849 93.3296 24.0786 96.8887 23.8362 100.433C23.8362 100.642 23.5267 100.604 23.5193 100.403C23.4261 97.3979 23.3179 94.3928 23.0309 91.3988C22.8966 90.0118 22.7512 88.6174 22.5201 87.2453C22.3536 86.0621 22.0131 84.91 21.5096 83.8263C20.9678 82.7166 20.1088 81.7927 19.0414 81.1716C17.9707 80.5588 16.7776 80.1908 15.5478 80.0941C14.4444 80.0038 13.3338 80.1086 12.2667 80.4035C12.2985 80.6174 12.2985 80.8347 12.2667 81.0486C12.2432 81.3209 12.1894 81.5898 12.1064 81.8502C12.0247 82.0945 11.9224 82.3315 11.8007 82.5586C11.6627 82.8084 11.4949 83.0321 11.3421 83.2745C11.3197 83.3118 11.2563 83.2745 11.2862 83.2335C11.5874 82.8045 11.7817 82.3098 11.8529 81.7905C11.8976 81.544 11.9275 81.295 11.9424 81.0448C11.9424 80.8584 11.9424 80.672 11.9424 80.4818C10.7821 80.8381 9.69933 81.4099 8.75079 82.1671C8.57182 82.3088 8.40031 82.4579 8.23253 82.6145C8.47152 82.8341 8.67972 83.0849 8.85146 83.3602C9.10201 83.7272 9.32032 84.1152 9.50394 84.5198C9.84196 85.3333 10.069 86.1886 10.1788 87.0626C10.1788 87.1073 10.1154 87.1223 10.1117 87.0626C9.97698 86.2157 9.69428 85.3992 9.2765 84.6503C9.08612 84.2793 8.87061 83.9218 8.63148 83.5802C8.50844 83.405 8.37794 83.2297 8.25863 83.0619C8.18406 82.9687 8.10576 82.8793 8.03865 82.7786C7.18002 83.6225 6.47811 84.6123 5.96562 85.7017C6.30995 86.0684 6.59771 86.4843 6.81944 86.9358C7.08259 87.4061 7.31186 87.8945 7.50548 88.3974C7.85892 89.3723 8.15032 90.3685 8.37794 91.3802C8.37794 91.4249 8.31829 91.4361 8.31083 91.3802C8.08826 90.3612 7.73879 89.3742 7.27058 88.4421C7.05433 87.9835 6.82317 87.5324 6.58082 87.085C6.32446 86.6741 6.09529 86.2469 5.89478 85.8061C5.40545 86.8732 5.12209 88.0231 5.0596 89.1953C5.0596 89.24 4.98503 89.2326 4.98876 89.1953C5.12336 87.3587 5.68513 85.5789 6.62929 83.9978C6.18187 84.188 5.73445 84.3706 5.30568 84.6055C4.75614 84.8962 4.2451 85.2544 3.78446 85.6719C3.77327 85.7576 3.72853 85.7054 3.76209 85.6756Z" fill="#263238"/>
|
||||
<path id="Vector_50" d="M9.12354 85.9441C9.34352 86.6674 9.61942 87.3683 9.81703 88.0991C10.0196 88.7975 10.1287 89.5197 10.1414 90.2467C10.1414 90.2691 10.1079 90.2691 10.1079 90.2467C9.90546 88.7869 9.55056 87.3523 9.04897 85.9664C9.0475 85.9615 9.04701 85.9564 9.04752 85.9513C9.04804 85.9462 9.04955 85.9413 9.05198 85.9368C9.0544 85.9323 9.05769 85.9283 9.06165 85.9251C9.06561 85.9219 9.07017 85.9194 9.07507 85.918C9.07996 85.9165 9.0851 85.916 9.09019 85.9165C9.09527 85.917 9.10021 85.9186 9.10471 85.921C9.10921 85.9234 9.11319 85.9267 9.11642 85.9307C9.11965 85.9346 9.12207 85.9392 9.12354 85.9441Z" fill="#263238"/>
|
||||
<path id="Vector_51" d="M4.49279 84.1544C4.77852 83.8766 5.10397 83.6429 5.45846 83.4609C5.81951 83.2979 6.19369 83.1657 6.57701 83.0657C6.62175 83.0657 6.63293 83.1253 6.57701 83.1328C6.19874 83.2328 5.83522 83.3819 5.49575 83.5765C5.15145 83.7572 4.82007 83.9615 4.50397 84.1879C4.50165 84.1914 4.49839 84.1942 4.49457 84.1959C4.49076 84.1976 4.48654 84.1982 4.48239 84.1977C4.47825 84.1971 4.47434 84.1954 4.47112 84.1927C4.46789 84.19 4.46548 84.1865 4.46416 84.1826C4.46284 84.1786 4.46265 84.1743 4.46363 84.1703C4.46461 84.1662 4.46671 84.1625 4.46969 84.1595C4.47267 84.1566 4.47642 84.1546 4.4805 84.1537C4.48458 84.1527 4.48884 84.153 4.49279 84.1544Z" fill="#263238"/>
|
||||
<path id="Vector_52" d="M16.9124 75.4297C16.9124 75.4297 16.2114 66.8542 9.85065 64.0989C4.5413 61.7835 1.49886 67.7528 5.25343 71.4067C8.30333 74.3596 13.1503 73.0286 16.9124 75.4297Z" fill="#407BFF"/>
|
||||
<path id="Vector_53" d="M6.43905 65.7581C7.40671 66.1481 8.35042 66.5951 9.26524 67.0966C10.0277 67.5351 10.7612 68.0221 11.4613 68.5545C11.3569 68.3382 11.2637 68.1108 11.1593 67.8983C10.9915 67.5702 10.8163 67.2458 10.6187 66.9326C10.226 66.2857 9.75518 65.6896 9.21677 65.1578C9.18321 65.128 9.21677 65.0795 9.26897 65.1094C9.81175 65.6411 10.3105 66.2159 10.7604 66.8282C10.9813 67.1374 11.183 67.4599 11.3644 67.7939C11.5445 68.1066 11.68 68.4429 11.767 68.7931L11.8379 68.8416C12.9491 69.7305 13.9672 70.7298 14.8766 71.8244C14.8766 71.7386 14.8393 71.6566 14.8169 71.5783C14.6976 71.1607 14.5709 70.7468 14.4441 70.333C14.1697 69.4558 13.7837 68.6175 13.2957 67.8386C13.2696 67.8013 13.333 67.7678 13.3554 67.8051C13.8542 68.5853 14.2989 69.3987 14.6864 70.2398C14.8624 70.6503 15.0094 71.0726 15.1264 71.5037C15.2179 71.7835 15.2864 72.0703 15.3315 72.3613C15.6111 72.7155 15.8833 73.0697 16.1405 73.4351C18.8698 77.3201 20.2419 82.0106 20.57 86.7271C20.6644 88.1294 20.6881 89.5356 20.6408 90.9403C20.6289 92.3585 20.5042 93.7736 20.268 95.1721C20.268 95.2578 20.1114 95.2317 20.1151 95.146C20.1449 93.9119 20.2717 92.6777 20.2978 91.4436C20.3239 90.2095 20.2978 88.9642 20.1785 87.7151C19.9764 85.2467 19.5115 82.8069 18.7915 80.4371C18.0512 78.0101 16.961 75.704 15.5552 73.5917C15.2867 73.5395 15.022 73.4686 14.761 73.4015C14.4404 73.3195 14.1234 73.2374 13.8065 73.148C13.195 72.9876 12.6005 72.7678 12.0318 72.4918C11.9908 72.4694 12.0318 72.4097 12.0691 72.4321C12.6289 72.7384 13.2365 72.9476 13.8662 73.051C14.3621 73.1517 14.8803 73.2151 15.3799 73.3307C14.9176 72.6595 14.4255 72.0071 13.8886 71.3844C12.6765 71.495 11.4544 71.4043 10.2719 71.1159C9.63832 70.9651 9.01552 70.772 8.40769 70.538C7.77012 70.292 7.1661 69.9788 6.54345 69.714C6.49498 69.6954 6.54345 69.6246 6.56955 69.6507C7.70866 70.2721 8.95223 70.6791 10.2384 70.8512C11.3742 71.0326 12.5221 71.1285 13.6723 71.1383C13.2174 70.6201 12.7514 70.113 12.2555 69.6469C10.5926 68.0474 8.60902 66.5858 6.40922 65.8103C6.36821 65.8103 6.39058 65.7395 6.43905 65.7581Z" fill="#263238"/>
|
||||
<path id="Vector_54" d="M11.6068 65.7841C11.9001 66.1459 12.1668 66.5284 12.4047 66.9288C12.6421 67.3467 12.8298 67.7909 12.9639 68.2524C12.9639 68.2524 12.9453 68.2785 12.9416 68.2524C12.729 67.8348 12.5687 67.3986 12.3338 66.981C12.1285 66.5695 11.8784 66.1818 11.5881 65.8252C11.5285 65.8102 11.5769 65.7469 11.6068 65.7841Z" fill="#263238"/>
|
||||
<path id="Vector_55" d="M5.69339 68.6327C6.10742 68.8552 6.54353 69.0339 6.99463 69.1659C7.43147 69.3083 7.87583 69.4266 8.3257 69.5201C8.3257 69.5201 8.3257 69.5611 8.3257 69.5573C7.85742 69.5074 7.39605 69.4061 6.94989 69.2553C6.50964 69.0907 6.08004 68.899 5.66356 68.6812C5.65757 68.6812 5.65168 68.6796 5.6465 68.6766C5.64132 68.6736 5.63704 68.6693 5.6341 68.6641C5.63116 68.6589 5.62967 68.6529 5.62978 68.647C5.6299 68.641 5.63161 68.6351 5.63475 68.63C5.63789 68.6249 5.64234 68.6207 5.64763 68.6179C5.65293 68.6151 5.65888 68.6138 5.66486 68.6141C5.67084 68.6144 5.67664 68.6162 5.68166 68.6195C5.68668 68.6228 5.69073 68.6273 5.69339 68.6327Z" fill="#263238"/>
|
||||
<path id="Vector_56" d="M21.8563 73.8899C21.8936 74.2628 22.8183 70.7841 28.1947 67.6969C33.0791 64.8931 38.9067 57.6077 34.1193 53.003C30.2529 49.2857 20.0704 57.3877 21.8563 73.8899Z" fill="#407BFF"/>
|
||||
<path id="Vector_57" d="M18.154 93.8148C18.2314 90.1973 18.5165 86.5871 19.0078 83.0022C19.4315 79.7018 20.1924 76.4535 21.2784 73.3082C21.6774 72.1897 22.136 71.0711 22.6319 69.9526C22.6038 69.5264 22.6113 69.0986 22.6543 68.6737C22.6804 68.1256 22.7288 67.5813 22.781 67.0332C22.8332 66.4851 22.8854 65.9407 22.9525 65.3964C23.0196 64.852 23.1315 64.3114 23.1539 63.767C23.1539 63.7186 23.2359 63.726 23.221 63.767C23.1147 64.3382 23.0511 64.9165 23.0308 65.4971C22.9898 66.0265 22.96 66.5522 22.9413 67.0817C22.9227 67.6111 22.9413 68.1405 22.9413 68.67C22.9413 68.8601 22.9413 69.0652 22.9413 69.2665C23.4484 68.2002 23.989 67.145 24.5744 66.1234C24.2016 63.8864 24.6863 61.5598 25.1412 59.3824C25.1412 59.3376 25.2157 59.3563 25.2083 59.3824C24.9842 60.5211 24.8656 61.6781 24.8541 62.8387C24.8317 63.7559 24.8764 64.6693 24.8802 65.5865C25.0069 65.3666 25.1374 65.1466 25.253 64.9303C25.949 63.7894 26.6947 62.6709 27.4901 61.5747C27.4272 61.0457 27.4448 60.5101 27.5423 59.9864C27.6237 59.3988 27.7483 58.8181 27.9151 58.2489C28.0866 57.6772 28.2843 57.1167 28.508 56.5674C28.7429 56.0044 29.0523 55.4675 29.276 54.9007C29.28 54.8923 29.2871 54.8858 29.2959 54.8827C29.3046 54.8795 29.3142 54.88 29.3226 54.884C29.331 54.8879 29.3375 54.895 29.3407 54.9038C29.3438 54.9125 29.3434 54.9222 29.3394 54.9306C29.0543 55.4659 28.8292 56.0311 28.6683 56.6158C28.4903 57.1651 28.3434 57.7241 28.2283 58.2899C28.1127 58.8566 28.0195 59.4085 27.9412 59.9938C27.889 60.3667 27.8555 60.7656 27.7884 61.1497C28.9544 59.6345 30.2239 58.2018 31.5877 56.8619C31.6212 56.8321 31.666 56.8805 31.6362 56.9141C29.5879 59.207 27.758 61.686 26.1702 64.3189C26.1106 64.4158 26.0546 64.5165 25.9987 64.6171C26.2932 64.4307 26.6325 64.2853 26.9122 64.1287C27.4342 63.8379 27.9574 63.5508 28.4819 63.2674L30.0031 62.4546C30.2641 62.3092 30.5213 62.1563 30.7861 62.0221C31.1038 61.8795 31.4093 61.7112 31.6995 61.5188C31.7406 61.4852 31.7816 61.5486 31.7406 61.571C31.2223 61.8581 30.7637 62.2794 30.2492 62.6C29.7346 62.9207 29.235 63.2301 28.713 63.521C27.7585 64.0541 26.7183 64.4382 25.7787 64.99C25.1262 66.1309 24.5259 67.3054 23.9704 68.4985C24.5421 68.1331 25.1237 67.7839 25.7153 67.4508C26.0956 67.2395 26.4797 67.0307 26.8674 66.8244C27.2513 66.6484 27.6141 66.4295 27.9487 66.1719C27.9822 66.1421 28.0307 66.1719 27.9972 66.2204C27.3762 66.7878 26.6874 67.2762 25.9465 67.6745C25.253 68.0772 24.5558 68.4687 23.8399 68.8191C23.2608 70.0794 22.7413 71.3619 22.2814 72.6669C20.0182 79.0762 19.1868 85.8806 18.7878 92.6404C18.6722 94.6537 18.6089 96.6671 18.5828 98.6842C18.5567 100.701 18.6648 102.711 18.6611 104.724C18.6611 104.784 18.5641 104.799 18.5567 104.724C18.3143 102.935 18.2696 101.119 18.1838 99.3218C18.0981 97.5247 18.113 95.6381 18.154 93.8148Z" fill="#263238"/>
|
||||
<path id="Vector_58" d="M27.9226 64.7999C28.9058 64.3626 29.8609 63.8645 30.7823 63.3085C31.7169 62.7828 32.623 62.2078 33.4966 61.5859C33.4966 61.5859 33.5265 61.5859 33.4966 61.612C32.6709 62.2807 31.7987 62.89 30.8867 63.4353C29.9321 63.966 28.9459 64.4379 27.9337 64.8484C27.9151 64.8782 27.8815 64.8148 27.9226 64.7999Z" fill="#263238"/>
|
||||
<path id="Vector_59" d="M26.3641 57.5517C26.4461 57.2422 26.543 56.9327 26.6512 56.627C26.6512 56.627 26.6288 56.6084 26.6512 56.5934C26.7183 56.4182 26.7891 56.2467 26.8599 56.0752C26.8599 56.0528 26.8599 56.0304 26.886 56.0118C26.9121 55.9932 26.9121 55.9484 26.9271 55.9149C26.9271 55.9149 26.8935 56.0342 26.8749 56.0938C26.8679 56.1278 26.8592 56.1614 26.8488 56.1945C26.4917 57.3895 26.225 58.6097 26.0509 59.8447C26.0509 59.882 25.9838 59.8857 25.9875 59.8447C26.0401 59.0701 26.1662 58.3023 26.3641 57.5517Z" fill="#263238"/>
|
||||
<path id="Vector_60" d="M12.4718 95.1161L12.8558 99.6648L14.0303 113.535H26.6139L27.7884 99.6648L28.1724 95.1161H12.4718Z" fill="#455A64"/>
|
||||
<path id="Vector_61" d="M12.4718 95.1161L12.8558 99.6648H27.7884L28.1724 95.1161H12.4718Z" fill="#263238"/>
|
||||
<path id="Vector_62" d="M11.2376 97.6515H29.4065V93.2892H11.2376V97.6515Z" fill="#455A64"/>
|
||||
</g>
|
||||
<g id="Character">
|
||||
<path id="Vector_63" d="M64.8308 93.2219C64.5288 93.2406 63.1194 93.3226 61.065 93.4531C60.2932 92.1668 59.3611 89.8775 59.6035 86.5741C59.6445 86.0297 58.4849 89.2026 59.1523 93.5724C55.174 93.8148 49.7678 94.1429 45.04 94.3852C44.8797 92.5434 44.6486 90.8432 44.6486 90.8432C44.5424 92.0589 44.3291 93.2629 44.011 94.4411C43.366 94.4822 42.7321 94.5045 42.1244 94.5344C42.1542 91.6634 41.4868 86.6896 41.4868 86.6896C41.2464 89.4407 40.5561 92.1336 39.4436 94.6611C36.4608 94.7842 34.4624 94.8103 34.5966 94.6611C38.944 89.2809 35.5063 86.4063 36.6286 81.7718C37.9746 76.2163 42.6799 75.1686 42.3854 71.0449C42.1542 67.6893 41.5092 61.6119 45.7037 60.1503C46.8101 58.9845 48.2353 58.1704 49.8015 57.8097C51.3677 57.449 53.0055 57.5576 54.5104 58.1221C61.3111 60.4412 59.0442 70.8995 59.5811 72.9875C60.3268 75.9703 61.8182 76.9807 63.0113 80.3736C64.2044 83.7665 62.7391 86.1714 62.6385 88.5315C62.5378 90.8916 65.584 93.1884 64.8308 93.2219Z" fill="#263238"/>
|
||||
<path id="Vector_64" d="M34.4027 93.9228C34.9887 92.9964 35.4418 91.9924 35.7487 90.94C36.0544 89.9035 35.868 88.8633 35.6182 87.7857C35.3363 86.6995 35.1111 85.5994 34.9433 84.4898C34.7776 83.3309 34.846 82.1505 35.1447 81.0186C35.4701 79.8861 36.0519 78.8438 36.8449 77.9724C37.6117 77.1429 38.446 76.3785 39.3392 75.6868C40.2046 75.0241 40.9792 74.2506 41.6434 73.3864C42.2782 72.4894 42.6559 71.4361 42.7359 70.3402C42.8226 71.4792 42.5626 72.6178 41.9902 73.6063C41.387 74.5704 40.6416 75.4377 39.7792 76.179C38.9596 76.9028 38.1863 77.6774 37.4638 78.4981C36.7839 79.3012 36.2842 80.2408 35.9985 81.2534C35.7382 82.2785 35.6712 83.3432 35.8009 84.3928C35.9016 85.4666 36.1439 86.5404 36.3266 87.6478C36.4289 88.2116 36.4875 88.7825 36.5018 89.3554C36.4991 89.9439 36.3918 90.5271 36.1849 91.078C35.7614 92.123 35.1583 93.0858 34.4027 93.9228Z" fill="#263238"/>
|
||||
<path id="Vector_65" d="M58.429 61.8318C58.9418 63.1102 59.2973 64.446 59.4879 65.8101C59.7116 67.1673 59.8607 68.5319 60.0061 69.8891L60.2261 71.9174C60.287 72.5718 60.4119 73.2186 60.599 73.8487C60.9718 75.094 61.7175 76.1641 62.5601 77.2528C62.9866 77.8103 63.3753 78.3957 63.7234 79.0052C64.0693 79.6314 64.3444 80.2942 64.5437 80.9813C64.7187 81.666 64.8433 82.3626 64.9165 83.0655C64.9918 83.774 64.9792 84.489 64.8793 85.1945C64.7823 85.8991 64.6108 86.5665 64.4691 87.2228C64.3254 87.8747 64.2442 88.5389 64.2268 89.2063C64.2319 89.8741 64.3959 90.5311 64.7052 91.123C65.0144 91.7149 65.46 92.2248 66.0052 92.6104C65.3862 92.2709 64.861 91.7833 64.4765 91.1913C64.092 90.5992 63.8601 89.9211 63.8017 89.2175C63.7643 88.5174 63.798 87.8153 63.9024 87.1221C63.9956 86.4323 64.141 85.7724 64.1932 85.1162C64.2775 83.8004 64.1221 82.4802 63.7346 81.2199C63.5401 80.5982 63.2814 79.9984 62.9628 79.4302C62.6271 78.8566 62.2534 78.306 61.8443 77.7823C61.4197 77.2288 61.024 76.6539 60.6586 76.0597C60.2893 75.443 59.9975 74.783 59.7899 74.0948C59.6083 73.4089 59.4922 72.7072 59.4431 71.9994C59.3797 71.3096 59.3425 70.6273 59.3052 69.945C59.2269 68.5804 59.1635 67.2195 59.0479 65.866C58.9804 64.5036 58.773 63.1518 58.429 61.8318Z" fill="#263238"/>
|
||||
<path id="Vector_66" d="M163.371 135.697C162.207 136.14 128.461 137.647 127.141 136.894C126.996 136.808 127.037 135.316 126.541 131.465C126.515 131.282 125.743 130.566 124.542 129.56C120.031 125.775 109.423 117.8 109.423 117.8L126.265 103.169L142.588 119.202L146.831 123.374C146.831 123.374 160.627 129.929 161.984 130.913C163.341 131.897 164.527 135.249 163.371 135.697Z" fill="#DD6A57"/>
|
||||
<path id="Vector_67" d="M163.371 135.697C162.207 136.14 128.461 137.647 127.137 136.894C126.996 136.808 127.033 135.316 126.537 131.465C131.365 132.211 157.111 133.534 157.991 130.503C158.341 129.31 154.516 127.147 153.826 126.752C157.465 128.519 161.283 130.425 161.987 130.917C163.341 131.905 164.527 135.249 163.371 135.697Z" fill="#263238"/>
|
||||
<path id="Vector_68" d="M136.634 111.723L134.024 114.687L121.067 129.481C121.067 129.481 103.234 116.517 97.9956 112.237C97.8278 112.095 77.2279 126.67 62.1649 129.481C50.6066 131.64 42.7768 127.282 38.2393 116.514L57.3253 108.069C73.3205 100.183 91.344 87.6329 102.242 88.9528C114.08 90.3883 136.634 111.723 136.634 111.723Z" fill="#37474F"/>
|
||||
<path id="Vector_69" d="M132.559 110.641C129.896 113.52 130.623 112.658 127.995 115.567C126.705 116.991 120.221 124.142 119.244 125.652C119.222 125.686 119.267 125.727 119.3 125.704C120.698 124.549 127.029 117.274 128.289 115.828C130.866 112.875 130.094 113.695 132.641 110.716C132.648 110.705 132.652 110.691 132.65 110.678C132.649 110.664 132.642 110.652 132.632 110.643C132.622 110.634 132.609 110.629 132.596 110.628C132.582 110.628 132.569 110.633 132.559 110.641Z" fill="#263238"/>
|
||||
<path id="Vector_70" d="M131.973 117.039L121.079 129.485C121.079 129.485 103.234 116.517 97.9956 112.237C97.8278 112.095 77.2279 126.67 62.1686 129.485C50.6103 131.64 42.7619 127.282 38.2393 116.514L57.3253 108.065C59.4431 107.021 61.5944 105.899 63.7644 104.735C80.5239 107.789 117.253 114.396 131.973 117.039Z" fill="#263238"/>
|
||||
<path id="Vector_71" d="M160.593 141.964C159.433 142.412 125.683 143.914 124.363 143.161C124.218 143.075 124.259 141.588 123.763 137.732C123.737 137.55 122.969 136.834 121.765 135.827C117.253 132.043 106.646 124.071 106.646 124.071L123.487 109.433L139.81 125.466L144.053 129.634C144.053 129.634 157.849 136.189 159.21 137.173C160.571 138.157 161.756 141.517 160.593 141.964Z" fill="#DD6A57"/>
|
||||
<path id="Vector_72" d="M160.597 141.964C159.433 142.408 125.683 143.918 124.363 143.161C124.218 143.075 124.259 141.588 123.759 137.736C128.588 138.463 154.333 139.805 155.217 136.77C155.567 135.581 151.738 133.415 151.048 133.02C154.687 134.787 158.505 136.692 159.21 137.188C160.563 138.176 161.756 141.517 160.597 141.964Z" fill="#263238"/>
|
||||
<path id="Vector_73" d="M150.161 132.673C148.789 131.927 147.424 131.181 146.03 130.51C145.368 130.22 144.751 129.836 144.199 129.369C143.628 128.851 143.08 128.296 142.532 127.762C140.269 125.604 138.013 123.434 135.731 121.29C134.497 120.13 133.278 118.96 132.055 117.789C132.025 117.759 131.973 117.789 131.999 117.834C132.074 117.949 134.132 120.149 135.12 121.144C136.239 122.263 137.357 123.363 138.476 124.463L141.831 127.744C142.394 128.296 142.95 128.84 143.528 129.384C144.028 129.886 144.609 130.301 145.247 130.611C146.846 131.357 148.472 132.061 150.094 132.759C150.172 132.781 150.217 132.703 150.161 132.673Z" fill="#263238"/>
|
||||
<path id="Vector_74" d="M35.1484 113.162C35.1484 113.162 32.6727 126.715 39.7568 132.505C44.8425 136.685 51.5537 137.095 57.3441 136.278C73.3765 134 86.9556 114.653 92.2873 113.606C95.0203 113.076 116.522 134.343 116.522 134.343L133.23 118.173C128.979 114.482 103.641 88.8634 90.8519 88.8634C82.0974 88.8634 59.9055 107.051 59.3649 106.838C58.4924 106.488 54.6074 104.624 54.6074 104.624L35.1484 113.162Z" fill="#37474F"/>
|
||||
<path id="Vector_75" d="M129.852 116.45C127.76 118.21 125.806 120.13 123.83 122.002C121.854 123.874 119.908 125.749 117.98 127.654C116.884 128.736 115.795 129.821 114.744 130.935C114.714 130.961 114.744 131.003 114.785 130.976C116.851 129.187 118.83 127.308 120.81 125.428C122.79 123.549 124.732 121.7 126.668 119.784C127.764 118.71 128.871 117.632 129.908 116.506C129.941 116.469 129.889 116.42 129.852 116.45Z" fill="#263238"/>
|
||||
<path id="Vector_76" d="M48.4143 111.074C48.3845 110.999 48.2726 111.052 48.2913 111.122C48.7708 113.155 48.52 115.292 47.5829 117.159C46.4979 119.228 44.5293 120.712 42.7806 122.185C42.6128 122.33 42.8253 122.595 43.0118 122.487C44.1452 121.823 45.2029 121.038 46.1661 120.145C47.0578 119.359 47.7797 118.398 48.2876 117.323C48.7417 116.347 48.9876 115.288 49.0094 114.212C49.0312 113.136 48.8285 112.067 48.4143 111.074Z" fill="#263238"/>
|
||||
<path id="Vector_77" d="M59.678 108.192C59.1859 107.819 58.6639 107.494 58.1605 107.144C56.9674 106.32 55.7669 105.496 54.5402 104.721C54.4246 104.65 54.2867 104.832 54.3985 104.918C55.2635 105.574 56.1546 106.193 57.0383 106.82C57.4931 107.144 57.9443 107.465 58.4029 107.782C58.8608 108.054 59.2905 108.371 59.6855 108.729C60.0583 109.12 59.8458 109.605 59.3798 109.784C58.9606 109.912 58.5082 109.875 58.1158 109.679C57.2172 109.307 56.4044 108.658 55.5953 108.132C55.0982 107.806 54.6011 107.486 54.104 107.17C53.5708 106.835 53.019 106.533 52.4895 106.197C52.456 106.175 52.415 106.231 52.4485 106.257C52.9369 106.629 53.4067 107.066 53.8989 107.457C54.3911 107.849 54.8869 108.233 55.3903 108.613C55.8936 108.993 56.3485 109.318 56.8369 109.653C57.2528 109.954 57.715 110.184 58.2053 110.336C58.9994 110.548 60.2075 110.309 60.3305 109.325C60.3326 109.095 60.2733 108.869 60.1586 108.67C60.0438 108.47 59.8779 108.305 59.678 108.192Z" fill="#263238"/>
|
||||
<path id="Vector_78" d="M132.126 116.89C131.071 115.805 129.96 114.773 128.86 113.736C127.76 112.699 126.668 111.682 125.557 110.671C123.319 108.639 121.064 106.63 118.756 104.683C116.448 102.737 114.069 100.862 111.634 99.0719C109.2 97.2822 106.754 95.6193 104.177 94.0944C102.891 93.33 101.568 92.603 100.236 91.9169C98.9309 91.2269 97.5905 90.6047 96.2209 90.0527C95.848 89.9147 95.4752 89.7768 95.1023 89.6239C95.0464 89.6016 94.9979 89.6836 95.0539 89.706C95.7399 90.0154 96.3998 90.3808 97.071 90.7164C97.7421 91.0519 98.3871 91.3912 99.0396 91.7342C100.352 92.4315 101.65 93.1585 102.932 93.9191C105.502 95.4478 108.007 97.0834 110.445 98.8258C112.887 100.571 115.255 102.413 117.563 104.325C119.871 106.238 122.182 108.218 124.434 110.231C126.686 112.245 128.89 114.265 131.146 116.268C131.429 116.517 131.712 116.767 132.003 117.013C132.02 117.021 132.039 117.023 132.058 117.02C132.076 117.016 132.094 117.007 132.107 116.994C132.12 116.981 132.129 116.964 132.133 116.945C132.136 116.927 132.134 116.908 132.126 116.89Z" fill="#263238"/>
|
||||
<path id="Vector_79" d="M115.661 128.78C110.512 123.881 96.5676 111.402 93.4095 109.314C93.0913 109.106 92.7339 108.966 92.3594 108.902C91.9849 108.838 91.6013 108.851 91.2321 108.941C90.4193 109.142 89.7668 109.746 89.1255 110.254L86.8325 112.069L82.1234 115.798C79.1817 118.136 76.2585 120.496 73.2869 122.792C70.663 124.884 67.8849 126.775 64.9762 128.448C59.3834 131.558 52.2993 133.545 46.1436 130.861C43.3396 129.611 41.0865 127.383 39.8052 124.593C38.4742 121.816 37.9112 118.728 37.5681 115.69C37.4861 114.944 37.419 114.217 37.3593 113.479C37.361 113.474 37.3616 113.469 37.361 113.465C37.3604 113.46 37.3586 113.455 37.3559 113.451C37.3531 113.447 37.3495 113.444 37.3452 113.442C37.3409 113.44 37.3362 113.438 37.3314 113.438C37.3266 113.438 37.3218 113.44 37.3176 113.442C37.3133 113.444 37.3096 113.447 37.3069 113.451C37.3041 113.455 37.3024 113.46 37.3018 113.465C37.3012 113.469 37.3017 113.474 37.3034 113.479C37.5905 119.209 38.4965 125.857 43.3473 129.627C48.5038 133.631 55.7556 132.934 61.4528 130.596C67.8396 127.986 73.1937 123.393 78.5404 119.142L87.8877 111.715C88.6334 111.115 89.379 110.488 90.1583 109.914C90.9376 109.34 91.851 108.911 92.7421 109.43C95.6951 111.148 114.841 128.288 115.519 128.885C115.624 128.974 115.743 128.855 115.661 128.78Z" fill="#263238"/>
|
||||
<path id="Vector_80" d="M52.5082 84.0424C55.9421 86.1266 73.287 95.6939 78.9505 92.8304C85.8147 89.3555 93.0628 82.648 95.5087 78.61C96.8771 76.3469 85.5537 69.8556 84.066 71.731C81.7245 74.7138 75.6434 80.2096 74.5398 81.0522C73.4361 81.8948 61.4603 79.3222 54.7602 78.8673C48.7238 78.446 50.0884 82.5883 52.5082 84.0424Z" fill="#DD6A57"/>
|
||||
<path id="Vector_81" d="M99.4497 73.267C98.4206 75.8546 94.2298 80.3213 92.8167 81.0111C91.4036 81.7009 83.5626 74.8479 83.6633 73.2298C83.764 71.6116 87.9063 63.1629 90.3746 61.761C92.8428 60.3591 100.52 70.5714 99.4497 73.267Z" fill="#DD6A57"/>
|
||||
<path id="Vector_82" d="M84.1144 71.6527C84.1144 71.6527 84.1555 68.0286 83.1227 65.0085C82.2577 62.4657 80.6805 58.7932 82.0302 58.2749C84.7968 57.2123 88.7228 66.3769 88.7228 66.3769C88.7228 66.3769 89.8041 70.6982 87.1569 71.992C86.6678 72.2213 86.1248 72.311 85.5878 72.2512C85.0509 72.1913 84.541 71.9842 84.1144 71.6527Z" fill="#DD6A57"/>
|
||||
<path id="Vector_83" d="M87.0115 64.6692C87.2539 66.1271 88.831 65.0085 88.831 65.0085C88.831 65.0085 86.9481 67.1636 87.7759 68.5692C88.5812 69.9189 90.438 68.5021 90.5722 68.4014C90.4753 68.517 88.7975 70.5453 89.7743 71.8689C90.7512 73.1925 92.4141 71.4961 92.5185 71.3917C92.4588 71.5296 91.7094 73.364 92.6825 74.2029C94.3566 75.6384 96.411 71.0002 98.0926 70.426C98.0926 70.426 99.3975 73.1776 99.4497 73.2522C99.4497 73.2522 101.485 68.8787 100.568 66.6379C100.442 66.3107 100.207 66.0366 99.9031 65.861C99.5993 65.6854 99.2447 65.6188 98.8979 65.6722C98.8979 65.6722 99.7107 64.3337 98.9725 63.2636C98.5996 62.7192 97.3767 62.8385 97.3767 62.8385C97.3767 62.8385 97.9844 61.7424 97.2686 60.8326C96.6981 60.0869 95.5721 60.3405 95.5721 60.3405C95.5721 60.3405 95.6616 59.0169 94.8264 58.4762C93.1971 57.339 86.4933 61.5522 87.0115 64.6692Z" fill="#DD6A57"/>
|
||||
<path id="Vector_84" d="M95.4006 60.3479C95.4056 60.3479 95.4103 60.346 95.4138 60.3425C95.4173 60.339 95.4193 60.3342 95.4193 60.3293C95.4193 60.3244 95.4173 60.3196 95.4138 60.3161C95.4103 60.3126 95.4056 60.3107 95.4006 60.3107C92.7484 61.1818 90.4244 62.8399 88.7378 65.0645C88.6856 65.139 88.7788 65.2546 88.8534 65.1838C90.7906 63.2638 92.9959 61.6349 95.4006 60.3479Z" fill="#263238"/>
|
||||
<path id="Vector_85" d="M97.414 62.805C97.4401 62.805 97.414 62.7454 97.3879 62.7566C94.7779 63.6439 91.9704 65.6461 90.4566 68.3866C90.4044 68.4798 90.4566 68.6177 90.52 68.5133C91.6684 66.7684 95.1433 63.9758 97.414 62.805Z" fill="#263238"/>
|
||||
<path id="Vector_86" d="M92.4774 71.6191C94.0322 69.0465 96.2544 67.2345 98.8159 65.7021C98.8494 65.6797 98.8159 65.6349 98.786 65.6461C97.3356 66.0563 95.8032 67.2046 94.7033 68.1964C93.6571 69.0953 92.8641 70.2521 92.4029 71.552C92.3693 71.6154 92.4476 71.6713 92.4774 71.6191Z" fill="#263238"/>
|
||||
<path id="Vector_87" d="M88.7788 65.0085C88.7192 65.0943 88.913 65.0905 88.8534 65.1763C88.6036 65.5491 87.3023 67.9093 87.9697 68.6027C88.5029 69.1583 89.6214 68.8227 89.998 68.5282L90.9525 67.7825L90.3187 68.8153C90.0304 69.2747 89.82 69.7786 89.696 70.3067C89.6248 70.5458 89.6049 70.7973 89.6377 71.0447C89.6705 71.2921 89.7551 71.5298 89.8862 71.7421C90.0089 71.9347 90.1935 72.0799 90.4096 72.1538C90.6258 72.2276 90.8606 72.2258 91.0756 72.1485C91.5596 71.9603 91.9871 71.6509 92.3171 71.25L93.2679 70.1762L92.7236 71.496C92.5719 71.8628 92.4679 72.2475 92.4141 72.6407C92.3443 73.0179 92.3885 73.4072 92.5408 73.7592C92.6151 73.9121 92.7305 74.0413 92.874 74.1322C93.0176 74.2231 93.1837 74.2721 93.3537 74.2738C93.7319 74.2184 94.0871 74.0583 94.379 73.8114C95.0176 73.2812 95.6147 72.7028 96.1649 72.0814C96.4557 71.7757 96.7428 71.4699 97.0486 71.1754C97.3366 70.8652 97.6874 70.6199 98.0776 70.4558C97.7127 70.6587 97.391 70.931 97.1306 71.2574C96.8547 71.5706 96.59 71.895 96.3252 72.2194C95.8072 72.8927 95.2281 73.5168 94.5952 74.0836C94.256 74.3947 93.8337 74.6006 93.3798 74.6764C93.1277 74.6899 92.8772 74.6297 92.6587 74.5032C92.4403 74.3768 92.2633 74.1895 92.1494 73.9643C91.9512 73.5413 91.8837 73.0687 91.9555 72.6071C92.0087 72.1672 92.119 71.736 92.2836 71.3245L92.69 71.5706C92.3071 72.0516 91.8043 72.4232 91.2322 72.6481C90.912 72.7656 90.5605 72.7656 90.2404 72.6481C89.9289 72.5259 89.6613 72.3128 89.4723 72.0367C89.3067 71.768 89.1998 71.4673 89.1587 71.1543C89.1176 70.8414 89.1431 70.5233 89.2337 70.2209C89.3803 69.6466 89.6196 69.1001 89.9421 68.6027L90.259 68.8898C89.7669 69.2627 88.5588 69.7623 87.6193 69.0054C86.5566 67.8086 88.4097 65.4373 88.7788 65.0085Z" fill="#263238"/>
|
||||
<path id="Vector_88" d="M88.8385 65.0085C88.5601 65.1317 88.2647 65.2121 87.9623 65.2471C87.8418 65.2652 87.7187 65.2505 87.6058 65.2046C87.493 65.1586 87.3946 65.0832 87.321 64.9861C87.1915 64.749 87.1308 64.4804 87.1457 64.2106C87.1457 63.9123 87.1718 63.6029 87.2054 63.2785C87.0198 63.5501 86.8928 63.8574 86.8326 64.1808C86.7892 64.3568 86.781 64.5396 86.8085 64.7188C86.8361 64.8979 86.8987 65.0699 86.9929 65.2247C87.114 65.3843 87.2802 65.5039 87.4701 65.5678C87.6519 65.6181 87.8439 65.6181 88.0257 65.5678C88.3487 65.4714 88.6331 65.2757 88.8385 65.0085Z" fill="#263238"/>
|
||||
<path id="Vector_89" d="M73.2348 80.836L68.7606 92.3197C68.7606 92.3197 58.265 88.36 53.2166 85.1759C48.1682 81.9918 47.7991 78.6846 55.2673 78.6846C59.995 78.6846 73.2348 80.836 73.2348 80.836Z" fill="#407BFF"/>
|
||||
<path id="Vector_90" d="M50.2189 80.9403L49.9468 81.2759L49.9691 81.7084L49.6373 81.5816C49.5147 81.2447 49.5042 80.8773 49.6075 80.5339L49.8013 80.8322L50.2189 80.9403Z" fill="#407BFF"/>
|
||||
<path id="Vector_91" d="M57.4447 80.9403L57.1725 81.2759L57.1949 81.7084L56.7885 81.5555L56.3858 81.7084L56.4082 81.2759L56.136 80.9403L56.5536 80.8322L56.7885 80.4668L57.0271 80.8322L57.4447 80.9403Z" fill="#407BFF"/>
|
||||
<path id="Vector_92" d="M61.0539 86.1639L60.7817 86.4995L60.804 86.932L60.4014 86.7791L59.9987 86.932L60.0211 86.4995L59.7489 86.1639L60.1665 86.0558L60.4014 85.6904L60.6363 86.0558L61.0539 86.1639Z" fill="#407BFF"/>
|
||||
<path id="Vector_93" d="M64.6668 80.9403L64.3946 81.2759L64.417 81.7084L64.0143 81.5555L63.6116 81.7084L63.634 81.2759L63.3618 80.9403L63.7794 80.8322L64.0143 80.4668L64.2492 80.8322L64.6668 80.9403Z" fill="#407BFF"/>
|
||||
<path id="Vector_94" d="M68.2796 86.1639L68.0075 86.4995L68.0298 86.932L67.6271 86.7791L67.2207 86.932L67.2468 86.4995L66.9747 86.1639L67.3923 86.0558L67.6271 85.6904L67.862 86.0558L68.2796 86.1639Z" fill="#407BFF"/>
|
||||
<path id="Vector_95" d="M71.6166 81.2759L71.6427 81.7084L71.2363 81.5555L70.8337 81.7084L70.856 81.2759L70.5839 80.9403L71.0014 80.8322L71.1991 80.5265H71.2848L71.475 80.821L71.8926 80.9292L71.6166 81.2759Z" fill="#407BFF"/>
|
||||
<g id="Group" opacity="0.2">
|
||||
<path id="Vector_96" d="M49.9468 81.2759L49.9691 81.7084L49.6373 81.5816C49.5165 81.2431 49.506 80.875 49.6075 80.5302L49.8014 80.8285L50.219 80.9366L49.9468 81.2759Z" fill="black"/>
|
||||
<path id="Vector_97" d="M57.1726 81.2759L57.1949 81.7084L56.7885 81.5556L56.3858 81.7084L56.4082 81.2759L56.136 80.9404L56.5536 80.8322L56.7885 80.4668L57.0271 80.8322L57.4447 80.9404L57.1726 81.2759Z" fill="black"/>
|
||||
<path id="Vector_98" d="M64.3946 81.2759L64.417 81.7084L64.0143 81.5556L63.6116 81.7084L63.634 81.2759L63.3618 80.9404L63.7794 80.8322L64.0143 80.4668L64.2492 80.8322L64.6668 80.9404L64.3946 81.2759Z" fill="black"/>
|
||||
<path id="Vector_99" d="M71.6167 81.2759L71.6428 81.7084L71.2364 81.5556L70.8337 81.7084L70.8561 81.2759L70.5839 80.9404L71.0015 80.8322L71.1991 80.5265H71.2736L71.4638 80.8211L71.8814 80.9292L71.6167 81.2759Z" fill="black"/>
|
||||
<path id="Vector_100" d="M60.7817 86.4995L60.8041 86.932L60.4014 86.7791L59.9987 86.932L60.0211 86.4995L59.7489 86.1639L60.1665 86.0558L60.4014 85.6904L60.6363 86.0558L61.0539 86.1639L60.7817 86.4995Z" fill="black"/>
|
||||
<path id="Vector_101" d="M68.0075 86.4995L68.0298 86.932L67.6272 86.7791L67.2208 86.932L67.2469 86.4995L66.9747 86.1639L67.3923 86.0558L67.6272 85.6904L67.8621 86.0558L68.2796 86.1639L68.0075 86.4995Z" fill="black"/>
|
||||
</g>
|
||||
<path id="Vector_102" d="M66.9001 90.7238C67.6458 89.1765 68.2722 87.5509 68.8837 85.9402C69.4951 84.3295 70.0544 82.7299 70.5354 81.0931C70.5354 81.0633 70.4944 81.0409 70.4832 81.0745C69.8046 82.6591 69.182 84.2698 68.5779 85.8842C67.9739 87.4987 67.3513 89.0758 66.8405 90.7051C66.8405 90.7387 66.8852 90.7574 66.9001 90.7238Z" fill="#263238"/>
|
||||
<path id="Vector_103" opacity="0.1" d="M70.0208 89.0609L68.7457 92.3196C68.7457 92.3196 58.2649 88.36 53.2166 85.1758C49.9728 83.1215 48.6604 81.0186 50.1406 79.7845L70.0208 89.0609Z" fill="black"/>
|
||||
<path id="Vector_104" d="M61.3522 101.548L62.4185 105.451C62.4185 105.451 34.0821 127.095 32.7958 126.402C32.7958 126.402 36.994 88.5912 44.2534 81.0858C47.8849 77.3312 52.031 77.7301 54.6111 80.4668C55.2822 81.1641 62.3663 90.0453 63.112 94.1056C63.7533 97.685 61.3522 101.548 61.3522 101.548Z" fill="#407BFF"/>
|
||||
<path id="Vector_105" d="M60.8264 89.005C60.3939 88.2071 59.9353 87.4353 59.4431 86.671C59.3289 86.3846 59.1969 86.1057 59.0479 85.8358C58.8466 85.4368 58.649 85.0416 58.4737 84.6315C58.4733 84.6268 58.4718 84.6223 58.4693 84.6183C58.4667 84.6143 58.4633 84.611 58.4593 84.6086C58.4552 84.6062 58.4507 84.6048 58.446 84.6045C58.4413 84.6042 58.4366 84.605 58.4323 84.6068C58.428 84.6087 58.4242 84.6115 58.4211 84.6152C58.4181 84.6188 58.416 84.623 58.415 84.6276C58.4139 84.6322 58.414 84.637 58.4151 84.6415C58.4163 84.6461 58.4185 84.6503 58.4215 84.6539C58.608 85.0603 58.7944 85.4704 58.9361 85.8842C58.9464 85.906 58.9551 85.9284 58.9622 85.9514C58.7795 85.6941 58.5893 85.4368 58.4066 85.1833C58.1234 84.7755 57.8197 84.3823 57.4969 84.0051C57.4782 83.9864 57.4521 84.0051 57.4633 84.0312C57.7019 84.46 58.0002 84.8589 58.2649 85.269C58.5297 85.6792 58.813 86.1266 59.0927 86.5479C59.6482 87.3831 60.2112 88.2071 60.7779 89.0348C60.7791 89.0394 60.7813 89.0436 60.7844 89.0471C60.7874 89.0506 60.7913 89.0534 60.7956 89.0551C60.8 89.0569 60.8047 89.0576 60.8093 89.0572C60.814 89.0568 60.8185 89.0554 60.8225 89.0529C60.8265 89.0505 60.8298 89.0471 60.8323 89.0431C60.8347 89.0391 60.8362 89.0346 60.8366 89.0299C60.837 89.0253 60.8362 89.0206 60.8345 89.0162C60.8327 89.0119 60.8299 89.008 60.8264 89.005Z" fill="#263238"/>
|
||||
<g id="Group_2" opacity="0.2">
|
||||
<path id="Vector_106" d="M49.5664 80.4668L49.8013 80.8285L50.2189 80.9404L49.9467 81.2797L49.9691 81.7084L49.5664 81.5556L49.1638 81.7084L49.1861 81.2797L48.914 80.9404L49.3315 80.8285L49.5664 80.4668Z" fill="black"/>
|
||||
<path id="Vector_107" d="M42.3406 90.7611L42.5792 91.1265L42.9968 91.2384L42.7209 91.5739L42.747 92.0027L42.3406 91.8498L41.938 92.0027L41.9603 91.5739L41.6881 91.2384L42.1057 91.1265L42.3406 90.7611Z" fill="black"/>
|
||||
<path id="Vector_108" d="M49.5664 90.7611L49.8013 91.1265L50.2189 91.2384L49.9467 91.5739L49.9691 92.0027L49.5664 91.8498L49.1638 92.0027L49.1861 91.5739L48.914 91.2384L49.3315 91.1265L49.5664 90.7611Z" fill="black"/>
|
||||
<path id="Vector_109" d="M56.7885 90.7611L57.0271 91.1265L57.4447 91.2384L57.1688 91.5739L57.1949 92.0027L56.7885 91.8498L56.3858 92.0027L56.4082 91.5739L56.136 91.2384L56.5536 91.1265L56.7885 90.7611Z" fill="black"/>
|
||||
<path id="Vector_110" d="M45.9536 85.6904L46.1885 86.0558L46.6061 86.1639L46.3339 86.5032L46.3563 86.932L45.9536 86.7791L45.5509 86.932L45.5733 86.5032L45.3011 86.1639L45.7187 86.0558L45.9536 85.6904Z" fill="black"/>
|
||||
<path id="Vector_111" d="M53.1794 85.6904L53.4143 86.0558L53.8318 86.1639L53.5597 86.5032L53.582 86.932L53.1794 86.7791L52.773 86.932L52.7991 86.5032L52.5231 86.1639L52.9445 86.0558L53.1794 85.6904Z" fill="black"/>
|
||||
<path id="Vector_112" d="M42.3406 101.059L42.5792 101.421L42.9968 101.533L42.7209 101.868L42.747 102.301L42.3406 102.144L41.938 102.301L41.9603 101.868L41.6881 101.533L42.1057 101.421L42.3406 101.059Z" fill="black"/>
|
||||
<path id="Vector_113" d="M49.5664 101.059L49.8013 101.421L50.2189 101.533L49.9467 101.868L49.9691 102.301L49.5664 102.144L49.1638 102.301L49.1861 101.868L48.914 101.533L49.3315 101.421L49.5664 101.059Z" fill="black"/>
|
||||
<path id="Vector_114" d="M56.7885 101.059L57.0271 101.421L57.4447 101.533L57.1688 101.868L57.1949 102.301L56.7885 102.144L56.3858 102.301L56.4082 101.868L56.136 101.533L56.5536 101.421L56.7885 101.059Z" fill="black"/>
|
||||
<path id="Vector_115" d="M38.7315 95.9848L38.9664 96.3502L39.384 96.462L39.1118 96.7976L39.1342 97.2263L38.7315 97.0735L38.3288 97.2263L38.3512 96.7976L38.079 96.462L38.4966 96.3502L38.7315 95.9848Z" fill="black"/>
|
||||
<path id="Vector_116" d="M45.9536 95.9848L46.1885 96.3502L46.6061 96.462L46.3339 96.7976L46.3563 97.2263L45.9536 97.0735L45.5509 97.2263L45.5733 96.7976L45.3011 96.462L45.7187 96.3502L45.9536 95.9848Z" fill="black"/>
|
||||
<path id="Vector_117" d="M53.1794 95.9848L53.4143 96.3502L53.8318 96.462L53.5597 96.7976L53.582 97.2263L53.1794 97.0735L52.773 97.2263L52.7991 96.7976L52.5231 96.462L52.9445 96.3502L53.1794 95.9848Z" fill="black"/>
|
||||
<path id="Vector_118" d="M60.4014 95.9848L60.6363 96.3502L61.0539 96.462L60.7817 96.7976L60.8041 97.2263L60.4014 97.0735L59.9987 97.2263L60.0211 96.7976L59.7489 96.462L60.1665 96.3502L60.4014 95.9848Z" fill="black"/>
|
||||
<path id="Vector_119" d="M35.4989 112.163L35.5213 112.595L35.1186 112.439L34.7457 112.584C34.7905 112.297 34.839 112.006 34.8874 111.715L35.1186 111.342L35.3535 111.715L35.7711 111.827L35.4989 112.163Z" fill="black"/>
|
||||
<path id="Vector_120" d="M42.3406 111.354L42.5792 111.715L42.9968 111.827L42.7209 112.163L42.747 112.595L42.3406 112.438L41.938 112.595L41.9603 112.163L41.6881 111.827L42.1057 111.715L42.3406 111.354Z" fill="black"/>
|
||||
<path id="Vector_121" d="M49.5664 111.354L49.8013 111.715L50.2189 111.827L49.9467 112.163L49.9691 112.595L49.5664 112.438L49.1638 112.595L49.1861 112.163L48.914 111.827L49.3315 111.715L49.5664 111.354Z" fill="black"/>
|
||||
<path id="Vector_122" d="M38.7315 106.283L38.9664 106.644L39.384 106.756L39.1118 107.092L39.1342 107.524L38.7315 107.368L38.3288 107.524L38.3512 107.092L38.079 106.756L38.4966 106.644L38.7315 106.283Z" fill="black"/>
|
||||
<path id="Vector_123" d="M45.9536 106.283L46.1885 106.644L46.6061 106.756L46.3339 107.092L46.3563 107.524L45.9536 107.368L45.5509 107.524L45.5733 107.092L45.3011 106.756L45.7187 106.644L45.9536 106.283Z" fill="black"/>
|
||||
<path id="Vector_124" d="M53.1794 106.283L53.4143 106.644L53.8318 106.756L53.5597 107.092L53.582 107.524L53.1794 107.368L52.773 107.524L52.7991 107.092L52.5231 106.756L52.9445 106.644L53.1794 106.283Z" fill="black"/>
|
||||
<path id="Vector_125" d="M60.0099 107.278V107.092L59.7377 106.756L60.1553 106.644L60.3902 106.272L60.6251 106.644L60.7854 106.685L60.0099 107.278Z" fill="black"/>
|
||||
<path id="Vector_126" d="M35.1186 121.648L35.3535 122.01L35.7711 122.121L35.4989 122.457L35.5212 122.889L35.1186 122.733L34.7159 122.889L34.7383 122.457L34.4661 122.121L34.8837 122.01L35.1186 121.648Z" fill="black"/>
|
||||
<path id="Vector_127" d="M38.7315 116.577L38.9664 116.939L39.384 117.051L39.1118 117.386L39.1342 117.819L38.7315 117.662L38.3288 117.819L38.3512 117.386L38.079 117.051L38.4966 116.939L38.7315 116.577Z" fill="black"/>
|
||||
<path id="Vector_128" d="M46.3339 117.386V117.468L46.0281 117.692L45.9498 117.662L45.5472 117.819L45.5695 117.386L45.2974 117.051L45.715 116.939L45.9498 116.566L46.1847 116.939L46.6023 117.051L46.3339 117.386Z" fill="black"/>
|
||||
</g>
|
||||
<path id="Vector_129" d="M43.7239 81.809C33.7278 92.2151 19.1532 118.564 17.3524 122.341C16.1294 124.906 29.537 131.662 30.1075 129.798C30.8532 127.412 42.5158 97.9234 45.6179 86.7977C47.3368 80.6643 45.7932 79.6614 43.7239 81.809Z" fill="#DD6A57"/>
|
||||
<path id="Vector_130" d="M30.7451 128.042C30.279 129.317 28.687 134.753 27.5722 135.421C26.4573 136.088 20.6074 135.95 17.6693 135.95C14.7313 135.95 14.1459 135.13 14.1944 134.116C14.2429 133.102 20.4209 132.923 20.4209 132.923C20.4209 132.923 12.1698 135.29 10.0931 135.674C8.01629 136.058 3.23266 137.27 2.54289 135.548C2.2297 134.772 3.53839 133.985 3.53839 133.985C3.53839 133.985 1.53247 134.571 1.21182 133.575C0.838975 132.457 2.44595 131.812 2.44595 131.812C2.44595 131.812 1.18945 132.065 1.16335 131.141C1.09624 129.071 8.94841 128.057 8.94841 128.057C8.94841 128.057 2.93811 130.98 2.74423 129.295C2.47578 126.957 14.7947 124.396 16.0773 123.378C16.9151 122.668 17.612 121.806 18.1317 120.839L30.7451 128.042Z" fill="#DD6A57"/>
|
||||
<path id="Vector_131" d="M14.2391 134.63C14.2186 134.486 14.2333 134.338 14.282 134.201C14.3307 134.063 14.4119 133.939 14.5188 133.84C14.7292 133.645 14.9713 133.487 15.2346 133.374C15.78 133.142 16.3453 132.96 16.9236 132.829C18.0832 132.531 19.2726 132.326 20.4582 132.017C19.234 132 18.0127 132.138 16.823 132.427C16.2159 132.567 15.6312 132.79 15.0855 133.09C14.8053 133.248 14.5593 133.459 14.3622 133.713C14.2646 133.843 14.202 133.995 14.1804 134.156C14.1589 134.316 14.1791 134.48 14.2391 134.63Z" fill="#263238"/>
|
||||
<path id="Vector_132" d="M3.5384 133.97C4.38849 133.762 5.22367 133.523 6.06258 133.281C6.90148 133.038 7.72548 132.785 8.56066 132.535L11.0438 131.756C11.8753 131.495 12.703 131.237 13.5382 130.988C12.6707 131.08 11.8101 131.228 10.9618 131.431C10.108 131.625 9.2728 131.871 8.43762 132.125C7.60244 132.378 6.77844 132.658 5.96191 132.967C5.14537 133.277 4.33256 133.601 3.5384 133.97Z" fill="#263238"/>
|
||||
<path id="Vector_133" d="M11.5471 128.926C10.7461 128.977 9.94979 129.087 9.16463 129.254C8.3779 129.413 7.60007 129.613 6.83433 129.854C6.06586 130.088 5.31146 130.365 4.57487 130.686C3.83677 131.007 3.12278 131.38 2.43845 131.804C3.18415 131.543 3.92984 131.252 4.67554 130.999C5.42123 130.745 6.16693 130.488 6.93872 130.253C7.71052 130.018 8.45621 129.791 9.21682 129.567C9.97743 129.343 10.7716 129.135 11.5471 128.926Z" fill="#263238"/>
|
||||
<path id="Vector_134" d="M10.3317 126.957C9.0393 127.055 7.76549 127.323 6.54359 127.755C5.31094 128.162 4.13748 128.73 3.05373 129.444C4.27667 129.008 5.46233 128.549 6.67409 128.147C7.88584 127.744 9.10132 127.352 10.3317 126.957Z" fill="#263238"/>
|
||||
<path id="Vector_135" d="M29.9285 98.494L41.0394 102.379C41.0394 102.379 45.3905 91.4099 46.3487 85.5338C47.3069 79.6578 46.1959 78.3901 41.1289 83.8672C36.0619 89.3443 29.9285 98.494 29.9285 98.494Z" fill="#407BFF"/>
|
||||
<g id="Group_3" opacity="0.2">
|
||||
<path id="Vector_136" d="M35.4989 91.5739L35.5212 92.0027L35.1185 91.8498L34.7159 92.0027V91.7529C34.8948 91.5105 35.0887 91.2644 35.264 91.0072L35.3385 91.1265L35.7561 91.2383L35.4989 91.5739Z" fill="black"/>
|
||||
<path id="Vector_137" d="M42.3406 90.7611L42.5792 91.1265L42.9968 91.2384L42.7209 91.5739L42.747 92.0027L42.3406 91.8498L41.9379 92.0027L41.9603 91.5739L41.6881 91.2384L42.1057 91.1265L42.3406 90.7611Z" fill="black"/>
|
||||
<path id="Vector_138" d="M39.1118 86.4995L39.1342 86.932L38.7315 86.7791L38.5413 86.8499L39.1603 86.1042L39.384 86.1639L39.1118 86.4995Z" fill="black"/>
|
||||
<path id="Vector_139" d="M46.263 86.0745C46.2183 86.3205 46.1661 86.5778 46.1102 86.8202L45.9536 86.7605L45.5509 86.9134L45.5733 86.4809L45.3011 86.1453L45.7187 86.0372L45.9536 85.6643L46.1885 86.0372L46.263 86.0745Z" fill="black"/>
|
||||
<path id="Vector_140" d="M31.886 96.7975L31.9084 97.2263L31.5057 97.0734L31.103 97.2263L31.1254 96.7975V96.7789C31.2745 96.5701 31.4311 96.3426 31.5989 96.104L31.7555 96.3501L32.1731 96.4619L31.886 96.7975Z" fill="black"/>
|
||||
<path id="Vector_141" d="M38.7315 95.9847L38.9664 96.3501L39.384 96.462L39.1118 96.7975L39.1342 97.2263L38.7315 97.0735L38.3288 97.2263L38.3512 96.7975L38.079 96.462L38.4966 96.3501L38.7315 95.9847Z" fill="black"/>
|
||||
</g>
|
||||
<path id="Vector_142" d="M45.5024 91.6298C45.0357 92.3972 44.6101 93.1887 44.2272 94.0011C44.3428 93.6283 44.4584 93.2331 44.5703 92.8528C44.8462 91.9094 45.1295 90.9587 45.3495 90.0005C45.3478 89.9965 45.3449 89.9931 45.3413 89.9907C45.3376 89.9883 45.3334 89.987 45.329 89.987C45.3246 89.987 45.3204 89.9883 45.3167 89.9907C45.3131 89.9931 45.3102 89.9965 45.3085 90.0005C44.7045 91.6074 44.19 93.248 43.6083 94.8699C43.0267 96.4917 42.4637 98.1025 41.9007 99.7169C41.5912 100.601 41.3041 101.488 41.0319 102.383L40.4727 102.185C40.4354 102.163 40.4242 102.226 40.4727 102.234L41.1438 102.524C41.1662 102.524 43.1907 97.3829 43.9998 94.7543C44.5628 93.7476 45.0773 92.7111 45.5546 91.6634C45.5568 91.6599 45.5583 91.6561 45.559 91.6521C45.5597 91.6481 45.5597 91.644 45.5588 91.64C45.5579 91.636 45.5563 91.6323 45.554 91.6289C45.5516 91.6256 45.5487 91.6227 45.5453 91.6205C45.5418 91.6183 45.538 91.6168 45.534 91.6161C45.53 91.6153 45.5259 91.6154 45.5219 91.6163C45.5179 91.6171 45.5141 91.6188 45.5108 91.6211C45.5074 91.6234 45.5046 91.6264 45.5024 91.6298Z" fill="#263238"/>
|
||||
<path id="Vector_143" d="M41.4868 100.422C39.9283 99.6759 38.2952 99.098 36.677 98.5089C35.0589 97.9198 33.4482 97.3903 31.8039 96.9243C31.7704 96.9243 31.7554 96.969 31.8039 96.9802C33.3997 97.6364 35.0179 98.233 36.6509 98.8146C38.284 99.3963 39.8574 99.9965 41.498 100.481C41.5031 100.478 41.5071 100.472 41.5095 100.466C41.5118 100.461 41.5124 100.454 41.5113 100.448C41.5101 100.442 41.5072 100.436 41.5028 100.431C41.4985 100.427 41.4929 100.423 41.4868 100.422Z" fill="#263238"/>
|
||||
<path id="Vector_144" d="M49.2495 78.487C45.7485 78.8375 46.6843 82.3646 48.2279 83.979C49.257 85.0603 51.3412 86.149 52.538 85.7202C53.7349 85.2914 52.7916 82.6144 52.7916 82.6144C52.7916 82.6144 54.7639 84.5308 55.4947 83.7031C56.2255 82.8754 52.8736 78.1141 49.2495 78.487Z" fill="#263238"/>
|
||||
<path id="Vector_145" d="M47.43 80.3177C47.6276 80.8173 50.2972 82.8307 52.6499 82.3795C53.3955 82.2304 53.06 79.0052 53.06 79.0052L53.0861 78.6846L53.4254 74.2104L47.8327 71.6788L47.031 71.3544C47.031 71.3544 47.031 72.5885 47.031 74.1209V74.3409C47.031 74.4267 47.031 74.5087 47.031 74.5907C47.031 74.8182 47.031 75.0531 47.031 75.2879C47.031 75.4632 47.031 75.6384 47.031 75.8248C47.031 76.0113 47.031 76.1977 47.031 76.3804C47.0764 77.7002 47.2097 79.0156 47.43 80.3177Z" fill="#DD6A57"/>
|
||||
<path id="Vector_146" d="M47.0236 74.1135C47.6391 75.2697 48.4994 76.2777 49.5445 77.0672C50.5897 77.8567 51.7945 78.4086 53.0749 78.6846L53.4142 74.2104L47.8215 71.6788L47.0199 71.3544C47.0199 71.3544 47.0236 72.5811 47.0236 74.1135Z" fill="#263238"/>
|
||||
<path id="Vector_147" d="M58.9473 66.828C60.3715 74.5907 55.8824 76.317 54.2084 76.6227C52.6871 76.8986 47.4785 77.6518 45.26 70.0755C43.0416 62.4993 46.1996 59.3897 49.641 58.5732C53.0824 57.7566 57.5192 59.0653 58.9473 66.828Z" fill="#DD6A57"/>
|
||||
<path id="Vector_148" d="M56.4343 64.9862C56.2479 64.9862 56.0615 64.9563 55.8899 64.9414C55.6967 64.9506 55.5057 64.897 55.3456 64.7886C55.3028 64.7442 55.2756 64.687 55.2682 64.6258C55.2608 64.5646 55.2735 64.5026 55.3046 64.4493C55.3818 64.3521 55.484 64.2779 55.6003 64.2345C55.7166 64.1911 55.8425 64.1803 55.9645 64.2032C56.2185 64.2065 56.462 64.3049 56.6468 64.4791C56.6862 64.5216 56.7125 64.5746 56.7226 64.6317C56.7327 64.6888 56.7262 64.7476 56.7038 64.801C56.6814 64.8545 56.644 64.9004 56.5963 64.9332C56.5485 64.966 56.4922 64.9844 56.4343 64.9862Z" fill="#263238"/>
|
||||
<path id="Vector_149" d="M51.0988 65.9182C51.2747 65.8681 51.4477 65.8083 51.6171 65.7393C51.8065 65.7031 51.9784 65.6047 52.1055 65.4596C52.1378 65.4067 52.1513 65.3444 52.1438 65.2829C52.1364 65.2213 52.1084 65.164 52.0645 65.1203C51.9653 65.0458 51.848 64.9992 51.7247 64.9854C51.6014 64.9716 51.4767 64.9912 51.3635 65.042C51.1181 65.11 50.9068 65.2668 50.7707 65.482C50.7424 65.5325 50.7294 65.5901 50.7333 65.6478C50.7372 65.7055 50.7578 65.7608 50.7925 65.8071C50.8273 65.8533 50.8748 65.8884 50.9292 65.9081C50.9835 65.9279 51.0425 65.9314 51.0988 65.9182Z" fill="#263238"/>
|
||||
<path id="Vector_150" d="M52.5604 67.7937C52.5604 67.7937 52.5231 67.8235 52.5268 67.8459C52.6238 68.3754 52.6424 68.998 52.1875 69.2441C52.1875 69.2441 52.1875 69.2776 52.1875 69.2739C52.7729 69.1024 52.7356 68.2784 52.5604 67.7937Z" fill="#263238"/>
|
||||
<path id="Vector_151" d="M52.0049 67.3015C51.1399 67.3649 51.3263 69.0875 52.1279 69.0316C52.9295 68.9756 52.7282 67.2568 52.0049 67.3015Z" fill="#263238"/>
|
||||
<path id="Vector_152" d="M51.673 67.4358C51.535 67.5514 51.4045 67.7378 51.2256 67.7751C51.0466 67.8124 50.8527 67.6558 50.6849 67.4992C50.6849 67.4805 50.6551 67.4992 50.6551 67.5215C50.6887 67.8534 50.8527 68.1778 51.2107 68.1889C51.5686 68.2001 51.7401 67.8795 51.7848 67.5402C51.796 67.4768 51.7326 67.3911 51.673 67.4358Z" fill="#263238"/>
|
||||
<path id="Vector_153" d="M55.655 67.1785C55.655 67.1562 55.6997 67.1972 55.7035 67.2195C55.7408 67.7564 55.8713 68.3642 56.3746 68.491V68.5245C55.7631 68.4984 55.5953 67.6744 55.655 67.1785Z" fill="#263238"/>
|
||||
<path id="Vector_154" d="M56.0651 66.5558C56.9189 66.403 57.1613 68.1218 56.3709 68.2635C55.5804 68.4052 55.3493 66.6975 56.0651 66.5558Z" fill="#263238"/>
|
||||
<path id="Vector_155" d="M56.438 66.6342C56.5872 66.705 56.7475 66.8504 56.9078 66.8392C57.0681 66.8281 57.2136 66.6193 57.3068 66.4254C57.3068 66.403 57.3329 66.4254 57.3366 66.4254C57.3925 66.7498 57.3366 67.1077 57.0234 67.2158C56.7102 67.3239 56.494 67.0629 56.3709 66.746C56.3448 66.7013 56.3784 66.6044 56.438 66.6342Z" fill="#263238"/>
|
||||
<path id="Vector_156" d="M55.1852 69.6766C55.1852 69.6766 55.3903 70.4596 55.435 70.8361C55.435 70.8697 55.3493 70.8995 55.2225 70.9219C54.9073 71.0206 54.5709 71.0304 54.2505 70.9502C53.9301 70.8699 53.6381 70.7027 53.4067 70.467C53.3732 70.4335 53.4067 70.3887 53.4552 70.4074C53.9745 70.6768 54.567 70.7709 55.1442 70.6758C55.1442 70.5714 54.7452 69.3485 54.8012 69.3373C55.0972 69.3251 55.3935 69.3552 55.6811 69.4268C55.3082 67.7825 54.652 66.2128 54.2978 64.5798C54.2978 64.5201 54.3687 64.494 54.391 64.5425C55.1815 66.142 55.6662 68.0249 56.1024 69.7101C56.1509 69.9115 55.3418 69.7213 55.1852 69.6766Z" fill="#263238"/>
|
||||
<path id="Vector_157" d="M55.1852 70.6571C55.0299 71 54.7884 71.2967 54.4843 71.5184C54.3143 71.6317 54.1143 71.6914 53.9101 71.6899C53.4627 71.6899 53.362 71.291 53.362 70.9442C53.3643 70.7582 53.3881 70.573 53.4328 70.3924C53.9737 70.6655 54.5878 70.7582 55.1852 70.6571Z" fill="#263238"/>
|
||||
<path id="Vector_158" d="M54.4843 71.5296C54.3143 71.6429 54.1143 71.7026 53.9101 71.7011C53.4627 71.7011 53.362 71.3022 53.362 70.9554C53.5864 70.9111 53.8191 70.9437 54.0227 71.0479C54.2263 71.152 54.3889 71.3217 54.4843 71.5296Z" fill="#FF9ABB"/>
|
||||
<path id="Vector_159" d="M45.8156 69.6654C47.7022 69.4529 47.814 63.5917 47.8178 62.8721C47.8364 63.327 47.952 65.7281 48.1421 65.8102C48.345 65.7904 48.5429 65.7362 48.7275 65.6498C48.7033 65.3633 48.7033 65.0751 48.7275 64.7886C48.7275 64.6543 48.7983 65.0719 48.9102 65.5865L49.2532 65.4597C49.1844 64.8491 49.1982 64.2321 49.2942 63.6253C49.3315 63.3941 49.4695 64.4083 49.7566 65.2807C51.3352 64.6866 52.9744 64.2677 54.6446 64.0317C55.1144 63.9795 55.5245 63.9534 55.8862 63.9459C55.834 63.2375 55.696 62.4881 55.7594 62.6484C55.9344 63.064 56.0668 63.4962 56.1546 63.9385H56.6953C56.6692 62.9355 56.0726 61.377 56.2516 61.6119C56.784 62.3267 57.175 63.1366 57.4037 63.9981C58.0934 64.0764 58.2948 64.1957 58.2985 64.0168C58.2985 63.6961 57.7057 60.9296 55.3717 59.0467C52.8363 56.996 48.075 56.8096 45.6776 60.43C45.6776 60.43 43.5934 62.0258 43.4405 64.3561C43.2877 66.6864 44.7231 69.7847 45.8156 69.6654Z" fill="#263238"/>
|
||||
<path id="Vector_160" d="M46.606 70.4483C46.606 70.4483 44.656 68.159 43.6232 68.8749C42.5905 69.5908 44.1937 73.0247 45.5471 73.3864C45.7174 73.4445 45.8976 73.4677 46.077 73.4545C46.2564 73.4412 46.4313 73.3918 46.5912 73.3093C46.751 73.2268 46.8925 73.1128 47.0072 72.9742C47.1219 72.8355 47.2074 72.6752 47.2585 72.5027L46.606 70.4483Z" fill="#DD6A57"/>
|
||||
<path id="Vector_161" d="M44.0967 69.8481V69.8817C45.0475 70.1688 45.6105 70.9704 46.0318 71.8205C45.969 71.7347 45.8885 71.6633 45.7959 71.6112C45.7032 71.559 45.6005 71.5273 45.4945 71.5181C45.3886 71.5089 45.2819 71.5225 45.1817 71.558C45.0814 71.5934 44.9899 71.6499 44.9133 71.7236C44.8909 71.7236 44.9133 71.7758 44.9431 71.7683C45.0991 71.7022 45.2718 71.6861 45.4374 71.7222C45.603 71.7582 45.7533 71.8447 45.8678 71.9696C46.0605 72.178 46.2282 72.4083 46.3674 72.6557C46.4196 72.734 46.5612 72.6557 46.524 72.5848V72.5625C46.4233 71.4029 45.357 69.8444 44.0967 69.8481Z" fill="#263238"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 66 KiB |
290
lib/features/auth/provider/user_provider.dart
Normal file
|
|
@ -0,0 +1,290 @@
|
|||
import 'dart:io';
|
||||
import 'package:english_learning/core/services/repositories/user_repository.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:jwt_decoder/jwt_decoder.dart';
|
||||
|
||||
class UserProvider with ChangeNotifier {
|
||||
final UserRepository _userRepository = UserRepository();
|
||||
bool _isLoggedIn = false;
|
||||
String? _jwtToken;
|
||||
Map<String, dynamic>? _userData;
|
||||
File? _selectedImage;
|
||||
|
||||
bool get isLoggedIn => _isLoggedIn;
|
||||
String? get jwtToken => _jwtToken;
|
||||
Map<String, dynamic>? get userData => _userData;
|
||||
File? get selectedImage => _selectedImage;
|
||||
|
||||
UserProvider() {
|
||||
_loadLoginStatus();
|
||||
}
|
||||
|
||||
Future<void> _loadLoginStatus() async {
|
||||
try {
|
||||
_jwtToken = await _userRepository.getToken();
|
||||
if (_jwtToken != null) {
|
||||
if (JwtDecoder.isExpired(_jwtToken!)) {
|
||||
await logout();
|
||||
} else {
|
||||
_isLoggedIn = true;
|
||||
await _loadUserData();
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
print('Error loading login status: $e');
|
||||
}
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<void> _loadUserData() async {
|
||||
_userData = await _userRepository.getUserData();
|
||||
if (_userData == null) {
|
||||
await refreshUserData();
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> refreshUserData() async {
|
||||
try {
|
||||
if (_jwtToken != null) {
|
||||
final response = await _userRepository.getMe(_jwtToken!);
|
||||
if (response.statusCode == 200) {
|
||||
_userData = response.data['payload'];
|
||||
// Save all user data securely
|
||||
await _userRepository.saveUserData(_userData!);
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
print('Error refreshing user data: $e');
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> login({required String email, required String password}) async {
|
||||
try {
|
||||
final response = await _userRepository.loginUser({
|
||||
'EMAIL': email,
|
||||
'PASSWORD': password,
|
||||
});
|
||||
|
||||
if (response.statusCode == 200 &&
|
||||
response.data['payload']['TOKEN'] != null) {
|
||||
String token = response.data['payload']['TOKEN'];
|
||||
String refreshToken = response.data['payload']['REFRESH_TOKEN'];
|
||||
if (token.startsWith('Bearer ')) {
|
||||
token = token.substring(7);
|
||||
}
|
||||
_jwtToken = token;
|
||||
await _userRepository.saveToken(_jwtToken!);
|
||||
await _userRepository.saveRefreshToken(refreshToken);
|
||||
_isLoggedIn = true;
|
||||
await refreshUserData();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
} catch (e) {
|
||||
print('Login error: $e');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> register({
|
||||
required String name,
|
||||
required String email,
|
||||
required String nisn,
|
||||
required String password,
|
||||
required String confirmPassword,
|
||||
}) async {
|
||||
try {
|
||||
final response = await _userRepository.registerUser({
|
||||
"NAME_USERS": name,
|
||||
"EMAIL": email,
|
||||
"NISN": nisn,
|
||||
"PASSWORD": password,
|
||||
"CONFIRM_PASSWORD": confirmPassword,
|
||||
});
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
} catch (e) {
|
||||
print('Registration error: $e');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> logout() async {
|
||||
try {
|
||||
final response = await _userRepository.logoutUser();
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
_isLoggedIn = false;
|
||||
_jwtToken = null;
|
||||
_userData = null;
|
||||
await _userRepository.deleteToken();
|
||||
await _userRepository.deleteRefreshToken();
|
||||
await _userRepository.deleteUserData();
|
||||
notifyListeners();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
} catch (e) {
|
||||
print('Logout error: $e');
|
||||
_isLoggedIn = false;
|
||||
_jwtToken = null;
|
||||
_userData = null;
|
||||
await _userRepository.deleteToken();
|
||||
await _userRepository.deleteRefreshToken();
|
||||
await _userRepository.deleteUserData();
|
||||
notifyListeners();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> forgotPassword({required String email}) async {
|
||||
try {
|
||||
final response = await _userRepository.forgotPassword(email);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
print("Password reset email sent successfully!");
|
||||
return true;
|
||||
} else if (response.statusCode == 404) {
|
||||
print("Email is not registered!");
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
} catch (e) {
|
||||
print('Forgot Password error: $e');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> refreshToken() async {
|
||||
try {
|
||||
final refreshToken = await _userRepository.getRefreshToken();
|
||||
if (refreshToken == null) return false;
|
||||
|
||||
final response =
|
||||
await _userRepository.dioClient.refreshAccessToken(refreshToken);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
String newToken = response.data['payload']['TOKEN'];
|
||||
String newRefreshToken = response.data['payload']['REFRESH_TOKEN'];
|
||||
|
||||
if (newToken.startsWith('Bearer ')) {
|
||||
newToken = newToken.substring(7);
|
||||
}
|
||||
|
||||
_jwtToken = newToken;
|
||||
await _userRepository.saveToken(_jwtToken!);
|
||||
await _userRepository.saveRefreshToken(newRefreshToken);
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
} catch (e) {
|
||||
print('Error refreshing token: $e');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> isTokenValid() async {
|
||||
if (_jwtToken == null) return false;
|
||||
if (JwtDecoder.isExpired(_jwtToken!)) {
|
||||
return await refreshToken();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
Future<String?> getValidToken() async {
|
||||
try {
|
||||
if (await isTokenValid()) {
|
||||
return _jwtToken;
|
||||
}
|
||||
return null;
|
||||
} catch (e) {
|
||||
print('Error in getValidToken: $e');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> updateUserProfile(Map<String, dynamic> updatedData) async {
|
||||
try {
|
||||
final token = await getValidToken();
|
||||
final userId = _userData?['ID'];
|
||||
if (token != null && userId != null) {
|
||||
final response = await _userRepository.updateUserProfile(
|
||||
userId,
|
||||
updatedData,
|
||||
token,
|
||||
imageFile: _selectedImage,
|
||||
);
|
||||
if (response.statusCode == 200) {
|
||||
_userData = response.data['payload'];
|
||||
// Save updated user data securely
|
||||
await _userRepository.saveUserData(_userData!);
|
||||
_selectedImage =
|
||||
null; // Reset the selected image after successful update
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
print('Error updating user profile: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> updatePassword({
|
||||
required String oldPassword,
|
||||
required String newPassword,
|
||||
required String confirmPassword,
|
||||
}) async {
|
||||
try {
|
||||
final token = await getValidToken();
|
||||
final userId = _userData?['ID'];
|
||||
if (token != null && userId != null) {
|
||||
final response = await _userRepository.updatePassword(
|
||||
userId,
|
||||
oldPassword,
|
||||
newPassword,
|
||||
confirmPassword,
|
||||
token,
|
||||
);
|
||||
if (response.statusCode == 200) {
|
||||
print("Password updated successfully!");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
} catch (e) {
|
||||
print('Error updating password: $e');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> reportIssue(String report) async {
|
||||
try {
|
||||
final token = await getValidToken();
|
||||
if (token != null) {
|
||||
final response = await _userRepository.reportIssue(report, token);
|
||||
if (response.statusCode == 201) {
|
||||
print("Issue reported successfully!");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
} catch (e) {
|
||||
print('Error reporting issue: $e');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
String? getUserName() {
|
||||
return _userData?['NAME_USERS'];
|
||||
}
|
||||
|
||||
void setSelectedImage(File? image) {
|
||||
_selectedImage = image;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
198
lib/features/auth/provider/validator_provider.dart
Normal file
|
|
@ -0,0 +1,198 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
class ValidatorProvider extends ChangeNotifier {
|
||||
final Map<String, String?> _errors = {};
|
||||
final Map<String, bool> _obscureFields = {};
|
||||
final Map<String, FocusNode?> _focusNodes = {};
|
||||
final Map<String, TextEditingController> _controllers = {};
|
||||
String? _password;
|
||||
|
||||
bool validateAllFields() {
|
||||
bool isValid = true;
|
||||
|
||||
// Validasi email
|
||||
final emailError = emailValidator(_controllers['email']?.text);
|
||||
_errors['email'] = emailError;
|
||||
if (emailError != null) isValid = false;
|
||||
|
||||
// Validasi nama lengkap
|
||||
final fullNameError = fullNameValidator(_controllers['fullname']?.text);
|
||||
_errors['fullname'] = fullNameError;
|
||||
if (fullNameError != null) isValid = false;
|
||||
|
||||
// Validasi password (jika ada)
|
||||
if (_controllers.containsKey('password')) {
|
||||
final passwordError = passwordValidator(_controllers['password']?.text);
|
||||
_errors['password'] = passwordError;
|
||||
if (passwordError != null) isValid = false;
|
||||
}
|
||||
|
||||
// Validasi konfirmasi password (jika ada)
|
||||
if (_controllers.containsKey('confirmPassword')) {
|
||||
final confirmPasswordError =
|
||||
confirmPasswordValidator(_controllers['confirmPassword']?.text);
|
||||
_errors['confirmPassword'] = confirmPasswordError;
|
||||
if (confirmPasswordError != null) isValid = false;
|
||||
}
|
||||
|
||||
// Validasi NISN (jika ada)
|
||||
if (_controllers.containsKey('nisn')) {
|
||||
final nisnError = nisnValidator(_controllers['nisn']?.text);
|
||||
_errors['nisn'] = nisnError;
|
||||
if (nisnError != null) isValid = false;
|
||||
}
|
||||
|
||||
notifyListeners();
|
||||
return isValid;
|
||||
}
|
||||
|
||||
// Mengambil error untuk field tertentu
|
||||
String? getError(String field) => _errors[field];
|
||||
|
||||
// Memeriksa apakah field tertentu sedang disembunyikan (obscure)
|
||||
bool isObscure(String field) => _obscureFields[field] ?? true;
|
||||
|
||||
// Mengambil FocusNode untuk field tertentu
|
||||
FocusNode? getFocusNode(String field) => _focusNodes[field];
|
||||
|
||||
// Toggle visibility untuk field tertentu
|
||||
void toggleVisibility(String field) {
|
||||
_obscureFields[field] = !(isObscure(field));
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
// Mengatur FocusNode untuk field tertentu
|
||||
void setFocusNode(String field, FocusNode focusNode) {
|
||||
_focusNodes[field] = focusNode;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
// Validasi field tertentu dengan validator yang diberikan
|
||||
void validateField(String field, String? value,
|
||||
{String? Function(String?)? validator}) {
|
||||
// Jika validator tidak null, gunakan untuk memvalidasi nilai field
|
||||
final error = validator != null ? validator(value) : null;
|
||||
_errors[field] = error;
|
||||
|
||||
// Simpan password jika field adalah 'password'
|
||||
if (field == 'password') {
|
||||
_password = value;
|
||||
}
|
||||
|
||||
// Validasi confirm password jika field adalah 'confirmPassword'
|
||||
if (field == 'confirmPassword') {
|
||||
_errors[field] = confirmPasswordValidator(value);
|
||||
}
|
||||
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
// Reset the fields and clear errors
|
||||
void resetFields() {
|
||||
_errors.clear();
|
||||
_obscureFields.clear();
|
||||
_password = null;
|
||||
|
||||
for (final controller in _controllers.values) {
|
||||
controller.clear();
|
||||
}
|
||||
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
// Set TextEditingController for a field
|
||||
void setController(String field, TextEditingController controller) {
|
||||
_controllers[field] = controller;
|
||||
}
|
||||
|
||||
// Remove TextEditingController when not needed anymore
|
||||
void removeController(String field) {
|
||||
_controllers.remove(field);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
// Dispose controllers and focus nodes
|
||||
for (final controller in _controllers.values) {
|
||||
controller.dispose();
|
||||
}
|
||||
for (final focusNode in _focusNodes.values) {
|
||||
focusNode?.dispose();
|
||||
}
|
||||
_controllers.clear();
|
||||
_focusNodes.clear();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
// Validator email
|
||||
String? emailValidator(String? value) {
|
||||
if (value == null || value.isEmpty) {
|
||||
return 'Email cannot be empty';
|
||||
}
|
||||
const emailRegex = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$";
|
||||
if (!RegExp(emailRegex).hasMatch(value)) {
|
||||
return 'Invalid email format (e.g. example@gmail.com)';
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// Validator password
|
||||
String? passwordValidator(String? value) {
|
||||
if (value == null || value.isEmpty) {
|
||||
return 'Password cannot be empty';
|
||||
} else if (value.length < 8) {
|
||||
return 'Password must be at least 8 characters long';
|
||||
}
|
||||
_password = value;
|
||||
return null;
|
||||
}
|
||||
|
||||
// Validator untuk konfirmasi password
|
||||
String? confirmPasswordValidator(String? value) {
|
||||
if (value == null || value.isEmpty) {
|
||||
return 'Please confirm your password';
|
||||
} else if (value != _password) {
|
||||
return 'Passwords do not match';
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// Validator NISN
|
||||
String? nisnValidator(String? value) {
|
||||
if (value == null || value.isEmpty) {
|
||||
return 'NISN cannot be empty';
|
||||
} else if (value.length != 10 || !RegExp(r'^\d{10}$').hasMatch(value)) {
|
||||
return 'NISN must be exactly 10 digits';
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// Validator nama lengkap
|
||||
String? fullNameValidator(String? value) {
|
||||
if (value == null || value.isEmpty) {
|
||||
return 'Full name cannot be empty';
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// Menghapus error dari field tertentu
|
||||
void clearError(String field) {
|
||||
_errors[field] = null;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
// Menghapus semua error
|
||||
void clearErrors() {
|
||||
_errors.clear();
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
// Menghapus FocusNode saat tidak diperlukan lagi
|
||||
void disposeFocusNodes() {
|
||||
for (final focusNode in _focusNodes.values) {
|
||||
focusNode?.dispose();
|
||||
}
|
||||
_focusNodes.clear();
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,171 @@
|
|||
import 'package:english_learning/features/auth/provider/user_provider.dart';
|
||||
import 'package:english_learning/features/auth/provider/validator_provider.dart';
|
||||
import 'package:english_learning/features/auth/screens/signin/signin_screen.dart';
|
||||
import 'package:english_learning/core/widgets/form_field/custom_field_widget.dart';
|
||||
import 'package:english_learning/core/widgets/global_button.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/features/auth/widgets/dialog/forgot_password_verification.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class ForgotPasswordScreen extends StatefulWidget {
|
||||
const ForgotPasswordScreen({super.key});
|
||||
|
||||
@override
|
||||
State<ForgotPasswordScreen> createState() => _ForgotPasswordScreenState();
|
||||
}
|
||||
|
||||
class _ForgotPasswordScreenState extends State<ForgotPasswordScreen> {
|
||||
final TextEditingController _emailController = TextEditingController();
|
||||
bool _isLoading = false;
|
||||
Future<void> _handleForgotPassword() async {
|
||||
setState(() {
|
||||
_isLoading = true;
|
||||
});
|
||||
|
||||
final userProvider = Provider.of<UserProvider>(context, listen: false);
|
||||
bool success = await userProvider.forgotPassword(
|
||||
email: _emailController.text,
|
||||
);
|
||||
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
|
||||
if (success) {
|
||||
showDialog(
|
||||
context: context,
|
||||
barrierDismissible: false,
|
||||
builder: (BuildContext context) {
|
||||
return ForgotPasswordVerification(
|
||||
onSubmit: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => SigninScreen(),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
} else {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(
|
||||
content: Text('Email is not registered!'),
|
||||
backgroundColor: AppColors.redColor,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final mediaQuery = MediaQuery.of(context);
|
||||
final screenHeight = mediaQuery.size.height;
|
||||
|
||||
return Scaffold(
|
||||
backgroundColor: AppColors.whiteColor,
|
||||
body: SingleChildScrollView(
|
||||
child: Center(
|
||||
child: Container(
|
||||
margin: const EdgeInsets.symmetric(horizontal: 16),
|
||||
child: Consumer<ValidatorProvider>(
|
||||
builder: (context, validatorProvider, child) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SizedBox(height: screenHeight * 0.15),
|
||||
Text(
|
||||
'Forgot Password?',
|
||||
style: AppTextStyles.blueTextStyle.copyWith(
|
||||
fontSize: 30,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
'Enter your email and we will send you a link to reset your password',
|
||||
style: AppTextStyles.tetriaryTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
),
|
||||
SizedBox(height: screenHeight * 0.05),
|
||||
const Center(
|
||||
child: Image(
|
||||
image: AssetImage(
|
||||
'lib/features/auth/assets/images/shrug.png'),
|
||||
width: 200,
|
||||
height: 205.37,
|
||||
),
|
||||
),
|
||||
SizedBox(height: screenHeight * 0.08),
|
||||
CustomFieldWidget(
|
||||
controller: _emailController,
|
||||
fieldName: 'email',
|
||||
isRequired: true,
|
||||
textInputAction: TextInputAction.next,
|
||||
labelText: 'Email Address',
|
||||
hintText: 'Enter Your Email Address',
|
||||
keyboardType: TextInputType.emailAddress,
|
||||
validator: validatorProvider.emailValidator,
|
||||
onChanged: (value) {
|
||||
validatorProvider.validateField(
|
||||
'email',
|
||||
value,
|
||||
validator: validatorProvider.emailValidator,
|
||||
);
|
||||
},
|
||||
errorText: validatorProvider.getError('email'),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
_isLoading
|
||||
? const Center(child: CircularProgressIndicator())
|
||||
: GlobalButton(
|
||||
text: 'Submit',
|
||||
onPressed: _handleForgotPassword,
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
'Remember the password? ',
|
||||
style: AppTextStyles.blackButtonTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
),
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => SigninScreen()),
|
||||
);
|
||||
},
|
||||
child: Text(
|
||||
'Login',
|
||||
style: AppTextStyles.blueTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
);
|
||||
}),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
class LoginScreen extends StatefulWidget {
|
||||
const LoginScreen({super.key});
|
||||
|
||||
@override
|
||||
State<LoginScreen> createState() => _LoginScreenState();
|
||||
}
|
||||
|
||||
class _LoginScreenState extends State<LoginScreen> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return const Scaffold(
|
||||
body: Center(child: Text('Login Screen')),
|
||||
);
|
||||
}
|
||||
}
|
||||
215
lib/features/auth/screens/signin/signin_screen.dart
Normal file
|
|
@ -0,0 +1,215 @@
|
|||
import 'package:english_learning/features/auth/provider/user_provider.dart';
|
||||
import 'package:english_learning/features/auth/provider/validator_provider.dart';
|
||||
import 'package:english_learning/features/auth/screens/forgot_password/forgot_password_screen.dart';
|
||||
import 'package:english_learning/features/auth/screens/signup/signup_screen.dart';
|
||||
import 'package:english_learning/features/home/screens/home_screen.dart';
|
||||
import 'package:english_learning/core/widgets/form_field/custom_field_widget.dart';
|
||||
import 'package:english_learning/core/widgets/global_button.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class SigninScreen extends StatelessWidget {
|
||||
final TextEditingController _emailController = TextEditingController();
|
||||
final TextEditingController _passwordController = TextEditingController();
|
||||
|
||||
SigninScreen({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final userProvider = Provider.of<UserProvider>(context, listen: false);
|
||||
Provider.of<ValidatorProvider>(context, listen: false);
|
||||
|
||||
return Scaffold(
|
||||
backgroundColor: AppColors.whiteColor,
|
||||
body: Center(
|
||||
child: Container(
|
||||
margin: const EdgeInsets.symmetric(horizontal: 16),
|
||||
child: SingleChildScrollView(
|
||||
child: Consumer<ValidatorProvider>(
|
||||
builder: (context, validatorProvider, child) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
const SizedBox(height: 32),
|
||||
Text(
|
||||
'Welcome Back!',
|
||||
style: AppTextStyles.blueTextStyle.copyWith(
|
||||
fontSize: 30,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
'Login to continue your personalized learning journey.',
|
||||
style: AppTextStyles.greyTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 26),
|
||||
Center(
|
||||
child: SvgPicture.asset(
|
||||
'lib/features/auth/assets/images/login_illustration.svg',
|
||||
width: 200,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 30),
|
||||
CustomFieldWidget(
|
||||
fieldName: 'email',
|
||||
controller: _emailController,
|
||||
isRequired: true,
|
||||
textInputAction: TextInputAction.next,
|
||||
labelText: 'Email Address',
|
||||
hintText: 'Enter Your Email Address',
|
||||
keyboardType: TextInputType.emailAddress,
|
||||
validator: validatorProvider.emailValidator,
|
||||
onChanged: (value) {
|
||||
validatorProvider.validateField(
|
||||
'email',
|
||||
value,
|
||||
validator: validatorProvider.emailValidator,
|
||||
);
|
||||
},
|
||||
errorText: validatorProvider.getError('email'),
|
||||
),
|
||||
const SizedBox(height: 14),
|
||||
CustomFieldWidget(
|
||||
fieldName: 'password',
|
||||
controller: _passwordController,
|
||||
isRequired: true,
|
||||
textInputAction: TextInputAction.next,
|
||||
labelText: 'Password',
|
||||
hintText: 'Create a Strong Password',
|
||||
obscureText: validatorProvider.isObscure('password'),
|
||||
keyboardType: TextInputType.visiblePassword,
|
||||
validator: validatorProvider.passwordValidator,
|
||||
onChanged: (value) {
|
||||
validatorProvider.validateField(
|
||||
'password',
|
||||
value,
|
||||
validator: validatorProvider.passwordValidator,
|
||||
);
|
||||
},
|
||||
onSuffixIconTap: () =>
|
||||
validatorProvider.toggleVisibility('password'),
|
||||
errorText: validatorProvider.getError('password'),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) =>
|
||||
const ForgotPasswordScreen()),
|
||||
);
|
||||
},
|
||||
child: ShaderMask(
|
||||
shaderCallback: (bounds) =>
|
||||
AppColors.gradientTheme.createShader(
|
||||
Rect.fromLTWH(0, 0, bounds.width, bounds.height),
|
||||
),
|
||||
child: const Text(
|
||||
'Forgot Password?',
|
||||
style: TextStyle(
|
||||
fontSize: 13,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
GlobalButton(
|
||||
text: 'Login',
|
||||
onPressed: () async {
|
||||
// Validate email and password fields
|
||||
validatorProvider.validateField(
|
||||
'email',
|
||||
_emailController.text,
|
||||
validator: validatorProvider.emailValidator,
|
||||
);
|
||||
validatorProvider.validateField(
|
||||
'password',
|
||||
_passwordController.text,
|
||||
validator: validatorProvider.passwordValidator,
|
||||
);
|
||||
|
||||
// If no errors, proceed with login
|
||||
if (validatorProvider.getError('email') == null &&
|
||||
validatorProvider.getError('password') == null) {
|
||||
final isSuccess = await userProvider.login(
|
||||
email: _emailController.text,
|
||||
password: _passwordController.text,
|
||||
);
|
||||
|
||||
if (isSuccess) {
|
||||
// Navigate to HomeScreen after successful login
|
||||
Navigator.pushAndRemoveUntil(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => const HomeScreen()),
|
||||
(Route<dynamic> route) =>
|
||||
false, // Remove all previous routes
|
||||
).then((_) {
|
||||
// Reset the fields after login
|
||||
validatorProvider.resetFields();
|
||||
_emailController.clear();
|
||||
_passwordController.clear();
|
||||
});
|
||||
} else {
|
||||
// Show error message
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(
|
||||
content: Text(
|
||||
'Login failed, please check your credentials'),
|
||||
backgroundColor: Colors.red,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
'Haven\'t joined us yet? ',
|
||||
style: AppTextStyles.blackTextStyle
|
||||
.copyWith(fontSize: 14),
|
||||
),
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => SignupScreen()),
|
||||
);
|
||||
},
|
||||
child: Text(
|
||||
'Sign Up Here',
|
||||
style: AppTextStyles.blueTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/features/auth/provider/validator_provider.dart';
|
||||
|
||||
class LoginEmailField extends StatefulWidget {
|
||||
const LoginEmailField({super.key});
|
||||
|
||||
@override
|
||||
_LoginEmailFieldState createState() => _LoginEmailFieldState();
|
||||
}
|
||||
|
||||
class _LoginEmailFieldState extends State<LoginEmailField> {
|
||||
late FocusNode _focusNode;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_focusNode = FocusNode();
|
||||
|
||||
_focusNode.addListener(() {
|
||||
if (!_focusNode.hasFocus) {
|
||||
final validatorProvider =
|
||||
Provider.of<ValidatorProvider>(context, listen: false);
|
||||
validatorProvider.validateField(
|
||||
'email', validatorProvider.getError('email'),
|
||||
validator: validatorProvider.emailValidator);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_focusNode.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final validatorProvider = Provider.of<ValidatorProvider>(context);
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'Email',
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
TextField(
|
||||
focusNode: _focusNode,
|
||||
keyboardType: TextInputType.emailAddress,
|
||||
onChanged: (value) {
|
||||
validatorProvider.validateField('email', value,
|
||||
validator: validatorProvider.emailValidator);
|
||||
},
|
||||
decoration: InputDecoration(
|
||||
hintText: 'Enter Your Email Address',
|
||||
hintStyle: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
),
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
borderSide: const BorderSide(
|
||||
color: AppColors.disableColor,
|
||||
width: 1,
|
||||
),
|
||||
),
|
||||
errorText: validatorProvider.getError('email'),
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
import 'package:english_learning/features/auth/provider/validator_provider.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:bootstrap_icons/bootstrap_icons.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class LoginPasswordField extends StatefulWidget {
|
||||
const LoginPasswordField({super.key});
|
||||
|
||||
@override
|
||||
_LoginPasswordFieldState createState() => _LoginPasswordFieldState();
|
||||
}
|
||||
|
||||
class _LoginPasswordFieldState extends State<LoginPasswordField> {
|
||||
late FocusNode _focusNode;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_focusNode = FocusNode();
|
||||
|
||||
_focusNode.addListener(() {
|
||||
if (!_focusNode.hasFocus) {
|
||||
final validatorProvider =
|
||||
Provider.of<ValidatorProvider>(context, listen: false);
|
||||
validatorProvider.validateField(
|
||||
'password', validatorProvider.getError('password'),
|
||||
validator: validatorProvider.passwordValidator);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_focusNode.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final validatorProvider = Provider.of<ValidatorProvider>(context);
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'Password',
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
TextField(
|
||||
focusNode: _focusNode,
|
||||
obscureText: validatorProvider.isObscure('password'),
|
||||
onChanged: (value) {
|
||||
validatorProvider.validateField('password', value,
|
||||
validator: validatorProvider.passwordValidator);
|
||||
},
|
||||
decoration: InputDecoration(
|
||||
hintText: 'Enter Your Password',
|
||||
hintStyle: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
),
|
||||
suffixIcon: GestureDetector(
|
||||
onTap: () => validatorProvider.toggleVisibility('password'),
|
||||
child: AnimatedSwitcher(
|
||||
duration: const Duration(milliseconds: 300),
|
||||
transitionBuilder: (Widget child, Animation<double> animation) {
|
||||
return ScaleTransition(scale: animation, child: child);
|
||||
},
|
||||
child: Icon(
|
||||
validatorProvider.isObscure('password')
|
||||
? BootstrapIcons.eye_slash
|
||||
: BootstrapIcons.eye,
|
||||
color: AppColors.greyColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
borderSide: const BorderSide(
|
||||
width: 1,
|
||||
color: AppColors.disableColor,
|
||||
),
|
||||
),
|
||||
errorText: validatorProvider.getError('password'),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
257
lib/features/auth/screens/signup/signup_screen.dart
Normal file
|
|
@ -0,0 +1,257 @@
|
|||
import 'package:english_learning/features/auth/provider/user_provider.dart';
|
||||
import 'package:english_learning/features/auth/provider/validator_provider.dart';
|
||||
import 'package:english_learning/features/auth/screens/signin/signin_screen.dart';
|
||||
import 'package:english_learning/core/widgets/form_field/custom_field_widget.dart';
|
||||
import 'package:english_learning/core/widgets/global_button.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/features/auth/widgets/dialog/signup_verification.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class SignupScreen extends StatelessWidget {
|
||||
final TextEditingController _emailController = TextEditingController();
|
||||
final TextEditingController _passwordController = TextEditingController();
|
||||
final TextEditingController _nisnController = TextEditingController();
|
||||
final TextEditingController _nameController = TextEditingController();
|
||||
|
||||
SignupScreen({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final userProvider = Provider.of<UserProvider>(context, listen: false);
|
||||
Provider.of<ValidatorProvider>(context, listen: false);
|
||||
|
||||
final mediaQuery = MediaQuery.of(context);
|
||||
final screenHeight = mediaQuery.size.height;
|
||||
|
||||
return Scaffold(
|
||||
backgroundColor: AppColors.whiteColor,
|
||||
body: Center(
|
||||
child: Container(
|
||||
margin: const EdgeInsets.symmetric(horizontal: 16),
|
||||
child: SingleChildScrollView(
|
||||
child: Consumer<ValidatorProvider>(
|
||||
builder: (context, validatorProvider, child) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SizedBox(height: screenHeight * 0.05),
|
||||
Text(
|
||||
'👋 Hi!, you here!',
|
||||
style: AppTextStyles.blueTextStyle.copyWith(
|
||||
fontSize: 24,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
'Let\'s start by creating your account first',
|
||||
style: AppTextStyles.greyTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 49),
|
||||
CustomFieldWidget(
|
||||
controller: _nisnController,
|
||||
fieldName: 'nisn',
|
||||
isRequired: true,
|
||||
textInputAction: TextInputAction.next,
|
||||
labelText: 'NISN',
|
||||
hintText: 'Enter Your NISN',
|
||||
keyboardType: TextInputType.number,
|
||||
validator: validatorProvider.nisnValidator,
|
||||
onChanged: (value) {
|
||||
validatorProvider.validateField('nisn', value,
|
||||
validator: validatorProvider.nisnValidator);
|
||||
},
|
||||
errorText: validatorProvider.getError('nisn'),
|
||||
),
|
||||
const SizedBox(height: 14),
|
||||
CustomFieldWidget(
|
||||
controller: _nameController,
|
||||
fieldName: 'name',
|
||||
isRequired: true,
|
||||
textInputAction: TextInputAction.next,
|
||||
labelText: 'Full Name',
|
||||
hintText: 'Enter Your Full Name',
|
||||
keyboardType: TextInputType.text,
|
||||
validator: validatorProvider.fullNameValidator,
|
||||
onChanged: (value) {
|
||||
validatorProvider.validateField(
|
||||
'fullname',
|
||||
value,
|
||||
validator: validatorProvider.fullNameValidator,
|
||||
);
|
||||
},
|
||||
errorText: validatorProvider.getError('name'),
|
||||
),
|
||||
const SizedBox(height: 14),
|
||||
CustomFieldWidget(
|
||||
controller: _emailController,
|
||||
fieldName: 'email',
|
||||
isRequired: true,
|
||||
textInputAction: TextInputAction.next,
|
||||
labelText: 'Email Address',
|
||||
hintText: 'Enter Your Email Address',
|
||||
keyboardType: TextInputType.emailAddress,
|
||||
validator: validatorProvider.emailValidator,
|
||||
onChanged: (value) {
|
||||
validatorProvider.validateField(
|
||||
'email',
|
||||
value,
|
||||
validator: validatorProvider.emailValidator,
|
||||
);
|
||||
},
|
||||
errorText: validatorProvider.getError('email'),
|
||||
),
|
||||
const SizedBox(height: 14),
|
||||
CustomFieldWidget(
|
||||
controller: _passwordController,
|
||||
fieldName: 'password',
|
||||
isRequired: true,
|
||||
textInputAction: TextInputAction.next,
|
||||
labelText: 'Password',
|
||||
hintText: 'Create a Strong Password',
|
||||
obscureText: validatorProvider.isObscure('password'),
|
||||
keyboardType: TextInputType.visiblePassword,
|
||||
validator: validatorProvider.passwordValidator,
|
||||
onChanged: (value) {
|
||||
validatorProvider.validateField(
|
||||
'password',
|
||||
value,
|
||||
validator: validatorProvider.passwordValidator,
|
||||
);
|
||||
},
|
||||
onSuffixIconTap: () =>
|
||||
validatorProvider.toggleVisibility('password'),
|
||||
errorText: validatorProvider.getError('password'),
|
||||
),
|
||||
const SizedBox(height: 14),
|
||||
CustomFieldWidget(
|
||||
fieldName: 'confirmPassword',
|
||||
isRequired: true,
|
||||
textInputAction: TextInputAction.next,
|
||||
labelText: 'Confirm Password',
|
||||
hintText: 'Retype Your Password',
|
||||
obscureText:
|
||||
validatorProvider.isObscure('confirmPassword'),
|
||||
keyboardType: TextInputType.visiblePassword,
|
||||
validator: validatorProvider.confirmPasswordValidator,
|
||||
onChanged: (value) {
|
||||
validatorProvider.validateField(
|
||||
'confirmPassword',
|
||||
value,
|
||||
validator: validatorProvider.confirmPasswordValidator,
|
||||
);
|
||||
},
|
||||
onSuffixIconTap: () =>
|
||||
validatorProvider.toggleVisibility('confirmPassword'),
|
||||
errorText: validatorProvider.getError('confirmPassword'),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
GlobalButton(
|
||||
text: 'Sign Up',
|
||||
onPressed: () async {
|
||||
// Validate all fields
|
||||
validatorProvider.validateField(
|
||||
'nisn', _nisnController.text,
|
||||
validator: validatorProvider.nisnValidator);
|
||||
validatorProvider.validateField(
|
||||
'name', _nameController.text,
|
||||
validator: validatorProvider.fullNameValidator);
|
||||
validatorProvider.validateField(
|
||||
'email', _emailController.text,
|
||||
validator: validatorProvider.emailValidator);
|
||||
validatorProvider.validateField(
|
||||
'password', _passwordController.text,
|
||||
validator: validatorProvider.passwordValidator);
|
||||
validatorProvider.validateField(
|
||||
'confirmPassword', _passwordController.text,
|
||||
validator:
|
||||
validatorProvider.confirmPasswordValidator);
|
||||
|
||||
// If no error, proceed with registration
|
||||
if (validatorProvider.getError('nisn') == null &&
|
||||
validatorProvider.getError('name') == null &&
|
||||
validatorProvider.getError('email') == null &&
|
||||
validatorProvider.getError('password') == null &&
|
||||
validatorProvider.getError('confirmPassword') ==
|
||||
null) {
|
||||
// Call the register method with required data
|
||||
final isSuccess = await userProvider.register(
|
||||
name: _nameController.text,
|
||||
email: _emailController.text,
|
||||
nisn: _nisnController.text,
|
||||
password: _passwordController.text,
|
||||
confirmPassword: _passwordController.text,
|
||||
);
|
||||
|
||||
if (isSuccess) {
|
||||
// Show success dialog
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return SignupVerification(
|
||||
onSubmit: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => SigninScreen(),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
} else {
|
||||
// Show error message
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(
|
||||
content: Text('Registration failed'),
|
||||
backgroundColor: Colors.red,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
'Already have an account?',
|
||||
style: AppTextStyles.blackTextStyle
|
||||
.copyWith(fontSize: 14),
|
||||
),
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => SigninScreen()),
|
||||
).then((_) {
|
||||
context.read<ValidatorProvider>().resetFields();
|
||||
});
|
||||
},
|
||||
child: Text(
|
||||
' Login Here',
|
||||
style: AppTextStyles.blueTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
class SignupScreen extends StatefulWidget {
|
||||
const SignupScreen({super.key});
|
||||
|
||||
@override
|
||||
State<SignupScreen> createState() => _SignupScreenState();
|
||||
}
|
||||
|
||||
class _SignupScreenState extends State<SignupScreen> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return const Scaffold(
|
||||
body: Center(child: Text('Signup Screen')),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/core/widgets/global_button.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
|
||||
class ForgotPasswordVerification extends StatelessWidget {
|
||||
final VoidCallback onSubmit;
|
||||
|
||||
const ForgotPasswordVerification({
|
||||
super.key,
|
||||
required this.onSubmit,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Dialog(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
),
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(24.0),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
RichText(
|
||||
textAlign: TextAlign.center,
|
||||
text: TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: 'Check Your',
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
TextSpan(
|
||||
text: ' Email',
|
||||
style: AppTextStyles.blueTextStyle.copyWith(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
TextSpan(
|
||||
text: '!',
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
SvgPicture.asset(
|
||||
'lib/features/auth/assets/images/forgot_password_illustration.svg',
|
||||
width: 160,
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
Text(
|
||||
'We\'ve sent a link to your email to help you reset your password. Please check your inbox to continue..',
|
||||
textAlign: TextAlign.center,
|
||||
style: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
GlobalButton(
|
||||
text: 'Okay',
|
||||
onPressed: onSubmit,
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
76
lib/features/auth/widgets/dialog/signup_verification.dart
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/core/widgets/global_button.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
|
||||
class SignupVerification extends StatelessWidget {
|
||||
final VoidCallback onSubmit;
|
||||
|
||||
const SignupVerification({
|
||||
super.key,
|
||||
required this.onSubmit,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Dialog(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
),
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(24.0),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
RichText(
|
||||
textAlign: TextAlign.center,
|
||||
text: TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: 'Account Verification',
|
||||
style: AppTextStyles.blueTextStyle.copyWith(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
TextSpan(
|
||||
text: ' in Progress',
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
SvgPicture.asset(
|
||||
'lib/features/auth/assets/images/signup_verification.svg',
|
||||
width: 160,
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
Text(
|
||||
'Your Registration is complete, but we need to verify your details. We\'ll notify you once your account is ready.',
|
||||
textAlign: TextAlign.center,
|
||||
style: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
GlobalButton(
|
||||
text: 'Okay',
|
||||
onPressed: onSubmit,
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
210
lib/features/history/assets/images/is_empty_illustration.svg
Normal file
|
|
@ -0,0 +1,210 @@
|
|||
<svg width="202" height="210" viewBox="0 0 202 210" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="work-time/cuate">
|
||||
<g id="background-complete">
|
||||
<path id="Vector" d="M8.6925 161.636H67.7578L69.6574 124.157H6.79297L8.6925 161.636Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_2" d="M63.4285 141.299H11.4173L10.7026 128.288H64.263L63.4285 141.299ZM11.8507 140.838H62.9951L63.7743 128.749H11.1821L11.8507 140.838Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_3" d="M62.7236 156.283H12.93L12.3398 144.526H63.4566L62.7236 156.283ZM13.3449 155.822H62.2902L62.9679 144.987H12.8009L13.3449 155.822Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_4" d="M43.4007 136.227H32.3769L31.9712 133.087H43.8064L43.4007 136.227ZM32.7965 135.766H42.9995L43.2854 133.548H32.4968L32.7965 135.766Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_5" d="M43.4007 151.977H32.3769L31.9712 148.841H43.8064L43.4007 151.977ZM32.7965 151.516H42.9995L43.2854 149.303H32.4968L32.7965 151.516Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_6" d="M16.8853 161.636L16.3136 165.716L15.1564 173.923H12.9019V161.636H16.8853Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_7" d="M16.8853 161.636L16.3136 165.716H12.9019V161.636H16.8853Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_8" d="M59.5698 161.636L60.1415 165.716L61.2942 173.923H63.5487V161.636H59.5698Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_9" d="M59.5698 161.636L60.1415 165.716H63.5487V161.636H59.5698Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_10" d="M122.227 15.0489H100.456V44.9804H122.227V15.0489Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_11" d="M146.45 15.0489H124.679V44.9804H146.45V15.0489Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_12" d="M122.227 47.4332H100.456V77.3647H122.227V47.4332Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_13" d="M146.45 47.4332H124.679V77.3647H146.45V47.4332Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_14" d="M172.209 15.0489H150.438V44.9804H172.209V15.0489Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_15" d="M196.433 15.0489H174.662V44.9804H196.433V15.0489Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_16" d="M172.209 47.4332H150.438V77.3647H172.209V47.4332Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_17" d="M196.433 47.4332H174.662V77.3647H196.433V47.4332Z" fill="#EBEBEB"/>
|
||||
</g>
|
||||
<g id="Shadows">
|
||||
<path id="Vector_18" d="M176.76 206.805C188.559 206.805 198.125 204.555 198.125 201.779C198.125 199.004 188.559 196.754 176.76 196.754C164.96 196.754 155.395 199.004 155.395 201.779C155.395 204.555 164.96 206.805 176.76 206.805Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_19" d="M106.846 198.013C147.775 198.013 180.955 193.841 180.955 188.695C180.955 183.549 147.775 179.377 106.846 179.377C65.9163 179.377 32.7363 183.549 32.7363 188.695C32.7363 193.841 65.9163 198.013 106.846 198.013Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_20" d="M97.2652 210C138.195 210 171.375 205.828 171.375 200.682C171.375 195.536 138.195 191.364 97.2652 191.364C56.3357 191.364 23.1558 195.536 23.1558 200.682C23.1558 205.828 56.3357 210 97.2652 210Z" fill="#EBEBEB"/>
|
||||
</g>
|
||||
<g id="Floor">
|
||||
<path id="Vector_21" d="M4.24316 173.923L27.5908 173.807L50.9385 173.77L97.6338 173.692L144.329 173.77L167.677 173.807L191.024 173.923L167.677 174.033L144.329 174.075L97.6338 174.153L50.9385 174.075L27.5908 174.033L4.24316 173.923Z" fill="#263238"/>
|
||||
</g>
|
||||
<g id="Clock">
|
||||
<path id="Vector_22" d="M97.3429 58.2652C100.953 33.3062 83.6461 10.1464 58.6871 6.53646C33.7281 2.92647 10.5683 20.2333 6.95834 45.1923C3.34835 70.1513 20.6552 93.3111 45.6142 96.921C70.5732 100.531 93.7329 83.2242 97.3429 58.2652Z" fill="#407BFF"/>
|
||||
<path id="Vector_23" opacity="0.1" d="M97.7654 54.6942C98.8402 30.6555 80.2243 10.2971 56.1856 9.22228C32.1469 8.14751 11.7884 26.7634 10.7136 50.8021C9.63885 74.8408 28.2548 95.1993 52.2935 96.2741C76.3322 97.3489 96.6906 78.7329 97.7654 54.6942Z" fill="black"/>
|
||||
<path id="Vector_24" d="M94.999 54.9757C96.2259 32.4666 78.9733 13.2247 56.4642 11.9977C33.955 10.7708 14.7131 28.0234 13.4862 50.5326C12.2593 73.0417 29.5119 92.2836 52.021 93.5106C74.5302 94.7375 93.7721 77.4848 94.999 54.9757Z" fill="white"/>
|
||||
<path id="Vector_25" d="M94.135 44.0859C75.5454 55.3494 44.9961 73.8237 27.9233 83.953C23.0966 79.8828 19.2791 74.7491 16.7705 68.955L73.2401 16.6165C78.516 19.3936 83.1204 23.2916 86.73 28.0369C90.3396 32.7823 92.867 38.2601 94.135 44.0859Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_26" d="M95.0291 54.16C94.8813 58.7015 93.9695 63.1858 92.332 67.4244L41.4227 91.5052C39.2039 90.7718 37.0534 89.8462 34.9956 88.7388C50.3717 79.8636 78.4728 63.6945 95.0291 54.16Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_27" d="M54.6365 14.8969H53.8481V21.0842H54.6365V14.8969Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_28" d="M35.6559 19.7661L34.9731 20.1603L38.0668 25.5187L38.7496 25.1245L35.6559 19.7661Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_29" d="M21.6505 33.4752L21.2563 34.158L26.6147 37.2516L27.0089 36.5689L21.6505 33.4752Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_30" d="M22.575 52.3573H16.3877V53.1457H22.575V52.3573Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_31" d="M26.6157 68.2449L21.2573 71.3386L21.6515 72.0213L27.0099 68.9277L26.6157 68.2449Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_32" d="M38.065 79.9792L34.9741 85.3392L35.6571 85.7331L38.7479 80.3731L38.065 79.9792Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_33" d="M54.6365 84.4187H53.8481V90.6061H54.6365V84.4187Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_34" d="M70.4167 79.9792L69.7339 80.3734L72.8275 85.7318L73.5103 85.3376L70.4167 79.9792Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_35" d="M81.861 68.2365L81.4668 68.9192L86.8252 72.0129L87.2194 71.3301L81.861 68.2365Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_36" d="M92.097 52.3573H85.9097V53.1457H92.097V52.3573Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_37" d="M86.8286 33.4887L81.4702 36.5824L81.8644 37.2651L87.2228 34.1715L86.8286 33.4887Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_38" d="M72.8291 19.7728L69.7383 25.1328L70.4213 25.5266L73.5121 20.1666L72.8291 19.7728Z" fill="#C7C7C7"/>
|
||||
<path id="Vector_39" d="M54.8349 17.6953L56.1765 55.5062L52.3037 55.4554L53.7837 17.6861L54.8349 17.6953Z" fill="#407BFF"/>
|
||||
<path id="Vector_40" d="M78.3851 39.563L52.9489 55.8012L51.1001 52.3987L77.8826 38.6409L78.3851 39.563Z" fill="#263238"/>
|
||||
<path id="Vector_41" d="M54.2402 54.0724C54.971 54.0724 55.5634 53.48 55.5634 52.7492C55.5634 52.0184 54.971 51.426 54.2402 51.426C53.5094 51.426 52.917 52.0184 52.917 52.7492C52.917 53.48 53.5094 54.0724 54.2402 54.0724Z" fill="#407BFF"/>
|
||||
</g>
|
||||
<g id="Chair">
|
||||
<path id="Vector_42" d="M143.605 136.098C145.98 137.283 148.327 138.514 150.669 139.75C153.011 140.985 155.339 142.253 157.677 143.507C160.014 144.761 162.324 146.057 164.634 147.357L168.092 149.316C169.235 149.985 170.397 150.64 171.527 151.322C170.337 150.732 169.166 150.119 167.981 149.515L164.463 147.67C162.117 146.435 159.793 145.162 157.455 143.913C155.118 142.663 152.813 141.359 150.503 140.058C148.193 138.758 145.888 137.449 143.605 136.098Z" fill="#A6A6A6"/>
|
||||
<path id="Vector_43" d="M169.558 136.098C167.442 137.315 165.298 138.491 163.154 139.662C161.01 140.833 158.848 141.967 156.7 143.115C154.551 144.263 152.37 145.37 150.19 146.476L146.916 148.122C145.819 148.652 144.726 149.201 143.62 149.722C144.675 149.109 145.75 148.523 146.81 147.919L150.037 146.158C152.186 144.992 154.348 143.853 156.492 142.705C158.636 141.557 160.826 140.45 163.002 139.348C165.178 138.247 167.35 137.149 169.558 136.098Z" fill="#A6A6A6"/>
|
||||
<path id="Vector_44" d="M117.251 136.098C119.626 137.283 121.973 138.514 124.315 139.75C126.657 140.985 128.985 142.253 131.323 143.507C133.66 144.761 135.97 146.057 138.275 147.357L141.738 149.316C142.881 149.985 144.043 150.64 145.173 151.322C143.983 150.732 142.812 150.119 141.627 149.515L138.109 147.67C135.763 146.435 133.439 145.162 131.101 143.913C128.764 142.663 126.454 141.359 124.149 140.058C121.844 138.758 119.534 137.449 117.251 136.098Z" fill="#A6A6A6"/>
|
||||
<path id="Vector_45" d="M143.2 136.098C141.084 137.315 138.94 138.491 136.796 139.662C134.652 140.833 132.485 141.967 130.341 143.115C128.197 144.263 126.012 145.37 123.831 146.476L120.558 148.122C119.46 148.652 118.368 149.201 117.261 149.722C118.317 149.109 119.391 148.523 120.452 147.919L123.679 146.158C125.828 144.992 127.99 143.853 130.134 142.705C132.278 141.557 134.468 140.45 136.644 139.348C138.82 138.247 140.996 137.149 143.2 136.098Z" fill="#A6A6A6"/>
|
||||
<path id="Vector_46" d="M122.07 132.451L120.673 140.824L111.217 191.904H109.69L116.569 140.824L117.584 132.451H122.07Z" fill="#A6A6A6"/>
|
||||
<path id="Vector_47" d="M117.584 132.451H122.07L120.673 140.824H116.57L117.584 132.451Z" fill="#263238"/>
|
||||
<path id="Vector_48" d="M151.775 191.904H150.249L140.793 140.824L139.396 132.451H143.882L144.896 140.824L151.775 191.904Z" fill="#A6A6A6"/>
|
||||
<path id="Vector_49" d="M143.882 132.451L144.896 140.824H140.793L139.396 132.451H143.882Z" fill="#263238"/>
|
||||
<path id="Vector_50" d="M180.149 191.904H178.622L169.162 140.824L167.765 132.451H172.251L173.27 140.824L180.149 191.904Z" fill="#A6A6A6"/>
|
||||
<path id="Vector_51" d="M173.27 140.824H169.162L167.765 132.451H172.251L173.27 140.824Z" fill="#263238"/>
|
||||
<path id="Vector_52" d="M177.728 136.384H108.418V129.081H134.361L143.084 72.9478H175.086L177.728 136.384Z" fill="#A6A6A6"/>
|
||||
<path id="Vector_53" d="M177.728 136.384H173.952L171.49 72.9478H175.086L177.728 136.384Z" fill="#DBDBDB"/>
|
||||
</g>
|
||||
<g id="Character">
|
||||
<path id="Vector_54" d="M129.581 89.0708C132.937 92.1553 138.069 92.7592 142.421 92.395C146.861 92.0169 151.744 90.8551 155.409 88.2133C157.063 87.0768 158.369 85.5029 159.18 83.6673C159.997 81.6848 159.84 79.7576 158.406 78.2315C157.253 77.0005 155.04 76.332 154.847 75.0733C154.653 73.8146 155.52 72.6666 155.621 71.4171C155.787 69.2779 154.445 67.8993 152.809 66.7744C148.931 64.1049 149.217 59.7664 146.529 56.1241C145.003 54.0539 141.02 50.407 135.307 53.2102C133.131 54.2753 131.886 56.6082 131.287 58.918C130.581 61.6336 131.868 64.8702 130.904 67.5259C130.079 69.7896 128.456 70.3752 127.677 72.7358C127.349 73.7593 127.29 74.9027 128.636 76.9959C129.125 77.752 129.701 78.9323 129.512 79.9466C129.249 81.3574 127.769 82.2104 127.465 83.6857C127.064 85.7144 128.101 87.7107 129.581 89.0708Z" fill="#263238"/>
|
||||
<path id="Vector_55" d="M157.921 84.4004C159.931 83.7458 160.379 80.7443 158.843 79.481C157.875 78.6788 156.57 78.4391 155.616 77.6368C154.021 76.3228 155.03 74.7645 155.538 73.16C156.64 69.6791 154.127 67.8256 151.517 66.1797C149.535 64.9256 148.917 63.2428 148.46 61.0205C148.46 60.9882 148.507 60.9744 148.516 61.0205C148.931 62.6434 149.406 64.2248 150.743 65.3406C151.831 66.2627 153.172 66.7744 154.237 67.7242C156.022 69.3148 156.506 71.2651 155.764 73.5058C155.551 74.1513 155.077 74.9166 155.053 75.5898C155.003 77.1712 156.271 77.789 157.474 78.3561C158.396 78.8171 159.424 79.315 159.895 80.2925C160.609 81.7725 159.553 84.0962 157.986 84.5065C157.889 84.5434 157.843 84.4281 157.921 84.4004Z" fill="#263238"/>
|
||||
<path id="Vector_56" d="M157.046 86.1431C158.189 85.1749 159.452 84.2666 159.987 82.8005C160.776 80.6335 159.171 79.3426 157.682 78.1254C157.037 77.6044 156.483 77.0696 156.377 76.2074C156.225 74.9211 156.981 73.6993 156.94 72.4037C156.834 69.3147 153.583 67.9408 151.744 65.949C149.904 63.9573 148.977 61.3385 147.991 58.7889C147.991 58.7336 148.055 58.7013 148.074 58.7566C149.328 61.984 150.799 64.9993 153.551 67.2215C155.474 68.7707 157.525 70.4489 157.17 73.1829C157.083 73.8514 156.797 74.4969 156.709 75.1608C156.566 76.4887 157.037 77.2586 158.009 78.0424C158.982 78.8262 160.015 79.5454 160.356 80.7626C161.025 83.1278 158.89 85.1011 157.17 86.3183C157.147 86.3274 157.122 86.3285 157.098 86.3215C157.074 86.3145 157.054 86.2997 157.039 86.2795C157.025 86.2593 157.018 86.2349 157.019 86.2102C157.02 86.1854 157.03 86.1618 157.046 86.1431Z" fill="#263238"/>
|
||||
<path id="Vector_57" d="M126.814 83.0126C127.593 81.3851 129.119 80.3938 128.331 78.3744C127.801 76.9912 126.837 75.9585 126.874 74.3863C126.965 73.118 127.488 71.919 128.354 70.9883C129.382 69.7343 130.567 68.6831 131.217 67.1478C131.923 65.488 132.066 63.6576 132.227 61.8872C132.227 61.8503 132.287 61.8549 132.287 61.8872C132.204 64.2708 132.029 66.7328 130.581 68.7476C129.825 69.7942 128.838 70.661 128.096 71.7168C126.759 73.621 127.072 75.4052 128.096 77.3416C128.557 78.2315 129.018 79.1259 128.746 80.1541C128.474 81.1822 127.676 81.9245 127.178 82.8282C125.067 86.6733 129.908 90.2972 133.412 90.3525C133.569 90.3525 133.592 90.5969 133.412 90.5969C130.802 90.6338 127.718 88.7527 126.731 86.3275C126.512 85.8 126.406 85.2323 126.421 84.6612C126.435 84.0902 126.569 83.5285 126.814 83.0126Z" fill="#263238"/>
|
||||
<path id="Vector_58" d="M127.234 84.8153C127.003 83.2846 127.801 82.2841 128.327 80.9701C129.152 78.9 127.653 77.2494 127.174 75.29C127.033 74.6451 127.022 73.9787 127.142 73.3296C127.261 72.6805 127.509 72.0617 127.87 71.5093C128.792 69.9602 130.074 68.743 130.743 67.0325C131.44 65.1962 131.584 63.196 131.157 61.2786C131.157 61.2417 131.204 61.2417 131.213 61.2786C131.556 62.5647 131.627 63.9085 131.419 65.2235C131.212 66.5385 130.732 67.7955 130.009 68.9136C129.087 70.3383 127.704 71.6062 127.349 73.3674C126.971 75.2116 128.124 76.687 128.659 78.3928C128.827 78.8934 128.893 79.4226 128.854 79.9492C128.814 80.4758 128.669 80.9891 128.428 81.4588C128.008 82.1577 127.697 82.9164 127.506 83.7088C127.402 84.8547 127.713 86 128.382 86.9361C130.295 89.9007 133.979 91.3392 137.248 91.3161C137.363 91.3161 137.386 91.5005 137.248 91.5005C135.767 91.5318 134.294 91.2696 132.915 90.7292C131.536 90.1887 130.277 89.3807 129.212 88.3516C128.19 87.4157 127.497 86.1758 127.234 84.8153Z" fill="#263238"/>
|
||||
<path id="Vector_59" d="M106.533 192.079C107.764 192.503 143.053 192.752 144.404 191.913C144.916 191.599 145.902 177.482 145.612 176.104C144.634 171.424 139.964 157.242 139.964 157.242L116.358 157.007L122.656 175.878L122.734 180.027C122.734 180.027 109.161 185.956 107.778 187.04C106.395 188.123 105.302 191.659 106.533 192.079Z" fill="#DD6A57"/>
|
||||
<path id="Vector_60" d="M106.422 192.13C107.663 192.554 143.145 192.808 144.505 191.964C145.137 191.572 145.506 184.029 145.722 176.062L122.642 175.832L122.716 179.981C122.716 179.981 109.087 185.975 107.695 187.049C106.303 188.123 105.187 191.706 106.422 192.13Z" fill="#407BFF"/>
|
||||
<path id="Vector_61" d="M106.943 190.714C112.891 190.613 136.912 190.756 142.79 191.106C142.836 191.106 142.836 191.139 142.79 191.143C136.893 191.374 112.891 191.037 106.943 190.811C106.819 190.807 106.819 190.714 106.943 190.714Z" fill="#263238"/>
|
||||
<path id="Vector_62" d="M121.886 178.667C124.232 178.247 127.091 178.625 128.866 180.308C128.935 180.373 128.843 180.47 128.769 180.447C126.538 179.706 124.233 179.208 121.895 178.962C121.856 178.963 121.818 178.949 121.789 178.922C121.761 178.895 121.744 178.858 121.743 178.819C121.742 178.78 121.756 178.742 121.783 178.713C121.809 178.685 121.847 178.668 121.886 178.667Z" fill="#263238"/>
|
||||
<path id="Vector_63" d="M120.189 179.672C122.532 179.253 125.395 179.631 127.17 181.314C127.239 181.378 127.147 181.475 127.068 181.452C124.838 180.713 122.535 180.215 120.199 179.967C120.159 179.968 120.121 179.954 120.093 179.927C120.064 179.9 120.048 179.863 120.046 179.824C120.045 179.785 120.06 179.747 120.086 179.719C120.113 179.69 120.15 179.673 120.189 179.672Z" fill="#263238"/>
|
||||
<path id="Vector_64" d="M118.493 180.677C120.835 180.258 123.698 180.64 125.473 182.318C125.543 182.383 125.45 182.48 125.372 182.457C123.142 181.719 120.839 181.223 118.502 180.977C118.467 180.972 118.434 180.954 118.41 180.928C118.386 180.901 118.373 180.867 118.372 180.831C118.371 180.795 118.382 180.76 118.404 180.732C118.427 180.704 118.458 180.684 118.493 180.677Z" fill="#263238"/>
|
||||
<path id="Vector_65" d="M116.796 181.687C119.138 181.263 122.001 181.645 123.776 183.324C123.845 183.393 123.753 183.49 123.675 183.462C121.444 182.725 119.141 182.229 116.805 181.982C116.766 181.983 116.728 181.969 116.699 181.942C116.671 181.915 116.654 181.878 116.653 181.839C116.652 181.8 116.666 181.762 116.693 181.733C116.72 181.705 116.757 181.688 116.796 181.687Z" fill="#263238"/>
|
||||
<path id="Vector_66" d="M118.626 176.565C120.272 177.865 122.425 178.409 124.352 179.133C124.551 179.211 124.712 179.022 124.721 178.842C124.731 178.842 124.741 178.84 124.75 178.835C124.758 178.831 124.766 178.824 124.771 178.816C124.777 178.807 124.78 178.798 124.781 178.788C124.782 178.778 124.78 178.768 124.777 178.759C124.083 176.682 122.854 174.825 121.213 173.374C120.24 172.544 118.529 171.963 117.603 173.222C116.676 174.481 117.667 175.804 118.626 176.565ZM118.045 174.674C117.649 172.106 120.397 173.471 121.088 174.112C121.53 174.532 121.942 174.983 122.319 175.463C123.09 176.458 123.809 177.492 124.472 178.561C123.55 178.146 122.596 177.814 121.655 177.431C120.535 176.975 118.262 176.094 118.045 174.674Z" fill="#263238"/>
|
||||
<path id="Vector_67" d="M132.619 175.251C132.061 173.785 130.259 173.868 129.101 174.421C127.132 175.377 125.448 176.833 124.219 178.644C124.213 178.652 124.21 178.661 124.208 178.671C124.206 178.68 124.207 178.69 124.21 178.699C124.212 178.708 124.217 178.717 124.223 178.724C124.23 178.731 124.238 178.737 124.247 178.741C124.234 178.785 124.231 178.831 124.239 178.876C124.247 178.921 124.266 178.963 124.293 179C124.32 179.037 124.356 179.066 124.396 179.087C124.437 179.108 124.482 179.119 124.528 179.119C126.579 178.935 128.797 178.99 130.734 178.197C131.863 177.722 133.136 176.634 132.619 175.251ZM127.603 178.211C126.598 178.326 125.588 178.39 124.588 178.543C125.515 177.692 126.484 176.889 127.492 176.136C127.987 175.779 128.504 175.456 129.042 175.168C129.881 174.739 132.896 174.158 131.808 176.551C131.208 177.837 128.783 178.072 127.603 178.211Z" fill="#263238"/>
|
||||
<path id="Vector_68" d="M161.67 122.119C157.341 126.421 151.31 129.136 146.179 131.801C141.771 134.069 138.032 136.283 136.617 139.399C135.376 142.166 145.667 172.507 145.667 172.507L120.687 174.767C120.687 174.767 109.82 145.075 112.541 132.294C113.002 130.197 115.081 127.481 118.073 124.516C128.765 113.958 150.932 100.238 150.932 100.238H164.547C164.547 100.238 170.195 113.636 161.67 122.119Z" fill="#455A64"/>
|
||||
<path id="Vector_69" d="M163.012 103.202C162.957 102.584 162.892 101.966 162.832 101.358C162.832 101.298 162.731 101.298 162.74 101.358C163.303 106.319 163.768 111.759 161.431 116.365C159.181 120.791 154.672 123.456 150.656 126.084L143.371 130.925L139.72 133.332C138.719 133.962 137.751 134.644 136.82 135.374C135.97 136.032 135.252 136.843 134.703 137.767C134.141 138.813 133.901 140.001 134.012 141.183C134.607 149.16 142.504 170.285 142.689 170.967C142.703 170.998 142.727 171.023 142.757 171.037C142.788 171.051 142.822 171.053 142.855 171.043C142.887 171.034 142.914 171.013 142.932 170.984C142.95 170.956 142.957 170.922 142.952 170.889C141.237 165.568 136.612 153.729 134.542 143.051C134.279 141.668 134.081 140.234 134.51 138.874C134.888 137.791 135.543 136.826 136.409 136.075C137.254 135.325 138.159 134.647 139.116 134.046L142.804 131.594L150.038 126.812C153.989 124.198 158.443 121.663 161.011 117.532C163.708 113.235 163.45 108.043 163.012 103.202Z" fill="#263238"/>
|
||||
<path id="Vector_70" d="M161.67 122.119C157.341 126.421 151.31 129.136 146.179 131.801C137.11 129.422 125.657 126.448 118.055 124.535C128.746 113.977 150.914 100.256 150.914 100.256H164.529C164.529 100.256 170.195 113.636 161.67 122.119Z" fill="#263238"/>
|
||||
<path id="Vector_71" d="M60.2895 174.204C61.3407 174.969 94.956 185.707 96.4959 185.306C97.0814 185.159 98.9302 180.355 101 174.485C101.461 173.217 101.922 171.908 102.356 170.571C105.311 161.912 108.243 152.655 108.243 152.655L85.7764 145.407L80.502 163.522L79.3448 167.5C79.3448 167.5 64.6326 169.146 62.9913 169.769C61.3499 170.391 59.2383 173.434 60.2895 174.204Z" fill="#DD6A57"/>
|
||||
<path id="Vector_72" d="M60.1694 174.218C61.2252 174.993 95.0295 185.786 96.5925 185.385C97.3071 185.2 99.9028 178.105 102.485 170.566L80.511 163.48L79.3446 167.477C79.3446 167.477 64.554 169.133 62.9035 169.755C61.2529 170.377 59.1136 173.448 60.1694 174.218Z" fill="#407BFF"/>
|
||||
<path id="Vector_73" d="M61.0874 173.019C66.7952 174.693 89.6726 181.968 95.2052 184.057C95.2513 184.057 95.2421 184.103 95.2052 184.089C89.5066 182.558 66.6892 175.094 61.0874 173.116C60.9352 173.07 60.9629 172.987 61.0874 173.019Z" fill="#263238"/>
|
||||
<path id="Vector_74" d="M78.9347 165.965C81.2999 166.26 83.9187 167.473 85.1128 169.607C85.1589 169.69 85.0436 169.755 84.9745 169.709C83.064 168.34 81.013 167.18 78.8563 166.246C78.8239 166.232 78.7978 166.206 78.7827 166.174C78.7675 166.142 78.7645 166.106 78.774 166.072C78.7835 166.038 78.8049 166.008 78.8345 165.989C78.864 165.969 78.8995 165.961 78.9347 165.965Z" fill="#263238"/>
|
||||
<path id="Vector_75" d="M77.017 166.422C79.3776 166.717 81.9963 167.929 83.1951 170.064C83.2412 170.142 83.1213 170.207 83.0568 170.165C81.1453 168.796 79.0927 167.635 76.934 166.703C76.9006 166.689 76.8735 166.663 76.858 166.63C76.8424 166.597 76.8395 166.56 76.8498 166.525C76.86 166.49 76.8828 166.46 76.9136 166.441C76.9445 166.422 76.9813 166.415 77.017 166.422Z" fill="#263238"/>
|
||||
<path id="Vector_76" d="M75.0988 166.873C77.4594 167.173 80.0782 168.386 81.2723 170.516C81.323 170.599 81.2032 170.663 81.1386 170.617C79.2259 169.251 77.1734 168.092 75.0158 167.159C74.9851 167.143 74.961 167.116 74.9474 167.084C74.9339 167.052 74.9319 167.016 74.9416 166.983C74.9513 166.949 74.9722 166.92 75.0008 166.9C75.0295 166.88 75.0641 166.871 75.0988 166.873Z" fill="#263238"/>
|
||||
<path id="Vector_77" d="M73.1992 167.33C75.5643 167.625 78.1831 168.842 79.3772 170.972C79.4233 171.055 79.3081 171.12 79.2389 171.073C77.3289 169.706 75.2778 168.546 73.1208 167.616C73.0905 167.599 73.0667 167.573 73.0532 167.542C73.0397 167.51 73.0373 167.475 73.0464 167.442C73.0555 167.408 73.0756 167.379 73.1033 167.359C73.131 167.339 73.1648 167.328 73.1992 167.33Z" fill="#263238"/>
|
||||
<path id="Vector_78" d="M76.4493 162.968C77.6342 164.697 79.5291 165.854 81.152 167.118C81.19 167.144 81.2337 167.16 81.2793 167.165C81.325 167.171 81.3713 167.165 81.4142 167.149C81.4572 167.132 81.4956 167.106 81.5262 167.072C81.5568 167.037 81.5787 166.996 81.59 166.952C81.5996 166.954 81.6095 166.954 81.619 166.951C81.6285 166.949 81.6374 166.945 81.6449 166.939C81.6525 166.932 81.6585 166.924 81.6626 166.916C81.6666 166.907 81.6686 166.897 81.6684 166.887C81.6209 164.698 80.9992 162.56 79.8657 160.686C79.1833 159.607 77.7264 158.542 76.4631 159.469C75.1999 160.396 75.7577 161.977 76.4493 162.968ZM76.4493 160.99C76.8366 158.418 79.0542 160.529 79.5245 161.359C79.8216 161.892 80.0804 162.445 80.2991 163.014C80.7374 164.195 81.1159 165.397 81.4333 166.615C80.6725 165.942 79.8611 165.338 79.0773 164.697C78.1506 163.946 76.2418 162.429 76.4539 161.009L76.4493 160.99Z" fill="#263238"/>
|
||||
<path id="Vector_79" d="M90.198 165.891C90.1011 164.328 88.3537 163.89 87.0859 164.047C84.9179 164.383 82.8764 165.283 81.166 166.657C81.1583 166.663 81.1521 166.67 81.1478 166.679C81.1436 166.688 81.1413 166.698 81.1413 166.707C81.1413 166.717 81.1436 166.727 81.1478 166.736C81.1521 166.744 81.1583 166.752 81.166 166.758C81.136 166.796 81.1159 166.84 81.1075 166.888C81.0991 166.935 81.1026 166.984 81.1177 167.03C81.1327 167.075 81.159 167.117 81.194 167.15C81.2289 167.183 81.2716 167.207 81.3181 167.219C83.3329 167.653 85.4353 168.367 87.5239 168.173C88.741 168.04 90.2856 167.371 90.198 165.891ZM84.5086 167.224C83.5127 167.03 82.5307 166.795 81.5302 166.643C82.6677 166.104 83.8327 165.626 85.0203 165.209C85.5975 165.014 86.1876 164.86 86.7862 164.748C87.7083 164.587 90.7651 164.932 89.0361 166.878C88.0817 167.943 85.6935 167.45 84.5086 167.224Z" fill="#263238"/>
|
||||
<path id="Vector_80" d="M79.5293 161.378L104.426 168.704L112.144 140.289C112.817 130.898 114.509 126.342 120.033 124.613C129.438 121.7 152.417 132.451 162.823 125.24C171.274 119.376 164.533 100.215 164.533 100.215H140.098C140.098 100.215 137.147 103.806 136.603 105.918C136.603 105.918 106.344 103.585 99.5712 112.17C90.5208 123.696 79.5293 161.378 79.5293 161.378Z" fill="#455A64"/>
|
||||
<path id="Vector_81" d="M124.274 124.203C122.818 124.077 121.351 124.191 119.931 124.54C118.582 124.903 117.326 125.547 116.243 126.43C115.194 127.284 114.344 128.357 113.753 129.574C113.062 130.999 112.831 132.613 112.587 134.185C112.453 135.107 112.365 136.029 112.315 136.951C112.264 137.873 112.227 139.155 112.227 139.943C112.227 140.012 112.319 140.017 112.319 139.943C112.333 139.114 112.402 138.287 112.527 137.467C112.628 136.688 112.766 135.914 112.9 135.139C113.122 133.596 113.481 132.076 113.974 130.598C114.45 129.331 115.183 128.177 116.126 127.208C117.07 126.238 118.204 125.474 119.456 124.964C120.215 124.657 121.007 124.444 121.817 124.327C122.636 124.239 123.461 124.213 124.284 124.249C124.284 124.249 124.293 124.203 124.274 124.203Z" fill="#263238"/>
|
||||
<path id="Vector_82" d="M159.3 109.486C158.452 109.294 157.63 109 156.852 108.61C156.075 108.255 155.37 107.759 154.773 107.149C154.321 106.558 154.019 105.867 153.892 105.134C153.795 104.737 153.74 104.332 153.676 103.931C153.611 103.529 153.496 103.05 153.463 102.607C153.463 102.552 153.367 102.557 153.371 102.607C153.579 104.276 153.108 106.139 154.353 107.559C154.988 108.206 155.76 108.702 156.612 109.011C157.456 109.381 158.358 109.599 159.277 109.657C159.298 109.656 159.317 109.648 159.332 109.634C159.347 109.62 159.357 109.601 159.36 109.581C159.362 109.561 159.358 109.54 159.347 109.523C159.336 109.506 159.32 109.493 159.3 109.486Z" fill="#263238"/>
|
||||
<path id="Vector_83" d="M163.874 105.636C163.652 104.736 163.394 103.848 163.099 102.972C163.099 102.916 162.989 102.939 163.012 102.999C164.206 106.654 164.731 110.495 164.561 114.337C164.539 116.153 164.293 117.961 163.828 119.717C163.381 121.395 162.293 122.831 160.799 123.714C159.256 124.519 157.582 125.042 155.856 125.259C153.921 125.561 151.964 125.699 150.005 125.669C146.017 125.632 142.057 125.093 138.106 124.627C134.274 124.166 130.443 123.645 126.602 123.299C123.458 123.018 120.106 122.986 117.197 124.378C114.431 125.711 112.623 128.251 111.443 131.013C110.115 134.134 109.364 137.5 108.465 140.759C107.395 144.646 101.872 165.841 101.789 166.749C101.789 166.836 101.913 166.832 101.922 166.749C102.116 164.757 106.897 147.228 107.971 143.314L109.59 137.449C110.018 135.886 110.443 134.319 110.973 132.788C111.996 129.869 113.499 126.942 116.16 125.199C118.995 123.355 122.527 123.203 125.805 123.442C127.649 123.571 129.493 123.82 131.337 124.037L137.391 124.756C141.255 125.217 145.123 125.757 149.014 125.877C150.96 125.951 152.908 125.872 154.842 125.642C156.591 125.471 158.308 125.061 159.946 124.424C161.395 123.863 162.613 122.83 163.404 121.492C164.215 120.04 164.492 118.357 164.671 116.729C165.054 113.014 164.784 109.259 163.874 105.636Z" fill="#263238"/>
|
||||
<path id="Vector_84" d="M145.944 77.4984C142.716 88.1026 140.015 96.3323 136.889 98.2457C134.367 99.7995 118.691 102.695 115.643 102.856C114.44 102.921 113.44 102.958 112.73 102.985C110.978 103.045 108.437 91.3945 109.719 90.0206C110.014 89.707 111.176 89.4903 112.803 89.3336C118.276 88.8034 129.014 88.9509 129.673 88.3608C130.333 87.7706 133.943 83.2615 138.811 77.3739C142.168 73.3074 144.856 72.1594 145.907 73.3489C146.506 74.0359 146.566 75.4513 145.944 77.4984Z" fill="#DD6A57"/>
|
||||
<path id="Vector_85" d="M115.639 102.875C113.788 103.636 111.889 104.275 109.954 104.788C108.414 105.125 103.961 105.982 103.407 104.327C103.038 103.197 105.602 102.381 107.405 101.768C108.35 101.445 109.553 100.551 109.318 99.9239C108.912 98.8543 106.469 99.7441 104.841 100.551C101.706 102.109 97.4644 105.005 95.7216 103.35C95.0623 102.723 95.9429 101.722 97.197 100.763C95.1914 101.842 93.0752 102.699 92.3144 102.031C91.881 101.653 91.8902 101.173 92.1807 100.648C91.9297 100.741 91.6572 100.759 91.3961 100.7C91.1351 100.641 90.8967 100.508 90.71 100.316C90.129 99.6196 90.4979 98.6745 91.2448 97.7293C91.1282 97.7086 91.0181 97.6607 90.9236 97.5894C90.829 97.5181 90.7527 97.4254 90.7007 97.319C89.5112 95.212 96.5192 89.85 98.8521 89.4581C105.703 88.2962 112.84 89.352 112.84 89.352C115.349 91.6481 115.648 102.87 115.639 102.875Z" fill="#DD6A57"/>
|
||||
<path id="Vector_86" d="M106.132 95.9359C104.508 96.0661 102.933 96.5559 101.521 97.3698C99.8752 98.3472 98.5289 99.7442 96.9936 100.869C96.9521 100.901 96.9936 100.966 97.0397 100.934C97.7682 100.348 98.5566 99.8318 99.3035 99.274C100.05 98.7161 100.756 98.1536 101.526 97.6649C102.912 96.7529 104.49 96.1709 106.136 95.9636C106.136 95.9636 106.15 95.9313 106.132 95.9359Z" fill="#263238"/>
|
||||
<path id="Vector_87" d="M105.062 92.9898C103.232 93.2965 101.439 93.7893 99.7091 94.4606C97.8649 95.2582 96.3388 96.6644 94.8589 98.0107C93.9737 98.8221 93.1038 99.652 92.2493 100.5C92.2124 100.537 92.2493 100.597 92.3 100.565C93.8031 99.1694 95.3399 97.8201 96.9106 96.5168C98.379 95.2926 100.076 94.3726 101.904 93.8105C102.946 93.4924 104.006 93.2526 105.067 93.0129L105.062 92.9898Z" fill="#263238"/>
|
||||
<path id="Vector_88" d="M103.333 90.3618C101.59 90.6015 100.064 90.8228 98.4782 91.6297C96.3804 92.7177 94.2964 94.6496 93.5634 95.3181C92.7565 96.0742 91.9727 96.858 91.2028 97.651C91.1705 97.6833 91.2028 97.7386 91.2581 97.7063C93.0193 95.9827 94.8888 94.3734 96.8553 92.8883C97.7836 92.1633 98.8176 91.5849 99.9213 91.1732C101.036 90.8185 102.179 90.5593 103.338 90.3987C103.338 90.3987 103.342 90.3618 103.333 90.3618Z" fill="#263238"/>
|
||||
<path id="Vector_89" d="M146.921 75.7279C146.515 78.7386 144.224 84.5202 144.224 84.5202L132.946 83.2338C132.946 83.2338 139.005 75.479 143.574 72.6297C145.409 71.4909 147.336 72.685 146.921 75.7279Z" fill="#407BFF"/>
|
||||
<path id="Vector_90" d="M144.321 82.9849C142.656 82.6852 140.996 82.4086 139.318 82.2057C138.479 82.1043 137.644 82.0167 136.805 81.9383C135.966 81.8599 135.118 81.8738 134.283 81.7862C134.237 81.7862 134.233 81.8553 134.283 81.8599C135.118 81.9014 135.962 82.0628 136.796 82.1504C137.631 82.238 138.47 82.3348 139.309 82.4317C140.978 82.6299 142.651 82.8235 144.321 83.0587C144.362 83.0633 144.362 82.9941 144.321 82.9849Z" fill="#263238"/>
|
||||
<path id="Vector_91" d="M142.762 76.3411C143.237 75.9156 143.809 75.6119 144.427 75.4559C144.192 75.671 143.93 75.854 143.648 76C143.369 76.1513 143.071 76.266 142.762 76.3411ZM141.306 81.6755C141.006 81.5816 140.697 81.5258 140.383 81.5095C140.653 81.6778 140.945 81.8081 141.25 81.8968C141.549 81.9929 141.859 82.0487 142.172 82.0628C141.903 81.8946 141.611 81.7642 141.306 81.6755ZM138.973 76.8806C138.876 77.1791 138.82 77.4892 138.807 77.8027C138.973 77.5327 139.102 77.241 139.189 76.9359C139.286 76.6374 139.342 76.3272 139.355 76.0138C139.191 76.2853 139.063 76.5766 138.973 76.8806Z" fill="white"/>
|
||||
<path id="Vector_92" d="M146.921 75.7279C146.921 75.8939 146.875 76.0737 146.838 76.2489C146.801 76.4241 146.783 76.5302 146.746 76.6823C146.113 79.3573 145.269 81.9781 144.224 84.5202L143.763 84.4695L143.325 84.4188L139.779 84.013L139.254 83.9577L135.717 83.5566L135.256 83.5013L133.956 83.3537L143.555 72.6297C145.584 71.8367 147.327 72.685 146.921 75.7279Z" fill="#263238"/>
|
||||
<path id="Vector_93" d="M136.04 106.157C136.04 106.157 146.755 107.813 166.539 104.498C166.539 104.498 156.765 80.2555 149.941 74.0682C146.843 71.2466 144.09 71.9335 141.882 74.0682C141.333 74.603 134.759 84.4695 134.394 87.7568C134.076 90.6615 136.654 93.6491 136.654 93.6491L136.04 106.157Z" fill="#407BFF"/>
|
||||
<path id="Vector_94" d="M155.69 94.6681C155.474 94.4336 155.292 94.1716 155.146 93.8889C154.991 93.6114 154.876 93.3134 154.804 93.0037C155.019 93.2381 155.202 93.5001 155.348 93.7828C155.5 94.062 155.614 94.3595 155.69 94.6681ZM145.925 83.8103C145.778 83.5265 145.594 83.2643 145.376 83.0311C145.451 83.3396 145.566 83.6372 145.717 83.9163C145.863 84.199 146.046 84.4611 146.261 84.6955C146.191 84.3862 146.077 84.0883 145.925 83.8103ZM162.891 102.884C162.744 102.604 162.561 102.343 162.347 102.109C162.422 102.418 162.537 102.715 162.688 102.995C162.834 103.277 163.017 103.539 163.232 103.774C163.158 103.464 163.044 103.164 162.891 102.884ZM143.278 97.2914C143.132 97.0087 142.949 96.7467 142.734 96.5123C142.809 96.8208 142.924 97.1183 143.075 97.3975C143.221 97.6802 143.404 97.9422 143.619 98.1767C143.545 97.8678 143.43 97.5701 143.278 97.2914ZM147.64 73.4873C147.497 73.2027 147.314 72.9402 147.096 72.7082C147.252 73.3265 147.555 73.8976 147.981 74.3726C147.909 74.0622 147.793 73.764 147.635 73.4873H147.64ZM148.811 93.5246C149.093 93.3777 149.355 93.1948 149.59 92.9806C149.28 93.0547 148.98 93.1694 148.7 93.3218C148.418 93.4688 148.156 93.6516 147.921 93.8658C148.231 93.7917 148.53 93.677 148.811 93.5246ZM138.4 89.3199C138.681 89.1725 138.941 88.9897 139.175 88.7758C138.865 88.8466 138.567 88.9615 138.289 89.117C138.007 89.263 137.745 89.4459 137.51 89.661C137.825 89.5881 138.129 89.4733 138.414 89.3199H138.4ZM143.633 76.0001C143.916 75.8541 144.178 75.6711 144.412 75.456C143.794 75.612 143.223 75.9158 142.748 76.3412C143.061 76.2672 143.363 76.1525 143.647 76.0001H143.633ZM145.39 104.027C145.677 103.885 145.943 103.705 146.183 103.493C145.564 103.649 144.993 103.952 144.518 104.378C144.827 104.3 145.125 104.182 145.404 104.027H145.39ZM154.555 81.4866C154.836 81.3393 155.096 81.1564 155.33 80.9425C154.712 81.0985 154.14 81.4023 153.666 81.8278C153.981 81.7548 154.285 81.6401 154.569 81.4866H154.555ZM157.833 100.344C158.116 100.198 158.378 100.015 158.613 99.7996C158.303 99.8696 158.004 99.9845 157.727 100.141C157.445 100.287 157.183 100.47 156.948 100.685C157.262 100.611 157.564 100.496 157.847 100.344H157.833ZM150.964 98.3426C150.665 98.2465 150.355 98.1907 150.042 98.1767C150.312 98.3449 150.603 98.4752 150.908 98.5639C151.208 98.6578 151.517 98.7136 151.831 98.7299C151.565 98.5628 151.278 98.4325 150.978 98.3426H150.964ZM137.999 95.0692C137.7 94.9731 137.39 94.9173 137.077 94.9032C137.347 95.0714 137.638 95.2017 137.944 95.2905C138.243 95.3844 138.553 95.4402 138.866 95.4565C138.6 95.2894 138.313 95.1591 138.013 95.0692H137.999ZM151.342 86.7011C151.043 86.6046 150.733 86.5488 150.42 86.5351C150.692 86.7025 150.985 86.8328 151.291 86.9224C151.59 87.0167 151.9 87.0725 152.213 87.0884C151.946 86.922 151.657 86.7918 151.356 86.7011H151.342ZM141.291 81.6756C140.992 81.5817 140.682 81.5259 140.369 81.5096C140.639 81.6779 140.93 81.8082 141.236 81.8969C141.534 81.993 141.844 82.0488 142.158 82.0629C141.892 81.8958 141.605 81.7655 141.305 81.6756H141.291ZM161.342 95.3735C161.044 95.277 160.733 95.2212 160.42 95.2075C160.691 95.374 160.982 95.5042 161.287 95.5948C161.586 95.6883 161.896 95.7441 162.209 95.7607C161.943 95.5937 161.656 95.4634 161.356 95.3735H161.342ZM157.681 87.9275C157.585 88.2261 157.529 88.5362 157.515 88.8496C157.684 88.5798 157.814 88.2881 157.903 87.9828C157.997 87.6837 158.053 87.3739 158.069 87.0607C157.906 87.3317 157.78 87.6232 157.695 87.9275H157.681ZM143.652 90.3618C143.555 90.6604 143.5 90.9706 143.486 91.2839C143.654 91.0141 143.784 90.7225 143.873 90.4172C143.967 90.1183 144.022 89.8082 144.034 89.4951C143.874 89.7667 143.75 90.0581 143.665 90.3618H143.652ZM139.322 103.032C139.226 103.33 139.17 103.64 139.156 103.954C139.324 103.682 139.454 103.389 139.544 103.082C139.638 102.783 139.694 102.473 139.71 102.16C139.541 102.431 139.411 102.725 139.322 103.032ZM153.112 103.954C153.016 104.252 152.96 104.562 152.946 104.876C153.113 104.606 153.242 104.314 153.329 104.009C153.425 103.71 153.481 103.4 153.495 103.087C153.332 103.359 153.203 103.65 153.112 103.954ZM149.654 78.4068C149.558 78.7053 149.502 79.0154 149.488 79.3289C149.655 79.0582 149.785 78.7667 149.876 78.4621C149.969 78.1628 150.025 77.8531 150.042 77.54C149.874 77.8083 149.744 78.0984 149.654 78.4022V78.4068ZM136.487 84.3128C136.39 84.6114 136.334 84.9215 136.321 85.2349C136.488 84.9631 136.619 84.67 136.708 84.3635C136.805 84.065 136.86 83.7549 136.874 83.4414C136.707 83.7133 136.576 84.0064 136.487 84.3128Z" fill="white"/>
|
||||
<path id="Vector_95" d="M146.432 73.1C146.432 73.6533 144.879 77.7105 142.472 78.2177C141.688 78.3883 140.568 74.1558 140.568 74.1558L140.416 73.8607L138.258 69.7481L142.513 65.0685L143.14 64.4322C143.14 64.4322 143.657 65.5941 144.284 67.051L144.371 67.2585C144.408 67.3415 144.445 67.4152 144.477 67.4936C144.574 67.7103 144.671 67.9547 144.763 68.1529C144.855 68.3512 144.906 68.4895 144.975 68.6693C145.044 68.8491 145.114 69.0243 145.187 69.1995C145.691 70.4698 146.107 71.773 146.432 73.1Z" fill="#DD6A57"/>
|
||||
<path id="Vector_96" d="M144.284 67.0694C144.172 68.4173 143.768 69.7246 143.1 70.9006C142.432 72.0766 141.516 73.093 140.416 73.8791L138.258 69.7666L142.513 65.0869L143.14 64.4506C143.14 64.4506 143.657 65.594 144.284 67.0694Z" fill="#263238"/>
|
||||
<path id="Vector_97" d="M130.286 64.2755C131.208 72.3716 136.155 72.7405 137.903 72.5422C139.489 72.3578 144.86 71.5417 144.786 63.3949C144.713 55.2482 140.66 53.1089 137.013 53.3302C133.366 53.5515 129.373 56.1749 130.286 64.2755Z" fill="#DD6A57"/>
|
||||
<path id="Vector_98" d="M131.291 62.7494C131.476 62.6987 131.642 62.6249 131.821 62.5603C132.017 62.5176 132.193 62.4125 132.324 62.2607C132.357 62.2055 132.37 62.141 132.362 62.0775C132.353 62.0139 132.324 61.955 132.278 61.9102C132.174 61.835 132.053 61.7889 131.925 61.7767C131.798 61.7646 131.67 61.7868 131.554 61.8411C131.301 61.9131 131.083 62.0776 130.945 62.3021C130.919 62.355 130.908 62.4142 130.914 62.473C130.919 62.5318 130.941 62.5878 130.978 62.6346C131.014 62.6813 131.062 62.7169 131.118 62.7372C131.173 62.7575 131.233 62.7617 131.291 62.7494Z" fill="#263238"/>
|
||||
<path id="Vector_99" d="M136.824 61.9979C136.636 61.9957 136.448 61.9818 136.261 61.9564C136.061 61.9688 135.862 61.9154 135.694 61.8042C135.649 61.759 135.62 61.7002 135.612 61.6369C135.604 61.5735 135.616 61.5092 135.648 61.4539C135.729 61.3543 135.835 61.2779 135.954 61.2325C136.074 61.1871 136.204 61.1744 136.331 61.1957C136.593 61.1964 136.845 61.297 137.036 61.4769C137.077 61.52 137.104 61.5739 137.115 61.6322C137.126 61.6905 137.12 61.7507 137.098 61.8057C137.075 61.8606 137.038 61.908 136.989 61.9421C136.941 61.9762 136.883 61.9955 136.824 61.9979Z" fill="#263238"/>
|
||||
<path id="Vector_100" d="M135.796 64.1371C135.796 64.1371 135.842 64.1371 135.847 64.1786C135.888 64.7319 136.031 65.3589 136.552 65.488V65.5203C135.93 65.5018 135.75 64.6673 135.796 64.1371Z" fill="#263238"/>
|
||||
<path id="Vector_101" d="M136.225 63.5054C137.105 63.3395 137.373 65.1099 136.557 65.262C135.741 65.4142 135.487 63.6438 136.225 63.5054Z" fill="#263238"/>
|
||||
<path id="Vector_102" d="M136.584 63.547C136.755 63.6208 136.935 63.7776 137.124 63.7683C137.313 63.7591 137.479 63.547 137.585 63.3442C137.585 63.3442 137.612 63.3442 137.617 63.3442C137.669 63.5022 137.658 63.6739 137.588 63.8246C137.518 63.9753 137.393 64.0937 137.239 64.1556C136.911 64.2524 136.63 63.985 136.492 63.6577C136.478 63.6162 136.52 63.5148 136.584 63.547Z" fill="#263238"/>
|
||||
<path id="Vector_103" d="M132.73 64.4829C132.73 64.4829 132.689 64.5152 132.693 64.5382C132.799 65.0823 132.827 65.7232 132.361 65.986C132.361 65.986 132.361 66.0182 132.361 66.0136C132.961 65.8338 132.915 64.9809 132.73 64.4829Z" fill="#263238"/>
|
||||
<path id="Vector_104" d="M132.149 63.985C131.255 64.0588 131.471 65.8292 132.297 65.7693C133.122 65.7094 132.896 63.9251 132.149 63.985Z" fill="#263238"/>
|
||||
<path id="Vector_105" d="M131.794 64.1464C131.665 64.2617 131.545 64.4461 131.379 64.4784C131.213 64.5107 131.019 64.3401 130.872 64.1695H130.844C130.877 64.5107 131.033 64.8519 131.365 64.8795C131.697 64.9072 131.854 64.5844 131.895 64.234C131.905 64.1925 131.845 64.1049 131.794 64.1464Z" fill="#263238"/>
|
||||
<path id="Vector_106" d="M133.966 66.9633C133.966 66.9633 133.966 67.7978 134.021 68.1851C134.021 68.222 134.122 68.2266 134.256 68.2174C134.596 68.2347 134.933 68.1577 135.232 67.9949C135.531 67.8322 135.779 67.5901 135.948 67.2953C135.971 67.2538 135.916 67.2215 135.884 67.2538C135.436 67.6579 134.87 67.9083 134.27 67.9684C134.228 67.8624 134.316 66.5346 134.27 66.5392C133.972 66.6058 133.685 66.7145 133.417 66.8619C133.362 65.1191 133.592 63.381 133.514 61.6474C133.514 61.5829 133.417 61.5783 133.408 61.6474C133.106 63.5016 132.992 65.3814 133.067 67.2584C133.067 67.4521 133.823 67.0694 133.966 66.9633Z" fill="#263238"/>
|
||||
<path id="Vector_107" d="M134.284 68.0239C134.543 68.3147 134.871 68.5352 135.238 68.6648C135.439 68.7293 135.655 68.7293 135.856 68.6648C136.317 68.5218 136.28 68.1115 136.174 67.7657C136.116 67.5822 136.037 67.4059 135.939 67.2401C135.485 67.6711 134.905 67.9457 134.284 68.0239Z" fill="#263238"/>
|
||||
<path id="Vector_108" d="M135.238 68.6647C135.439 68.7293 135.655 68.7293 135.856 68.6647C136.317 68.5218 136.28 68.1115 136.174 67.7657C135.94 67.7884 135.72 67.8895 135.55 68.0526C135.38 68.2158 135.27 68.4314 135.238 68.6647Z" fill="#FF9CBD"/>
|
||||
<path id="Vector_109" d="M144.256 64.0865C143.371 64.0865 140.886 61.8458 140.489 57.5857C140.489 57.5857 141.107 61.3894 141.439 61.9288C141.771 62.4682 140.056 60.6563 139.678 57.2261C138.655 58.0855 137.514 58.7936 136.289 59.3285C134.699 59.9048 133.703 59.9693 133.578 59.8587C133.454 59.748 135.787 58.8121 136.377 58.0145C136.377 58.0145 132.227 60.352 130.226 60.6563C130 60.6932 129.36 55.9766 132.287 53.7405C135.215 51.5044 140.259 53.2795 141.67 54.4598C141.67 54.4598 143.223 54.5612 145.072 56.7143C146.921 58.8674 145.215 64.0727 144.256 64.0865Z" fill="#263238"/>
|
||||
<path id="Vector_110" d="M137.077 66.6914C136.399 66.6877 135.75 66.4154 135.272 65.9341C134.794 65.4527 134.527 64.8016 134.528 64.1233C134.529 63.6443 134.665 63.1753 134.92 62.7697C135.175 62.3641 135.538 62.0382 135.969 61.829C136.4 61.6198 136.881 61.5358 137.358 61.5866C137.834 61.6373 138.286 61.8207 138.664 62.1159C139.041 62.4111 139.328 62.8063 139.491 63.2565C139.655 63.7067 139.689 64.1938 139.59 64.6623C139.49 65.1309 139.261 65.5622 138.929 65.907C138.596 66.2519 138.174 66.4965 137.709 66.613C137.503 66.6648 137.29 66.6912 137.077 66.6914ZM134.869 64.1233C134.867 64.5621 134.996 64.9916 135.238 65.3574C135.48 65.7232 135.826 66.0089 136.231 66.1783C136.635 66.3477 137.081 66.3932 137.512 66.309C137.943 66.2249 138.339 66.0149 138.65 65.7055C138.961 65.3962 139.174 65.0015 139.26 64.5714C139.347 64.1413 139.305 63.695 139.138 63.2892C138.971 62.8834 138.687 62.5362 138.323 62.2915C137.959 62.0469 137.53 61.9158 137.091 61.9149C136.908 61.914 136.725 61.9372 136.547 61.984C136.069 62.1031 135.645 62.3781 135.341 62.7656C135.037 63.153 134.871 63.6308 134.869 64.1233Z" fill="#407BFF"/>
|
||||
<path id="Vector_111" d="M131.716 67.3691C130.678 67.5028 129.682 66.4747 129.502 65.0639C129.408 64.4324 129.514 63.7872 129.807 63.2197C129.918 62.9687 130.091 62.7506 130.311 62.5863C130.531 62.4221 130.789 62.3173 131.061 62.282C131.333 62.2468 131.61 62.2823 131.864 62.3852C132.119 62.4881 132.342 62.6548 132.513 62.8693C132.939 63.3445 133.207 63.9408 133.278 64.5752C133.449 65.8984 132.817 67.0833 131.895 67.3415L131.716 67.3691ZM130.106 63.381C129.849 63.8838 129.755 64.4546 129.839 65.0132C129.996 66.2257 130.821 67.1202 131.683 67.0095C132.545 66.8989 133.103 65.8246 132.947 64.6121C132.884 64.0506 132.648 63.5224 132.273 63.0998C132.132 62.933 131.953 62.8021 131.751 62.7179C131.549 62.6338 131.33 62.5987 131.112 62.6157L130.987 62.6388C130.796 62.6939 130.62 62.7884 130.468 62.9163C130.316 63.0442 130.193 63.2025 130.106 63.381Z" fill="#407BFF"/>
|
||||
<path id="Vector_112" d="M134.648 64.4046L134.832 64.1187C134.408 63.8421 133.449 63.5239 132.928 64.2662L133.205 64.4691C133.684 63.8006 134.611 64.3815 134.648 64.4046Z" fill="#407BFF"/>
|
||||
<path id="Vector_113" d="M146.044 63.5931L146.326 63.3949C146.233 63.2658 145.404 62.1177 144.643 62.0901C143.882 62.0624 139.428 63.0859 139.239 63.1274L139.313 63.464C140.604 63.1689 144.071 62.4128 144.634 62.4313C145.196 62.4497 145.814 63.275 146.044 63.5931Z" fill="#407BFF"/>
|
||||
<path id="Vector_114" d="M145.123 66.3778C145.012 66.4449 144.894 66.502 144.773 66.5484C144.651 66.5943 144.524 66.6223 144.395 66.6314C144.23 66.6494 144.063 66.6305 143.906 66.576C143.782 66.5342 143.665 66.4769 143.555 66.4054C143.403 66.3004 143.27 66.1693 143.164 66.0182V63.7959C143.164 63.7959 144.404 60.9466 145.658 61.3431C146.912 61.7396 146.372 65.6171 145.123 66.3778Z" fill="#DD6A57"/>
|
||||
<path id="Vector_115" d="M145.496 62.4589C145.519 62.4589 145.529 62.482 145.496 62.4912C144.639 63.0583 144.321 64.0219 144.159 64.9855C144.195 64.8814 144.252 64.7862 144.328 64.7064C144.404 64.6267 144.496 64.5643 144.598 64.5236C144.7 64.4828 144.81 64.4647 144.919 64.4704C145.029 64.4761 145.136 64.5056 145.234 64.5567C145.261 64.5567 145.234 64.612 145.234 64.612C145.061 64.5915 144.886 64.6248 144.732 64.7073C144.579 64.7898 144.454 64.9175 144.376 65.0731C144.251 65.3368 144.155 65.6136 144.09 65.8984C144.063 65.9906 143.901 65.9767 143.915 65.8753C143.661 64.672 144.247 62.8277 145.496 62.4589Z" fill="#263238"/>
|
||||
<path id="Vector_116" d="M144.962 66.0644C144.962 66.1392 144.94 66.2123 144.898 66.2744C144.856 66.3366 144.797 66.3851 144.728 66.4137C144.659 66.4423 144.583 66.4498 144.51 66.4352C144.437 66.4206 144.369 66.3846 144.316 66.3317C144.263 66.2789 144.227 66.2115 144.213 66.1382C144.198 66.0648 144.206 65.9888 144.234 65.9197C144.263 65.8506 144.311 65.7916 144.374 65.7501C144.436 65.7085 144.509 65.6863 144.584 65.6863C144.684 65.6863 144.78 65.7262 144.851 65.7971C144.922 65.868 144.962 65.9641 144.962 66.0644Z" fill="white"/>
|
||||
<path id="Vector_117" d="M145.611 65.3497C145.611 65.4026 145.596 65.4543 145.566 65.4983C145.537 65.5423 145.495 65.5765 145.446 65.5968C145.398 65.617 145.344 65.6223 145.292 65.612C145.24 65.6017 145.192 65.5762 145.155 65.5388C145.118 65.5014 145.092 65.4538 145.082 65.4019C145.071 65.35 145.077 65.2962 145.097 65.2474C145.117 65.1985 145.152 65.1568 145.196 65.1274C145.239 65.098 145.291 65.0823 145.344 65.0823C145.415 65.0823 145.483 65.1105 145.533 65.1606C145.583 65.2108 145.611 65.2788 145.611 65.3497Z" fill="white"/>
|
||||
<path id="Vector_118" d="M151.402 75.4099C157.461 83.6581 165.621 97.5818 161.818 100.579C155.566 105.498 137.534 108.043 133.403 108.458C131.619 108.633 128.29 96.9318 129.507 95.4518C130.724 93.9718 149.747 93.2941 149.904 92.1322C149.992 91.4729 148.562 85.7697 146.852 78.6741C144.874 70.4904 149.664 73.0631 151.402 75.4099Z" fill="#DD6A57"/>
|
||||
<path id="Vector_119" d="M132.642 94.5574C132.642 94.5574 127.188 94.4052 123.619 94.4744C121.628 94.5113 118.22 94.8847 116.768 95.5809C114.601 96.6229 106.196 102.368 107.547 104.438C108.769 106.31 115.385 100.454 115.385 100.454C115.385 100.454 108.183 105.798 110.083 107.757C111.982 109.717 118.538 102.137 118.538 102.137C118.538 102.137 111.286 107.766 113.554 109.514C115.27 110.828 121.609 104.276 121.609 104.276C121.609 104.276 115.413 109.159 117.114 110.584C119 112.16 125.228 106.48 125.228 106.48C130.171 109.376 133.712 108.735 136.174 107.979C136.759 107.785 132.642 94.5574 132.642 94.5574Z" fill="#DD6A57"/>
|
||||
<path id="Vector_120" d="M117.727 98.4579C116.86 99.0527 115.98 99.6475 115.168 100.302C114.357 100.957 113.573 101.685 112.826 102.409C111.838 103.362 110.959 104.423 110.208 105.572C111.687 103.626 114.551 101.187 115.362 100.5C116.174 99.8134 116.943 99.1173 117.75 98.4533C117.773 98.4718 117.746 98.4441 117.727 98.4579Z" fill="#263238"/>
|
||||
<path id="Vector_121" d="M120.194 101.339C119.124 102.142 118.027 102.907 116.99 103.76C115.952 104.613 115.053 105.507 114.085 106.425C114.007 106.499 114.085 106.512 114.15 106.425C115.155 105.549 116.155 104.811 117.17 103.944C118.184 103.078 119.17 102.169 120.217 101.344L120.194 101.339Z" fill="#263238"/>
|
||||
<path id="Vector_122" d="M122.757 103.428C121.084 104.625 119.539 105.993 118.147 107.508C118.078 107.582 118.147 107.591 118.239 107.508C119.747 106.125 120.918 105.028 122.803 103.474C122.826 103.465 122.794 103.405 122.757 103.428Z" fill="#263238"/>
|
||||
<path id="Vector_123" d="M136.722 94.0457C135.957 94.0457 134.339 94.3039 132.545 94.3454C128.511 94.4283 122.812 94.2946 120.779 94.3454C115.284 94.5113 111.863 98.4948 110.295 99.878C109.357 100.715 108.503 101.642 107.745 102.644C107.353 103.193 106.971 103.972 107.469 104.599C108.073 105.36 110.419 104.599 112.886 102.474C112.974 102.395 112.918 102.345 112.826 102.414C109.377 105.097 108.031 104.756 107.685 104.258C107.464 103.949 107.685 103.423 107.907 103.027C108.252 102.453 108.667 101.923 109.142 101.45C110.731 99.8101 112.483 98.3363 114.371 97.0517C116.399 95.6007 118.797 94.755 121.286 94.6128C123.057 94.5021 128.488 94.6635 132.555 94.5436C134.334 94.4883 135.948 94.1702 136.704 94.1102C136.787 94.1333 136.778 94.0457 136.722 94.0457Z" fill="#263238"/>
|
||||
<path id="Vector_124" d="M159.143 85.8804L147.566 85.5853C147.566 85.5853 146.322 79.9005 146.073 76.6593C145.745 72.3669 147.262 71.2374 151.029 74.935C153.546 77.4108 159.143 85.8804 159.143 85.8804Z" fill="#407BFF"/>
|
||||
<path id="Vector_125" d="M147.977 74.3726C147.551 73.8976 147.247 73.3265 147.091 72.7082C147.517 73.1831 147.821 73.7543 147.977 74.3726ZM154.57 81.4866C154.85 81.3393 155.11 81.1564 155.344 80.9425C154.726 81.0985 154.155 81.4023 153.68 81.8278C153.99 81.7537 154.289 81.6389 154.57 81.4866ZM149.655 78.4022C149.558 78.7007 149.502 79.0108 149.489 79.3243C149.655 79.0536 149.786 78.7621 149.876 78.4575C149.97 78.1582 150.025 77.8485 150.042 77.5354C149.874 77.8052 149.743 78.0968 149.655 78.4022Z" fill="white"/>
|
||||
<path id="Vector_126" d="M148.981 85.6268C148.857 85.5991 147.667 85.53 147.598 85.5484C147.469 84.8753 147.349 84.2021 147.211 83.5336C147.142 83.1971 147.068 82.8605 146.99 82.5285C146.911 82.1966 146.819 81.7401 146.745 81.4174C146.745 81.3667 146.667 81.3759 146.672 81.4174C146.732 81.8508 146.787 82.1689 146.842 82.5424C146.898 82.9158 146.944 83.2109 147.008 83.5428C147.137 84.2436 147.248 84.9951 147.414 85.6913C147.943 85.7141 148.472 85.7033 149 85.6591L148.981 85.6268Z" fill="#263238"/>
|
||||
<path id="Vector_127" d="M157.995 84.7508C156.313 84.5941 154.634 84.4557 152.947 84.3958C152.103 84.3681 151.264 84.3497 150.42 84.3451C149.577 84.3405 148.733 84.4235 147.894 84.405C147.884 84.405 147.875 84.4089 147.868 84.4158C147.861 84.4227 147.857 84.4321 147.857 84.4419C147.857 84.4517 147.861 84.4611 147.868 84.468C147.875 84.4749 147.884 84.4788 147.894 84.4788C148.733 84.4511 149.586 84.5387 150.425 84.5572L152.952 84.6217C154.634 84.677 156.317 84.7277 158 84.8246C158.032 84.8246 158.032 84.7554 157.995 84.7508Z" fill="#263238"/>
|
||||
</g>
|
||||
<g id="Device">
|
||||
<path id="Vector_128" d="M102.553 107.702H128.091V105.719L102.553 104.894V107.702Z" fill="#455A64"/>
|
||||
<path id="Vector_129" d="M82.4788 107.67H99.3303C100.764 107.67 98.6848 103.576 93.438 102.003C88.1913 100.431 80.8237 106.134 82.4788 107.67Z" fill="#37474F"/>
|
||||
<path id="Vector_130" d="M89.0901 107.67C88.816 106.807 88.448 105.977 87.9928 105.194C87.7668 104.813 87.5043 104.455 87.209 104.124C86.9029 103.792 86.5715 103.483 86.2178 103.202C86.6744 103.338 87.0971 103.569 87.458 103.88C87.8252 104.187 88.1371 104.555 88.3801 104.968C88.6262 105.378 88.814 105.82 88.938 106.282C89.0651 106.733 89.1165 107.202 89.0901 107.67Z" fill="#263238"/>
|
||||
<path id="Vector_131" d="M87.0936 103.774C86.2084 104.345 85.3232 104.866 84.4933 105.461C84.0758 105.746 83.684 106.067 83.3222 106.42C82.9463 106.764 82.6572 107.192 82.4785 107.67C82.4871 107.12 82.6914 106.592 83.0548 106.18C83.3895 105.759 83.784 105.39 84.2259 105.083C84.6628 104.779 85.1256 104.513 85.6091 104.29C86.0843 104.066 86.5819 103.893 87.0936 103.774Z" fill="#263238"/>
|
||||
<path id="Vector_132" d="M70.3902 99.7441H111.345L104.835 69.2501H63.8755L70.3902 99.7441Z" fill="#455A64"/>
|
||||
<path id="Vector_133" d="M68.8779 99.744H109.833L103.318 69.2501H62.3633L68.8779 99.744Z" fill="#37474F"/>
|
||||
<path id="Vector_134" d="M90.9664 88.8126H91.9254L90.4685 81.9706H89.5049L90.9664 88.8126Z" fill="#263238"/>
|
||||
<path id="Vector_135" d="M89.0719 88.8126H90.0309L88.574 81.9706H87.6104L89.0719 88.8126Z" fill="#263238"/>
|
||||
<path id="Vector_136" d="M87.1769 88.8126H88.1359L86.6789 81.9706H85.7153L87.1769 88.8126Z" fill="#263238"/>
|
||||
<path id="Vector_137" d="M85.2819 88.8126H86.2408L84.7839 81.9706H83.8203L85.2819 88.8126Z" fill="#263238"/>
|
||||
<path id="Vector_138" d="M83.3822 88.8126H84.3458L82.8843 81.9706H81.9253L83.3822 88.8126Z" fill="#263238"/>
|
||||
<path id="Vector_139" d="M81.4877 88.8126H82.4513L80.9897 81.9706H80.0308L81.4877 88.8126Z" fill="#263238"/>
|
||||
<path id="Vector_140" d="M79.5922 88.8126H80.5558L79.0942 81.9706H78.1353L79.5922 88.8126Z" fill="#263238"/>
|
||||
<path id="Vector_141" d="M80.459 107.706H100.602V106.143L80.459 105.489V107.706Z" fill="#455A64"/>
|
||||
<path id="Vector_142" d="M74.9814 107.702H85.7977L92.3124 90.6199H81.4961L74.9814 107.702Z" fill="#455A64"/>
|
||||
<path id="Vector_143" d="M73.2026 107.702H84.0189L90.529 90.6199H79.7173L73.2026 107.702Z" fill="#263238"/>
|
||||
</g>
|
||||
<g id="Desk">
|
||||
<path id="Vector_144" d="M170.236 107.702H25.0322V110.344H170.236V107.702Z" fill="#37474F"/>
|
||||
<path id="Vector_145" d="M166.778 110.344H28.4902V116.973H166.778V110.344Z" fill="#37474F"/>
|
||||
<path id="Vector_146" d="M166.778 110.344H28.4902V113.658H166.778V110.344Z" fill="#263238"/>
|
||||
<path id="Vector_147" d="M47.2363 168.796H34.8433V170.976H47.2363V168.796Z" fill="#37474F"/>
|
||||
<path id="Vector_148" d="M53.959 200.682H52.6219L41.7042 149.722L41.0818 146.817L39.1223 137.67L38.3939 134.258L35.646 121.459L34.687 116.973H39.4543L40.2335 121.459L40.7406 124.401L41.0818 126.36L43.0413 137.67L43.6729 141.312L53.959 200.682Z" fill="#37474F"/>
|
||||
<path id="Vector_149" d="M39.4543 116.973L40.2335 121.459H35.646L34.687 116.973H39.4543Z" fill="#263238"/>
|
||||
<path id="Vector_150" d="M43.6726 141.312L41.7039 149.722L41.0815 146.817L39.122 137.67L38.3936 134.258L40.7403 124.401L41.0815 126.361L43.041 137.67L43.6726 141.312Z" fill="#263238"/>
|
||||
<path id="Vector_151" d="M47.4765 116.973L46.5176 121.459L43.0412 137.67L41.0818 146.817L29.5416 200.682H28.2046L39.1223 137.67L41.0818 126.36L41.9301 121.459L42.7047 116.973H47.4765Z" fill="#37474F"/>
|
||||
<path id="Vector_152" d="M47.4766 116.973L46.5176 121.459H41.9302L42.7047 116.973H47.4766Z" fill="#263238"/>
|
||||
<path id="Vector_153" d="M160.342 168.796H147.949V170.976H160.342V168.796Z" fill="#37474F"/>
|
||||
<path id="Vector_154" d="M167.064 200.682H165.722L154.809 149.722L154.187 146.817L152.222 137.67L151.494 134.258L148.751 121.459L147.787 116.973H152.559L153.334 121.459L153.845 124.401L154.187 126.36L156.141 137.67L156.773 141.312L167.064 200.682Z" fill="#37474F"/>
|
||||
<path id="Vector_155" d="M152.559 116.973L153.334 121.459H148.751L147.787 116.973H152.559Z" fill="#263238"/>
|
||||
<path id="Vector_156" d="M156.773 141.312L154.809 149.722L154.187 146.817L152.223 137.67L151.494 134.258L153.846 124.401L154.187 126.361L156.142 137.67L156.773 141.312Z" fill="#263238"/>
|
||||
<path id="Vector_157" d="M160.576 116.973L159.617 121.459L156.141 137.67L154.186 146.817L142.642 200.682H141.309L152.222 137.67L154.186 126.36L155.03 121.459L155.809 116.973H160.576Z" fill="#37474F"/>
|
||||
<path id="Vector_158" d="M160.577 116.973L159.618 121.459H155.031L155.81 116.973H160.577Z" fill="#263238"/>
|
||||
</g>
|
||||
<g id="Lamp">
|
||||
<path id="Vector_159" d="M37.3191 105.083L36.4062 104.963L40.3759 74.7413L52.0774 67.2723L55.8534 69.7435L55.3509 70.5135L52.0682 68.3696L41.2335 75.2854L37.3191 105.083Z" fill="#263238"/>
|
||||
<path id="Vector_160" d="M40.0303 75.0133C40.0294 75.1678 40.0744 75.3191 40.1597 75.448C40.2449 75.5768 40.3666 75.6774 40.5092 75.7369C40.6517 75.7965 40.8088 75.8123 40.9603 75.7824C41.1119 75.7525 41.2512 75.6782 41.3604 75.5689C41.4697 75.4597 41.544 75.3204 41.5739 75.1688C41.6038 75.0173 41.588 74.8602 41.5284 74.7176C41.4689 74.5751 41.3683 74.4534 41.2395 74.3682C41.1106 74.2829 40.9593 74.2379 40.8049 74.2388C40.5994 74.2388 40.4024 74.3204 40.2572 74.4656C40.1119 74.6109 40.0303 74.8079 40.0303 75.0133Z" fill="#407BFF"/>
|
||||
<path id="Vector_161" d="M52.0363 68.5955C52.4641 68.5955 52.8109 68.2487 52.8109 67.8209C52.8109 67.3931 52.4641 67.0463 52.0363 67.0463C51.6085 67.0463 51.2617 67.3931 51.2617 67.8209C51.2617 68.2487 51.6085 68.5955 52.0363 68.5955Z" fill="#407BFF"/>
|
||||
<path id="Vector_162" d="M62.3355 70.804L57.1763 76.5625L54.7973 73.621L53.3496 71.8275L57.2132 67.5167L59.1542 68.7661L62.3355 70.804Z" fill="#407BFF"/>
|
||||
<path id="Vector_163" opacity="0.1" d="M62.336 70.804L57.1769 76.5625L54.7979 73.621L59.1548 68.7661L62.336 70.804Z" fill="black"/>
|
||||
<path id="Vector_164" d="M69.8093 73.644L60.8188 83.6764L54.8481 76.0599L61.5841 68.5447L69.8093 73.644Z" fill="#407BFF"/>
|
||||
<path id="Vector_165" d="M43.9215 107.707H30.6201L31.4362 103.529H43.1054L43.9215 107.707Z" fill="#407BFF"/>
|
||||
</g>
|
||||
<g id="Plant">
|
||||
<path id="Vector_166" d="M178.378 146.49C177.99 149.191 178.129 151.942 178.788 154.591C179.1 155.818 179.515 157.016 180.029 158.173C180.674 159.653 181.347 161.101 181.186 162.724C181.029 162.83 181.569 162.811 181.582 162.655C185.916 160.188 191.477 159.736 194.81 155.702C196.391 153.789 197.189 151.368 197.576 148.947C197.987 146.31 198.097 143.415 197.419 140.791C196.843 138.592 195.575 136.471 193.496 135.393C191.417 134.314 188.572 134.378 186.327 135.074C181.472 136.582 179.065 141.806 178.378 146.49Z" fill="#407BFF"/>
|
||||
<path id="Vector_167" d="M176.155 178.57C176.745 176.601 177.336 174.628 177.944 172.664C179.134 168.81 180.369 164.974 181.739 161.179C182.559 158.911 183.423 156.662 184.33 154.434C184.233 153.029 184.061 151.63 183.813 150.243C183.454 148.565 182.924 146.942 182.43 145.296C182.422 145.273 182.424 145.247 182.435 145.225C182.445 145.203 182.465 145.186 182.488 145.178C182.511 145.17 182.537 145.172 182.559 145.183C182.581 145.194 182.597 145.213 182.605 145.236C183.578 147.504 184.851 150.4 184.878 153.074C185.939 150.552 187.068 148.067 188.286 145.619C188.425 143.547 188.362 141.467 188.097 139.408C188.093 139.389 188.097 139.369 188.108 139.352C188.12 139.336 188.137 139.324 188.156 139.321C188.176 139.317 188.196 139.321 188.213 139.333C188.229 139.344 188.24 139.361 188.244 139.381C188.612 141.183 188.754 143.025 188.668 144.863C189.59 143.018 190.577 141.206 191.624 139.418C191.716 139.256 191.942 139.418 191.859 139.579C190.231 142.714 188.719 145.918 187.299 149.16C189.296 147.432 191.602 146.097 194.095 145.227C194.205 145.19 194.284 145.347 194.173 145.388C191.453 146.561 188.965 148.21 186.824 150.257C185.807 152.633 184.837 155.027 183.915 157.44C186.626 154.78 190.337 153.032 193.924 152.097C194.049 152.064 194.081 152.249 193.961 152.286C189.812 153.535 186.584 155.891 183.421 158.74C183.053 159.715 182.693 160.692 182.343 161.673C180.999 165.382 179.724 169.119 178.516 172.881C177.935 174.679 177.359 176.486 176.796 178.289C176.192 180.234 175.717 182.286 174.952 184.163C174.878 184.342 174.555 184.301 174.597 184.084C175.023 182.221 175.543 180.381 176.155 178.57Z" fill="#263238"/>
|
||||
<path id="Vector_168" d="M183.343 142.682C184.113 143.865 184.644 145.187 184.906 146.573C184.906 146.61 184.856 146.628 184.842 146.573C184.357 145.267 183.792 143.992 183.15 142.756C183.085 142.682 183.27 142.585 183.343 142.682Z" fill="#263238"/>
|
||||
<path id="Vector_169" d="M191.075 151.728C192.28 151.058 193.597 150.614 194.962 150.418C194.999 150.418 195.022 150.464 194.962 150.478C194.335 150.741 193.68 150.939 193.048 151.165C192.417 151.391 191.79 151.705 191.149 151.926C191.125 151.927 191.102 151.921 191.082 151.908C191.062 151.895 191.047 151.876 191.039 151.854C191.03 151.832 191.03 151.808 191.036 151.785C191.043 151.762 191.056 151.742 191.075 151.728Z" fill="#263238"/>
|
||||
<path id="Vector_170" d="M193.251 140.865C193.644 140.568 194.064 140.309 194.506 140.091C194.52 140.082 194.538 140.079 194.555 140.082C194.572 140.086 194.586 140.097 194.595 140.111C194.605 140.126 194.608 140.144 194.604 140.161C194.6 140.178 194.589 140.192 194.575 140.201C194.19 140.507 193.778 140.775 193.344 141.004C193.265 141.05 193.173 140.916 193.251 140.865Z" fill="#263238"/>
|
||||
<path id="Vector_171" d="M163.767 161.212C166.889 162.134 170.028 162.991 173.15 163.909C173.422 163.992 178.682 153.881 176.787 148.671C175.026 143.848 170.992 140.243 166.183 138.602C163.956 137.845 161.218 137.218 158.862 137.73C156.769 138.191 155.289 139.906 154.611 141.88C153.689 144.554 153.993 147.749 154.496 150.478C154.899 153.043 155.958 155.46 157.571 157.495C159.221 159.464 161.338 160.488 163.767 161.212Z" fill="#407BFF"/>
|
||||
<path id="Vector_172" d="M159.244 151.599C161.217 152.563 163.263 153.369 165.362 154.01C166.763 154.388 168.13 154.883 169.447 155.49C168.133 152.548 166.681 149.671 165.15 146.822C163.131 146.237 161.001 145.328 159.493 143.899C159.476 143.884 159.466 143.863 159.464 143.841C159.462 143.818 159.469 143.796 159.484 143.779C159.499 143.762 159.52 143.751 159.542 143.75C159.565 143.748 159.587 143.755 159.604 143.77C161.268 144.946 163.103 145.651 164.943 146.444C164.528 145.679 164.107 144.91 163.68 144.139C163.564 143.927 163.855 143.715 163.998 143.922C165.637 146.305 167.119 148.792 168.433 151.368C168.769 149.11 168.877 146.824 168.756 144.544C168.754 144.538 168.753 144.53 168.754 144.523C168.755 144.516 168.758 144.509 168.762 144.503C168.767 144.497 168.772 144.492 168.779 144.489C168.785 144.486 168.792 144.484 168.8 144.484C168.807 144.484 168.814 144.486 168.821 144.489C168.827 144.492 168.833 144.497 168.837 144.503C168.841 144.509 168.844 144.516 168.845 144.523C168.846 144.53 168.846 144.538 168.843 144.544C169.234 147.03 169.209 149.564 168.77 152.041C169.862 154.227 170.858 156.467 171.757 158.731C172.112 157.371 172.573 156.029 172.882 154.655C173.358 152.695 173.514 150.671 173.343 148.662C173.343 148.602 173.422 148.597 173.431 148.662C173.986 152.389 173.534 156.196 172.121 159.69C172.642 161.073 173.14 162.424 173.597 163.793C175.951 170.796 177.347 178.086 177.746 185.463C177.746 185.498 177.732 185.532 177.707 185.557C177.682 185.582 177.648 185.597 177.613 185.597C177.577 185.597 177.543 185.582 177.518 185.557C177.493 185.532 177.479 185.498 177.479 185.463C176.663 178.189 175.106 171.018 172.832 164.061C171.909 161.341 170.881 158.699 169.738 156.103C167.894 155.559 166.049 154.821 164.247 154.194C162.444 153.567 160.669 152.871 159.175 151.709C159.115 151.663 159.18 151.566 159.244 151.599Z" fill="#263238"/>
|
||||
<path id="Vector_173" d="M156.335 148.675C158.244 149.358 160.051 150.308 161.96 150.981C162.047 151.013 161.997 151.156 161.904 151.138C159.89 150.718 157.889 150.096 156.261 148.772C156.187 148.722 156.266 148.639 156.335 148.675Z" fill="#263238"/>
|
||||
<path id="Vector_174" d="M171.918 144.526C171.918 144.425 172.048 144.369 172.075 144.471C172.601 146.232 172.96 148.099 172.453 149.897C172.453 149.966 172.32 149.971 172.315 149.897C172.227 148.095 172.324 146.333 171.918 144.526Z" fill="#263238"/>
|
||||
<path id="Vector_175" d="M164.025 140.483C164.633 141.357 164.924 142.413 164.851 143.475C164.851 143.539 164.74 143.581 164.722 143.475C164.491 142.47 164.104 141.552 163.8 140.575C163.798 140.548 163.805 140.521 163.819 140.499C163.834 140.476 163.855 140.458 163.88 140.448C163.904 140.438 163.932 140.436 163.958 140.442C163.984 140.448 164.008 140.462 164.025 140.483Z" fill="#263238"/>
|
||||
<path id="Vector_176" d="M200.909 165.67C199.987 168.575 197.82 172.586 194.376 172.623C192.145 172.623 189.895 172.378 187.659 172.346C185.261 172.309 182.864 172.314 180.471 172.457C180.277 172.457 180.757 165.283 186.515 161.783C188.129 160.801 190.102 160.492 191.933 160.096C194.028 159.6 196.179 159.375 198.332 159.427C199.655 159.483 200.757 159.764 201.227 161.115C201.698 162.466 201.333 164.291 200.909 165.67Z" fill="#407BFF"/>
|
||||
<path id="Vector_177" d="M198.42 162.046C197.037 162.406 195.608 162.816 194.202 163.263C194.568 162.866 194.956 162.489 195.363 162.134C195.967 161.631 196.631 161.212 197.277 160.792C197.332 160.755 197.3 160.649 197.231 160.677C195.868 161.243 194.691 162.179 193.833 163.379C192.085 163.946 190.352 164.568 188.683 165.255C187.53 165.726 186.424 166.307 185.382 166.989C185.716 166.262 186.116 165.568 186.576 164.914C187.341 163.923 188.374 163.369 189.374 162.669C189.395 162.656 189.409 162.637 189.415 162.614C189.42 162.591 189.417 162.566 189.404 162.546C189.392 162.526 189.372 162.512 189.349 162.506C189.327 162.5 189.302 162.504 189.282 162.516C188.233 162.967 187.29 163.632 186.513 164.469C185.737 165.306 185.144 166.296 184.773 167.376C183.588 168.24 182.505 169.236 181.546 170.345C177.733 174.674 174.731 180.433 174.722 186.307C174.722 186.45 174.948 186.486 174.976 186.344C175.952 180.582 178.462 175.189 182.242 170.732C182.514 170.414 182.795 170.114 183.076 169.81C184.121 169.67 185.172 169.591 186.225 169.575C187.452 169.575 188.669 169.755 189.891 169.856C191.901 170.018 194.123 170.045 195.935 169.031C195.953 169.021 195.967 169.005 195.974 168.985C195.981 168.966 195.98 168.945 195.972 168.926C195.964 168.906 195.949 168.891 195.93 168.883C195.912 168.874 195.89 168.873 195.871 168.879C191.832 170.35 187.572 168.487 183.537 169.363C185.273 167.71 187.307 166.402 189.531 165.509L189.905 165.361C192.5 165.67 195.239 166.348 197.766 165.504C197.781 165.5 197.795 165.489 197.803 165.475C197.811 165.461 197.814 165.444 197.809 165.428C197.805 165.412 197.795 165.398 197.78 165.39C197.766 165.382 197.749 165.38 197.733 165.384C195.29 165.993 192.948 165.227 190.541 165.107C193.164 164.084 195.838 163.263 198.471 162.258C198.655 162.175 198.66 161.972 198.42 162.046Z" fill="#263238"/>
|
||||
<path id="Vector_178" d="M199.563 164.591C198.31 164.753 197.05 164.848 195.787 164.877C195.759 164.877 195.75 164.923 195.787 164.928C197.058 165.165 198.368 165.082 199.6 164.688C199.651 164.669 199.623 164.582 199.563 164.591Z" fill="#263238"/>
|
||||
<path id="Vector_179" d="M191.034 162.101C190.337 162.414 189.704 162.853 189.167 163.397C189.097 163.457 189.19 163.577 189.259 163.521C189.577 163.291 189.904 163.06 190.232 162.862C190.549 162.687 190.857 162.495 191.154 162.286C191.227 162.217 191.135 162.046 191.034 162.101Z" fill="#263238"/>
|
||||
<path id="Vector_180" d="M170.701 171.451C170.742 171.544 170.604 171.636 170.549 171.534C170.539 171.55 170.526 171.562 170.511 171.572C170.496 171.582 170.479 171.588 170.461 171.59C168.144 172.144 165.794 172.555 163.426 172.821C161.521 172.987 159.327 173.093 157.658 171.991C155.399 170.492 153.914 166.486 155.136 163.941C156.579 160.921 160.931 162.558 163.117 163.637C166.479 165.277 169.162 168.042 170.701 171.451Z" fill="#407BFF"/>
|
||||
<path id="Vector_181" d="M172.389 172.848C171.12 171.62 169.71 170.546 168.189 169.649C167.093 167.915 165.641 166.434 163.929 165.306C163.846 165.25 163.776 165.379 163.85 165.439C165.212 166.53 166.42 167.8 167.442 169.215C165.744 168.289 163.982 167.488 162.167 166.818C161.522 165.616 160.538 164.63 159.337 163.982C159.313 163.982 159.286 163.982 159.309 164.019C160.298 164.773 161.162 165.679 161.868 166.703C160.793 166.301 159.715 165.933 158.64 165.573C158.544 165.541 158.507 165.688 158.599 165.725C160.526 166.477 162.49 167.27 164.399 168.183C162.073 168.554 159.703 168.554 157.377 168.183C157.365 168.181 157.352 168.183 157.342 168.19C157.331 168.197 157.324 168.207 157.32 168.219C157.317 168.231 157.318 168.243 157.323 168.255C157.329 168.266 157.338 168.275 157.349 168.279C159.776 168.999 162.353 169.039 164.8 168.395C166.015 168.984 167.194 169.644 168.332 170.373C167.374 170.293 166.41 170.372 165.478 170.608C163.832 170.989 162.147 171.18 160.457 171.175C160.392 171.175 160.378 171.276 160.457 171.285C163.366 171.788 166.119 170.465 169.005 170.824C170.076 171.553 171.082 172.374 172.011 173.277C173.811 175.077 175.294 177.169 176.395 179.465C177.608 181.936 178.267 184.536 179.249 187.109C179.255 187.133 179.271 187.153 179.292 187.166C179.313 187.178 179.338 187.182 179.362 187.176C179.386 187.169 179.407 187.154 179.419 187.133C179.432 187.112 179.435 187.086 179.429 187.063C178.567 181.991 176.059 176.435 172.389 172.848Z" fill="#263238"/>
|
||||
<path id="Vector_182" d="M163.605 165.937C163.413 165.588 163.16 165.276 162.858 165.015C162.616 164.749 162.325 164.532 162.001 164.374C161.973 164.374 161.955 164.402 161.973 164.42C162.213 164.692 162.545 164.881 162.803 165.149C163.061 165.416 163.264 165.716 163.536 165.974C163.543 165.978 163.551 165.98 163.559 165.98C163.566 165.981 163.574 165.979 163.581 165.975C163.588 165.971 163.594 165.966 163.598 165.959C163.602 165.953 163.605 165.945 163.605 165.937Z" fill="#263238"/>
|
||||
<path id="Vector_183" d="M158.806 167.5C158.373 167.394 157.916 167.403 157.478 167.311C157.042 167.207 156.611 167.079 156.188 166.928C156.176 166.926 156.164 166.928 156.154 166.934C156.144 166.94 156.136 166.949 156.132 166.96C156.127 166.97 156.127 166.982 156.13 166.993C156.134 167.005 156.141 167.014 156.151 167.021C156.945 167.51 157.877 167.727 158.806 167.638C158.82 167.633 158.833 167.624 158.841 167.611C158.85 167.599 158.854 167.584 158.854 167.569C158.854 167.554 158.85 167.54 158.841 167.527C158.833 167.515 158.82 167.505 158.806 167.5Z" fill="#263238"/>
|
||||
<path id="Vector_184" d="M186.234 178.178L185.759 183.572L184.15 201.779H169.89L167.875 183.572L167.28 178.178H186.234Z" fill="#455A64"/>
|
||||
<path id="Vector_185" d="M186.234 178.178L185.759 183.572H167.875L167.28 178.178H186.234Z" fill="#263238"/>
|
||||
<path id="Vector_186" d="M187.645 176.707H165.87V181.083H187.645V176.707Z" fill="#455A64"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 67 KiB |
34
lib/features/history/models/history_model.dart
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
import 'package:intl/intl.dart';
|
||||
|
||||
class LearningHistory {
|
||||
final int score;
|
||||
final dynamic currentLevel;
|
||||
final dynamic nextLevel;
|
||||
final DateTime studentFinish;
|
||||
final String topicName;
|
||||
final String sectionName;
|
||||
|
||||
LearningHistory({
|
||||
required this.score,
|
||||
required this.currentLevel,
|
||||
required this.nextLevel,
|
||||
required this.studentFinish,
|
||||
required this.topicName,
|
||||
required this.sectionName,
|
||||
});
|
||||
|
||||
factory LearningHistory.fromJson(Map<String, dynamic> json) {
|
||||
return LearningHistory(
|
||||
score: json['SCORE'],
|
||||
currentLevel: json['CURRENT_LEVEL'],
|
||||
nextLevel: json['NEXT_LEVEL'],
|
||||
studentFinish: DateTime.parse(json['STUDENT_FINISH']),
|
||||
topicName: json['TOPIC_NAME'],
|
||||
sectionName: json['SECTION_NAME'],
|
||||
);
|
||||
}
|
||||
|
||||
String get formattedDate {
|
||||
return DateFormat('yyyy-MM-dd HH:mm').format(studentFinish);
|
||||
}
|
||||
}
|
||||
86
lib/features/history/provider/history_provider.dart
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
import 'package:english_learning/core/services/repositories/history_repository.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/features/learning/provider/section_provider.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:english_learning/features/history/models/history_model.dart';
|
||||
|
||||
class HistoryProvider with ChangeNotifier {
|
||||
final HistoryRepository _repository;
|
||||
final SectionProvider _sectionProvider;
|
||||
List<LearningHistory> _learningHistory = [];
|
||||
int _selectedPageIndex = 0;
|
||||
bool _isLoading = false;
|
||||
String? _error;
|
||||
|
||||
HistoryProvider(
|
||||
this._repository,
|
||||
this._sectionProvider,
|
||||
);
|
||||
|
||||
List<LearningHistory> get learningHistory => _learningHistory;
|
||||
int get selectedPageIndex => _selectedPageIndex;
|
||||
bool get isLoading => _isLoading;
|
||||
String? get error => _error;
|
||||
|
||||
void setSelectedPageIndex(int index) {
|
||||
_selectedPageIndex = index;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<void> fetchLearningHistory(String token) async {
|
||||
if (_sectionProvider.sections.isEmpty) {
|
||||
_error = 'No sections available';
|
||||
notifyListeners();
|
||||
return;
|
||||
}
|
||||
|
||||
String sectionId = _sectionProvider.sections[_selectedPageIndex].id;
|
||||
_isLoading = true;
|
||||
_error = null;
|
||||
notifyListeners();
|
||||
|
||||
try {
|
||||
final history = await _repository.getLearningHistory(sectionId, token);
|
||||
_learningHistory = history;
|
||||
} catch (e) {
|
||||
_error = 'Error fetching learning history: ${e.toString()}';
|
||||
} finally {
|
||||
_isLoading = false;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
Color getColorForLevels(dynamic currentLevel, dynamic nextLevel) {
|
||||
int? current = _parseLevel(currentLevel);
|
||||
int? next = _parseLevel(nextLevel);
|
||||
|
||||
if (current == null || next == null) {
|
||||
return AppColors.blackColor; // Default color if parsing fails
|
||||
}
|
||||
|
||||
if (current == next) {
|
||||
return AppColors.blackColor;
|
||||
} else if (next > current) {
|
||||
return AppColors.blueColor;
|
||||
} else {
|
||||
return AppColors.redColor;
|
||||
}
|
||||
}
|
||||
|
||||
int? _parseLevel(dynamic level) {
|
||||
if (level is int) {
|
||||
return level;
|
||||
} else if (level is String) {
|
||||
if (level.toLowerCase() == 'pretest') {
|
||||
return 0; // Treat Pretest as level 0
|
||||
}
|
||||
return int.tryParse(level.replaceAll('Level ', ''));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Future<void> refreshData(String token) async {
|
||||
await _sectionProvider.fetchSections(token);
|
||||
await fetchLearningHistory(token);
|
||||
}
|
||||
}
|
||||
163
lib/features/history/screens/history_screen.dart
Normal file
|
|
@ -0,0 +1,163 @@
|
|||
import 'package:english_learning/core/widgets/global_button.dart';
|
||||
import 'package:english_learning/features/auth/provider/user_provider.dart';
|
||||
import 'package:english_learning/features/history/provider/history_provider.dart';
|
||||
import 'package:english_learning/features/history/widgets/custom_tab_bar.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/features/history/widgets/exercise_history_card.dart';
|
||||
import 'package:english_learning/features/learning/screens/learning_screen.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class HistoryScreen extends StatefulWidget {
|
||||
const HistoryScreen({
|
||||
super.key,
|
||||
});
|
||||
@override
|
||||
State<HistoryScreen> createState() => _HistoryScreenState();
|
||||
}
|
||||
|
||||
class _HistoryScreenState extends State<HistoryScreen> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
final historyProvider =
|
||||
Provider.of<HistoryProvider>(context, listen: false);
|
||||
final userProvider = Provider.of<UserProvider>(context, listen: false);
|
||||
|
||||
historyProvider.refreshData(userProvider.jwtToken!);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: AppColors.bgSoftColor,
|
||||
body: SafeArea(
|
||||
child: Center(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 16.0,
|
||||
vertical: 30.0,
|
||||
),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
decoration: BoxDecoration(
|
||||
color: AppColors.whiteColor,
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'Your Exercise History!',
|
||||
style: AppTextStyles.blueTextStyle.copyWith(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'Track your progress with a personalized overview of all your workouts.',
|
||||
style: AppTextStyles.greyTextStyle.copyWith(
|
||||
fontSize: 13,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
const CustomTabBar(),
|
||||
const SizedBox(height: 8),
|
||||
Expanded(
|
||||
child: Consumer<HistoryProvider>(
|
||||
builder: (context, historyProvider, child) {
|
||||
if (historyProvider.isLoading) {
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
} else if (historyProvider.error != null) {
|
||||
return Center(child: Text(historyProvider.error!));
|
||||
} else if (historyProvider.learningHistory.isEmpty) {
|
||||
return _buildEmptyState(context);
|
||||
} else {
|
||||
return ListView.builder(
|
||||
itemCount: historyProvider.learningHistory.length,
|
||||
itemBuilder: (context, index) {
|
||||
return Column(
|
||||
children: [
|
||||
ExerciseHistoryCard(
|
||||
exercise:
|
||||
historyProvider.learningHistory[index],
|
||||
),
|
||||
const SizedBox(height: 8.0),
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildEmptyState(BuildContext context) {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
color: AppColors.whiteColor,
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Text(
|
||||
'Still New?',
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
Text(
|
||||
'Begin your journey!',
|
||||
style: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
SvgPicture.asset(
|
||||
'lib/features/history/assets/images/is_empty_illustration.svg',
|
||||
width: 160,
|
||||
),
|
||||
const SizedBox(height: 32),
|
||||
GlobalButton(
|
||||
text: 'Explore',
|
||||
backgroundColor: AppColors.yellowButtonColor,
|
||||
textColor: AppColors.blackColor,
|
||||
onPressed: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => const LearningScreen(),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
101
lib/features/history/widgets/custom_tab_bar.dart
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
import 'package:english_learning/features/auth/provider/user_provider.dart';
|
||||
import 'package:english_learning/features/history/provider/history_provider.dart';
|
||||
import 'package:english_learning/features/learning/provider/section_provider.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class CustomTabBar extends StatefulWidget {
|
||||
const CustomTabBar({super.key});
|
||||
|
||||
@override
|
||||
_CustomTabBarState createState() => _CustomTabBarState();
|
||||
}
|
||||
|
||||
class _CustomTabBarState extends State<CustomTabBar> {
|
||||
final ScrollController _scrollController = ScrollController();
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_scrollController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final historyProvider = Provider.of<HistoryProvider>(context);
|
||||
final sectionProvider = Provider.of<SectionProvider>(context);
|
||||
final selectedPageIndex = historyProvider.selectedPageIndex;
|
||||
|
||||
if (sectionProvider.sections.isEmpty) {
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
}
|
||||
|
||||
return SingleChildScrollView(
|
||||
controller: _scrollController,
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: Row(
|
||||
children: sectionProvider.sections.asMap().entries.map((entry) {
|
||||
int index = entry.key;
|
||||
String sectionName = entry.value.name;
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 4.0),
|
||||
child: _TabBarButton(
|
||||
title: sectionName,
|
||||
isSelected: selectedPageIndex == index,
|
||||
onTap: () => _setSelectedPageIndex(context, index),
|
||||
),
|
||||
);
|
||||
}).toList(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void _setSelectedPageIndex(BuildContext context, int index) {
|
||||
final historyProvider =
|
||||
Provider.of<HistoryProvider>(context, listen: false);
|
||||
historyProvider.setSelectedPageIndex(index);
|
||||
|
||||
_scrollController.animateTo(
|
||||
index * 100.0,
|
||||
duration: const Duration(milliseconds: 300),
|
||||
curve: Curves.easeInOut,
|
||||
);
|
||||
|
||||
final userProvider = Provider.of<UserProvider>(context, listen: false);
|
||||
historyProvider.fetchLearningHistory(userProvider.jwtToken!);
|
||||
}
|
||||
}
|
||||
|
||||
class _TabBarButton extends StatelessWidget {
|
||||
final String title;
|
||||
final bool isSelected;
|
||||
final VoidCallback onTap;
|
||||
|
||||
const _TabBarButton({
|
||||
required this.title,
|
||||
required this.isSelected,
|
||||
required this.onTap,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return GestureDetector(
|
||||
onTap: onTap,
|
||||
child: Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
|
||||
decoration: BoxDecoration(
|
||||
color: isSelected ? AppColors.blueColor : AppColors.whiteColor,
|
||||
borderRadius: BorderRadius.circular(8.0),
|
||||
),
|
||||
child: Text(
|
||||
title,
|
||||
style: TextStyle(
|
||||
color: isSelected ? AppColors.whiteColor : AppColors.disableColor,
|
||||
fontWeight: isSelected ? FontWeight.w900 : FontWeight.normal,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
114
lib/features/history/widgets/exercise_history_card.dart
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
import 'package:english_learning/features/history/models/history_model.dart';
|
||||
import 'package:english_learning/features/history/provider/history_provider.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class ExerciseHistoryCard extends StatelessWidget {
|
||||
final LearningHistory exercise;
|
||||
|
||||
const ExerciseHistoryCard({
|
||||
super.key,
|
||||
required this.exercise,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final historyProvider =
|
||||
Provider.of<HistoryProvider>(context, listen: false);
|
||||
final color = historyProvider.getColorForLevels(
|
||||
exercise.currentLevel, exercise.nextLevel);
|
||||
|
||||
return Card(
|
||||
color: AppColors.whiteColor,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0),
|
||||
),
|
||||
elevation: 0,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 15.0, vertical: 18.0),
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
RichText(
|
||||
text: TextSpan(
|
||||
style: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
children: [
|
||||
TextSpan(
|
||||
text: '${exercise.topicName} /',
|
||||
),
|
||||
TextSpan(
|
||||
text: ' ${exercise.sectionName}',
|
||||
style: AppTextStyles.blackTextStyle)
|
||||
]),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
RichText(
|
||||
text: TextSpan(
|
||||
style: AppTextStyles.greyTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
),
|
||||
children: [
|
||||
TextSpan(
|
||||
text: '${exercise.currentLevel} → ',
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
TextSpan(
|
||||
text: '${exercise.nextLevel}',
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
color: color,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'Submission: ${exercise.formattedDate}',
|
||||
style: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Container(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 16.0,
|
||||
vertical: 26.0,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
border: Border.all(
|
||||
color: color,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(8.0),
|
||||
),
|
||||
child: Text(
|
||||
'${exercise.score}/100',
|
||||
style: TextStyle(
|
||||
color: color,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
5
lib/features/home/assets/images/Logo.svg
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<svg width="31" height="36" viewBox="0 0 31 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.28926 2.05211C9.3188 1.16586 10.0612 0.471366 10.9474 0.500909C12.2167 0.543219 14.0808 0.960836 15.6669 2.12467C17.3303 3.34516 18.6069 5.33734 18.5818 8.25285C18.5671 9.95317 18.2153 11.3777 17.5491 12.5714C16.8828 13.7653 15.958 14.6281 14.9503 15.2878C13.9592 15.9368 12.8613 16.4057 11.825 16.8035C11.4059 16.9644 11.0119 17.1087 10.6302 17.2485C10.0076 17.4764 9.41775 17.6924 8.80546 17.9489C4.0326 19.9483 3.03422 24.1945 3.75148 27.5733C4.6169 31.65 9.62543 33.6035 12.6849 31.2503C14.1413 30.1301 14.7326 28.6315 14.7885 27.3374C14.8167 26.6833 14.7059 26.1184 14.5333 25.709C14.3536 25.2829 14.1591 25.1353 14.0969 25.1034C13.3079 24.6988 12.9962 23.7311 13.4009 22.9421C13.8055 22.153 14.7732 21.8414 15.5622 22.2461C16.4967 22.7253 17.1209 23.5808 17.4922 24.4614C17.8705 25.3587 18.0429 26.4042 17.9966 27.4759C17.9035 29.6333 16.9152 32.0477 14.6427 33.7956C9.47518 37.7703 1.90343 34.3315 0.610307 28.2401C-0.338118 23.7724 1.00685 17.7343 7.5647 14.9871C8.231 14.708 8.95848 14.4409 9.63743 14.1917C10.0027 14.0575 10.354 13.9286 10.6741 13.8057C11.6554 13.429 12.4942 13.0577 13.1914 12.6013C13.872 12.1557 14.3871 11.648 14.745 11.0065C15.1031 10.3649 15.3598 9.48932 15.3707 8.22517C15.3865 6.39751 14.6441 5.35706 13.7673 4.71368C12.8132 4.01364 11.6157 3.73614 10.8405 3.7103C9.95421 3.68075 9.25971 2.93836 9.28926 2.05211Z" fill="white"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M25.0047 5.00861C26.8576 4.89171 28.6306 5.40345 29.7313 5.913C30.5359 6.28554 30.8863 7.23988 30.5137 8.04456C30.1412 8.84925 29.1869 9.19957 28.3822 8.82703C27.6428 8.48473 26.4054 8.13779 25.2069 8.21341C24.0696 8.28516 23.0762 8.71504 22.4104 9.82919C21.5386 11.2881 21.7232 13.0424 22.4296 15.5279C22.5569 15.9755 22.7154 16.4927 22.8813 17.0336C23.119 17.8088 23.3716 18.6327 23.5683 19.3703C23.9278 20.7188 24.2222 22.1762 24.2222 23.6746C24.2222 25.1573 23.859 26.632 23.4022 27.8357C22.9581 29.0058 22.3552 30.1029 21.7414 30.7551C21.1336 31.4008 20.1175 31.4316 19.4717 30.8239C18.826 30.2162 18.7952 29.2 19.403 28.5543C19.6069 28.3377 20.0263 27.6809 20.4 26.6963C20.7609 25.7453 21.011 24.6644 21.011 23.6746C21.011 22.5798 20.7943 21.4309 20.4655 20.1976C20.267 19.4531 20.0635 18.7944 19.8526 18.112C19.6869 17.5756 19.5167 17.0246 19.3408 16.4058C18.6289 13.9012 18.0212 10.9142 19.6539 8.182C20.9917 5.94322 23.0905 5.12938 25.0047 5.00861Z" fill="white"/>
|
||||
<ellipse cx="11.1654" cy="21.0071" rx="1.70693" ry="1.70693" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
BIN
lib/features/home/assets/images/banner_1.png
Normal file
|
After Width: | Height: | Size: 350 KiB |
BIN
lib/features/home/assets/images/banner_2.png
Normal file
|
After Width: | Height: | Size: 363 KiB |
BIN
lib/features/home/assets/images/banner_3.png
Normal file
|
After Width: | Height: | Size: 361 KiB |
162
lib/features/home/assets/images/card_illustration.svg
Normal file
|
After Width: | Height: | Size: 170 KiB |
15
lib/features/home/data/card_data.dart
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
import 'package:english_learning/features/home/models/card_model.dart';
|
||||
|
||||
class CardData {
|
||||
List<CardModel> cardData = [
|
||||
CardModel(
|
||||
image: 'lib/features/home/assets/images/banner_1.png',
|
||||
),
|
||||
CardModel(
|
||||
image: 'lib/features/home/assets/images/banner_2.png',
|
||||
),
|
||||
CardModel(
|
||||
image: 'lib/features/home/assets/images/banner_3.png',
|
||||
),
|
||||
];
|
||||
}
|
||||
7
lib/features/home/models/card_model.dart
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
class CardModel {
|
||||
final String image;
|
||||
|
||||
CardModel({
|
||||
required this.image,
|
||||
});
|
||||
}
|
||||
1
lib/features/home/provider/home_provider.dart
Normal file
|
|
@ -0,0 +1 @@
|
|||
|
||||
291
lib/features/home/screens/home_screen.dart
Normal file
|
|
@ -0,0 +1,291 @@
|
|||
import 'package:bootstrap_icons/bootstrap_icons.dart';
|
||||
import 'package:carousel_slider/carousel_slider.dart';
|
||||
import 'package:english_learning/features/auth/provider/user_provider.dart';
|
||||
import 'package:english_learning/features/history/screens/history_screen.dart';
|
||||
import 'package:english_learning/features/home/data/card_data.dart';
|
||||
import 'package:english_learning/features/home/widgets/progress_card.dart';
|
||||
import 'package:english_learning/features/home/widgets/welcome_card.dart';
|
||||
import 'package:english_learning/features/learning/screens/learning_screen.dart';
|
||||
import 'package:english_learning/features/settings/modules/edit_profile/screens/edit_profile_screen.dart';
|
||||
import 'package:english_learning/features/settings/screens/settings_screen.dart';
|
||||
import 'package:english_learning/core/widgets/slider_widget.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:google_nav_bar/google_nav_bar.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class HomeScreen extends StatefulWidget {
|
||||
const HomeScreen({super.key});
|
||||
|
||||
@override
|
||||
State<HomeScreen> createState() => _HomeScreenState();
|
||||
|
||||
static void navigateReplacing(BuildContext context) {
|
||||
Navigator.of(context).pushReplacement(
|
||||
MaterialPageRoute(builder: (context) => const HomeScreen()),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _HomeScreenState extends State<HomeScreen> {
|
||||
final PageController _pageController = PageController();
|
||||
int _selectedIndex = 0;
|
||||
|
||||
final List<Widget> _screens = [
|
||||
const HomeContent(),
|
||||
const LearningScreen(),
|
||||
const HistoryScreen(),
|
||||
const SettingsScreen(),
|
||||
];
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
body: Container(
|
||||
color: AppColors.bgSoftColor,
|
||||
child: PageView(
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
controller: _pageController,
|
||||
children: _screens,
|
||||
onPageChanged: (index) {
|
||||
setState(() {
|
||||
_selectedIndex = index;
|
||||
});
|
||||
},
|
||||
),
|
||||
),
|
||||
bottomNavigationBar: Container(
|
||||
decoration: BoxDecoration(
|
||||
gradient: AppColors.gradientTheme,
|
||||
borderRadius: const BorderRadius.only(
|
||||
topLeft: Radius.circular(20),
|
||||
topRight: Radius.circular(20),
|
||||
),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(
|
||||
top: 20,
|
||||
bottom: 24,
|
||||
left: 16,
|
||||
right: 16,
|
||||
),
|
||||
child: GNav(
|
||||
activeColor: AppColors.blueColor,
|
||||
tabBackgroundColor: AppColors.whiteColor,
|
||||
tabBorderRadius: 100,
|
||||
color: AppColors.whiteColor,
|
||||
iconSize: 20,
|
||||
gap: 8,
|
||||
selectedIndex: _selectedIndex,
|
||||
onTabChange: (index) {
|
||||
setState(() {
|
||||
_selectedIndex = index;
|
||||
_pageController.animateToPage(
|
||||
index,
|
||||
duration: const Duration(milliseconds: 300),
|
||||
curve: Curves.easeInOut, // Animasi ketika berpindah tab
|
||||
);
|
||||
});
|
||||
},
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 16,
|
||||
vertical: 8,
|
||||
),
|
||||
tabs: const [
|
||||
GButton(
|
||||
icon: BootstrapIcons.house,
|
||||
text: 'Home',
|
||||
),
|
||||
GButton(
|
||||
icon: BootstrapIcons.book,
|
||||
text: 'Learning',
|
||||
),
|
||||
GButton(
|
||||
icon: BootstrapIcons.clock_history,
|
||||
text: 'History',
|
||||
),
|
||||
GButton(
|
||||
icon: BootstrapIcons.gear,
|
||||
text: 'Settings',
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class HomeContent extends StatefulWidget {
|
||||
const HomeContent({super.key});
|
||||
|
||||
@override
|
||||
State<HomeContent> createState() => _HomeContentState();
|
||||
}
|
||||
|
||||
class _HomeContentState extends State<HomeContent> {
|
||||
final CardData cardData = CardData();
|
||||
int _currentPage = 0;
|
||||
bool hasOngoingExercises = false;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Consumer<UserProvider>(builder: (context, authProvider, child) {
|
||||
final userName = authProvider.getUserName() ?? 'Guest';
|
||||
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Stack(
|
||||
children: [
|
||||
Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Container(
|
||||
width: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
gradient: AppColors.gradientTheme,
|
||||
borderRadius: const BorderRadius.only(
|
||||
bottomLeft: Radius.circular(24),
|
||||
bottomRight: Radius.circular(24),
|
||||
),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(
|
||||
top: 60.0,
|
||||
left: 18.34,
|
||||
right: 16.0,
|
||||
bottom: 34.0,
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
'lib/features/home/assets/images/Logo.svg',
|
||||
width: 31,
|
||||
),
|
||||
const SizedBox(width: 4.34),
|
||||
Text(
|
||||
'SEALS',
|
||||
style: AppTextStyles.logoTextStyle.copyWith(
|
||||
fontSize: 28,
|
||||
fontWeight: FontWeight.w700,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) =>
|
||||
const EditProfileScreen(),
|
||||
),
|
||||
);
|
||||
},
|
||||
child: const Icon(
|
||||
BootstrapIcons.person_circle,
|
||||
size: 28,
|
||||
color: AppColors.whiteColor,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 17),
|
||||
RichText(
|
||||
text: TextSpan(
|
||||
text: 'Hi, ',
|
||||
style: AppTextStyles.whiteTextStyle.copyWith(
|
||||
fontWeight: FontWeight.w700,
|
||||
fontSize: 18,
|
||||
),
|
||||
children: <TextSpan>[
|
||||
TextSpan(
|
||||
text: userName,
|
||||
style: AppTextStyles.yellowTextStyle.copyWith(
|
||||
fontWeight: FontWeight.w700,
|
||||
fontSize: 18,
|
||||
),
|
||||
),
|
||||
TextSpan(
|
||||
text: '!',
|
||||
style: AppTextStyles.whiteTextStyle.copyWith(
|
||||
fontWeight: FontWeight.w700,
|
||||
fontSize: 18,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'Let\'s evolve together',
|
||||
style: AppTextStyles.whiteTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
CarouselSlider.builder(
|
||||
itemCount: cardData.cardData.length,
|
||||
itemBuilder: (context, index, realIndex) {
|
||||
return WelcomeCard(cardModel: cardData.cardData[index]);
|
||||
},
|
||||
options: CarouselOptions(
|
||||
height: 168,
|
||||
viewportFraction: 0.9,
|
||||
enlargeCenterPage: true,
|
||||
autoPlay: true,
|
||||
autoPlayInterval: const Duration(seconds: 3),
|
||||
autoPlayAnimationDuration: const Duration(milliseconds: 800),
|
||||
autoPlayCurve: Curves.fastOutSlowIn,
|
||||
onPageChanged: (index, reason) {
|
||||
setState(
|
||||
() {
|
||||
_currentPage = index;
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
SliderWidget(
|
||||
currentPage: _currentPage,
|
||||
itemCount: cardData.cardData.length,
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
const Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 16.0),
|
||||
child: ProgressCard(),
|
||||
),
|
||||
// hasOngoingExercises
|
||||
// ? const Padding(
|
||||
// padding: EdgeInsets.symmetric(horizontal: 16.0),
|
||||
// child:
|
||||
// ProgressCard(), // Display progress card if exercises are completed
|
||||
// )
|
||||
// : const Padding(
|
||||
// padding: EdgeInsets.symmetric(horizontal: 16.0),
|
||||
// child:
|
||||
// ExploreCard(), // Display ExploreCard if no exercises are completed
|
||||
// ),
|
||||
],
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
0
lib/features/home/screens/page_view.dart
Normal file
83
lib/features/home/widgets/explore_card.dart
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
import 'package:bootstrap_icons/bootstrap_icons.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/core/widgets/global_button.dart';
|
||||
import 'package:english_learning/features/learning/screens/learning_screen.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class ExploreCard extends StatelessWidget {
|
||||
const ExploreCard({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
color: AppColors.whiteColor,
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 16.0,
|
||||
vertical: 16.0,
|
||||
),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
const Icon(
|
||||
BootstrapIcons.info_circle,
|
||||
color: AppColors.disableColor,
|
||||
size: 16,
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
Text(
|
||||
'Your Last Journey!',
|
||||
style: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w800,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
Text(
|
||||
'Still new?',
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
'Begin your journey!',
|
||||
style: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 35),
|
||||
GlobalButton(
|
||||
text: 'Explore',
|
||||
textColor: AppColors.blackColor,
|
||||
backgroundColor: AppColors.yellowButtonColor,
|
||||
onPressed: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => const LearningScreen(),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
60
lib/features/home/widgets/progress_bar.dart
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
|
||||
class ProgressBar extends StatelessWidget {
|
||||
final int currentProgress;
|
||||
final int totalProgress;
|
||||
|
||||
const ProgressBar({
|
||||
super.key,
|
||||
required this.currentProgress,
|
||||
required this.totalProgress,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final progress = totalProgress > 0 ? currentProgress / totalProgress : 0.0;
|
||||
|
||||
return LayoutBuilder(
|
||||
builder: (context, constraints) {
|
||||
final barWidth = constraints.maxWidth - 40;
|
||||
|
||||
return Row(
|
||||
children: [
|
||||
SizedBox(
|
||||
width: barWidth,
|
||||
child: Container(
|
||||
height: 12,
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.grey.shade300,
|
||||
borderRadius: BorderRadius.circular(7),
|
||||
),
|
||||
child: Stack(
|
||||
children: [
|
||||
AnimatedContainer(
|
||||
duration: const Duration(milliseconds: 300),
|
||||
curve: Curves.easeInOut,
|
||||
width: barWidth * progress,
|
||||
decoration: BoxDecoration(
|
||||
color: AppColors.blueColor,
|
||||
borderRadius: BorderRadius.circular(7),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
const Spacer(),
|
||||
Text(
|
||||
'$currentProgress/$totalProgress',
|
||||
style: AppTextStyles.blueTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
91
lib/features/home/widgets/progress_card.dart
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
import 'package:bootstrap_icons/bootstrap_icons.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/features/home/widgets/progress_bar.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class ProgressCard extends StatelessWidget {
|
||||
const ProgressCard({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
color: AppColors.whiteColor,
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 16.0,
|
||||
vertical: 16.0,
|
||||
),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
const Icon(
|
||||
BootstrapIcons.info_circle,
|
||||
color: AppColors.disableColor,
|
||||
size: 16,
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
Text(
|
||||
'Your Last Journey!',
|
||||
style: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w800,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
Container(
|
||||
width: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.transparent,
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
border: Border.all(
|
||||
color: AppColors.disableColor,
|
||||
),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'Listening',
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 15,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
'Topic 8: Entertaining | Level 3',
|
||||
style: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
const ProgressBar(
|
||||
currentProgress: 8,
|
||||
totalProgress: 11,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
27
lib/features/home/widgets/welcome_card.dart
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
import 'package:english_learning/features/home/models/card_model.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class WelcomeCard extends StatelessWidget {
|
||||
final CardModel cardModel;
|
||||
|
||||
const WelcomeCard({
|
||||
required this.cardModel,
|
||||
super.key,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Card(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
),
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
child: Image.asset(
|
||||
cardModel.image,
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
BIN
lib/features/learning/assets/images/Grammar.png
Normal file
|
After Width: | Height: | Size: 834 KiB |
BIN
lib/features/learning/assets/images/Listening.png
Normal file
|
After Width: | Height: | Size: 383 KiB |
BIN
lib/features/learning/assets/images/Reading.png
Normal file
|
After Width: | Height: | Size: 457 KiB |
BIN
lib/features/learning/assets/images/Vocabulary.png
Normal file
|
After Width: | Height: | Size: 326 KiB |
BIN
lib/features/learning/assets/images/test.png
Normal file
|
After Width: | Height: | Size: 169 KiB |
|
|
@ -0,0 +1,224 @@
|
|||
<svg width="165" height="158" viewBox="0 0 165 158" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="goal/cuate">
|
||||
<g id="background-complete">
|
||||
<path id="Vector" d="M21.5358 106.266L30.7527 104.677L38.7288 96.3922L52.9947 111.524L62.8617 105.27L69.8214 111.043L83.457 95.7593L94.1853 94.746L105.689 77.3819L118.189 90.1575L125.572 78.5029L130.178 77.8296L136.303 66.249L148.269 86.4511L165 157.143H0L21.5358 106.266Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_2" d="M23.146 128.444L22.9414 128.178L36.8113 117.143L57.037 115.375L57.0634 115.382L74.9494 120.216L90.5848 106.37L90.6343 106.363L112.54 103.152L128.875 91.9416L136.445 74.3284L136.745 74.463L129.139 92.1672L129.099 92.1941L112.662 103.475L112.626 103.482L90.73 106.69L75.0352 120.59L74.9494 120.566L57.0073 115.715L36.9367 117.469L23.146 128.444Z" fill="white"/>
|
||||
<path id="Vector_3" d="M21.8847 130.171C22.9381 130.171 23.7921 129.3 23.7921 128.225C23.7921 127.15 22.9381 126.279 21.8847 126.279C20.8313 126.279 19.9773 127.15 19.9773 128.225C19.9773 129.3 20.8313 130.171 21.8847 130.171Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_4" d="M21.883 130.339C21.4721 130.34 21.0704 130.216 20.7285 129.984C20.3867 129.751 20.1201 129.421 19.9626 129.034C19.8051 128.647 19.7637 128.221 19.8437 127.809C19.9237 127.398 20.1214 127.021 20.4119 126.724C20.7024 126.428 21.0726 126.226 21.4755 126.145C21.8785 126.063 22.2961 126.105 22.6755 126.266C23.0549 126.427 23.3791 126.699 23.6069 127.047C23.8347 127.396 23.956 127.806 23.9554 128.225C23.9545 128.786 23.7359 129.323 23.3474 129.719C22.9589 130.115 22.4323 130.338 21.883 130.339ZM21.883 126.444C21.5375 126.444 21.1997 126.547 20.9122 126.743C20.6247 126.938 20.4004 127.216 20.2678 127.541C20.1352 127.867 20.1001 128.225 20.1671 128.57C20.2341 128.916 20.4001 129.234 20.6441 129.483C20.8881 129.733 21.1991 129.902 21.5379 129.971C21.8766 130.04 22.2278 130.005 22.5469 129.871C22.8661 129.736 23.139 129.508 23.3309 129.215C23.5229 128.922 23.6254 128.577 23.6254 128.225C23.6254 127.753 23.4419 127.301 23.1152 126.967C22.7885 126.633 22.3454 126.445 21.883 126.444Z" fill="white"/>
|
||||
<path id="Vector_5" d="M36.7888 119.25C37.8422 119.25 38.6962 118.379 38.6962 117.304C38.6962 116.23 37.8422 115.358 36.7888 115.358C35.7353 115.358 34.8813 116.23 34.8813 117.304C34.8813 118.379 35.7353 119.25 36.7888 119.25Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_6" d="M36.7876 119.439C36.3769 119.439 35.9755 119.315 35.6341 119.082C35.2927 118.849 35.0266 118.518 34.8696 118.131C34.7126 117.744 34.6717 117.318 34.752 116.907C34.8324 116.496 35.0304 116.119 35.321 115.823C35.6117 115.527 35.9818 115.325 36.3847 115.244C36.7876 115.163 37.205 115.205 37.5842 115.366C37.9635 115.527 38.2874 115.799 38.5151 116.147C38.7428 116.496 38.864 116.906 38.8633 117.325C38.8624 117.886 38.6434 118.423 38.2542 118.82C37.865 119.216 37.3376 119.439 36.7876 119.439ZM36.7876 115.544C36.4423 115.544 36.1048 115.648 35.8178 115.844C35.5307 116.04 35.3069 116.318 35.1748 116.643C35.0427 116.969 35.0081 117.327 35.0755 117.672C35.1428 118.018 35.3091 118.335 35.5532 118.584C35.7974 118.833 36.1084 119.003 36.447 119.071C36.7857 119.14 37.1367 119.105 37.4557 118.97C37.7746 118.835 38.0473 118.607 38.2391 118.314C38.4309 118.021 38.5333 117.677 38.5333 117.325C38.5355 117.089 38.4919 116.856 38.4052 116.638C38.3184 116.42 38.1902 116.222 38.0279 116.055C37.8656 115.887 37.6724 115.755 37.4595 115.664C37.2466 115.574 37.0183 115.527 36.7876 115.527V115.544Z" fill="white"/>
|
||||
<path id="Vector_7" d="M58.9374 115.251C58.938 115.637 58.8264 116.014 58.6167 116.335C58.407 116.656 58.1087 116.906 57.7594 117.054C57.4101 117.202 57.0257 117.241 56.6547 117.166C56.2838 117.091 55.943 116.905 55.6756 116.632C55.4082 116.36 55.2261 116.012 55.1525 115.634C55.0789 115.255 55.117 114.863 55.262 114.507C55.4071 114.15 55.6525 113.846 55.9672 113.632C56.2819 113.418 56.6518 113.304 57.03 113.305C57.5358 113.305 58.021 113.51 58.3787 113.875C58.7364 114.24 58.9374 114.735 58.9374 115.251Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_8" d="M57.0294 117.365C56.6195 117.365 56.2189 117.241 55.8781 117.009C55.5373 116.776 55.2716 116.446 55.1148 116.06C54.9579 115.674 54.9169 115.249 54.9969 114.838C55.0768 114.428 55.2742 114.052 55.564 113.756C55.8539 113.46 56.2231 113.259 56.6251 113.177C57.0271 113.096 57.4438 113.138 57.8225 113.298C58.2012 113.458 58.5249 113.729 58.7526 114.076C58.9803 114.424 59.1018 114.833 59.1018 115.251C59.101 115.811 58.8823 116.348 58.4939 116.745C58.1054 117.141 57.5788 117.364 57.0294 117.365ZM57.0294 113.473C56.6848 113.473 56.3479 113.578 56.0614 113.773C55.7749 113.968 55.5515 114.246 55.4197 114.571C55.2878 114.895 55.2533 115.253 55.3205 115.598C55.3877 115.942 55.5537 116.259 55.7974 116.508C56.041 116.756 56.3515 116.926 56.6895 116.994C57.0275 117.063 57.3778 117.028 57.6962 116.893C58.0146 116.758 58.2867 116.531 58.4782 116.238C58.6696 115.946 58.7718 115.602 58.7718 115.251C58.771 114.78 58.5871 114.328 58.2605 113.995C57.934 113.662 57.4913 113.474 57.0294 113.473Z" fill="white"/>
|
||||
<path id="Vector_9" d="M74.9081 122.395C75.9616 122.395 76.8155 121.523 76.8155 120.449C76.8155 119.374 75.9616 118.503 74.9081 118.503C73.8547 118.503 73.0007 119.374 73.0007 120.449C73.0007 121.523 73.8547 122.395 74.9081 122.395Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_10" d="M74.911 122.563C74.5002 122.564 74.0984 122.44 73.7566 122.207C73.4147 121.975 73.1482 121.644 72.9907 121.257C72.8332 120.87 72.7918 120.444 72.8718 120.033C72.9517 119.622 73.1495 119.244 73.44 118.948C73.7305 118.652 74.1006 118.45 74.5036 118.368C74.9065 118.287 75.3242 118.329 75.7036 118.49C76.083 118.65 76.4072 118.922 76.635 119.271C76.8628 119.62 76.9841 120.03 76.9834 120.449C76.9826 121.009 76.7639 121.546 76.3755 121.943C75.987 122.339 75.4604 122.562 74.911 122.563ZM74.911 118.668C74.5656 118.667 74.2278 118.771 73.9403 118.966C73.6528 119.162 73.4285 119.44 73.2959 119.765C73.1632 120.09 73.1282 120.448 73.1952 120.794C73.2622 121.14 73.4282 121.457 73.6722 121.707C73.9162 121.956 74.2272 122.126 74.5659 122.195C74.9047 122.264 75.2558 122.229 75.575 122.094C75.8942 121.96 76.167 121.731 76.359 121.438C76.551 121.146 76.6534 120.801 76.6534 120.449C76.6534 119.977 76.47 119.525 76.1433 119.191C75.8166 118.857 75.3734 118.669 74.911 118.668Z" fill="white"/>
|
||||
<path id="Vector_11" d="M90.6601 108.697C91.7135 108.697 92.5675 107.825 92.5675 106.751C92.5675 105.676 91.7135 104.805 90.6601 104.805C89.6067 104.805 88.7527 105.676 88.7527 106.751C88.7527 107.825 89.6067 108.697 90.6601 108.697Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_12" d="M90.6593 108.864C90.2494 108.864 89.8488 108.74 89.508 108.508C89.1671 108.276 88.9015 107.946 88.7447 107.559C88.5878 107.173 88.5468 106.748 88.6267 106.338C88.7067 105.928 88.9041 105.551 89.1939 105.255C89.4837 104.96 89.853 104.758 90.255 104.677C90.657 104.595 91.0737 104.637 91.4524 104.797C91.8311 104.957 92.1547 105.228 92.3825 105.576C92.6102 105.923 92.7317 106.332 92.7317 106.75C92.7317 107.311 92.5134 107.849 92.1247 108.245C91.7361 108.642 91.209 108.864 90.6593 108.864ZM90.6593 104.973C90.3147 104.973 89.9778 105.077 89.6913 105.272C89.4048 105.468 89.1814 105.745 89.0495 106.07C88.9177 106.395 88.8832 106.752 88.9504 107.097C89.0176 107.442 89.1836 107.759 89.4273 108.007C89.6709 108.256 89.9814 108.425 90.3194 108.494C90.6574 108.562 91.0077 108.527 91.3261 108.393C91.6445 108.258 91.9166 108.03 92.1081 107.738C92.2995 107.446 92.4017 107.102 92.4017 106.75C92.4026 106.516 92.3582 106.284 92.271 106.068C92.1839 105.851 92.0558 105.654 91.8939 105.488C91.7321 105.322 91.5397 105.19 91.3279 105.1C91.116 105.01 90.8888 104.963 90.6593 104.963V104.973Z" fill="white"/>
|
||||
<path id="Vector_13" d="M112.605 105.094C113.658 105.094 114.512 104.223 114.512 103.148C114.512 102.074 113.658 101.202 112.605 101.202C111.551 101.202 110.698 102.074 110.698 103.148C110.698 104.223 111.551 105.094 112.605 105.094Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_14" d="M112.604 105.263C112.194 105.263 111.794 105.139 111.453 104.906C111.112 104.674 110.846 104.344 110.689 103.958C110.533 103.571 110.492 103.146 110.572 102.736C110.652 102.326 110.849 101.949 111.139 101.654C111.429 101.358 111.798 101.157 112.2 101.075C112.602 100.993 113.019 101.035 113.397 101.195C113.776 101.355 114.1 101.626 114.327 101.974C114.555 102.322 114.677 102.73 114.677 103.149C114.676 103.709 114.457 104.246 114.069 104.642C113.68 105.039 113.154 105.262 112.604 105.263ZM112.604 101.371C112.26 101.371 111.923 101.475 111.636 101.671C111.35 101.866 111.126 102.144 110.994 102.468C110.862 102.793 110.828 103.151 110.895 103.495C110.962 103.84 111.128 104.157 111.372 104.405C111.616 104.654 111.926 104.823 112.264 104.892C112.602 104.96 112.953 104.925 113.271 104.791C113.589 104.656 113.861 104.428 114.053 104.136C114.244 103.844 114.347 103.5 114.347 103.149C114.346 102.677 114.162 102.226 113.835 101.893C113.509 101.56 113.066 101.372 112.604 101.371Z" fill="white"/>
|
||||
<path id="Vector_15" d="M129.027 94.0523C130.08 94.0523 130.934 93.1811 130.934 92.1064C130.934 91.0318 130.08 90.1606 129.027 90.1606C127.973 90.1606 127.119 91.0318 127.119 92.1064C127.119 93.1811 127.973 94.0523 129.027 94.0523Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_16" d="M129.029 94.2206C128.619 94.2213 128.217 94.0975 127.875 93.8651C127.533 93.6327 127.267 93.302 127.109 92.915C126.952 92.5279 126.91 92.1019 126.99 91.6908C127.07 91.2798 127.268 90.9021 127.558 90.6058C127.849 90.3095 128.219 90.1077 128.622 90.0261C129.025 89.9445 129.443 89.9867 129.822 90.1474C130.201 90.3081 130.526 90.58 130.753 90.9288C130.981 91.2775 131.102 91.6874 131.102 92.1065C131.101 92.6669 130.882 93.2041 130.494 93.6004C130.105 93.9967 129.579 94.2197 129.029 94.2206ZM129.029 90.3256C128.684 90.3249 128.346 90.4288 128.059 90.6241C127.771 90.8194 127.547 91.0973 127.414 91.4226C127.282 91.748 127.247 92.1061 127.314 92.4518C127.381 92.7975 127.547 93.1151 127.791 93.3645C128.035 93.6139 128.346 93.7839 128.684 93.8528C129.023 93.9218 129.374 93.8868 129.693 93.7521C130.013 93.6174 130.285 93.3891 130.477 93.0962C130.669 92.8033 130.772 92.4588 130.772 92.1065C130.772 91.6347 130.588 91.1823 130.262 90.8484C129.935 90.5145 129.492 90.3265 129.029 90.3256Z" fill="white"/>
|
||||
<path id="Vector_17" d="M136.686 76.3482C137.74 76.3482 138.594 75.477 138.594 74.4023C138.594 73.3277 137.74 72.4565 136.686 72.4565C135.633 72.4565 134.779 73.3277 134.779 74.4023C134.779 75.477 135.633 76.3482 136.686 76.3482Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_18" d="M136.685 76.5165C136.275 76.5165 135.873 76.3922 135.532 76.1594C135.19 75.9266 134.924 75.5957 134.767 75.2085C134.61 74.8214 134.569 74.3955 134.65 73.9846C134.73 73.5738 134.928 73.1965 135.219 72.9005C135.509 72.6045 135.88 72.4031 136.282 72.3218C136.685 72.2404 137.103 72.2829 137.482 72.4436C137.861 72.6044 138.185 72.8764 138.413 73.225C138.64 73.5737 138.762 73.9834 138.761 74.4024C138.76 74.9634 138.541 75.5011 138.152 75.8975C137.763 76.2939 137.235 76.5165 136.685 76.5165ZM136.685 72.6215C136.34 72.6215 136.003 72.726 135.715 72.9216C135.428 73.1173 135.205 73.3954 135.072 73.7209C134.94 74.0463 134.906 74.4043 134.973 74.7498C135.041 75.0952 135.207 75.4126 135.451 75.6616C135.695 75.9107 136.006 76.0803 136.345 76.149C136.683 76.2177 137.034 76.1824 137.353 76.0477C137.672 75.9129 137.945 75.6846 138.137 75.3917C138.329 75.0989 138.431 74.7546 138.431 74.4024C138.431 74.1685 138.386 73.9369 138.298 73.7209C138.21 73.5048 138.082 73.3085 137.92 73.1431C137.758 72.9777 137.565 72.8466 137.353 72.7571C137.142 72.6676 136.915 72.6215 136.685 72.6215Z" fill="white"/>
|
||||
<path id="Vector_19" d="M44.0944 34.8172C48.3549 30.4709 48.3549 23.4241 44.0944 19.0778C39.8338 14.7315 32.9261 14.7315 28.6656 19.0778C24.405 23.4241 24.405 30.4709 28.6656 34.8172C32.9261 39.1636 39.8338 39.1636 44.0944 34.8172Z" fill="#DBDBDB"/>
|
||||
<path id="Vector_20" d="M120.972 38.277L149.883 38.2332C149.883 38.2332 148.441 36.3244 146.857 36.0888C146.857 36.0888 143.761 26.7334 138.607 26.6627C133.809 26.6089 131.895 32.4294 131.895 32.4294C131.895 32.4294 129.667 29.8238 127.545 31.0223C125.423 32.2207 124.229 35.6377 124.229 35.6377C124.229 35.6377 121.836 36.9607 120.972 38.277Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_21" d="M70.2281 71.9919L33.6575 72.0491C33.6575 72.0491 33.6575 69.6657 38.69 69.1944C38.69 69.1944 43.2737 58.7584 50.2961 60.1589C54.6686 61.024 56.9126 67.1442 56.9126 67.1442C56.9126 67.1442 60.2126 62.3201 62.8526 63.2493C65.4926 64.1784 67.0733 69.3089 67.0733 69.3089C67.0733 69.3089 69.8123 70.6453 70.2281 71.9919Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_22" d="M127.114 61.3675L102.255 61.4079C102.255 61.4079 104.608 59.1794 105.641 59.1794C106.674 59.1794 109.713 51.6957 113.604 52.0088C117.494 52.3219 119.563 57.8866 119.563 57.8866C119.563 57.8866 124.289 56.3616 127.114 61.3675Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_23" d="M36.3801 38.0448L15.1182 38.0785C15.1182 38.0785 16.1742 36.6747 17.3391 36.4963C17.3391 36.4963 19.5963 29.6085 23.3913 29.5546C26.9157 29.5041 28.3413 33.7795 28.3413 33.7795C28.3413 33.7795 29.9715 31.8573 31.5357 32.7326C33.0999 33.6078 33.9909 36.1192 33.9909 36.1192C33.9909 36.1192 35.7399 37.082 36.3801 38.0448Z" fill="#EBEBEB"/>
|
||||
</g>
|
||||
<g id="Mountain">
|
||||
<path id="Vector_24" d="M109.847 109.605H101.844L103.009 96.6917H108.682L109.847 109.605Z" fill="#407BFF"/>
|
||||
<path id="Vector_25" d="M25.0576 157.143H139.95L130.159 141.462L122.781 136.89L110.745 109.538H85.4839L82.6855 114.702L80.7781 114.827L75.5938 121.647H48.6559L42.9832 129.653L36.7726 133.834L25.0576 157.143Z" fill="#37474F"/>
|
||||
<path id="Vector_26" d="M116.862 123.431H116.859L109.074 116.291L103.065 123.492L97.8705 116.291L88.812 132.029L83.4363 122.556L79.2486 130.952L76.0113 127.794L71.1603 139.634L64.5042 128.08L60.8808 133.339L56.7393 128.01L49.0701 135.614L42.9849 129.649L48.6576 121.647H75.5955L80.7798 114.827L82.6872 114.699L85.4889 109.541H110.747L116.862 123.431Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_27" d="M114.816 136.17L116.644 145.65L124.891 150.053L114.816 136.17Z" fill="#263238"/>
|
||||
<path id="Vector_28" d="M38.7019 154.978L44.9125 148.71L45.7342 142.553L38.7019 154.978Z" fill="#263238"/>
|
||||
<path id="Vector_29" d="M65.5542 155.426L74.7579 133.814L74.913 149.612L65.5542 155.426Z" fill="#263238"/>
|
||||
<path id="Vector_30" d="M109.11 128.309L113.571 138.56L109.842 133.813L109.11 128.309Z" fill="#263238"/>
|
||||
</g>
|
||||
<g id="Character">
|
||||
<path id="Vector_31" d="M104.991 110.349C104.301 110.578 84.6993 110.319 83.9601 109.824C83.6763 109.642 83.5476 106.724 83.4882 103.196V103.088C83.4882 102.361 83.4651 101.61 83.4651 100.853C83.4651 100.748 83.4651 100.644 83.4651 100.539L84.4122 90.1506L97.5264 90.2853L96.2328 100.587L96.2163 100.994L96.1371 103.118V103.337C96.1371 103.337 103.595 106.862 104.354 107.491C105.113 108.121 105.677 110.12 104.991 110.349Z" fill="#DD6A57"/>
|
||||
<path id="Vector_32" d="M104.991 110.349C104.301 110.578 84.6993 110.319 83.9601 109.824C83.6763 109.642 83.5476 106.724 83.4882 103.196V103.088C83.4882 102.361 83.4651 101.61 83.4651 100.853C83.4651 100.748 83.4651 100.644 83.4651 100.54L96.2361 100.577L96.2196 100.984L96.1404 103.108V103.327C96.1404 103.327 103.598 106.852 104.357 107.481C105.116 108.111 105.677 110.12 104.991 110.349Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_33" d="M104.993 110.349C104.64 110.464 99.3137 110.454 94.103 110.349C93.0569 110.329 92.0141 110.302 91.0241 110.275C87.3116 110.171 84.2426 110.016 83.9588 109.828C83.675 109.639 83.5463 106.798 83.4902 103.347C83.4902 103.297 83.4902 103.249 83.4902 103.199C83.4902 103.148 83.4902 103.125 83.4902 103.088H83.4968L96.1292 103.111V103.33C96.1292 103.33 103.591 106.852 104.346 107.484C105.102 108.117 105.679 110.12 104.993 110.349Z" fill="#455A64"/>
|
||||
<path id="Vector_34" d="M104.781 109.565C101.481 109.44 88.1422 109.249 84.8653 109.376C84.8389 109.376 84.8389 109.397 84.8653 109.4C88.1389 109.599 101.474 109.679 104.777 109.622C104.85 109.619 104.85 109.568 104.781 109.565Z" fill="#263238"/>
|
||||
<path id="Vector_35" d="M97.5442 103.159C96.244 102.893 94.6534 103.078 93.6469 104.007C93.6073 104.044 93.6469 104.101 93.6997 104.088C94.9473 103.694 96.233 103.439 97.5343 103.327C97.5562 103.328 97.5777 103.321 97.5941 103.306C97.6105 103.291 97.6205 103.27 97.6218 103.248C97.6231 103.225 97.6157 103.204 97.6011 103.187C97.5866 103.17 97.5661 103.16 97.5442 103.159Z" fill="#263238"/>
|
||||
<path id="Vector_36" d="M98.4758 103.748C97.1789 103.482 95.585 103.667 94.5785 104.596C94.5389 104.633 94.5785 104.69 94.6346 104.677C95.882 104.282 97.1677 104.027 98.4692 103.916C98.4911 103.917 98.5124 103.909 98.5285 103.894C98.5446 103.879 98.5541 103.858 98.555 103.835C98.5559 103.813 98.548 103.791 98.5332 103.775C98.5183 103.758 98.4977 103.749 98.4758 103.748Z" fill="#263238"/>
|
||||
<path id="Vector_37" d="M99.4075 104.337C98.1106 104.071 96.5167 104.256 95.5102 105.188C95.4739 105.222 95.5102 105.279 95.5663 105.266C96.8144 104.874 98.0999 104.619 99.4009 104.505C99.4228 104.506 99.4441 104.498 99.4602 104.483C99.4763 104.468 99.4858 104.447 99.4867 104.424C99.4876 104.402 99.4797 104.38 99.4649 104.364C99.45 104.347 99.4294 104.338 99.4075 104.337Z" fill="#263238"/>
|
||||
<path id="Vector_38" d="M96.9996 103.148H81.615C81.615 103.148 84.9546 72.1771 84.8457 71.5846C84.7896 71.2816 82.0242 67.0197 78.7374 62.0373C76.8993 59.2465 74.8995 56.2336 73.1274 53.5572C70.1871 49.1405 67.8474 45.6528 67.8474 45.6528H82.9119C82.9119 45.6528 84.9381 48.1507 87.5946 51.6821C91.3566 56.688 96.3792 63.7677 98.6793 68.7803C100.461 72.6719 96.9996 103.148 96.9996 103.148Z" fill="#263238"/>
|
||||
<path id="Vector_39" d="M96.0916 70.8508C95.8078 69.1271 94.963 67.6156 94.1281 66.1175C91.8211 62.1316 89.2867 58.2873 86.5381 54.6043C86.2631 54.2519 85.9859 53.8985 85.7065 53.5439C85.69 53.5203 85.6504 53.5439 85.6702 53.5708C88.3483 57.2222 90.8398 61.0123 93.1348 64.9258C93.9895 66.4273 94.9465 67.9556 95.4943 69.5951C96.0751 71.3389 95.9926 73.1904 95.9035 75.005C95.7187 78.7485 95.4987 82.4886 95.2435 86.2253C94.9817 90.007 94.6836 93.783 94.3492 97.5534C94.3096 98.0146 94.2667 98.4758 94.2271 98.9404C94.2271 99.0885 94.3558 99.102 94.369 98.9404C94.7254 95.1834 95.1148 91.4602 95.392 87.6931C95.6692 83.926 95.9101 80.1152 96.1081 76.3212C96.2038 74.5168 96.3919 72.6451 96.0916 70.8508Z" fill="#455A64"/>
|
||||
<path id="Vector_40" d="M96.3618 100.691C94.2069 100.644 94.8273 100.627 92.6691 100.607C91.6131 100.607 84.6798 100.532 83.6931 100.701C83.6733 100.701 83.6733 100.741 83.6931 100.745C84.6831 100.91 91.6131 100.849 92.6691 100.839C94.8273 100.819 94.2069 100.798 96.3618 100.755C96.3667 100.756 96.372 100.757 96.3772 100.756C96.3823 100.755 96.3872 100.753 96.3914 100.75C96.3957 100.747 96.3991 100.743 96.4015 100.738C96.4038 100.733 96.4051 100.728 96.4051 100.723C96.4051 100.717 96.4038 100.712 96.4015 100.707C96.3991 100.703 96.3957 100.699 96.3914 100.695C96.3872 100.692 96.3823 100.69 96.3772 100.689C96.372 100.689 96.3667 100.689 96.3618 100.691Z" fill="#455A64"/>
|
||||
<path id="Vector_41" d="M83.5786 69.4704C79.6384 63.2661 67.8442 45.6528 67.8442 45.6528H75.7378L83.5786 69.4704Z" fill="#37474F"/>
|
||||
<path id="Vector_42" d="M51.5742 123.478C52.2639 123.697 71.8626 123.236 72.5985 122.734C72.879 122.546 72.9813 119.63 73.0011 116.102V115.991C73.0011 115.264 74.6511 103.044 74.6511 103.044L61.8405 103.31L60.3588 116.146V116.365C60.3588 116.365 52.9338 119.967 52.1814 120.603C51.429 121.24 50.8845 123.276 51.5742 123.478Z" fill="#DD6A57"/>
|
||||
<path id="Vector_43" d="M51.5743 123.478C52.264 123.697 71.8627 123.236 72.5986 122.734C72.8791 122.546 72.9814 119.63 73.0012 116.102V115.991C73.0012 115.991 73.2883 113.544 73.2883 113.439L60.6394 113.668L60.3556 116.146V116.365C60.3556 116.365 52.9306 119.967 52.1782 120.603C51.4258 121.24 50.8846 123.276 51.5743 123.478Z" fill="#EBEBEB"/>
|
||||
<path id="Vector_44" d="M51.5743 123.478C52.264 123.697 71.8627 123.236 72.5986 122.734C72.8791 122.546 72.9814 119.63 73.0012 116.102V115.991L60.3556 116.146V116.365C60.3556 116.365 52.9306 119.967 52.1782 120.603C51.4258 121.239 50.8846 123.276 51.5743 123.478Z" fill="#455A64"/>
|
||||
<path id="Vector_45" d="M51.78 122.711C55.08 122.553 68.4153 122.22 71.6889 122.317C71.7153 122.317 71.7186 122.337 71.6889 122.337C68.4219 122.57 55.0866 122.792 51.78 122.768C51.7107 122.768 51.7107 122.714 51.78 122.711Z" fill="#263238"/>
|
||||
<path id="Vector_46" d="M58.9435 116.23C60.2404 115.951 61.8343 116.119 62.8474 117.038C62.887 117.075 62.8474 117.132 62.7946 117.119C61.5431 116.741 60.2552 116.503 58.9534 116.409C58.9419 116.409 58.9304 116.408 58.9195 116.404C58.9087 116.4 58.8987 116.394 58.8901 116.386C58.8815 116.378 58.8745 116.369 58.8695 116.358C58.8645 116.348 58.8616 116.336 58.861 116.324C58.8603 116.313 58.8619 116.301 58.8657 116.29C58.8695 116.279 58.8754 116.269 58.8831 116.26C58.8908 116.251 58.9 116.244 58.9104 116.239C58.9208 116.234 58.932 116.231 58.9435 116.23Z" fill="#263238"/>
|
||||
<path id="Vector_47" d="M58.0255 116.83C59.3191 116.55 60.913 116.715 61.9294 117.638C61.969 117.675 61.9294 117.732 61.8766 117.718C60.6254 117.337 59.3375 117.096 58.0354 116.998C58.0245 116.999 58.0137 116.997 58.0034 116.994C57.9931 116.99 57.9837 116.984 57.9756 116.977C57.9674 116.97 57.9608 116.961 57.9561 116.951C57.9513 116.941 57.9486 116.93 57.9479 116.919C57.9473 116.908 57.9487 116.897 57.9523 116.886C57.9558 116.876 57.9614 116.866 57.9686 116.858C57.9758 116.85 57.9845 116.843 57.9943 116.838C58.004 116.833 58.0146 116.83 58.0255 116.83Z" fill="#263238"/>
|
||||
<path id="Vector_48" d="M57.096 117.419C58.3896 117.139 59.9835 117.304 60.9999 118.226C61.0395 118.264 60.9999 118.321 60.9438 118.307C59.6902 117.929 58.4 117.691 57.096 117.597C57.0728 117.597 57.0506 117.588 57.0342 117.571C57.0178 117.554 57.0085 117.531 57.0085 117.508C57.0085 117.484 57.0178 117.461 57.0342 117.445C57.0506 117.428 57.0728 117.419 57.096 117.419Z" fill="#263238"/>
|
||||
<path id="Vector_49" d="M82.9059 45.6528C82.9059 45.6528 81.1008 56.8766 80.9787 57.2368C80.9787 57.2368 80.3187 57.5734 79.0944 58.1322L73.7484 116.335L59.6343 116.409L67.5015 45.6697L82.9059 45.6528Z" fill="#263238"/>
|
||||
<path id="Vector_50" d="M73.2646 113.773C71.1064 113.736 71.7268 113.716 69.5686 113.706C68.5159 113.706 61.5793 113.669 60.5959 113.837C60.5897 113.837 60.5839 113.839 60.5795 113.844C60.5752 113.848 60.5728 113.854 60.5728 113.86C60.5728 113.867 60.5752 113.873 60.5795 113.877C60.5839 113.882 60.5897 113.884 60.5959 113.884C61.5859 114.046 68.5159 113.955 69.5719 113.938C71.7268 113.908 71.1064 113.894 73.2646 113.837C73.2712 113.835 73.2769 113.83 73.281 113.825C73.2851 113.819 73.2873 113.812 73.2873 113.805C73.2873 113.798 73.2851 113.791 73.281 113.785C73.2769 113.779 73.2712 113.775 73.2646 113.773Z" fill="#455A64"/>
|
||||
<path id="Vector_51" d="M70.6973 53.7929C70.1495 61.8085 69.9152 65.3836 69.2717 73.3958C68.6282 81.4079 67.8626 89.4638 66.9122 97.4726C66.3809 101.947 65.8034 108.245 65.1665 112.706C65.1665 112.736 65.2094 112.746 65.2127 112.706C66.5327 104.781 67.4567 94.9545 68.252 86.9625C69.0473 78.9706 69.6776 70.9551 70.232 62.9396C70.562 58.405 70.496 58.3141 70.793 53.7795C70.7996 53.7324 70.7039 53.7357 70.6973 53.7929Z" fill="#455A64"/>
|
||||
<path id="Vector_52" d="M81.5616 56.89C80.159 57.4881 78.8098 58.209 77.5291 59.0445C77.4763 59.0782 77.5291 59.159 77.5687 59.132C78.9316 58.4588 80.3209 57.8057 81.6441 57.0549C81.6611 57.0415 81.673 57.0224 81.6777 57.001C81.6824 56.9796 81.6796 56.9572 81.6698 56.9377C81.66 56.9181 81.6439 56.9027 81.6241 56.894C81.6044 56.8853 81.5823 56.8839 81.5616 56.89Z" fill="#455A64"/>
|
||||
<path id="Vector_53" d="M81.0454 50.4602C80.8243 51.8068 80.6989 53.1534 80.5504 54.5202C80.5174 54.8568 80.4778 55.1699 80.4448 55.4931C80.4357 55.7928 80.3565 56.086 80.2138 56.3481C79.93 56.8026 79.4152 57.0214 78.9532 57.22C78.8971 57.2436 78.9202 57.3311 78.9796 57.3109C79.4791 57.1894 79.9401 56.9404 80.3194 56.5872C80.7451 56.1327 80.7319 55.4392 80.7946 54.8534C80.9816 53.4021 81.0852 51.9408 81.1048 50.4771C81.1048 50.4266 81.052 50.4266 81.0454 50.4602Z" fill="#455A64"/>
|
||||
<path id="Vector_54" d="M79.4437 50.8708C79.3974 51.8403 79.2917 52.8065 79.2124 53.7727C79.1728 54.2474 79.1398 54.7254 79.11 55.2034C79.0803 55.6815 79.0274 56.1864 79.0407 56.6712C79.0407 56.7049 79.0935 56.7116 79.1001 56.6712C79.1761 56.21 79.1893 55.732 79.2257 55.2674C79.262 54.8028 79.2983 54.2911 79.3248 53.7996C79.3776 52.8234 79.404 51.8403 79.4899 50.8641C79.4932 50.8405 79.4437 50.8405 79.4437 50.8708Z" fill="#455A64"/>
|
||||
<path id="Vector_55" d="M87.5927 51.6822L81.8078 52.4464L73.1222 53.5708L66.5222 54.4259L67.4957 45.6731H82.9001C82.9001 45.6731 84.9362 48.1508 87.5927 51.6822Z" fill="#263238"/>
|
||||
<path id="Vector_56" d="M71.8002 30.285C65.8932 31.6652 57.9402 30.8707 55.9272 28.3324C54.0528 25.9557 54.0396 15.2942 55.7556 10.3051C56.1285 9.21776 64.0056 11.8402 63.7878 13.0521C63.2697 15.8867 62.3424 22.2863 63.207 23.3838C63.9759 24.36 68.5794 25.6561 72.8496 26.5752C78.0372 27.6895 74.1531 29.7363 71.8002 30.285Z" fill="#DD6A57"/>
|
||||
<path id="Vector_57" d="M56.6177 6.21152C55.7102 7.89475 55.1822 12.0961 55.4363 13.1565C55.6904 14.2169 62.6501 15.375 63.4553 14.6074C64.2605 13.8399 66.8774 7.91495 66.5441 5.98934C66.2108 4.06373 57.5549 4.46097 56.6177 6.21152Z" fill="#DD6A57"/>
|
||||
<path id="Vector_58" d="M66.4671 9.05961C65.6025 9.57131 65.5035 8.23819 65.5035 8.23819C65.5035 8.23819 65.1735 10.1941 64.0977 10.3692C63.0219 10.5442 62.9856 8.92158 62.979 8.80712C62.9625 8.90812 62.6259 10.6957 61.5105 10.7597C60.3951 10.8236 60.5634 9.1909 60.5766 9.07644C60.5304 9.16733 59.8968 10.3759 59.0388 10.2244C57.5637 9.96855 59.1048 6.83439 58.6758 5.6797C58.6758 5.6797 56.6727 6.19813 56.6133 6.2015C56.6133 6.2015 58.0191 3.18853 59.5833 2.68356C59.8092 2.60758 60.0538 2.61217 60.2768 2.69658C60.4999 2.78099 60.6882 2.94021 60.8109 3.14813C60.8109 3.14813 61.1574 2.1382 62.0352 2.0473C62.484 2.01027 62.946 2.72059 62.946 2.72059C63.0363 2.49732 63.1838 2.30295 63.3731 2.15784C63.5624 2.01273 63.7864 1.92223 64.0218 1.89581C64.6488 1.87898 65.0118 2.5691 65.0118 2.5691C65.0118 2.5691 65.6718 1.93621 66.3087 2.13146C67.6221 2.53207 68.3118 7.96215 66.4671 9.05961Z" fill="#DD6A57"/>
|
||||
<path id="Vector_59" d="M65.1042 2.68695C65.1042 2.66675 65.1241 2.66002 65.1307 2.68695C65.819 4.48154 65.955 6.44714 65.5205 8.32238C65.5205 8.37961 65.4049 8.37961 65.4082 8.32238C65.5769 6.43885 65.4745 4.5403 65.1042 2.68695Z" fill="#263238"/>
|
||||
<path id="Vector_60" d="M62.9456 2.69368C62.9456 2.67348 62.9754 2.66338 62.9853 2.69368C63.7218 4.67692 63.7382 6.86316 63.0315 8.85765C63.0051 8.92834 62.9126 8.96201 62.939 8.88121C63.3619 7.50097 63.3189 4.42067 62.9456 2.69368Z" fill="#263238"/>
|
||||
<path id="Vector_61" d="M60.4793 9.20773C61.1393 7.24846 61.1394 5.26562 60.8424 3.22892C60.8424 3.20535 60.8753 3.20199 60.8852 3.22892C61.2944 4.18499 61.3538 5.50127 61.3142 6.52804C61.2941 7.48387 61.0302 8.41786 60.5487 9.23803C60.5289 9.26159 60.4661 9.24813 60.4793 9.20773Z" fill="#263238"/>
|
||||
<path id="Vector_62" d="M65.5043 8.2383C65.412 8.60791 65.2849 8.96755 65.1248 9.3122C64.9845 9.65462 64.7565 9.95228 64.4648 10.174C64.3274 10.2687 64.1601 10.3071 63.9962 10.2817C63.8295 10.2569 63.6723 10.1872 63.5408 10.0798C63.4178 9.96358 63.3202 9.82232 63.2542 9.66515C63.1883 9.50797 63.1555 9.33839 63.158 9.16744L63.1415 8.34603L62.8742 9.14051C62.7593 9.48813 62.5899 9.81443 62.3726 10.1067C62.2781 10.2496 62.1552 10.3708 62.012 10.4624C61.8688 10.554 61.7083 10.614 61.541 10.6386C61.3852 10.6583 61.2275 10.6229 61.0942 10.5384C60.9609 10.4538 60.86 10.3252 60.8084 10.174C60.6973 9.83345 60.6734 9.46956 60.7391 9.11695L60.8909 8.13731L60.4322 9.01932C60.3072 9.26305 60.1519 9.48934 59.9702 9.69261C59.8059 9.89309 59.5863 10.0385 59.3399 10.11C59.2285 10.1377 59.1117 10.1331 59.0027 10.0968C58.8937 10.0606 58.7968 9.99402 58.7228 9.90469C58.5854 9.67842 58.5144 9.41674 58.5182 9.15061C58.5195 8.57671 58.5647 8.0038 58.6535 7.43709C58.6865 7.15094 58.7228 6.86143 58.7426 6.57191C58.7804 6.28088 58.7579 5.98498 58.6766 5.70337C58.7294 5.98698 58.7294 6.2782 58.6766 6.56181C58.6337 6.84796 58.5776 7.13074 58.5215 7.41352C58.3919 7.98619 58.3157 8.57005 58.2938 9.15734C58.2771 9.47516 58.3517 9.79104 58.5083 10.0663C58.6108 10.2049 58.7503 10.3104 58.9101 10.3701C59.0699 10.4298 59.2432 10.4412 59.4092 10.4029C59.7165 10.3221 59.9934 10.1498 60.2045 9.90806C60.4112 9.68559 60.5887 9.43663 60.7325 9.16744L60.4289 9.05972C60.3439 9.47592 60.3667 9.90753 60.4949 10.312C60.5745 10.533 60.7259 10.7196 60.9239 10.8406C61.1245 10.9553 61.3552 11.0035 61.5839 10.9786C61.7961 10.9489 61.9997 10.8735 62.1812 10.7574C62.3627 10.6413 62.5179 10.4872 62.6366 10.3053C62.8735 9.97562 63.0553 9.6082 63.1745 9.21794L62.8874 9.17418C62.8924 9.38648 62.9425 9.59515 63.0342 9.78579C63.1259 9.97643 63.2571 10.1445 63.4187 10.2784C63.5889 10.402 63.7882 10.4775 63.9962 10.4972C64.2074 10.5191 64.419 10.4603 64.5902 10.3322C64.8957 10.0779 65.1245 9.7406 65.2502 9.35933C65.3758 8.99656 65.4611 8.62052 65.5043 8.2383Z" fill="#263238"/>
|
||||
<path id="Vector_63" d="M64.0736 13.6783C64.0736 13.6783 70.3733 8.62858 67.2317 7.08675C66.3011 6.62891 61.9319 5.8782 61.7669 6.7703C61.5524 7.92163 63.3212 8.58145 64.4927 8.81711C64.4927 8.81711 62.1134 10.2243 62.582 12.2071C62.6729 12.5691 62.8604 12.8982 63.1237 13.1579C63.3871 13.4177 63.7159 13.5978 64.0736 13.6783Z" fill="#DD6A57"/>
|
||||
<path id="Vector_64" d="M67.4876 7.23149C67.1437 7.00668 66.7689 6.83536 66.3755 6.72316C65.9844 6.59855 65.5852 6.50181 65.1809 6.43365C64.3743 6.28113 63.556 6.20115 62.7356 6.19463C62.5124 6.19097 62.2899 6.22161 62.0756 6.28552C61.9533 6.31924 61.8404 6.38147 61.7456 6.46731C61.6928 6.51212 61.6491 6.56701 61.6169 6.6289C61.5829 6.68938 61.5594 6.75545 61.5476 6.82415C61.5053 7.07159 61.5522 7.32629 61.6796 7.54121C61.7985 7.73542 61.9492 7.90737 62.1251 8.04954C62.4628 8.31161 62.8424 8.51207 63.2471 8.64204C63.6391 8.77857 64.0406 8.88436 64.4483 8.95848L64.4054 8.68917C64.1523 8.86245 63.9148 9.05848 63.6959 9.27493C63.466 9.49081 63.2581 9.72993 63.0755 9.98862C62.897 10.2484 62.7559 10.533 62.6564 10.8336C62.5581 11.1325 62.5178 11.4481 62.5376 11.7627C62.5589 11.4555 62.6303 11.1539 62.7488 10.8706C62.871 10.5919 63.0297 10.3314 63.2207 10.0963C63.4068 9.85996 63.617 9.64442 63.8477 9.45335C64.0744 9.26053 64.3186 9.09031 64.577 8.94502L64.907 8.7666L64.5242 8.68243C64.131 8.59736 63.744 8.48488 63.3659 8.34579C63.0089 8.21137 62.6748 8.02052 62.3759 7.78023C62.2301 7.68578 62.1111 7.55406 62.0306 7.39815C61.9501 7.24224 61.9111 7.06757 61.9172 6.89148C61.9469 6.61207 62.3858 6.55484 62.7653 6.52118C63.1448 6.48751 63.5606 6.52118 63.9632 6.54474C64.3658 6.56831 64.7684 6.5986 65.1677 6.6491C65.966 6.71923 66.7487 6.91571 67.4876 7.23149Z" fill="#263238"/>
|
||||
<path id="Vector_65" d="M73.7389 26.7302C71.1946 25.9156 64.126 24.633 63.5089 23.2123C62.8918 21.7917 63.8389 14.7962 63.8389 14.7962L53.6287 13.3958C53.6287 13.3958 52.6618 25.286 55.8298 28.8208C58.9978 32.3556 67.657 31.6183 71.0461 30.8743C74.4352 30.1304 77.9728 28.0903 73.7389 26.7302Z" fill="#407BFF"/>
|
||||
<path id="Vector_66" d="M53.6287 13.3958C53.6287 13.3958 52.6618 25.2894 55.8298 28.8208C55.969 28.9785 56.1202 29.1248 56.2819 29.2585C59.7502 32.2883 68.8681 32.3455 72.1219 31.6352C74.29 31.1571 75.4483 29.4032 75.6661 28.3865C75.7948 27.8142 75.2767 27.2386 73.7488 26.7471C71.2045 25.9358 64.1359 24.6498 63.5188 23.2291C62.9017 21.8085 63.8488 14.813 63.8488 14.813L53.6287 13.3958Z" fill="#407BFF"/>
|
||||
<g id="Group" opacity="0.1">
|
||||
<path id="Vector_67" d="M75.4066 27.6053V29.0697C75.2838 29.3191 75.1377 29.5558 74.9705 29.7767C74.8984 29.875 74.8212 29.9694 74.7393 30.0595V27.134C74.9872 27.2498 75.2131 27.4094 75.4066 27.6053Z" fill="black"/>
|
||||
<path id="Vector_68" d="M73.6502 26.7064V30.9919C73.5577 31.0525 73.4619 31.1064 73.3628 31.1602V26.6189L73.6502 26.7064Z" fill="black"/>
|
||||
<path id="Vector_69" d="M72.2806 26.3228V31.5745L72.122 31.6115C71.9668 31.6452 71.7917 31.6788 71.6133 31.7091V26.1511L72.2806 26.3228Z" fill="black"/>
|
||||
<path id="Vector_70" d="M70.5235 25.8817V31.8605H70.4905L70.2361 31.8841V25.8245L70.5235 25.8817Z" fill="black"/>
|
||||
<path id="Vector_71" d="M69.1434 25.5315V31.958C68.9253 31.958 68.704 31.9749 68.4827 31.9782V25.3564L68.9319 25.4743L69.1434 25.5315Z" fill="black"/>
|
||||
<path id="Vector_72" d="M67.3975 25.0536V31.9885C67.3017 31.9885 67.2059 31.9885 67.1101 31.9885V24.9695L67.3975 25.0536Z" fill="black"/>
|
||||
<path id="Vector_73" d="M66.0052 24.6259V31.9547C65.7839 31.9547 65.5625 31.9345 65.3445 31.9177V24.3835C65.5592 24.4643 65.7805 24.5451 66.0052 24.6259Z" fill="black"/>
|
||||
<path id="Vector_74" d="M63.9717 23.707C64.064 23.7722 64.1599 23.8318 64.2591 23.8855V31.8303L63.9717 31.8V23.707Z" fill="black"/>
|
||||
<path id="Vector_75" d="M62.89 14.6682V31.6621C62.6653 31.6318 62.444 31.5947 62.2292 31.5577V14.574L62.89 14.6682Z" fill="black"/>
|
||||
<path id="Vector_76" d="M61.1316 14.4225V31.3456L60.8442 31.2783V14.3821L61.1316 14.4225Z" fill="black"/>
|
||||
<path id="Vector_77" d="M59.7618 14.2303V30.9885C59.5338 30.9211 59.3125 30.8471 59.1011 30.7697V14.1394L59.7618 14.2303Z" fill="black"/>
|
||||
<path id="Vector_78" d="M58.0057 13.9879V30.3253C57.9066 30.2815 57.8108 30.2344 57.7183 30.1873V13.9475L58.0057 13.9879Z" fill="black"/>
|
||||
<path id="Vector_79" d="M56.6326 13.7962V29.5141C56.5137 29.4299 56.3981 29.3357 56.3023 29.2414C56.1852 29.1487 56.0748 29.0474 55.9719 28.9384V13.7019L56.6326 13.7962Z" fill="black"/>
|
||||
<path id="Vector_80" d="M54.8782 13.5505V27.2384C54.8287 27.1206 54.7791 27.0028 54.7329 26.8782C54.6866 26.7537 54.6569 26.683 54.6272 26.5853C54.6121 26.5517 54.6 26.5168 54.5908 26.481V13.5134L54.8782 13.5505Z" fill="black"/>
|
||||
<path id="Vector_81" d="M53.4998 16.5635V18.3174C53.4998 17.9808 53.4998 17.6273 53.4998 17.3075C53.4998 17.2098 53.4998 17.1122 53.4998 17.0146C53.4965 16.8564 53.4965 16.7082 53.4998 16.5635Z" fill="black"/>
|
||||
</g>
|
||||
<g id="Group_2" opacity="0.1">
|
||||
<path id="Vector_82" d="M73.3284 31.1805C72.9953 31.3516 72.6444 31.4837 72.2823 31.5744L72.1239 31.6114C71.9688 31.6451 71.7939 31.6787 71.6157 31.709C71.2857 31.7629 70.926 31.81 70.53 31.8504H64.59L64.26 31.8201L63.9729 31.7898C63.6099 31.7528 63.2469 31.7057 62.8872 31.6518C62.6628 31.6215 62.4417 31.5845 62.2272 31.5475C61.8576 31.4846 61.4946 31.4139 61.1382 31.3354L60.8511 31.268L60.4551 31.1704L73.3284 31.1805Z" fill="black"/>
|
||||
<path id="Vector_83" d="M74.9742 29.7767C74.9022 29.875 74.8251 29.9694 74.7432 30.0595H57.5007C57.3291 29.9652 57.1707 29.871 57.009 29.7666L74.9742 29.7767Z" fill="black"/>
|
||||
<path id="Vector_84" d="M75.6606 28.3695C75.6398 28.4704 75.6111 28.5695 75.5748 28.6657H55.7187C55.5445 28.4557 55.3888 28.2304 55.2534 27.9924H75.6474C75.685 28.1146 75.6896 28.2449 75.6606 28.3695Z" fill="black"/>
|
||||
<path id="Vector_85" d="M73.7426 26.7333C73.8878 26.7805 74.0264 26.8276 74.1551 26.8781H54.7313C54.6917 26.7805 54.6554 26.6828 54.6257 26.5852H73.2674L73.3796 26.6189L73.6667 26.7064L73.7426 26.7333Z" fill="black"/>
|
||||
<path id="Vector_86" d="M68.932 25.4743H54.2965C54.2371 25.2521 54.1843 25.0232 54.1348 24.801H66.5362C66.721 24.8616 66.9124 24.9189 67.1104 24.9761L67.3975 25.0602C67.7539 25.1646 68.1169 25.2656 68.4832 25.3632L68.932 25.4743Z" fill="black"/>
|
||||
<path id="Vector_87" d="M63.9451 23.6869H53.923C53.923 23.5893 53.8933 23.4917 53.8801 23.394H63.6151C63.7124 23.5056 63.8233 23.6041 63.9451 23.6869Z" fill="black"/>
|
||||
<path id="Vector_88" d="M63.3235 22.2832H53.7535C53.7304 22.0576 53.7073 21.832 53.6875 21.6099H63.307C63.2971 21.8489 63.307 22.0744 63.3235 22.2832Z" fill="black"/>
|
||||
<path id="Vector_89" d="M63.3125 20.1992C63.3125 20.2968 63.3125 20.3945 63.3125 20.4921H53.5808C53.5808 20.3945 53.5808 20.2968 53.5808 20.1992H63.3125Z" fill="black"/>
|
||||
<path id="Vector_90" d="M63.4412 18.4116C63.4214 18.6372 63.4016 18.8627 63.3851 19.0849H53.5247C53.5247 18.856 53.5247 18.6271 53.5247 18.4116H63.4412Z" fill="black"/>
|
||||
<path id="Vector_91" d="M63.5712 17.0078C63.5712 17.1021 63.5547 17.1997 63.5448 17.3007H53.4963C53.4963 17.2031 53.4963 17.1054 53.4963 17.0078H63.5712Z" fill="black"/>
|
||||
<path id="Vector_92" d="M63.7874 15.2202C63.761 15.3986 63.7313 15.6309 63.6983 15.8935H53.5178C53.5178 15.6545 53.5178 15.4256 53.5376 15.2202H63.7874Z" fill="black"/>
|
||||
<path id="Vector_93" d="M58.8791 14.1093H53.5991C53.5991 14.0016 53.5991 13.9006 53.5991 13.8164H56.7671L57.7076 13.9477L57.9947 13.9881L58.8791 14.1093Z" fill="black"/>
|
||||
</g>
|
||||
<path id="Vector_94" d="M54.3658 15.6074C54.7354 15.6074 55.1017 15.6748 55.468 15.7084C55.8343 15.7421 56.2006 15.7926 56.5636 15.8431C57.2654 15.9418 57.9672 16.0473 58.669 16.1595L60.7711 16.4962C61.4971 16.614 62.2396 16.6948 62.9524 16.8732C62.9564 16.8717 62.9607 16.8712 62.9649 16.8717C62.9692 16.8723 62.9732 16.8739 62.9767 16.8763C62.9802 16.8788 62.983 16.8821 62.985 16.886C62.987 16.8898 62.988 16.8941 62.988 16.8985C62.988 16.9028 62.987 16.9071 62.985 16.9109C62.983 16.9148 62.9802 16.9181 62.9767 16.9206C62.9732 16.923 62.9692 16.9246 62.9649 16.9252C62.9607 16.9257 62.9564 16.9252 62.9524 16.9237C62.2198 16.8867 61.4839 16.752 60.7579 16.6544C60.0319 16.5568 59.3257 16.4659 58.6096 16.3649C57.8935 16.2639 57.1774 16.1663 56.4613 16.0518C56.1115 15.9979 55.7617 15.9373 55.4152 15.8666C55.0687 15.7959 54.7024 15.7589 54.3625 15.6546C54.3262 15.6445 54.3427 15.6074 54.3658 15.6074Z" fill="#263238"/>
|
||||
<path id="Vector_95" d="M78.7326 30.1099C82.0491 35.2841 88.3257 40.3472 91.4937 39.9365C94.4637 39.5494 101.724 31.8806 103.875 27.0733C104.347 26.0264 96.8892 22.3401 96.2259 23.3702C94.6683 25.7773 90.9855 31.0457 89.6259 31.2242C88.4082 31.3824 84.2106 29.0562 80.5113 26.6963C76.0068 23.8314 77.4126 28.0462 78.7326 30.1099Z" fill="#DD6A57"/>
|
||||
<path id="Vector_96" d="M103.294 27.7603C102.449 28.4336 96.3212 24.9224 96.1595 23.8148C96.1401 23.4412 96.169 23.0665 96.2453 22.7005C95.9275 21.1841 95.3938 19.7233 94.6613 18.3645C93.7373 16.7756 92.183 14.5234 93.0113 13.9882C94.2026 13.197 96.5027 15.8027 97.7336 17.3815C98.1362 16.3716 98.5784 15.53 99.0107 15.1395C100.446 13.8434 106.931 19.6472 106.601 21.6064C106.281 23.495 104.142 27.0937 103.294 27.7603Z" fill="#DD6A57"/>
|
||||
<path id="Vector_97" d="M90.3755 1.42798L89.9219 1.71021L122.174 55.6532L122.627 55.371L90.3755 1.42798Z" fill="#263238"/>
|
||||
<path id="Vector_98" d="M97.1869 17.5834C97.5499 18.5294 98.4343 17.5498 98.4343 17.5498C98.4343 17.5498 97.4905 19.2734 98.2363 20.1015C98.9821 20.9297 99.9853 19.6774 100.058 19.5932C100.012 19.6841 99.1834 21.2764 100.015 22.044C100.847 22.8115 101.708 21.4212 101.761 21.3303C101.741 21.4313 101.503 22.7745 102.262 23.202C103.566 23.9325 104.272 20.5089 105.308 19.8861C105.308 19.8861 106.552 21.5693 106.599 21.5996C106.645 21.6299 107.338 18.3611 106.427 16.9808C106.298 16.7783 106.105 16.6269 105.88 16.5516C105.655 16.4763 105.411 16.4816 105.189 16.5668C105.189 16.5668 105.539 15.5568 104.902 14.934C104.572 14.621 103.79 14.8734 103.79 14.8734C103.858 14.6378 103.861 14.3878 103.799 14.1504C103.738 13.9131 103.614 13.6975 103.44 13.5269C102.962 13.1162 102.249 13.436 102.249 13.436C102.249 13.436 102.124 12.5304 101.503 12.2745C100.253 11.7628 96.4114 15.5535 97.1869 17.5834Z" fill="#DD6A57"/>
|
||||
<path id="Vector_99" d="M102.133 13.4797C102.133 13.4797 102.133 13.4461 102.133 13.4528C100.504 14.4163 99.2024 15.863 98.4003 17.6003C98.3772 17.6541 98.4531 17.7181 98.4927 17.6609C99.5019 16.0953 100.728 14.687 102.133 13.4797Z" fill="#263238"/>
|
||||
<path id="Vector_100" d="M103.806 14.8466C103.822 14.8466 103.806 14.8062 103.779 14.8163C102 15.899 100.657 17.5942 99.994 19.5967C99.9742 19.6674 100.024 19.7515 100.053 19.6741C100.558 18.3343 102.466 15.9609 103.806 14.8466Z" fill="#263238"/>
|
||||
<path id="Vector_101" d="M101.773 21.4752C102.433 19.5226 103.657 17.9841 105.125 16.5871C105.145 16.5871 105.125 16.5433 105.099 16.5568C104.195 17.0382 103.35 18.0279 102.756 18.8561C102.185 19.6191 101.823 20.5228 101.707 21.4752C101.7 21.5021 101.756 21.529 101.773 21.4752Z" fill="#263238"/>
|
||||
<path id="Vector_102" d="M98.4028 17.5598C98.3731 17.6238 98.5018 17.5935 98.4754 17.6608C98.3632 17.947 97.8319 19.7244 98.3665 20.0981C98.7988 20.3944 99.4918 20.0106 99.6865 19.7615L100.224 19.1185L99.9505 19.9062C99.8236 20.2534 99.7545 20.6198 99.7459 20.9902C99.732 21.1617 99.7542 21.3343 99.8111 21.4963C99.868 21.6583 99.9583 21.806 100.076 21.9295C100.185 22.0437 100.329 22.1166 100.485 22.1361C100.64 22.1557 100.797 22.1208 100.931 22.0372C101.224 21.8395 101.463 21.5697 101.627 21.2528L102.105 20.3944L101.927 21.3605C101.879 21.6302 101.863 21.905 101.881 22.1786C101.89 22.4382 101.973 22.6895 102.119 22.9024C102.189 22.9941 102.283 23.0641 102.39 23.1046C102.498 23.145 102.614 23.1542 102.726 23.1313C102.97 23.0416 103.184 22.8828 103.343 22.6734C103.692 22.2252 104.006 21.7503 104.283 21.2528C104.432 21.0071 104.58 20.7613 104.742 20.5189C104.888 20.2682 105.085 20.0524 105.32 19.886C105.108 20.0749 104.935 20.3035 104.808 20.5593C104.666 20.8084 104.537 21.0643 104.409 21.3235C104.16 21.8509 103.864 22.3535 103.524 22.8249C103.344 23.0827 103.094 23.2815 102.805 23.3972C102.64 23.4422 102.467 23.4372 102.305 23.3828C102.143 23.3284 102 23.2269 101.894 23.0909C101.7 22.8348 101.585 22.5253 101.564 22.2021C101.539 21.8987 101.553 21.5932 101.604 21.2932L101.907 21.4009C101.719 21.7784 101.438 22.0997 101.092 22.3334C100.896 22.4598 100.662 22.51 100.432 22.4748C100.21 22.4381 100.003 22.3323 99.8416 22.1718C99.6933 22.0148 99.5798 21.8272 99.5086 21.6216C99.4375 21.4161 99.4103 21.1973 99.4291 20.9801C99.4437 20.5737 99.5228 20.1724 99.6634 19.7918L99.9142 19.9399C99.637 20.253 98.9242 20.768 98.185 20.391C97.3237 19.7615 98.2147 17.8897 98.4028 17.5598Z" fill="#263238"/>
|
||||
<path id="Vector_103" d="M98.4377 17.5497C98.2726 17.6734 98.0901 17.771 97.8965 17.8392C97.8187 17.8674 97.7351 17.8742 97.6539 17.8588C97.5728 17.8434 97.4971 17.8065 97.4345 17.7517C97.3161 17.6099 97.2384 17.4375 97.2101 17.2534C97.1738 17.0548 97.1408 16.8394 97.121 16.6172C97.0316 16.8296 96.9888 17.0594 96.9956 17.2905C96.9892 17.5398 97.0793 17.7817 97.2464 17.9638C97.3483 18.0543 97.475 18.1107 97.6094 18.1254C97.7362 18.135 97.8631 18.1082 97.9757 18.0479C98.1773 17.9357 98.339 17.7613 98.4377 17.5497Z" fill="#263238"/>
|
||||
<path id="Vector_104" d="M79.7547 26.1881C82.1406 27.4001 88.107 31.4802 89.5227 30.9012C90.9384 30.3221 95.004 24.6025 95.004 24.6025L103.317 30.8002C103.317 30.8002 95.928 40.0512 91.242 40.3508C86.556 40.6504 80.8239 33.9916 78.8736 31.056C76.9233 28.1205 75.7815 24.1683 79.7547 26.1881Z" fill="#407BFF"/>
|
||||
<g id="Group_3" opacity="0.1">
|
||||
<path id="Vector_105" d="M103.32 30.7935C103.32 30.7935 103.207 30.9349 102.989 31.1806L102.884 31.3086V30.4771L103.32 30.7935Z" fill="black"/>
|
||||
<path id="Vector_106" d="M101.811 29.6691V32.5608L101.523 32.8807V29.4536L101.811 29.6691Z" fill="black"/>
|
||||
<path id="Vector_107" d="M100.432 28.6421V34.052L100.121 34.3718C100.007 34.493 99.8877 34.6142 99.7644 34.7354V28.1472L100.432 28.6421Z" fill="black"/>
|
||||
<path id="Vector_108" d="M98.6768 27.3361V35.796L98.3894 36.0653V27.124L98.6768 27.3361Z" fill="black"/>
|
||||
<path id="Vector_109" d="M97.3028 26.3092V37.0381L96.6685 37.5632C96.6561 37.5703 96.645 37.5794 96.6355 37.5902V25.8076L97.3028 26.3092Z" fill="black"/>
|
||||
<path id="Vector_110" d="M95.2687 24.7947H95.2581V24.7876L95.2687 24.7947Z" fill="black"/>
|
||||
<path id="Vector_111" d="M95.5455 25.4744V38.4184L95.2581 38.617V25.4878L95.5455 25.4744Z" fill="black"/>
|
||||
<path id="Vector_112" d="M94.1768 25.7302V39.3172L94.0909 39.3677C93.9059 39.4709 93.7209 39.5686 93.5359 39.6606H93.5095V26.5853H93.5326L94.1768 25.7302Z" fill="black"/>
|
||||
<path id="Vector_113" d="M92.4205 27.9958V40.1151C92.3247 40.1487 92.2289 40.1757 92.1331 40.1992V28.346L92.4205 27.9958Z" fill="black"/>
|
||||
<path id="Vector_114" d="M91.0489 29.5916V40.3642C90.8283 40.37 90.6076 40.361 90.3882 40.3372V30.2648L90.593 30.0696L90.8804 29.7767L91.0489 29.5916Z" fill="black"/>
|
||||
<path id="Vector_115" d="M89.292 30.9449V40.1083C89.1962 40.0848 89.1004 40.0545 89.0046 40.0208V30.9314C89.0997 30.9458 89.196 30.9503 89.292 30.9449Z" fill="black"/>
|
||||
<path id="Vector_116" d="M87.9195 30.6386V39.5866C87.7642 39.5126 87.6123 39.4351 87.457 39.3543L87.2522 39.2432V30.3625C87.4867 30.4669 87.7081 30.5645 87.9195 30.6386Z" fill="black"/>
|
||||
<path id="Vector_117" d="M86.1646 29.8339V38.5866L85.8772 38.388V29.6824L86.0556 29.7766L86.1646 29.8339Z" fill="black"/>
|
||||
<path id="Vector_118" d="M84.7845 29.0867V37.5533C84.5598 37.3715 84.3352 37.183 84.1238 36.9911V28.7029C84.3385 28.8342 84.5632 28.9621 84.7845 29.0867Z" fill="black"/>
|
||||
<path id="Vector_119" d="M83.0386 28.0699V35.9911L82.7512 35.7083V27.8982L82.8966 27.9857L83.0386 28.0699Z" fill="black"/>
|
||||
<path id="Vector_120" d="M81.6583 27.2552V34.5638L81.4865 34.3719C81.3147 34.1834 81.1561 33.9948 80.991 33.8097V26.8613H81.0207L81.6583 27.2552Z" fill="black"/>
|
||||
<path id="Vector_121" d="M79.9004 26.2554V32.4664C79.798 32.3385 79.7022 32.2106 79.613 32.0894V26.1106L79.7518 26.1779L79.9004 26.2554Z" fill="black"/>
|
||||
<path id="Vector_122" d="M78.5445 25.7V30.4904C78.4619 30.3524 78.3793 30.211 78.3 30.0696L78.1415 29.7768C78.049 29.6017 77.9598 29.4401 77.8772 29.2516V25.6394C78.1014 25.6174 78.3277 25.638 78.5445 25.7Z" fill="black"/>
|
||||
</g>
|
||||
<g id="Group_4" opacity="0.1">
|
||||
<path id="Vector_123" d="M94.0955 39.3542C93.9107 39.4575 93.7259 39.5551 93.5411 39.6471H88.0499L87.9212 39.5865C87.7661 39.5125 87.6143 39.435 87.4592 39.3542H94.0955Z" fill="black"/>
|
||||
<path id="Vector_124" d="M96.6784 37.5632C96.6661 37.5703 96.6549 37.5794 96.6454 37.5902C96.3649 37.8157 96.0812 38.0345 95.7974 38.2433H85.6961C85.3958 38.0278 85.0987 37.7989 84.8083 37.57L96.6784 37.5632Z" fill="black"/>
|
||||
<path id="Vector_125" d="M98.2947 36.1594L97.9647 36.4523H83.5272L83.217 36.1594H98.2947Z" fill="black"/>
|
||||
<path id="Vector_126" d="M100.131 34.3721C100.017 34.4933 99.8978 34.6145 99.7746 34.7356L99.4446 35.0521H82.1195C81.9644 34.8905 81.816 34.7155 81.6675 34.564L81.4958 34.3721H100.131Z" fill="black"/>
|
||||
<path id="Vector_127" d="M101.45 32.9683L101.179 33.2611H80.5311C80.4486 33.1635 80.3694 33.0625 80.2935 32.9683H101.45Z" fill="black"/>
|
||||
<path id="Vector_128" d="M103.01 31.1804L102.904 31.3083L102.432 31.8604H79.4578C79.2796 31.6181 79.1277 31.3891 78.9792 31.1872L103.01 31.1804Z" fill="black"/>
|
||||
<path id="Vector_129" d="M86.6384 30.0697H78.2927L78.1343 29.7769H86.0543L86.1632 29.8341L86.6384 30.0697Z" fill="black"/>
|
||||
<path id="Vector_130" d="M102.352 30.0697H90.5906L90.8777 29.7769H101.959L102.352 30.0697Z" fill="black"/>
|
||||
<path id="Vector_131" d="M84.0595 28.6657H77.608C77.5129 28.4459 77.4292 28.2212 77.3572 27.9924H82.8979L83.0398 28.0766L84.0595 28.6657Z" fill="black"/>
|
||||
<path id="Vector_132" d="M100.47 28.6657H91.8904L92.1544 28.3291L92.4415 27.9924H99.5728L99.7873 28.154L100.447 28.6489L100.47 28.6657Z" fill="black"/>
|
||||
<path id="Vector_133" d="M81.0296 26.8783H77.1191C77.111 26.7809 77.111 26.6829 77.1191 26.5854H80.5181C80.6732 26.6696 80.8481 26.7639 81.0065 26.8615L81.0296 26.8783Z" fill="black"/>
|
||||
<path id="Vector_134" d="M98.0712 26.8783H93.3093L93.5139 26.6157V26.5854H97.6884L98.0712 26.8783Z" fill="black"/>
|
||||
<path id="Vector_135" d="M95.268 24.7944V25.4677H94.3704C94.5882 25.1748 94.7565 24.9392 94.8687 24.7944H95.268Z" fill="black"/>
|
||||
</g>
|
||||
<path id="Vector_136" d="M101.278 31.8774C101.014 31.6182 100.703 31.4094 100.416 31.1738C100.129 30.9381 99.8321 30.716 99.5351 30.5005C98.9642 30.073 98.3834 29.6522 97.8026 29.2381L96.0602 27.9925C95.4596 27.565 94.8656 27.097 94.232 26.72C94.2263 26.7172 94.2199 26.7165 94.2138 26.7182C94.2077 26.7198 94.2024 26.7236 94.1988 26.7289C94.1952 26.7342 94.1936 26.7406 94.1942 26.747C94.1949 26.7534 94.1977 26.7593 94.2023 26.7638C94.7567 27.2553 95.3771 27.6761 95.9645 28.1103L97.7102 29.4232C98.2943 29.8609 98.8784 30.2918 99.4691 30.7193C99.7595 30.928 100.053 31.13 100.35 31.3287C100.647 31.5273 100.938 31.7528 101.254 31.9178C101.281 31.9346 101.297 31.911 101.278 31.8774Z" fill="#263238"/>
|
||||
<path id="Vector_137" d="M87.2707 39.2533C83.71 37.2906 80.2912 33.1937 78.8821 31.056C77.6446 29.1775 76.7239 26.885 77.2585 26.0063C77.473 25.6427 77.9185 25.5148 78.7204 25.7538L87.2707 39.2533Z" fill="#263238"/>
|
||||
<path id="Vector_138" d="M86.837 50.5072C86.5532 50.8708 66.377 52.3621 66.2747 52.2409C65.9711 51.9211 69.2909 30.5273 73.4984 26.5415C74.4059 25.6864 78.0953 25.5315 78.6167 25.7032C79.2041 25.885 81.0191 28.5647 81.9167 30.7899C83.7152 35.2437 87.0812 50.184 86.837 50.5072Z" fill="#407BFF"/>
|
||||
<g id="Group_5" opacity="0.1">
|
||||
<path id="Vector_139" d="M86.1663 46.6764V50.6522L85.8789 50.6926V45.377C85.9053 45.5015 85.9351 45.6261 85.9615 45.7473C85.9879 45.8685 86.0044 45.9459 86.0243 46.0401C86.0738 46.2522 86.1366 46.4677 86.1663 46.6764Z" fill="black"/>
|
||||
<path id="Vector_140" d="M84.5217 39.6539C84.6142 40.0142 84.7034 40.3777 84.7925 40.7379V50.8373L84.1318 50.908V38.1155C84.1318 38.1626 84.1583 38.2131 84.1682 38.2602C84.2651 38.6261 84.3609 38.9964 84.4556 39.3712C84.4886 39.452 84.4886 39.5496 84.5217 39.6539Z" fill="black"/>
|
||||
<path id="Vector_141" d="M82.7687 33.2577C82.8579 33.5439 82.9504 33.8435 83.0396 34.1532V50.9854L82.8579 51.0023H82.7522V33.2039C82.7595 33.2212 82.765 33.2393 82.7687 33.2577Z" fill="black"/>
|
||||
<path id="Vector_142" d="M81.6666 30.1976V51.1235L81.0059 51.1807V28.8813C81.171 29.1776 81.3362 29.4806 81.475 29.7802C81.5234 29.8789 81.5697 29.9766 81.6137 30.0731C81.6338 30.1134 81.6515 30.155 81.6666 30.1976Z" fill="black"/>
|
||||
<path id="Vector_143" d="M79.7398 26.8783C79.7959 26.9557 79.8521 27.0332 79.9083 27.1173V51.2783L79.6208 51.3019V26.7268L79.7398 26.8783Z" fill="black"/>
|
||||
<path id="Vector_144" d="M78.5452 25.6865V51.3927L77.8845 51.4466V25.6428C78.1056 25.6387 78.3266 25.6533 78.5452 25.6865Z" fill="black"/>
|
||||
<path id="Vector_145" d="M76.7823 25.6865V51.5341L76.4949 51.5577V25.7101L76.7823 25.6865Z" fill="black"/>
|
||||
<path id="Vector_146" d="M75.4053 25.8513V51.6417L74.7446 51.6922V25.9927C74.9494 25.9388 75.1741 25.8917 75.4053 25.8513Z" fill="black"/>
|
||||
<path id="Vector_147" d="M73.6463 26.4238V51.7732L73.3589 51.7934V26.6797C73.3892 26.6455 73.4211 26.6129 73.4547 26.5821C73.4682 26.5666 73.4825 26.552 73.4976 26.5383C73.5439 26.4959 73.5937 26.4576 73.6463 26.4238Z" fill="black"/>
|
||||
<path id="Vector_148" d="M72.2779 28.208V51.8708L71.6172 51.9179V29.5344C71.7559 29.228 71.898 28.9385 72.0367 28.6658C72.1094 28.511 72.192 28.3595 72.2779 28.208Z" fill="black"/>
|
||||
<path id="Vector_149" d="M70.521 32.2915V52.002L70.2336 52.0223V33.1466L70.2931 32.9682C70.3658 32.7392 70.4418 32.5137 70.521 32.2915Z" fill="black"/>
|
||||
<path id="Vector_150" d="M69.1463 36.8665V52.1097L68.773 52.1333L68.479 52.1535V39.361H68.5219C68.6111 38.9907 68.7003 38.6204 68.7928 38.2501C68.849 38.0245 68.9052 37.7956 68.9646 37.5768C69.0241 37.358 69.0835 37.0987 69.1463 36.8665Z" fill="black"/>
|
||||
<path id="Vector_151" d="M67.3936 44.6431V52.2041L67.1062 52.2209V46.1613C67.1062 46.1142 67.1062 46.0637 67.1326 46.0132C67.1591 45.9627 67.169 45.818 67.1855 45.7203C67.2516 45.377 67.3275 45.0167 67.3936 44.6431Z" fill="black"/>
|
||||
</g>
|
||||
<g id="Group_6" opacity="0.1">
|
||||
<path id="Vector_152" d="M68.7753 52.1099L68.4816 52.1301L67.3959 52.194L67.1088 52.2109C66.8334 52.2353 66.5568 52.2421 66.2805 52.2311C66.2805 52.2311 66.2805 52.1772 66.2805 52.1099H68.7753Z" fill="black"/>
|
||||
<path id="Vector_153" d="M86.8464 50.5074C86.6347 50.5888 86.4122 50.6376 86.1864 50.6522L85.8993 50.6926L84.8103 50.8205L84.1503 50.8912L83.0646 50.9956L82.8831 51.0124H66.3435C66.3666 50.807 66.3963 50.5815 66.4326 50.3391H86.8398C86.8559 50.3937 86.8582 50.4517 86.8464 50.5074Z" fill="black"/>
|
||||
<path id="Vector_154" d="M86.6826 49.2213H66.6021C66.6021 49.1271 66.6318 49.0295 66.645 48.9285H86.6298C86.6496 49.0295 86.6694 49.1271 86.6826 49.2213Z" fill="black"/>
|
||||
<path id="Vector_155" d="M86.4072 47.821H66.8184C66.858 47.6022 66.8943 47.3733 66.9372 47.1477H86.2653C86.3148 47.3766 86.3643 47.6055 86.4072 47.821Z" fill="black"/>
|
||||
<path id="Vector_156" d="M86.0256 46.0299H67.1331C67.1496 45.9357 67.1694 45.8347 67.1859 45.7371H85.9629C85.986 45.8381 86.0058 45.9357 86.0256 46.0299Z" fill="black"/>
|
||||
<path id="Vector_157" d="M85.7206 44.6262H67.4023C67.4452 44.404 67.4881 44.1751 67.5343 43.9529H85.5622C85.615 44.1751 85.6678 44.404 85.7206 44.6262Z" fill="black"/>
|
||||
<path id="Vector_158" d="M85.2974 42.8385H67.7546L67.814 42.5457H85.2314C85.2545 42.6433 85.2776 42.7409 85.2974 42.8385Z" fill="black"/>
|
||||
<path id="Vector_159" d="M84.9647 41.4348H68.0522C68.1017 41.2092 68.1512 40.9837 68.204 40.7615H84.7997C84.8558 41.0005 84.9086 41.2092 84.9647 41.4348Z" fill="black"/>
|
||||
<path id="Vector_160" d="M84.5252 39.654H68.4575C68.4575 39.6169 68.4773 39.5799 68.4839 39.5462V39.3611H84.4526C84.4922 39.452 84.4922 39.5496 84.5252 39.654Z" fill="black"/>
|
||||
<path id="Vector_161" d="M84.1575 38.2434H68.7927C68.8488 38.0178 68.9049 37.7889 68.9643 37.5701H83.9826C84.0321 37.7451 84.0783 37.9269 84.1245 38.1053C84.1377 38.1457 84.1575 38.1962 84.1575 38.2434Z" fill="black"/>
|
||||
<path id="Vector_162" d="M83.6909 36.4526H69.26C69.282 36.3538 69.3084 36.2562 69.3392 36.1597H83.6117C83.6348 36.2573 83.6645 36.3549 83.6909 36.4526Z" fill="black"/>
|
||||
<path id="Vector_163" d="M83.3034 35.0522H69.6414C69.7074 34.8233 69.7767 34.5944 69.846 34.3789H83.0988L83.3034 35.0522Z" fill="black"/>
|
||||
<path id="Vector_164" d="M82.7711 33.2577H70.2014C70.2115 33.2189 70.2236 33.1807 70.2377 33.1433L70.2971 32.9648H82.682C82.7051 33.0423 82.7315 33.1197 82.7546 33.2005C82.7621 33.2189 82.7676 33.2381 82.7711 33.2577Z" fill="black"/>
|
||||
<path id="Vector_165" d="M82.3204 31.8605H70.678C70.7605 31.6316 70.843 31.4027 70.9321 31.1873H82.0762C82.1554 31.3892 82.2346 31.6182 82.3204 31.8605Z" fill="black"/>
|
||||
<path id="Vector_166" d="M81.6048 30.0697H71.3748C71.4144 29.9687 71.4573 29.8711 71.5002 29.7769H81.4662C81.5168 29.8756 81.563 29.9732 81.6048 30.0697Z" fill="black"/>
|
||||
<path id="Vector_167" d="M80.8814 28.6659H72.0308C72.1133 28.511 72.1958 28.3595 72.2783 28.2148C72.3212 28.1373 72.3641 28.0599 72.4103 27.9858H80.4788C80.6141 28.208 80.7494 28.4336 80.8814 28.6659Z" fill="black"/>
|
||||
<path id="Vector_168" d="M79.7401 26.8783H73.1863C73.2457 26.8076 73.3051 26.7437 73.3645 26.6831C73.3947 26.6489 73.4267 26.6163 73.4602 26.5854H79.5388L79.6378 26.7201L79.7401 26.8783Z" fill="black"/>
|
||||
</g>
|
||||
<path id="Vector_169" d="M77.3711 30.6654L78.1763 28.9351L79.4567 30.1739L79.2587 31.5104L78.0938 31.7494L77.3711 30.6654Z" fill="#263238"/>
|
||||
<path id="Vector_170" d="M78.0986 31.7494C78.0986 31.7494 78.4847 40.2901 81.5339 43.7003C84.5336 47.0667 89.2394 46.3632 89.2394 46.3632L93.1466 44.4847L89.9225 42.1282C89.9225 42.1282 86.3618 42.1282 84.0947 40.3473C81.8276 38.5665 79.2635 31.5037 79.2635 31.5037L78.0986 31.7494Z" fill="#263238"/>
|
||||
<path id="Vector_171" d="M78.4118 28.4739C77.3789 28.9418 75.2207 27.6087 74.2406 26.3833C74.1746 26.2992 74.135 25.2893 74.0294 24.0605C73.9634 23.3165 73.8743 22.4884 73.7357 21.741C73.7093 21.5862 78.5504 22.007 78.5504 22.007C78.4574 22.994 78.484 23.989 78.6296 24.9694C78.6483 25.072 78.677 25.1724 78.7154 25.2691C78.7219 25.2855 78.7274 25.3024 78.7319 25.3195C78.9299 25.8851 79.4084 28.0262 78.4118 28.4739Z" fill="#DD6A57"/>
|
||||
<path id="Vector_172" d="M78.7269 25.3196C78.574 25.3706 78.4173 25.4089 78.2583 25.434C75.8328 25.8515 74.4171 22.9866 73.9221 21.7107C74.79 21.6804 78.5421 22.007 78.5421 22.007C78.4491 22.994 78.4757 23.989 78.6213 24.9694C78.64 25.072 78.6688 25.1724 78.7071 25.2691C78.7147 25.2855 78.7213 25.3023 78.7269 25.3196Z" fill="#263238"/>
|
||||
<path id="Vector_173" d="M72.2777 15.9911C71.9477 17.7349 73.3733 22.495 74.6702 23.4444C76.5446 24.8179 79.3463 24.6462 80.4221 22.4075C81.4682 20.2361 79.5179 14.0654 78.1121 13.2339C75.9869 12.0052 72.7265 13.4191 72.2777 15.9911Z" fill="#DD6A57"/>
|
||||
<path id="Vector_174" d="M76.5317 18.5933C76.5317 18.5933 76.5119 18.6135 76.5317 18.6269C76.6341 18.9467 76.7002 19.3271 76.4458 19.5224C76.7728 19.381 76.6803 18.876 76.5317 18.5933Z" fill="#263238"/>
|
||||
<path id="Vector_175" d="M76.1489 18.341C75.6308 18.4554 75.8915 19.5058 76.3733 19.398C76.8551 19.2903 76.5812 18.2467 76.1489 18.341Z" fill="#263238"/>
|
||||
<path id="Vector_176" d="M78.4468 18.0312C78.4468 18.0312 78.4732 18.0313 78.4765 18.0515C78.5492 18.3881 78.6846 18.7247 78.9985 18.7752V18.7954C78.6384 18.8358 78.4633 18.3511 78.4468 18.0312Z" fill="#263238"/>
|
||||
<path id="Vector_177" d="M78.644 17.617C79.1456 17.4453 79.4492 18.4822 78.974 18.627C78.4988 18.7717 78.2117 17.7719 78.644 17.617Z" fill="#263238"/>
|
||||
<path id="Vector_178" d="M75.6224 17.9671C75.7479 17.8922 75.8691 17.8102 75.9854 17.7213C76.124 17.6237 76.2428 17.5631 76.3154 17.3847C76.3277 17.336 76.3244 17.2846 76.306 17.2379C76.2876 17.1913 76.2551 17.1519 76.2131 17.1255C76.1211 17.0884 76.0211 17.0766 75.9232 17.0914C75.8254 17.1062 75.733 17.1469 75.6554 17.2096C75.4806 17.3146 75.3492 17.481 75.2858 17.6776C75.2712 17.7234 75.2703 17.7727 75.2833 17.8191C75.2962 17.8654 75.3225 17.9068 75.3586 17.9379C75.3948 17.969 75.4392 17.9884 75.4862 17.9936C75.5332 17.9988 75.5806 17.9895 75.6224 17.9671Z" fill="#263238"/>
|
||||
<path id="Vector_179" d="M78.9125 16.9877C78.7685 16.9962 78.6242 16.9962 78.4802 16.9877C78.3263 17.0088 78.1699 16.9781 78.0347 16.9002C77.9977 16.8671 77.9722 16.8226 77.9621 16.7734C77.952 16.7242 77.9578 16.673 77.9786 16.6275C78.0347 16.5438 78.1116 16.4768 78.2016 16.4336C78.2915 16.3904 78.3911 16.3725 78.4901 16.3818C78.6931 16.3706 78.893 16.4365 79.0511 16.5669C79.0853 16.5986 79.1096 16.6397 79.1213 16.6853C79.1329 16.7308 79.1312 16.7789 79.1165 16.8235C79.1018 16.8681 79.0747 16.9074 79.0385 16.9366C79.0023 16.9658 78.9585 16.9835 78.9125 16.9877Z" fill="#263238"/>
|
||||
<path id="Vector_180" d="M77.0706 21.6131C77.1627 21.6929 77.28 21.736 77.4009 21.7342C77.5216 21.7028 77.6342 21.6454 77.7313 21.5659C77.7313 21.5659 77.7544 21.5659 77.7478 21.5659C77.7186 21.6416 77.6696 21.7077 77.6061 21.757C77.5426 21.8062 77.4671 21.8368 77.3877 21.8453C77.3171 21.8466 77.2477 21.826 77.1888 21.7864C77.1298 21.7467 77.084 21.6898 77.0574 21.6231C77.0574 21.6231 77.0574 21.6063 77.0706 21.6131Z" fill="#263238"/>
|
||||
<path id="Vector_181" d="M77.1658 20.556C77.2784 20.6633 77.4117 20.7457 77.5571 20.7978C77.7025 20.85 77.8569 20.8708 78.0106 20.859C78.1459 20.8508 78.2793 20.8225 78.4066 20.7748L78.4759 20.7479L78.5452 20.7176C78.561 20.7099 78.574 20.6973 78.5823 20.6816C78.5906 20.6658 78.5938 20.6478 78.5914 20.6301C78.5928 20.6189 78.5928 20.6076 78.5914 20.5964V20.5661C78.5386 20.3136 78.4165 19.94 78.4165 19.94C78.5188 19.9635 79.027 20.0544 78.9874 19.94C78.6765 18.8199 78.2552 17.7349 77.7301 16.7014C77.7136 16.6711 77.6608 16.7014 77.674 16.725C77.9545 17.7619 78.4132 18.7449 78.7135 19.7784C78.5319 19.7432 78.3464 19.7341 78.1624 19.7514C78.1294 19.7716 78.4033 20.4719 78.4198 20.5863C78.2239 20.6586 78.0159 20.6902 77.8079 20.6792C77.5999 20.6683 77.3962 20.6149 77.2087 20.5224C77.1592 20.5055 77.1394 20.5358 77.1658 20.556Z" fill="#263238"/>
|
||||
<path id="Vector_182" d="M78.2294 20.7276C78.1308 20.937 77.9807 21.1167 77.7938 21.2494C77.6905 21.3194 77.5679 21.3537 77.444 21.3471C77.1734 21.3471 77.114 21.0946 77.114 20.8791C77.1178 20.7651 77.1356 20.652 77.1668 20.5425C77.492 20.72 77.8649 20.7849 78.2294 20.7276Z" fill="#263238"/>
|
||||
<path id="Vector_183" d="M77.7945 21.2493C77.6911 21.3193 77.5683 21.3536 77.4444 21.347C77.1735 21.347 77.114 21.0945 77.114 20.879C77.2518 20.8529 77.3943 20.8753 77.518 20.9426C77.6416 21.0099 77.7392 21.1181 77.7945 21.2493Z" fill="#F7A9A0"/>
|
||||
<path id="Vector_184" d="M79.2703 14.6952C77.9272 16.3784 75.1024 15.3011 75.1024 15.3011C75.0682 15.7189 74.9031 16.1144 74.6315 16.4291C74.3599 16.7437 73.9963 16.9609 73.5943 17.0483C73.5943 17.0483 74.1091 20.0579 73.3567 20.2801C72.2083 20.6168 70.6969 16.7588 70.8322 15.8701C70.9675 14.9813 71.8783 14.4865 71.8783 14.4865C71.8505 13.9814 72.0095 13.484 72.3238 13.0927C72.9277 12.241 75.868 12.2478 75.868 12.2478C75.9159 11.8318 76.0583 11.433 76.2838 11.083C76.3375 10.9969 76.4077 10.9228 76.4902 10.8652C76.5728 10.8075 76.6659 10.7676 76.764 10.7478C76.8621 10.7279 76.9631 10.7286 77.061 10.7498C77.1588 10.771 77.2514 10.8122 77.3332 10.8709C77.2514 11.1293 77.2288 11.4034 77.2672 11.6721C77.3794 12.5642 78.0625 12.3454 77.8282 11.5879C77.7528 11.2961 77.5771 11.0417 77.3332 10.8709C77.5213 10.2649 78.0229 9.93166 78.4354 10.1033C79.1779 10.4097 80.389 13.288 79.2703 14.6952Z" fill="#263238"/>
|
||||
<path id="Vector_185" d="M73.7182 19.8356C73.7182 19.8356 72.4378 18.415 71.791 18.9031C71.1442 19.3913 72.253 21.5525 73.111 21.7511C73.2195 21.7842 73.3335 21.7946 73.4461 21.7817C73.5587 21.7687 73.6675 21.7327 73.7661 21.6758C73.8647 21.6189 73.9511 21.5423 74.02 21.4505C74.0888 21.3588 74.1388 21.2538 74.167 21.1418L73.7182 19.8356Z" fill="#DD6A57"/>
|
||||
<path id="Vector_186" d="M72.1206 19.5157C72.1206 19.5157 72.1206 19.5157 72.1206 19.5359C72.7245 19.6942 73.1106 20.2092 73.3845 20.731C73.3433 20.6769 73.291 20.6326 73.2314 20.6011C73.1717 20.5695 73.1061 20.5516 73.039 20.5484C72.9719 20.5452 72.9049 20.5568 72.8427 20.5826C72.7804 20.6083 72.7243 20.6474 72.6783 20.6974C72.6783 20.6974 72.6783 20.731 72.6981 20.7277C72.7944 20.6802 72.9029 20.6648 73.0083 20.6835C73.1136 20.7022 73.2106 20.7542 73.2855 20.832C73.4099 20.9624 73.5205 21.1057 73.6155 21.2596C73.6485 21.3101 73.7376 21.2596 73.7112 21.2124C73.6221 20.4651 72.9324 19.4821 72.1206 19.5157Z" fill="#263238"/>
|
||||
<path id="Vector_187" d="M78.7789 25.4441L77.9704 28.4436L74.0698 25.2219L73.2085 26.5012C73.2085 26.5012 77.2741 31.8707 77.2642 31.6081L78.1486 28.9991L80.0131 30.5274L79.3927 26.2218L78.7789 25.4441Z" fill="#407BFF"/>
|
||||
<path id="Vector_188" d="M79.8275 28.3795C79.7021 27.6725 79.5932 26.9589 79.4381 26.2586C79.4381 26.2317 79.3919 26.225 79.3886 26.2586C79.3259 26.9622 79.8209 29.6621 79.8902 30.3152C79.811 30.2479 78.1676 28.9686 78.1577 29.0057C77.9498 29.4298 77.2997 31.3285 77.2601 31.5002C76.6001 30.6451 74.1713 27.5581 73.4354 26.767C73.4337 26.7643 73.4315 26.762 73.4289 26.7603C73.4263 26.7585 73.4234 26.7573 73.4203 26.7566C73.4141 26.7554 73.4077 26.7567 73.4024 26.7602C73.3972 26.7638 73.3935 26.7694 73.3923 26.7757C73.3911 26.782 73.3923 26.7885 73.3958 26.7939C73.9832 27.7062 77.2271 31.8705 77.2667 31.8436C77.6199 30.9424 77.9273 30.0233 78.1874 29.0898C78.4712 29.3726 80.1476 30.8235 80.141 30.7158C80.0759 29.9321 79.9712 29.1523 79.8275 28.3795Z" fill="#263238"/>
|
||||
<path id="Vector_189" d="M106.728 12.2543L100.913 2.53869C101.014 2.70505 101.14 2.85393 101.286 2.9797C101.449 3.12072 101.633 3.23436 101.831 3.31634C103.349 3.94587 106.197 3.24228 110.322 1.22241L116.136 10.938C112.011 12.9578 109.163 13.6614 107.645 13.0319C107.447 12.9512 107.263 12.8374 107.101 12.6953C106.952 12.5715 106.826 12.4222 106.728 12.2543Z" fill="#407BFF"/>
|
||||
<g id="Group_7" opacity="0.1">
|
||||
<path id="Vector_190" d="M106.727 12.2543L100.913 2.53869C101.013 2.70505 101.139 2.85393 101.285 2.9797C101.448 3.12072 101.632 3.23436 101.83 3.31634C103.348 3.94587 106.196 3.24228 110.321 1.22241L116.135 10.938C112.01 12.9578 109.163 13.6614 107.645 13.0319C107.446 12.9512 107.262 12.8374 107.1 12.6953C106.952 12.5715 106.825 12.4222 106.727 12.2543Z" fill="black"/>
|
||||
</g>
|
||||
<path id="Vector_191" d="M106.099 10.7495C106.237 10.9915 106.348 11.2491 106.429 11.517C106.504 11.7735 106.607 12.0208 106.735 12.2543L100.911 2.53874C100.782 2.30579 100.68 2.05839 100.607 1.80149C100.523 1.53483 100.413 1.27764 100.277 1.03394L106.099 10.7495Z" fill="#407BFF"/>
|
||||
<g id="Group_8" opacity="0.4">
|
||||
<path id="Vector_192" d="M106.102 10.7497C106.241 10.9917 106.352 11.2493 106.432 11.5173C106.508 11.7738 106.611 12.021 106.739 12.2545L100.915 2.53898C100.786 2.30604 100.684 2.05863 100.611 1.80173C100.527 1.53507 100.417 1.27788 100.281 1.03418L106.102 10.7497Z" fill="black"/>
|
||||
</g>
|
||||
<path id="Vector_193" d="M100.288 1.03398L106.099 10.7495C105.987 10.5587 105.841 10.3899 105.67 10.2513C105.506 10.1212 105.325 10.0147 105.132 9.93487C103.555 9.28514 100.7 10.0662 96.4501 12.3149L90.6355 2.59938C94.8859 0.350592 97.7404 -0.430424 99.3178 0.222667C99.5111 0.301147 99.6923 0.407733 99.8557 0.539114C100.027 0.676572 100.174 0.844145 100.288 1.03398Z" fill="#407BFF"/>
|
||||
</g>
|
||||
<g id="speech-bubble">
|
||||
<path id="Vector_194" d="M92.7923 10.837C92.6888 11.8532 92.3103 12.82 91.6993 13.6295C91.0883 14.439 90.2687 15.0593 89.3321 15.4211C88.3955 15.7828 87.3788 15.8719 86.3954 15.6783C85.4121 15.4847 84.5008 15.016 83.7635 14.3247L81.0608 14.7421L82.4138 12.3587C82.0728 11.5157 81.9446 10.599 82.0409 9.69244C82.2048 8.25027 82.9196 6.93222 84.0302 6.02436C85.1408 5.1165 86.5576 4.69208 87.973 4.84321C89.3885 4.99434 90.6884 5.70883 91.5906 6.83161C92.4929 7.95439 92.9247 9.39486 92.7923 10.8404V10.837Z" fill="white"/>
|
||||
<path id="Vector_195" d="M92.7902 10.8371C92.6868 11.8532 92.3099 12.8202 91.7012 13.6313C91.5498 13.8339 91.3855 14.0262 91.2095 14.207C91.0292 14.3836 90.8386 14.5488 90.6386 14.7018C90.2407 15.0097 89.8018 15.2579 89.3351 15.4391C88.8683 15.6253 88.3786 15.7454 87.8798 15.7959C87.6304 15.8144 87.3801 15.8144 87.1307 15.7959C86.8793 15.7892 86.6288 15.7622 86.3816 15.7151C85.3851 15.5288 84.4593 15.0625 83.7086 14.3685L83.7713 14.3887L81.0719 14.8129L80.8772 14.8432L80.9762 14.6682L82.3193 12.278V12.3722C82.0025 11.5823 81.8676 10.7288 81.9248 9.87729C81.982 9.02581 82.2298 8.19905 82.6493 7.46059C83.0661 6.72373 83.6437 6.09474 84.3374 5.62243C85.031 5.15012 85.822 4.84718 86.6489 4.73713C87.4668 4.62723 88.2985 4.70791 89.0815 4.97308C89.8644 5.23826 90.5783 5.68104 91.1693 6.26814C91.7604 6.85525 92.2133 7.5714 92.4941 8.36276C92.7748 9.15413 92.8761 10.0001 92.7902 10.8371ZM92.7902 10.8371C92.8758 10.0071 92.7736 9.16815 92.4916 8.38474C92.2095 7.60132 91.7551 6.89434 91.1632 6.31818C90.5713 5.74202 89.8578 5.31202 89.0774 5.06127C88.2971 4.81053 87.4708 4.7457 86.6621 4.87179C85.8608 4.99286 85.0975 5.30041 84.4313 5.77063C83.7696 6.24302 83.2176 6.85784 82.8143 7.57168C82.4154 8.28512 82.1807 9.08171 82.1279 9.90126C82.0767 10.721 82.2052 11.5422 82.5041 12.3049L82.5239 12.3554L82.5041 12.3857L81.1445 14.7658L81.0488 14.621L83.7548 14.2339H83.7911L83.8175 14.2608C84.5418 14.9442 85.4372 15.4102 86.4047 15.6074C86.6464 15.6561 86.8912 15.6865 87.1373 15.6983C87.3834 15.7151 87.6304 15.7151 87.8765 15.6983C88.3714 15.656 88.858 15.5426 89.3219 15.3616C89.7941 15.1903 90.239 14.9487 90.6419 14.6446C90.8417 14.4951 91.0324 14.3332 91.2128 14.1598C91.3872 13.9799 91.5513 13.7899 91.7045 13.5909C92.3054 12.7909 92.6808 11.8388 92.7902 10.8371Z" fill="#263238"/>
|
||||
<path id="Vector_196" d="M86.7846 13.4092L84.4746 11.0257L85.2501 10.2447L86.5998 11.635L89.4015 7.1543L90.3189 7.75353L86.7846 13.4092Z" fill="#407BFF"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 128 KiB |
|
After Width: | Height: | Size: 50 KiB |
BIN
lib/features/learning/modules/exercises/assets/images/paris.jpg
Normal file
|
After Width: | Height: | Size: 44 KiB |
|
|
@ -0,0 +1,144 @@
|
|||
class ExerciseModel {
|
||||
final String idAdminExercise;
|
||||
final String idLevel;
|
||||
final String title;
|
||||
final String question;
|
||||
final String questionType;
|
||||
final String? audio;
|
||||
final String? video;
|
||||
final String? image;
|
||||
final DateTime timeAdminExc;
|
||||
final dynamic choices;
|
||||
|
||||
ExerciseModel({
|
||||
required this.idAdminExercise,
|
||||
required this.idLevel,
|
||||
required this.title,
|
||||
required this.question,
|
||||
required this.questionType,
|
||||
this.audio,
|
||||
this.video,
|
||||
this.image,
|
||||
required this.timeAdminExc,
|
||||
required this.choices,
|
||||
});
|
||||
|
||||
factory ExerciseModel.fromJson(Map<String, dynamic> json) {
|
||||
dynamic choices;
|
||||
switch (json['QUESTION_TYPE']) {
|
||||
case 'MCQ':
|
||||
if (json['multipleChoices'] != null &&
|
||||
json['multipleChoices'].isNotEmpty) {
|
||||
choices = MultipleChoice.fromJson(json['multipleChoices'][0]);
|
||||
}
|
||||
break;
|
||||
case 'TFQ':
|
||||
if (json['trueFalse'] != null && json['trueFalse'].isNotEmpty) {
|
||||
choices = TrueFalse.fromJson(json['trueFalse'][0]);
|
||||
}
|
||||
break;
|
||||
case 'MPQ':
|
||||
if (json['matchingPairs'] != null && json['matchingPairs'].isNotEmpty) {
|
||||
choices = MatchingPair.fromJsonList(json['matchingPairs']);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return ExerciseModel(
|
||||
idAdminExercise: json['ID_ADMIN_EXERCISE'],
|
||||
idLevel: json['ID_LEVEL'],
|
||||
title: json['TITLE'],
|
||||
question: json['QUESTION'],
|
||||
questionType: json['QUESTION_TYPE'],
|
||||
audio: json['AUDIO'],
|
||||
video: json['VIDEO'],
|
||||
image: json['IMAGE'],
|
||||
timeAdminExc: DateTime.parse(json['TIME_ADMIN_EXC']),
|
||||
choices: choices,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class MultipleChoice {
|
||||
final String idMultipleChoices;
|
||||
final String idAdminExercise;
|
||||
final String optionA;
|
||||
final String optionB;
|
||||
final String optionC;
|
||||
final String optionD;
|
||||
final String optionE;
|
||||
final DateTime timeMultipleChoices;
|
||||
|
||||
MultipleChoice({
|
||||
required this.idMultipleChoices,
|
||||
required this.idAdminExercise,
|
||||
required this.optionA,
|
||||
required this.optionB,
|
||||
required this.optionC,
|
||||
required this.optionD,
|
||||
required this.optionE,
|
||||
required this.timeMultipleChoices,
|
||||
});
|
||||
|
||||
factory MultipleChoice.fromJson(Map<String, dynamic> json) {
|
||||
return MultipleChoice(
|
||||
idMultipleChoices: json['ID_MULTIPLE_CHOICES'],
|
||||
idAdminExercise: json['ID_ADMIN_EXERCISE'],
|
||||
optionA: json['OPTION_A'],
|
||||
optionB: json['OPTION_B'],
|
||||
optionC: json['OPTION_C'],
|
||||
optionD: json['OPTION_D'],
|
||||
optionE: json['OPTION_E'],
|
||||
timeMultipleChoices: DateTime.parse(json['TIME_MULTIPLE_CHOICES']),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class TrueFalse {
|
||||
final String idTrueFalse;
|
||||
final String idAdminExercise;
|
||||
final DateTime timeTrueFalse;
|
||||
|
||||
TrueFalse({
|
||||
required this.idTrueFalse,
|
||||
required this.idAdminExercise,
|
||||
required this.timeTrueFalse,
|
||||
});
|
||||
|
||||
factory TrueFalse.fromJson(Map<String, dynamic> json) {
|
||||
return TrueFalse(
|
||||
idTrueFalse: json['ID_TRUE_FALSE'],
|
||||
idAdminExercise: json['ID_ADMIN_EXERCISE'],
|
||||
timeTrueFalse: DateTime.parse(json['TIME_TRUE_FALSE']),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class Pair {
|
||||
final String left;
|
||||
final String right;
|
||||
|
||||
Pair({required this.left, required this.right});
|
||||
}
|
||||
|
||||
class MatchingPair {
|
||||
final List<Pair> pairs;
|
||||
|
||||
MatchingPair({required this.pairs});
|
||||
|
||||
factory MatchingPair.fromJsonList(List? jsonList) {
|
||||
if (jsonList == null) {
|
||||
return MatchingPair(
|
||||
pairs: []); // Return an empty list if jsonList is null
|
||||
}
|
||||
|
||||
List<Pair> pairs = [];
|
||||
for (var pair in jsonList) {
|
||||
pairs.add(Pair(
|
||||
left: pair['LEFT_PAIR'] ?? '', // Use empty string as default if null
|
||||
right: pair['RIGHT_PAIR'] ?? '',
|
||||
));
|
||||
}
|
||||
return MatchingPair(pairs: pairs);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,317 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:english_learning/core/services/repositories/exercise_repository.dart';
|
||||
import 'package:english_learning/features/auth/provider/user_provider.dart';
|
||||
import 'package:english_learning/features/learning/modules/exercises/models/exercise_model.dart';
|
||||
|
||||
class ExerciseProvider extends ChangeNotifier {
|
||||
// Dependencies
|
||||
final ExerciseRepository _repository;
|
||||
final UserProvider _userProvider;
|
||||
|
||||
// Constructor
|
||||
ExerciseProvider(this._repository, this._userProvider);
|
||||
|
||||
// State variables
|
||||
List<ExerciseModel> _exercises = [];
|
||||
Map<int, List<Map<String, String>>> _matchingAnswers = {};
|
||||
List<String> _answers = [];
|
||||
List<List<Color>> _leftColors = [];
|
||||
List<List<Color?>> _rightColors = [];
|
||||
int _currentExerciseIndex = 0;
|
||||
bool _isLoading = false;
|
||||
String _nameTopic = '';
|
||||
String _nameLevel = '';
|
||||
String? _activeLeftOption;
|
||||
String? _studentLearningId;
|
||||
|
||||
// Constants
|
||||
final List<Color> _pairColors = [
|
||||
Colors.blue,
|
||||
Colors.green,
|
||||
Colors.orange,
|
||||
Colors.purple,
|
||||
Colors.red,
|
||||
];
|
||||
|
||||
// Getters
|
||||
List<ExerciseModel> get exercises => _exercises;
|
||||
List<String> get answers => _answers;
|
||||
int get currentExerciseIndex => _currentExerciseIndex;
|
||||
bool get isLoading => _isLoading;
|
||||
String get nameTopic => _nameTopic;
|
||||
String get nameLevel => _nameLevel;
|
||||
String? get activeLeftOption => _activeLeftOption;
|
||||
String? get studentLearningId => _studentLearningId;
|
||||
|
||||
// Initialization methods
|
||||
void initializeAnswers() {
|
||||
_answers = List.generate(_exercises.length, (index) => '');
|
||||
_matchingAnswers = {};
|
||||
_leftColors = List.generate(_exercises.length, (index) {
|
||||
if (_exercises[index].choices is MatchingPair) {
|
||||
return List.generate(
|
||||
(_exercises[index].choices as MatchingPair).pairs.length,
|
||||
(i) => _pairColors[i % _pairColors.length]);
|
||||
}
|
||||
return [];
|
||||
});
|
||||
_rightColors = List.generate(_exercises.length, (index) {
|
||||
if (_exercises[index].choices is MatchingPair) {
|
||||
return List<Color?>.filled(
|
||||
(_exercises[index].choices as MatchingPair).pairs.length, null);
|
||||
}
|
||||
return [];
|
||||
});
|
||||
}
|
||||
|
||||
// Answer handling methods
|
||||
void answerQuestion(int index, String answer) {
|
||||
if (index >= 0 && index < _answers.length) {
|
||||
if (_exercises[index].choices is MatchingPair) {
|
||||
_handleMatchingPairAnswer(index, answer);
|
||||
} else {
|
||||
_answers[index] = _answers[index] == answer ? '' : answer;
|
||||
}
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void _handleMatchingPairAnswer(int exerciseIndex, String option) {
|
||||
final matchingPair = _exercises[exerciseIndex].choices as MatchingPair;
|
||||
final isLeft = matchingPair.pairs.any((pair) => pair.left == option);
|
||||
|
||||
if (isLeft) {
|
||||
_selectLeftOption(exerciseIndex, option);
|
||||
} else {
|
||||
_selectRightOption(exerciseIndex, option);
|
||||
}
|
||||
|
||||
_updateMatchingPairAnswer(exerciseIndex);
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void _selectLeftOption(int exerciseIndex, String option) {
|
||||
if (_activeLeftOption == option) {
|
||||
_activeLeftOption = null;
|
||||
} else {
|
||||
_activeLeftOption = option;
|
||||
}
|
||||
}
|
||||
|
||||
void _selectRightOption(int exerciseIndex, String option) {
|
||||
if (_activeLeftOption == null) {
|
||||
print("Please select a left option first.");
|
||||
return;
|
||||
}
|
||||
|
||||
final pairs = (_exercises[exerciseIndex].choices as MatchingPair).pairs;
|
||||
final leftIndex =
|
||||
pairs.indexWhere((pair) => pair.left == _activeLeftOption);
|
||||
final rightIndex = pairs.indexWhere((pair) => pair.right == option);
|
||||
|
||||
if (leftIndex != -1 && rightIndex != -1) {
|
||||
if (!_matchingAnswers.containsKey(exerciseIndex)) {
|
||||
_matchingAnswers[exerciseIndex] = [];
|
||||
}
|
||||
|
||||
_matchingAnswers[exerciseIndex]!.removeWhere((pair) =>
|
||||
pair['left'] == _activeLeftOption || pair['right'] == option);
|
||||
|
||||
_matchingAnswers[exerciseIndex]!
|
||||
.add({'left': _activeLeftOption!, 'right': option});
|
||||
|
||||
_rightColors[exerciseIndex][rightIndex] =
|
||||
_leftColors[exerciseIndex][leftIndex];
|
||||
|
||||
_activeLeftOption = null;
|
||||
}
|
||||
}
|
||||
|
||||
void _updateMatchingPairAnswer(int exerciseIndex) {
|
||||
if (_matchingAnswers[exerciseIndex] != null &&
|
||||
_matchingAnswers[exerciseIndex]!.length ==
|
||||
(_exercises[exerciseIndex].choices as MatchingPair).pairs.length) {
|
||||
_answers[exerciseIndex] = _matchingAnswers[exerciseIndex]!
|
||||
.map((pair) => "${pair['left']}-${pair['right']}")
|
||||
.join(", ");
|
||||
} else {
|
||||
_answers[exerciseIndex] = '';
|
||||
}
|
||||
}
|
||||
|
||||
// Utility methods
|
||||
bool isAllPairsMatched(int exerciseIndex) {
|
||||
if (_exercises[exerciseIndex].choices is! MatchingPair) return false;
|
||||
final matchingPair = _exercises[exerciseIndex].choices as MatchingPair;
|
||||
return _matchingAnswers[exerciseIndex] != null &&
|
||||
_matchingAnswers[exerciseIndex]!.length == matchingPair.pairs.length &&
|
||||
_matchingAnswers[exerciseIndex]!.every(
|
||||
(pair) => pair['left']!.isNotEmpty && pair['right']!.isNotEmpty);
|
||||
}
|
||||
|
||||
String? getMatchingAnswer(int exerciseIndex, int pairIndex, bool isLeft) {
|
||||
if (_matchingAnswers.containsKey(exerciseIndex) &&
|
||||
pairIndex < _matchingAnswers[exerciseIndex]!.length) {
|
||||
return _matchingAnswers[exerciseIndex]![pairIndex]
|
||||
[isLeft ? 'left' : 'right'];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Color? getLeftColor(int exerciseIndex, int pairIndex) {
|
||||
return _leftColors[exerciseIndex][pairIndex];
|
||||
}
|
||||
|
||||
Color? getRightColor(int exerciseIndex, int pairIndex) {
|
||||
return _rightColors[exerciseIndex][pairIndex];
|
||||
}
|
||||
|
||||
bool isOptionSelected(int exerciseIndex, String option, bool isLeft) {
|
||||
if (_matchingAnswers[exerciseIndex] == null) return false;
|
||||
return _matchingAnswers[exerciseIndex]!.any(
|
||||
(pair) => isLeft ? pair['left'] == option : pair['right'] == option);
|
||||
}
|
||||
|
||||
// Navigation methods
|
||||
void goToExercise(int index) {
|
||||
if (index >= 0 && index < _exercises.length) {
|
||||
_currentExerciseIndex = index;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void nextQuestion() {
|
||||
if (_currentExerciseIndex < _answers.length - 1) {
|
||||
_currentExerciseIndex++;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void previousQuestion() {
|
||||
if (_currentExerciseIndex > 0) {
|
||||
_currentExerciseIndex--;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
// Progress tracking methods
|
||||
int getAnsweredCount() {
|
||||
return _answers.where((answer) => answer.isNotEmpty).length;
|
||||
}
|
||||
|
||||
double getProgress() {
|
||||
return getAnsweredCount() / _exercises.length;
|
||||
}
|
||||
|
||||
bool isExerciseCompleted(int index) {
|
||||
if (_exercises[index].choices is MatchingPair) {
|
||||
return isAllPairsMatched(index);
|
||||
}
|
||||
return _answers[index].isNotEmpty;
|
||||
}
|
||||
|
||||
// API methods
|
||||
Future<void> fetchExercises(String levelId) async {
|
||||
_isLoading = true;
|
||||
notifyListeners();
|
||||
|
||||
try {
|
||||
final token = await _userProvider.getValidToken();
|
||||
if (token == null) {
|
||||
throw Exception('No valid token found');
|
||||
}
|
||||
|
||||
final data = await _repository.getExercises(levelId, token);
|
||||
_nameTopic = data['NAME_TOPIC'];
|
||||
_nameLevel = data['NAME_LEVEL'];
|
||||
final exercisesData = data['EXERCISES'];
|
||||
_exercises = exercisesData
|
||||
.map<ExerciseModel>((json) => ExerciseModel.fromJson(json))
|
||||
.toList();
|
||||
_answers = List.generate(_exercises.length, (index) => '');
|
||||
initializeAnswers();
|
||||
} catch (e) {
|
||||
print('Error fetching exercises: $e');
|
||||
} finally {
|
||||
_isLoading = false;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
Future<Map<String, dynamic>> submitAnswersAndGetScore() async {
|
||||
print('submitAnswersAndGetScore called');
|
||||
try {
|
||||
if (_studentLearningId == null) {
|
||||
throw Exception('Student Learning ID is not set');
|
||||
}
|
||||
|
||||
final token = await _userProvider.getValidToken();
|
||||
if (token == null) {
|
||||
throw Exception('No valid token found');
|
||||
}
|
||||
|
||||
final answersToSubmit = _exercises.asMap().entries.where((entry) {
|
||||
final index = entry.key;
|
||||
return _answers[index].isNotEmpty;
|
||||
}).map((entry) {
|
||||
final index = entry.key;
|
||||
final exercise = entry.value;
|
||||
return {
|
||||
'ID_STUDENT_LEARNING': _studentLearningId!,
|
||||
'ID_ADMIN_EXERCISE': exercise.idAdminExercise,
|
||||
'ANSWER_STUDENT': _answers[index],
|
||||
};
|
||||
}).toList();
|
||||
|
||||
if (answersToSubmit.isEmpty) {
|
||||
throw Exception(
|
||||
'No answers to submit. Please answer at least one question.');
|
||||
}
|
||||
|
||||
print('Submitting answers to repository');
|
||||
final result = await _repository.submitAnswersAndGetScore(
|
||||
answersToSubmit, _studentLearningId!, token);
|
||||
|
||||
print('Repository response: $result');
|
||||
|
||||
return {
|
||||
'CURRENT_LEVEL_NAME': result['CURRENT_LEVEL_NAME'],
|
||||
'NEXT_LEARNING_NAME': result['NEXT_LEARNING_NAME'],
|
||||
'SCORE': result['SCORE'],
|
||||
'IS_PASS': result['IS_PASS'],
|
||||
};
|
||||
} catch (e) {
|
||||
print('Error in submitAnswersAndGetScore: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
bool hasAnsweredQuestions() {
|
||||
return _answers.any((answer) => answer.isNotEmpty);
|
||||
}
|
||||
|
||||
bool hasUnansweredQuestions() {
|
||||
return _answers.any((answer) => answer.isEmpty);
|
||||
}
|
||||
|
||||
// Other methods
|
||||
void setStudentLearningId(String id) {
|
||||
_studentLearningId = id;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void updateFrom(ExerciseProvider? previous) {
|
||||
if (previous != null) {
|
||||
_exercises = previous._exercises;
|
||||
_matchingAnswers = previous._matchingAnswers;
|
||||
_answers = previous._answers;
|
||||
_leftColors = previous._leftColors;
|
||||
_rightColors = previous._rightColors;
|
||||
_currentExerciseIndex = previous._currentExerciseIndex;
|
||||
_isLoading = previous._isLoading;
|
||||
_nameTopic = previous._nameTopic;
|
||||
_nameLevel = previous._nameLevel;
|
||||
_studentLearningId = previous._studentLearningId;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,124 @@
|
|||
import 'package:english_learning/features/learning/modules/exercises/providers/exercise_provider.dart';
|
||||
import 'package:english_learning/features/learning/modules/exercises/widgets/exercise_content.dart';
|
||||
import 'package:english_learning/features/learning/modules/exercises/widgets/exercise_navigator.dart';
|
||||
import 'package:english_learning/features/learning/modules/exercises/widgets/exercise_progress.dart';
|
||||
import 'package:english_learning/features/learning/modules/exercises/widgets/instruction_dialog.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class ExerciseScreen extends StatefulWidget {
|
||||
final String? levelId;
|
||||
final String studentLearningId;
|
||||
|
||||
const ExerciseScreen({
|
||||
super.key,
|
||||
required this.levelId,
|
||||
required this.studentLearningId,
|
||||
});
|
||||
|
||||
@override
|
||||
State<ExerciseScreen> createState() => _ExerciseScreenState();
|
||||
}
|
||||
|
||||
class _ExerciseScreenState extends State<ExerciseScreen> {
|
||||
late ScrollController _scrollController;
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_scrollController = ScrollController();
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
final provider = context.read<ExerciseProvider>();
|
||||
provider.fetchExercises(widget.levelId!);
|
||||
provider.setStudentLearningId(widget.studentLearningId);
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_scrollController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void _scrollToTop() {
|
||||
_scrollController.animateTo(
|
||||
0,
|
||||
duration: const Duration(milliseconds: 300),
|
||||
curve: Curves.easeOut,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Consumer<ExerciseProvider>(builder: (context, provider, child) {
|
||||
if (provider.isLoading) {
|
||||
return const Scaffold(
|
||||
body: Center(child: CircularProgressIndicator()),
|
||||
);
|
||||
}
|
||||
return Scaffold(
|
||||
backgroundColor: AppColors.bgSoftColor,
|
||||
appBar: AppBar(
|
||||
elevation: 0,
|
||||
automaticallyImplyLeading: false,
|
||||
iconTheme: const IconThemeData(color: AppColors.whiteColor),
|
||||
centerTitle: true,
|
||||
title: Text(
|
||||
'${provider.nameTopic} - ${provider.nameLevel}',
|
||||
style: AppTextStyles.whiteTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
flexibleSpace: Container(
|
||||
decoration: BoxDecoration(
|
||||
gradient: AppColors.gradientTheme,
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
IconButton(
|
||||
icon: const Icon(Icons.info_outline, color: AppColors.whiteColor),
|
||||
onPressed: () => _showInstructions(context),
|
||||
),
|
||||
],
|
||||
),
|
||||
body: SafeArea(
|
||||
child: Column(
|
||||
children: [
|
||||
const Padding(
|
||||
padding: EdgeInsets.all(16.0),
|
||||
child: ExerciseProgress(),
|
||||
),
|
||||
Expanded(
|
||||
child: RefreshIndicator(
|
||||
onRefresh: () => provider.fetchExercises(widget.levelId!),
|
||||
child: SingleChildScrollView(
|
||||
controller: _scrollController,
|
||||
physics: const AlwaysScrollableScrollPhysics(),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
||||
child: Column(
|
||||
children: [
|
||||
const SizedBox(height: 16),
|
||||
const ExerciseContent(),
|
||||
const SizedBox(height: 24),
|
||||
ExerciseNavigator(onScrollToTop: _scrollToTop),
|
||||
const SizedBox(height: 32),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
void _showInstructions(BuildContext context) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (BuildContext context) => const InstructionsDialog(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,101 @@
|
|||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/core/widgets/global_button.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
|
||||
class CompleteSubmission extends StatelessWidget {
|
||||
final VoidCallback onCheckAgain;
|
||||
final VoidCallback onSubmit;
|
||||
|
||||
const CompleteSubmission({
|
||||
super.key,
|
||||
required this.onSubmit,
|
||||
required this.onCheckAgain,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Dialog(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
),
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 24.0,
|
||||
horizontal: 18.0,
|
||||
),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
RichText(
|
||||
text: TextSpan(children: [
|
||||
TextSpan(
|
||||
text: 'Proceed With',
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
TextSpan(
|
||||
text: ' Submission ',
|
||||
style: AppTextStyles.blueTextStyle.copyWith(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
TextSpan(
|
||||
text: '?',
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
]),
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
SvgPicture.asset(
|
||||
'lib/features/learning/modules/exercises/assets/images/complete_illustration.svg',
|
||||
width: 160,
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
Text(
|
||||
'Confirm submission? There\'s no going back.',
|
||||
textAlign: TextAlign.center,
|
||||
style: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: GlobalButton(
|
||||
text: 'Check Again',
|
||||
textColor: AppColors.blueColor,
|
||||
borderColor: AppColors.blueColor,
|
||||
backgroundColor: Colors.transparent,
|
||||
onPressed: onCheckAgain,
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 10),
|
||||
Expanded(
|
||||
child: GlobalButton(
|
||||
text: 'Confirm',
|
||||
onPressed: onSubmit,
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,149 @@
|
|||
import 'package:english_learning/core/services/repositories/constants.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/features/learning/modules/exercises/models/exercise_model.dart';
|
||||
import 'package:english_learning/features/learning/modules/exercises/providers/exercise_provider.dart';
|
||||
import 'package:english_learning/features/learning/modules/exercises/widgets/question/matching_pairs_question.dart';
|
||||
import 'package:english_learning/features/learning/modules/exercises/widgets/question/multiple_choice_question.dart';
|
||||
import 'package:english_learning/features/learning/modules/exercises/widgets/question/true_false_question.dart';
|
||||
import 'package:english_learning/features/learning/modules/exercises/widgets/see_progress_modal.dart';
|
||||
import 'package:english_learning/features/learning/modules/material/widgets/image_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class ExerciseContent extends StatelessWidget {
|
||||
const ExerciseContent({super.key});
|
||||
|
||||
Widget _buildQuestionWidget(
|
||||
ExerciseModel exercise,
|
||||
ExerciseProvider provider,
|
||||
) {
|
||||
switch (exercise.questionType) {
|
||||
case 'MCQ':
|
||||
return MultipleChoiceQuestion(
|
||||
exercise: exercise,
|
||||
);
|
||||
case 'TFQ':
|
||||
return TrueFalseQuestion(
|
||||
exercise: exercise,
|
||||
);
|
||||
case 'MPQ':
|
||||
return MatchingPairsQuestion(
|
||||
exercise: exercise,
|
||||
);
|
||||
default:
|
||||
return const Text('Unsupported question type');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Consumer<ExerciseProvider>(builder: (context, provider, child) {
|
||||
if (provider.exercises.isEmpty) {
|
||||
return const Center(child: Text('No exercises available'));
|
||||
}
|
||||
final exercise = provider.exercises[provider.currentExerciseIndex];
|
||||
|
||||
return TweenAnimationBuilder(
|
||||
duration: const Duration(milliseconds: 500),
|
||||
tween: Tween<double>(begin: 0, end: 1),
|
||||
builder: (context, double value, child) {
|
||||
return Opacity(
|
||||
opacity: value,
|
||||
child: Transform.translate(
|
||||
offset: Offset(50 * (1 - value), 0),
|
||||
child: child,
|
||||
),
|
||||
);
|
||||
},
|
||||
child: Container(
|
||||
key: ValueKey(provider.currentExerciseIndex),
|
||||
width: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
color: AppColors.whiteColor,
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
color: Colors.grey.withOpacity(0.1),
|
||||
spreadRadius: 1,
|
||||
blurRadius: 3,
|
||||
offset: const Offset(0, 1),
|
||||
),
|
||||
],
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'Question ${provider.currentExerciseIndex + 1}',
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
showModalBottomSheet(
|
||||
backgroundColor: AppColors.whiteColor,
|
||||
context: context,
|
||||
builder: (context) => const SeeProgressModal(),
|
||||
shape: const RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.vertical(
|
||||
top: Radius.circular(20),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
child: Text(
|
||||
'See Progress',
|
||||
style: AppTextStyles.blueTextStyle.copyWith(
|
||||
decoration: TextDecoration.underline,
|
||||
decorationColor: AppColors.blueColor,
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
const Divider(
|
||||
color: AppColors.disableColor,
|
||||
thickness: 1,
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
Text(
|
||||
exercise.question,
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
if (exercise.image != null && exercise.image!.isNotEmpty)
|
||||
Center(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 16.0),
|
||||
child: ImageWidget(
|
||||
imageFileName: exercise.image!,
|
||||
baseUrl: '${baseUrl}uploads/exercise/image/',
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 14),
|
||||
_buildQuestionWidget(
|
||||
exercise,
|
||||
provider,
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,191 @@
|
|||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/features/auth/provider/user_provider.dart';
|
||||
import 'package:english_learning/features/learning/modules/exercises/widgets/complete_submission.dart';
|
||||
import 'package:english_learning/features/learning/modules/exercises/widgets/incomplete_submission.dart';
|
||||
import 'package:english_learning/features/learning/modules/exercises/providers/exercise_provider.dart';
|
||||
import 'package:english_learning/features/learning/modules/result/screens/result_screen.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class ExerciseNavigator extends StatelessWidget {
|
||||
final VoidCallback? onScrollToTop;
|
||||
const ExerciseNavigator({
|
||||
super.key,
|
||||
required this.onScrollToTop,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Consumer2<ExerciseProvider, UserProvider>(
|
||||
builder: (context, exerciseProvider, userProvider, _) {
|
||||
final currentExerciseIndex = exerciseProvider.currentExerciseIndex;
|
||||
final isFirstExercise = currentExerciseIndex == 0;
|
||||
final isLastExercise =
|
||||
currentExerciseIndex == exerciseProvider.exercises.length - 1;
|
||||
|
||||
Future<void> submitAnswers() async {
|
||||
try {
|
||||
final result = await exerciseProvider.submitAnswersAndGetScore();
|
||||
print('Submit result: $result'); // Logging
|
||||
|
||||
Navigator.of(context).pushReplacement(
|
||||
MaterialPageRoute(
|
||||
builder: (context) => ResultScreen(
|
||||
currentLevel: result['CURRENT_LEVEL_NAME'],
|
||||
nextLevel: result['NEXT_LEARNING_NAME'],
|
||||
score: int.parse(result['SCORE'].toString()),
|
||||
isCompleted: result['IS_PASS'] == 1,
|
||||
),
|
||||
),
|
||||
);
|
||||
} catch (e) {
|
||||
print('Error submitting answers: $e'); // Logging
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('Error: $e')),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
if (!isFirstExercise)
|
||||
Expanded(
|
||||
child: ElevatedButton(
|
||||
onPressed: () {
|
||||
exerciseProvider.previousQuestion();
|
||||
onScrollToTop?.call();
|
||||
},
|
||||
style: ElevatedButton.styleFrom(
|
||||
shadowColor: Colors.transparent,
|
||||
backgroundColor: Colors.transparent,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
side: const BorderSide(
|
||||
color: AppColors.blueColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0),
|
||||
child: Text(
|
||||
'Previous',
|
||||
style: AppTextStyles.blueTextStyle.copyWith(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
if (!isFirstExercise && !isLastExercise) const SizedBox(width: 8),
|
||||
if (!isLastExercise)
|
||||
Expanded(
|
||||
child: ElevatedButton(
|
||||
onPressed: () {
|
||||
exerciseProvider.nextQuestion();
|
||||
onScrollToTop?.call();
|
||||
},
|
||||
style: ElevatedButton.styleFrom(
|
||||
shadowColor: Colors.transparent,
|
||||
backgroundColor: Colors.transparent,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
side: const BorderSide(
|
||||
color: AppColors.blueColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12.0),
|
||||
child: Text(
|
||||
'Next',
|
||||
style: AppTextStyles.blueTextStyle.copyWith(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
if (isLastExercise && !isFirstExercise) const SizedBox(width: 8),
|
||||
if (isLastExercise)
|
||||
Expanded(
|
||||
child: ElevatedButton(
|
||||
onPressed: () {
|
||||
if (exerciseProvider.hasAnsweredQuestions()) {
|
||||
if (exerciseProvider.hasUnansweredQuestions()) {
|
||||
// Ada pertanyaan yang belum dijawab
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return IncompleteSubmission(
|
||||
onCheckAgain: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
onSubmit: () async {
|
||||
Navigator.of(context).pop();
|
||||
submitAnswers();
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
} else {
|
||||
// Semua pertanyaan sudah dijawab
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return CompleteSubmission(
|
||||
onCheckAgain: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
onSubmit: () async {
|
||||
Navigator.of(context).pop();
|
||||
submitAnswers();
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
} else {
|
||||
// Tidak ada pertanyaan yang dijawab
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
'Please answer at least one question before submitting.')),
|
||||
);
|
||||
}
|
||||
},
|
||||
style: ElevatedButton.styleFrom(
|
||||
padding: EdgeInsets.zero,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
),
|
||||
),
|
||||
child: Ink(
|
||||
decoration: BoxDecoration(
|
||||
gradient: AppColors.gradientTheme,
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
),
|
||||
child: GestureDetector(
|
||||
onTap: exerciseProvider.nextQuestion,
|
||||
child: Container(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12),
|
||||
alignment: Alignment.center,
|
||||
child: Text(
|
||||
'Submit',
|
||||
style: AppTextStyles.whiteTextStyle.copyWith(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/features/learning/modules/exercises/providers/exercise_provider.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class ExerciseProgress extends StatelessWidget {
|
||||
const ExerciseProgress({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final exerciseProvider = Provider.of<ExerciseProvider>(context);
|
||||
final totalExercises = exerciseProvider.exercises.length;
|
||||
final answeredCount = exerciseProvider.getAnsweredCount();
|
||||
final progress = exerciseProvider.getProgress();
|
||||
|
||||
return LayoutBuilder(
|
||||
builder: (context, constraints) {
|
||||
final barWidth =
|
||||
(constraints.maxWidth - 130).clamp(0.0, double.infinity);
|
||||
|
||||
return Row(
|
||||
children: [
|
||||
SizedBox(
|
||||
width: barWidth,
|
||||
child: Container(
|
||||
height: 20,
|
||||
decoration: BoxDecoration(
|
||||
border: Border.all(
|
||||
color: AppColors.blueColor,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
),
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
child: Stack(
|
||||
children: [
|
||||
Container(
|
||||
color: AppColors.whiteColor,
|
||||
),
|
||||
AnimatedContainer(
|
||||
duration: const Duration(milliseconds: 300),
|
||||
curve: Curves.easeInOut,
|
||||
width: (barWidth * progress).clamp(0.0, barWidth),
|
||||
decoration: BoxDecoration(
|
||||
color: AppColors.blueColor,
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
const Spacer(),
|
||||
Text(
|
||||
'$answeredCount of $totalExercises Answered',
|
||||
style: AppTextStyles.greyTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/core/widgets/global_button.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
|
||||
class IncompleteSubmission extends StatelessWidget {
|
||||
final VoidCallback onCheckAgain;
|
||||
final VoidCallback onSubmit;
|
||||
|
||||
const IncompleteSubmission({
|
||||
super.key,
|
||||
required this.onCheckAgain,
|
||||
required this.onSubmit,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Dialog(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
),
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 18.0,
|
||||
vertical: 24.0,
|
||||
),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
RichText(
|
||||
text: TextSpan(children: [
|
||||
TextSpan(
|
||||
text: 'Incomplete',
|
||||
style: AppTextStyles.redTextStyle.copyWith(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
TextSpan(
|
||||
text: ' Submission!',
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
]),
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
SvgPicture.asset(
|
||||
'lib/features/learning/modules/exercises/assets/images/incomplete_illustration.svg',
|
||||
width: 160,
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
Text(
|
||||
'Looks like a few questions might have been missed. Would you like to review them?',
|
||||
textAlign: TextAlign.center,
|
||||
style: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: GlobalButton(
|
||||
text: 'Check Again',
|
||||
textColor: AppColors.blueColor,
|
||||
borderColor: AppColors.blueColor,
|
||||
backgroundColor: Colors.transparent,
|
||||
onPressed: () {
|
||||
onCheckAgain();
|
||||
},
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 10),
|
||||
Expanded(
|
||||
child: GlobalButton(
|
||||
text: 'Submit',
|
||||
backgroundColor: AppColors.redColor,
|
||||
onPressed: onSubmit,
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
|
||||
class InstructionsDialog extends StatelessWidget {
|
||||
const InstructionsDialog({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Dialog(
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)),
|
||||
elevation: 0,
|
||||
backgroundColor: Colors.transparent,
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(16),
|
||||
decoration: BoxDecoration(
|
||||
color: AppColors.whiteColor,
|
||||
shape: BoxShape.rectangle,
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
boxShadow: const [
|
||||
BoxShadow(
|
||||
color: Colors.black26,
|
||||
blurRadius: 10.0,
|
||||
offset: Offset(0.0, 10.0),
|
||||
),
|
||||
],
|
||||
),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Text(
|
||||
'Instructions',
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 22,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
_buildInstructionItem(
|
||||
icon: Icons.question_answer,
|
||||
text: 'Answer all questions to complete the exercise.',
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
_buildInstructionItem(
|
||||
icon: Icons.compare_arrows,
|
||||
text:
|
||||
'For matching pairs, select a left option first, then match it with a right option.',
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
_buildInstructionItem(
|
||||
icon: Icons.edit,
|
||||
text:
|
||||
'You can change your answers at any time before submitting.',
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
ElevatedButton(
|
||||
child: const Text('Got it!'),
|
||||
onPressed: () => Navigator.of(context).pop(),
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: AppColors.blueColor,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(30),
|
||||
),
|
||||
padding:
|
||||
const EdgeInsets.symmetric(horizontal: 30, vertical: 10),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildInstructionItem({required IconData icon, required String text}) {
|
||||
return Row(
|
||||
children: [
|
||||
Icon(icon, color: AppColors.blueColor),
|
||||
const SizedBox(width: 12),
|
||||
Expanded(
|
||||
child: Text(
|
||||
text,
|
||||
style: AppTextStyles.blackTextStyle.copyWith(fontSize: 16),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,124 @@
|
|||
import 'package:english_learning/features/learning/modules/exercises/providers/exercise_provider.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/features/learning/modules/exercises/models/exercise_model.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class MatchingPairsQuestion extends StatelessWidget {
|
||||
final ExerciseModel exercise;
|
||||
|
||||
const MatchingPairsQuestion({
|
||||
super.key,
|
||||
required this.exercise,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final provider = Provider.of<ExerciseProvider>(context);
|
||||
final matchingPair = exercise.choices as MatchingPair;
|
||||
final currentIndex = provider.currentExerciseIndex;
|
||||
|
||||
return Column(
|
||||
children: [
|
||||
...matchingPair.pairs.asMap().entries.map((entry) {
|
||||
int pairIndex = entry.key;
|
||||
Pair pair = entry.value;
|
||||
return Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Expanded(
|
||||
child: _buildOptionItem(
|
||||
context,
|
||||
pair.left,
|
||||
provider,
|
||||
currentIndex,
|
||||
pairIndex,
|
||||
true,
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 10),
|
||||
Expanded(
|
||||
child: _buildOptionItem(
|
||||
context,
|
||||
pair.right,
|
||||
provider,
|
||||
currentIndex,
|
||||
pairIndex,
|
||||
false,
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}).toList(),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildOptionItem(
|
||||
BuildContext context,
|
||||
String option,
|
||||
ExerciseProvider provider,
|
||||
int exerciseIndex,
|
||||
int pairIndex,
|
||||
bool isLeft,
|
||||
) {
|
||||
Color? color = isLeft
|
||||
? provider.getLeftColor(exerciseIndex, pairIndex)
|
||||
: provider.getRightColor(exerciseIndex, pairIndex);
|
||||
final isSelected = provider.isOptionSelected(exerciseIndex, option, isLeft);
|
||||
final isActive = isLeft && provider.activeLeftOption == option;
|
||||
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
if (!isLeft && provider.activeLeftOption == null) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('Please select a left option first.')),
|
||||
);
|
||||
} else {
|
||||
provider.answerQuestion(exerciseIndex, option);
|
||||
}
|
||||
},
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 4.0),
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color:
|
||||
isSelected ? color : (isActive ? color! : AppColors.whiteColor),
|
||||
borderRadius: const BorderRadius.only(
|
||||
topRight: Radius.circular(20),
|
||||
bottomRight: Radius.circular(20),
|
||||
bottomLeft: Radius.circular(20),
|
||||
),
|
||||
border: Border.all(
|
||||
color: isSelected
|
||||
? color ?? AppColors.cardDisabledColor
|
||||
: AppColors.cardDisabledColor,
|
||||
width: isSelected ? 2 : 1,
|
||||
),
|
||||
boxShadow: isActive
|
||||
? [
|
||||
BoxShadow(
|
||||
color: color?.withOpacity(0.5) ??
|
||||
Colors.grey.withOpacity(0.5),
|
||||
spreadRadius: 1,
|
||||
blurRadius: 4,
|
||||
offset: const Offset(0, 2),
|
||||
)
|
||||
]
|
||||
: null,
|
||||
),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 14.0, vertical: 10.0),
|
||||
child: Text(
|
||||
option,
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontWeight: FontWeight.w900,
|
||||
color: isSelected || isActive
|
||||
? AppColors.whiteColor
|
||||
: AppColors.blackColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,119 @@
|
|||
// multiple_choice_question.dart
|
||||
import 'package:english_learning/features/learning/modules/exercises/providers/exercise_provider.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/features/learning/modules/exercises/models/exercise_model.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class MultipleChoiceQuestion extends StatelessWidget {
|
||||
final ExerciseModel exercise;
|
||||
|
||||
const MultipleChoiceQuestion({
|
||||
super.key,
|
||||
required this.exercise,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final provider = Provider.of<ExerciseProvider>(context);
|
||||
final multipleChoice = exercise.choices as MultipleChoice;
|
||||
final options = [
|
||||
multipleChoice.optionA,
|
||||
multipleChoice.optionB,
|
||||
multipleChoice.optionC,
|
||||
multipleChoice.optionD,
|
||||
multipleChoice.optionE,
|
||||
];
|
||||
|
||||
return _buildOptionsList(options, provider);
|
||||
}
|
||||
|
||||
Widget _buildOptionsList(List<String> options, ExerciseProvider provider) {
|
||||
final optionLabels = List.generate(
|
||||
options.length,
|
||||
(index) => String.fromCharCode(65 + index),
|
||||
);
|
||||
|
||||
return ListView.builder(
|
||||
shrinkWrap: true,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
itemCount: options.length,
|
||||
itemBuilder: (context, i) {
|
||||
final option = options[i];
|
||||
final isSelected =
|
||||
provider.answers[provider.currentExerciseIndex] == option;
|
||||
|
||||
return GestureDetector(
|
||||
onTap: () =>
|
||||
provider.answerQuestion(provider.currentExerciseIndex, option),
|
||||
child: _buildOptionItem(optionLabels[i], option, isSelected),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildOptionItem(String label, String option, bool isSelected) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 4.0),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
decoration: BoxDecoration(
|
||||
color: isSelected ? AppColors.blueColor : AppColors.whiteColor,
|
||||
borderRadius: BorderRadius.circular(25),
|
||||
border: Border.all(
|
||||
color: isSelected
|
||||
? Colors.transparent
|
||||
: AppColors.cardDisabledColor,
|
||||
),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 14.0,
|
||||
vertical: 10.0,
|
||||
),
|
||||
child: Text(
|
||||
label,
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontWeight: FontWeight.w900,
|
||||
color:
|
||||
isSelected ? AppColors.whiteColor : AppColors.blackColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
Expanded(
|
||||
child: Container(
|
||||
margin: const EdgeInsets.only(bottom: 8.0),
|
||||
width: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
color: isSelected ? AppColors.blueColor : AppColors.whiteColor,
|
||||
borderRadius: const BorderRadius.only(
|
||||
topRight: Radius.circular(20),
|
||||
bottomRight: Radius.circular(20),
|
||||
bottomLeft: Radius.circular(20),
|
||||
),
|
||||
border: Border.all(
|
||||
color: isSelected
|
||||
? Colors.transparent
|
||||
: AppColors.cardDisabledColor,
|
||||
),
|
||||
),
|
||||
padding:
|
||||
const EdgeInsets.symmetric(vertical: 10.0, horizontal: 16.0),
|
||||
child: Text(
|
||||
option,
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
color:
|
||||
isSelected ? AppColors.whiteColor : AppColors.blackColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
// true_false_question.dart
|
||||
import 'package:english_learning/features/learning/modules/exercises/providers/exercise_provider.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/features/learning/modules/exercises/models/exercise_model.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class TrueFalseQuestion extends StatelessWidget {
|
||||
final ExerciseModel exercise;
|
||||
|
||||
const TrueFalseQuestion({
|
||||
super.key,
|
||||
required this.exercise,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final provider = Provider.of<ExerciseProvider>(context);
|
||||
final options = ['True', 'False'];
|
||||
|
||||
return _buildOptionsList(options, provider);
|
||||
}
|
||||
|
||||
Widget _buildOptionsList(List<String> options, ExerciseProvider provider) {
|
||||
return ListView.builder(
|
||||
shrinkWrap: true,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
itemCount: options.length,
|
||||
itemBuilder: (context, i) {
|
||||
final option = options[i];
|
||||
final isSelected =
|
||||
provider.answers[provider.currentExerciseIndex] == option;
|
||||
|
||||
return GestureDetector(
|
||||
onTap: () =>
|
||||
provider.answerQuestion(provider.currentExerciseIndex, option),
|
||||
child: _buildOptionItem(option, isSelected),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildOptionItem(String option, bool isSelected) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 4.0),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
decoration: BoxDecoration(
|
||||
color: isSelected ? AppColors.blueColor : AppColors.whiteColor,
|
||||
borderRadius: BorderRadius.circular(25),
|
||||
border: Border.all(
|
||||
color: isSelected
|
||||
? Colors.transparent
|
||||
: AppColors.cardDisabledColor,
|
||||
),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 14.0,
|
||||
vertical: 10.0,
|
||||
),
|
||||
child: Text(
|
||||
option,
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontWeight: FontWeight.w900,
|
||||
color:
|
||||
isSelected ? AppColors.whiteColor : AppColors.blackColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
Expanded(
|
||||
child: Container(
|
||||
margin: const EdgeInsets.only(bottom: 8.0),
|
||||
width: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
color: isSelected ? AppColors.blueColor : AppColors.whiteColor,
|
||||
borderRadius: const BorderRadius.only(
|
||||
topRight: Radius.circular(20),
|
||||
bottomRight: Radius.circular(20),
|
||||
bottomLeft: Radius.circular(20),
|
||||
),
|
||||
border: Border.all(
|
||||
color: isSelected
|
||||
? Colors.transparent
|
||||
: AppColors.cardDisabledColor,
|
||||
),
|
||||
),
|
||||
padding:
|
||||
const EdgeInsets.symmetric(vertical: 10.0, horizontal: 16.0),
|
||||
child: Text(
|
||||
option,
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
color:
|
||||
isSelected ? AppColors.whiteColor : AppColors.blackColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
import 'package:bootstrap_icons/bootstrap_icons.dart';
|
||||
import 'package:english_learning/features/learning/modules/exercises/providers/exercise_provider.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
|
||||
class SeeProgressModal extends StatelessWidget {
|
||||
const SeeProgressModal({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final exerciseProvider = Provider.of<ExerciseProvider>(context);
|
||||
final exercises = exerciseProvider.exercises;
|
||||
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 32.0,
|
||||
vertical: 24.0,
|
||||
),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'Your Progress',
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
IconButton(
|
||||
icon: const Icon(BootstrapIcons.x),
|
||||
iconSize: 36,
|
||||
onPressed: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
const Divider(
|
||||
color: AppColors.disableColor,
|
||||
thickness: 1,
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
GridView.builder(
|
||||
shrinkWrap: true, // Important to wrap GridView inside a modal
|
||||
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
|
||||
crossAxisCount: 5, // Number of columns
|
||||
mainAxisSpacing: 10,
|
||||
crossAxisSpacing: 10,
|
||||
childAspectRatio: 1,
|
||||
),
|
||||
itemCount: exercises.length,
|
||||
itemBuilder: (context, index) {
|
||||
final isCompleted = exerciseProvider.isExerciseCompleted(index);
|
||||
return ElevatedButton(
|
||||
onPressed: () {
|
||||
Navigator.pop(context); // Close modal
|
||||
exerciseProvider
|
||||
.goToExercise(index); // Navigate to the selected exercise
|
||||
},
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor:
|
||||
isCompleted ? AppColors.blueColor : Colors.white,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
side: const BorderSide(
|
||||
color: AppColors.blueColor,
|
||||
width: 1,
|
||||
),
|
||||
),
|
||||
elevation: 0, // Remove shadow
|
||||
padding: const EdgeInsets.all(0),
|
||||
minimumSize: const Size(50, 50),
|
||||
),
|
||||
child: Text(
|
||||
'${index + 1}',
|
||||
style: TextStyle(
|
||||
color: isCompleted ? Colors.white : AppColors.blueColor,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 16,
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 101 KiB |
|
|
@ -0,0 +1,163 @@
|
|||
import 'package:english_learning/core/widgets/global_button.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/features/learning/modules/feedback/widgets/feedback_dialog.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class FeedbackScreen extends StatefulWidget {
|
||||
const FeedbackScreen({super.key});
|
||||
|
||||
@override
|
||||
State<FeedbackScreen> createState() => _FeedbackScreenState();
|
||||
}
|
||||
|
||||
class _FeedbackScreenState extends State<FeedbackScreen> {
|
||||
final FocusNode _focusNode = FocusNode();
|
||||
final TextEditingController _controller = TextEditingController();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_focusNode.addListener(() {
|
||||
setState(() {});
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_focusNode.dispose();
|
||||
_controller.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void _unfocusTextField() {
|
||||
_focusNode.unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return GestureDetector(
|
||||
onTap: _unfocusTextField,
|
||||
child: Scaffold(
|
||||
appBar: AppBar(
|
||||
elevation: 0,
|
||||
automaticallyImplyLeading: false,
|
||||
iconTheme: const IconThemeData(color: AppColors.whiteColor),
|
||||
centerTitle: true,
|
||||
title: Text(
|
||||
'Feedback',
|
||||
style: AppTextStyles.whiteTextStyle.copyWith(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
flexibleSpace: Container(
|
||||
decoration: BoxDecoration(
|
||||
gradient: AppColors.gradientTheme,
|
||||
),
|
||||
),
|
||||
),
|
||||
body: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
||||
child: Column(
|
||||
children: [
|
||||
const SizedBox(height: 24),
|
||||
Text(
|
||||
'Is there anything you would like to share after completing this exercise?',
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
AnimatedContainer(
|
||||
duration: const Duration(milliseconds: 200),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
color: _focusNode.hasFocus
|
||||
? AppColors.blueColor.withOpacity(0.3)
|
||||
: Colors.transparent,
|
||||
blurRadius: 8,
|
||||
offset: const Offset(0, 4),
|
||||
),
|
||||
],
|
||||
),
|
||||
child: TextField(
|
||||
controller: _controller,
|
||||
focusNode: _focusNode,
|
||||
maxLines: 8,
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
),
|
||||
cursorColor: AppColors.blackColor,
|
||||
decoration: InputDecoration(
|
||||
hintText: 'Type your message here',
|
||||
hintStyle:
|
||||
AppTextStyles.greyTextStyle.copyWith(fontSize: 14),
|
||||
filled: true,
|
||||
fillColor: _focusNode.hasFocus
|
||||
? AppColors.whiteColor
|
||||
: AppColors.whiteColor,
|
||||
contentPadding: const EdgeInsets.all(16),
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
borderSide: BorderSide.none,
|
||||
),
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
borderSide: const BorderSide(
|
||||
color: AppColors.blueColor,
|
||||
width: 2,
|
||||
),
|
||||
),
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
borderSide: BorderSide(
|
||||
color: AppColors.disableColor.withOpacity(0.5)),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
GlobalButton(
|
||||
text: 'Send',
|
||||
onPressed: () {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return FeedbackDialog(
|
||||
onSubmit: () {
|
||||
// Navigator.push(
|
||||
// context,
|
||||
// MaterialPageRoute(
|
||||
// builder: (context) => const LevelListScreen(),
|
||||
// ),
|
||||
// );
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
GlobalButton(
|
||||
text: 'Skip',
|
||||
textColor: AppColors.blueColor,
|
||||
backgroundColor: Colors.transparent,
|
||||
borderColor: AppColors.blueColor,
|
||||
onPressed: () {
|
||||
// Navigator.push(
|
||||
// context,
|
||||
// MaterialPageRoute(
|
||||
// builder: (context) => const LevelListScreen(),
|
||||
// ),
|
||||
// );
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/core/widgets/global_button.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
|
||||
class FeedbackDialog extends StatelessWidget {
|
||||
final VoidCallback onSubmit;
|
||||
|
||||
const FeedbackDialog({
|
||||
super.key,
|
||||
required this.onSubmit,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Dialog(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
),
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(20),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(24.0),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Text(
|
||||
'Your Thoughts Matter!',
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
SvgPicture.asset(
|
||||
'lib/features/learning/modules/feedback/assets/images/feedback_illustration.svg',
|
||||
width: 200,
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
Text(
|
||||
'Thank you for for taking the time to share your perspective. Your feedback is highly valued!',
|
||||
textAlign: TextAlign.center,
|
||||
style: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontSize: 12,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 30),
|
||||
GlobalButton(
|
||||
text: 'Got It',
|
||||
onPressed: () {
|
||||
// Navigator.push(
|
||||
// context,
|
||||
// MaterialPageRoute(
|
||||
// builder: (context) => const LevelListScreen(),
|
||||
// ),
|
||||
// );
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
|
|
@ -0,0 +1,15 @@
|
|||
<svg width="72" height="89" viewBox="0 0 72 89" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Text input container">
|
||||
<mask id="mask0_2846_3102" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="86" height="89">
|
||||
<g id="Text input">
|
||||
<g id="Slider">
|
||||
<path id="Vector" d="M44.1609 1.63922L55.3927 9.85719L69.5257 9.83145L73.5685 23.102L84.8339 31.2771L80.1451 44.5305L84.2404 57.7839L72.6088 65.959L67.9718 79.2295L53.84 79.2038L42.2401 87.4217L31.0082 79.2038L16.8753 79.2295L12.8325 65.959L1.56709 57.7839L6.2559 44.5305L2.1606 31.2771L13.7921 23.102L18.4292 9.83145L32.561 9.85719L44.1609 1.63922Z" fill="white" stroke="white" stroke-width="1.33218" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path id="Vector_2" d="M27.9879 44.5305L38.6139 55.2533L60.8262 33.8077" stroke="black" stroke-width="4.99569" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</g>
|
||||
</g>
|
||||
</mask>
|
||||
<g mask="url(#mask0_2846_3102)">
|
||||
<path id="Vector_3" d="M-7.8042 -6.93903L96.5099 -6.93903L94.205 96L-10.1091 96L-7.8042 -6.93903Z" fill="white"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
52
lib/features/learning/modules/level/models/level_model.dart
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
class Level {
|
||||
final String idLevel;
|
||||
final String idTopic;
|
||||
final String idSection;
|
||||
final String nameSection;
|
||||
final String nameTopic;
|
||||
final String nameLevel;
|
||||
final String content;
|
||||
final String? audio;
|
||||
final String? image;
|
||||
final String? video;
|
||||
final int isPretest;
|
||||
final String? timeLevel;
|
||||
final String? idStudentLearning;
|
||||
final int? score;
|
||||
|
||||
const Level({
|
||||
required this.idLevel,
|
||||
required this.idTopic,
|
||||
required this.idSection,
|
||||
required this.nameSection,
|
||||
required this.nameTopic,
|
||||
required this.nameLevel,
|
||||
required this.content,
|
||||
this.audio,
|
||||
this.image,
|
||||
this.video,
|
||||
required this.isPretest,
|
||||
required this.timeLevel,
|
||||
this.idStudentLearning,
|
||||
this.score,
|
||||
});
|
||||
|
||||
factory Level.fromJson(Map<String, dynamic> json) {
|
||||
return Level(
|
||||
idLevel: json['ID_LEVEL'],
|
||||
idTopic: json['ID_TOPIC'],
|
||||
idSection: json['ID_SECTION'],
|
||||
nameSection: json['NAME_SECTION'],
|
||||
nameTopic: json['NAME_TOPIC'],
|
||||
nameLevel: json['NAME_LEVEL'],
|
||||
content: json['CONTENT'],
|
||||
audio: json['AUDIO'],
|
||||
image: json['IMAGE'],
|
||||
video: json['VIDEO'],
|
||||
isPretest: json['IS_PRETEST'],
|
||||
timeLevel: json['TIME_LEVEL'],
|
||||
idStudentLearning: json['ID_STUDENT_LEARNING'],
|
||||
score: json['SCORE'],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
import 'package:english_learning/core/services/repositories/level_repository.dart';
|
||||
import 'package:english_learning/features/learning/modules/level/models/level_model.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
class LevelProvider with ChangeNotifier {
|
||||
final LevelRepository _levelRepository = LevelRepository();
|
||||
List<Level> _levels = [];
|
||||
Map<String, dynamic>? _lastCompletedLevel;
|
||||
bool _isLoading = false;
|
||||
String? _error;
|
||||
|
||||
List<Level> get levels => _levels;
|
||||
Map<String, dynamic>? get lastCompletedLevel => _lastCompletedLevel;
|
||||
bool get isLoading => _isLoading;
|
||||
String? get error => _error;
|
||||
|
||||
Future<void> fetchLevels(String topicId, String token) async {
|
||||
_isLoading = true;
|
||||
_error = null;
|
||||
notifyListeners();
|
||||
|
||||
try {
|
||||
final result = await _levelRepository.getLevels(topicId, token);
|
||||
_levels = result['levels'];
|
||||
_lastCompletedLevel = result['lastCompletedLevel'];
|
||||
if (_levels.isEmpty) {
|
||||
_error = 'No levels found for this topic';
|
||||
}
|
||||
} catch (e) {
|
||||
_error = 'Error fetching levels: ${e.toString()}';
|
||||
} finally {
|
||||
_isLoading = false;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
Level getPretest() {
|
||||
return _levels.firstWhere((level) => level.isPretest == 1,
|
||||
orElse: () => throw Exception('Pretest not found'));
|
||||
}
|
||||
|
||||
int getLevelScore(String levelId) {
|
||||
final level = _levels.firstWhere((level) => level.idLevel == levelId,
|
||||
orElse: () => const Level(
|
||||
idLevel: '',
|
||||
idTopic: '',
|
||||
idSection: '',
|
||||
nameSection: '',
|
||||
nameTopic: '',
|
||||
nameLevel: '',
|
||||
content: '',
|
||||
isPretest: 0,
|
||||
timeLevel: '',
|
||||
));
|
||||
return level.score ?? 0;
|
||||
}
|
||||
|
||||
bool isLevelAllowed(String levelId) {
|
||||
if (_lastCompletedLevel == null) {
|
||||
// Jika tidak ada level yang selesai, hanya pretest yang diizinkan
|
||||
return levelId == _levels.first.idLevel;
|
||||
}
|
||||
|
||||
String lastCompletedLevelId = _lastCompletedLevel!['ID_LEVEL'];
|
||||
int lastCompletedIndex =
|
||||
_levels.indexWhere((level) => level.idLevel == lastCompletedLevelId);
|
||||
int currentIndex = _levels.indexWhere((level) => level.idLevel == levelId);
|
||||
|
||||
// Level diizinkan jika indeksnya kurang dari atau sama dengan indeks terakhir yang selesai + 1
|
||||
return currentIndex <= lastCompletedIndex + 1;
|
||||
}
|
||||
|
||||
// bool isLevelAllowed(int levelIndex) {
|
||||
// if (levelIndex == 0) return true; // Pretest is always allowed
|
||||
// if (_lastCompletedLevel == null)
|
||||
// return levelIndex ==
|
||||
// 1; // If no level completed, only first level is allowed
|
||||
// String lastCompletedLevelId = _lastCompletedLevel!['ID_LEVEL'];
|
||||
// int lastCompletedIndex =
|
||||
// _levels.indexWhere((level) => level.idLevel == lastCompletedLevelId);
|
||||
// return levelIndex <= lastCompletedIndex + 2;
|
||||
// }
|
||||
|
||||
// bool isLevelFinished(int levelIndex) {
|
||||
// return _levels[levelIndex].idStudentLearning != null;
|
||||
// }
|
||||
|
||||
// int getLevelScore(int levelIndex) {
|
||||
// return _levels[levelIndex].score ?? 0;
|
||||
// }
|
||||
}
|
||||
|
|
@ -0,0 +1,113 @@
|
|||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/features/auth/provider/user_provider.dart';
|
||||
import 'package:english_learning/features/learning/modules/level/providers/level_provider.dart';
|
||||
import 'package:english_learning/features/learning/modules/level/widgets/level_card.dart';
|
||||
import 'package:english_learning/features/learning/modules/level/widgets/pretest_card.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class LevelListScreen extends StatefulWidget {
|
||||
final String topicId;
|
||||
final String topicTitle;
|
||||
|
||||
const LevelListScreen({
|
||||
super.key,
|
||||
required this.topicId,
|
||||
required this.topicTitle,
|
||||
});
|
||||
|
||||
@override
|
||||
State<LevelListScreen> createState() => _LevelListScreenState();
|
||||
}
|
||||
|
||||
class _LevelListScreenState extends State<LevelListScreen> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
final levelProvider = Provider.of<LevelProvider>(context, listen: false);
|
||||
final userProvider = Provider.of<UserProvider>(context, listen: false);
|
||||
levelProvider.fetchLevels(widget.topicId, userProvider.jwtToken!);
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
elevation: 0,
|
||||
iconTheme: const IconThemeData(color: AppColors.whiteColor),
|
||||
centerTitle: true,
|
||||
title: RichText(
|
||||
text: TextSpan(
|
||||
children: [
|
||||
TextSpan(
|
||||
text: 'Level list of ',
|
||||
style: AppTextStyles.whiteTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
TextSpan(
|
||||
text: widget.topicTitle,
|
||||
style: AppTextStyles.whiteTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
flexibleSpace: Container(
|
||||
decoration: BoxDecoration(
|
||||
gradient: AppColors.gradientTheme,
|
||||
),
|
||||
),
|
||||
),
|
||||
body: Consumer<LevelProvider>(
|
||||
builder: (context, levelProvider, child) {
|
||||
if (levelProvider.isLoading) {
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
} else if (levelProvider.error != null) {
|
||||
return Center(child: Text('No levels available'));
|
||||
} else {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: Column(
|
||||
children: [
|
||||
PretestCard(
|
||||
pretest: levelProvider.getPretest(),
|
||||
score: levelProvider
|
||||
.getLevelScore(levelProvider.getPretest().idLevel),
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
Expanded(
|
||||
child: GridView.builder(
|
||||
gridDelegate:
|
||||
const SliverGridDelegateWithFixedCrossAxisCount(
|
||||
crossAxisCount: 2,
|
||||
childAspectRatio: 1.0,
|
||||
crossAxisSpacing: 16,
|
||||
mainAxisSpacing: 16,
|
||||
),
|
||||
itemCount: levelProvider.levels.length - 1,
|
||||
itemBuilder: (context, index) {
|
||||
final level = levelProvider.levels[index + 1];
|
||||
return LevelCard(
|
||||
level: level,
|
||||
isAllowed:
|
||||
levelProvider.isLevelAllowed(level.idLevel),
|
||||
score: levelProvider.getLevelScore(level.idLevel),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
162
lib/features/learning/modules/level/widgets/level_card.dart
Normal file
|
|
@ -0,0 +1,162 @@
|
|||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/core/widgets/custom_button.dart';
|
||||
import 'package:english_learning/features/learning/modules/level/models/level_model.dart';
|
||||
import 'package:english_learning/features/learning/modules/material/screens/material_screen.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class LevelCard extends StatelessWidget {
|
||||
final Level level;
|
||||
final bool isAllowed;
|
||||
// final int level;
|
||||
// final bool isAllowed;
|
||||
// final bool isFinished;
|
||||
final int score;
|
||||
// final VoidCallback? onPressed;
|
||||
const LevelCard({
|
||||
super.key,
|
||||
required this.level,
|
||||
required this.isAllowed,
|
||||
// required this.level,
|
||||
// required this.isAllowed,
|
||||
// required this.isFinished,
|
||||
required this.score,
|
||||
// this.onPressed,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
bool isCompleted = level.idStudentLearning != null;
|
||||
return Card(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
),
|
||||
elevation: 0,
|
||||
child: Container(
|
||||
height: MediaQuery.of(context).size.height * 0.6,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
gradient: isAllowed
|
||||
? AppColors.gradientTheme
|
||||
: const LinearGradient(
|
||||
colors: [
|
||||
AppColors.disableColor,
|
||||
AppColors.disableColor,
|
||||
],
|
||||
begin: Alignment.centerLeft,
|
||||
end: Alignment.centerRight,
|
||||
),
|
||||
),
|
||||
child: Stack(
|
||||
children: [
|
||||
if (isCompleted)
|
||||
Positioned(
|
||||
right: -23,
|
||||
bottom: 4,
|
||||
child: Image.asset(
|
||||
'lib/features/learning/modules/level/assets/images/Icon_Complete.png',
|
||||
width: 110,
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
// Level Header
|
||||
Container(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 4,
|
||||
horizontal: 8,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
border: Border.all(
|
||||
color: AppColors.whiteColor,
|
||||
width: 1.5,
|
||||
),
|
||||
),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Text('LEVEL',
|
||||
style: AppTextStyles.whiteTextStyle.copyWith(
|
||||
fontWeight: FontWeight.w900,
|
||||
fontSize: 16,
|
||||
)),
|
||||
const SizedBox(width: 4),
|
||||
Container(
|
||||
decoration: BoxDecoration(
|
||||
color: AppColors.whiteColor,
|
||||
borderRadius: BorderRadius.circular(6),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 12.0,
|
||||
vertical: 2.0,
|
||||
),
|
||||
child: Text(
|
||||
level.nameLevel.replaceAll('Level ', ''),
|
||||
style: isAllowed
|
||||
? AppTextStyles.blueTextStyle.copyWith(
|
||||
fontWeight: FontWeight.w900,
|
||||
fontSize: 16,
|
||||
)
|
||||
: AppTextStyles.disableTextStyle.copyWith(
|
||||
fontWeight: FontWeight.w900,
|
||||
fontSize: 16,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 6),
|
||||
// Score Display
|
||||
Text(
|
||||
// 'Score ${level.score}/100',
|
||||
'Score $score/100',
|
||||
style: AppTextStyles.whiteTextStyle.copyWith(
|
||||
fontWeight: FontWeight.w900,
|
||||
fontSize: 12,
|
||||
),
|
||||
),
|
||||
const Spacer(), // Learn Now Button
|
||||
Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8.0),
|
||||
child: CustomButton(
|
||||
text: isAllowed ? 'Learn Now' : 'Not Allowed',
|
||||
textStyle:
|
||||
isAllowed ? null : AppTextStyles.disableTextStyle,
|
||||
width: double.infinity,
|
||||
height: 36,
|
||||
color: isAllowed
|
||||
? AppColors.yellowButtonColor
|
||||
: AppColors.cardButtonColor,
|
||||
onPressed: isAllowed
|
||||
? () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => MaterialScreen(
|
||||
levelId: level.idLevel,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
: () {},
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
125
lib/features/learning/modules/level/widgets/pretest_card.dart
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
import 'package:bootstrap_icons/bootstrap_icons.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:english_learning/core/widgets/custom_button.dart';
|
||||
import 'package:english_learning/features/learning/modules/level/models/level_model.dart';
|
||||
import 'package:english_learning/features/learning/modules/material/screens/material_screen.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class PretestCard extends StatelessWidget {
|
||||
final Level pretest;
|
||||
final int? score;
|
||||
final VoidCallback? onPressed;
|
||||
|
||||
const PretestCard({
|
||||
super.key,
|
||||
required this.pretest,
|
||||
this.score,
|
||||
this.onPressed,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
bool isCompleted = pretest.idStudentLearning != null;
|
||||
|
||||
return Card(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
),
|
||||
elevation: 0,
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(16),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
gradient: AppColors.gradientTheme,
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 4, horizontal: 8),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
color: isCompleted ? Colors.green : Colors.transparent,
|
||||
border: Border.all(
|
||||
color: AppColors.whiteColor,
|
||||
width: 1.5,
|
||||
),
|
||||
),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Text(
|
||||
pretest.nameLevel,
|
||||
style: AppTextStyles.whiteTextStyle.copyWith(
|
||||
fontWeight: FontWeight.w900,
|
||||
fontSize: 16,
|
||||
),
|
||||
),
|
||||
if (isCompleted) ...[
|
||||
const SizedBox(width: 4),
|
||||
const Icon(
|
||||
BootstrapIcons.check_all,
|
||||
color: AppColors.whiteColor,
|
||||
size: 20,
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 6),
|
||||
Text(
|
||||
'Score $score/100',
|
||||
style: AppTextStyles.whiteTextStyle.copyWith(
|
||||
fontWeight: FontWeight.w900,
|
||||
fontSize: 12,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
],
|
||||
),
|
||||
Flexible(
|
||||
child: Image.asset(
|
||||
'lib/features/learning/modules/level/assets/images/pretest_level_illustration.png',
|
||||
height: 95,
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 13),
|
||||
CustomButton(
|
||||
text: isCompleted ? 'Finished' : 'Learn Now',
|
||||
textStyle: AppTextStyles.whiteTextStyle.copyWith(
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
width: double.infinity,
|
||||
height: 36,
|
||||
color: isCompleted ? Colors.green : AppColors.yellowButtonColor,
|
||||
onPressed: () {
|
||||
if (!isCompleted) {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => MaterialScreen(
|
||||
levelId: pretest.idLevel,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
// Jika isCompleted true, tidak melakukan apa-apa
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 50 KiB |
|
|
@ -0,0 +1,183 @@
|
|||
import 'package:english_learning/core/services/dio_client.dart';
|
||||
import 'package:english_learning/core/services/repositories/constants.dart';
|
||||
import 'package:english_learning/core/services/repositories/student_learning_repository.dart';
|
||||
import 'package:english_learning/core/widgets/global_button.dart';
|
||||
import 'package:english_learning/features/auth/provider/user_provider.dart';
|
||||
import 'package:english_learning/features/learning/modules/exercises/screens/exercise_screen.dart';
|
||||
import 'package:english_learning/features/learning/modules/level/providers/level_provider.dart';
|
||||
import 'package:english_learning/features/learning/modules/material/widgets/audio_player_widget.dart';
|
||||
import 'package:english_learning/features/learning/modules/material/widgets/image_widget.dart';
|
||||
import 'package:english_learning/features/learning/modules/material/widgets/video_player_widget.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:english_learning/core/utils/styles/theme.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class MaterialScreen extends StatefulWidget {
|
||||
final String levelId;
|
||||
const MaterialScreen({
|
||||
super.key,
|
||||
required this.levelId,
|
||||
});
|
||||
|
||||
@override
|
||||
State<MaterialScreen> createState() => _MaterialScreenState();
|
||||
}
|
||||
|
||||
class _MaterialScreenState extends State<MaterialScreen>
|
||||
with WidgetsBindingObserver {
|
||||
bool _isLoading = false;
|
||||
late StudentLearningRepository _repository;
|
||||
final GlobalKey<VideoPlayerWidgetState> _videoPlayerKey = GlobalKey();
|
||||
final GlobalKey<AudioPlayerWidgetState> _audioPlayerKey = GlobalKey();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_repository = StudentLearningRepository(DioClient());
|
||||
WidgetsBinding.instance.addObserver(this);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
WidgetsBinding.instance.removeObserver(this);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
void didChangeAppLifecycleState(AppLifecycleState state) {
|
||||
if (state == AppLifecycleState.paused) {
|
||||
_stopAndResetAllMedia();
|
||||
}
|
||||
}
|
||||
|
||||
void _stopAndResetAllMedia() {
|
||||
_videoPlayerKey.currentState?.stopAndResetVideo();
|
||||
_audioPlayerKey.currentState?.stopAndResetAudio();
|
||||
}
|
||||
|
||||
Future<void> _createStudentLearning() async {
|
||||
setState(() {
|
||||
_isLoading = true;
|
||||
});
|
||||
|
||||
try {
|
||||
final userProvider = Provider.of<UserProvider>(context, listen: false);
|
||||
final token = await userProvider.getValidToken();
|
||||
|
||||
if (token == null) {
|
||||
throw Exception('No valid token found');
|
||||
}
|
||||
|
||||
final result =
|
||||
await _repository.createStudentLearning(widget.levelId, token);
|
||||
|
||||
print('Student Learning created: ${result['message']}');
|
||||
|
||||
// Navigate to ExerciseScreen
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => ExerciseScreen(
|
||||
levelId: widget.levelId,
|
||||
studentLearningId: result['payload']['ID_STUDENT_LEARNING'],
|
||||
),
|
||||
),
|
||||
);
|
||||
} catch (e) {
|
||||
// Show error message
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('Error: $e')),
|
||||
);
|
||||
} finally {
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Consumer<LevelProvider>(builder: (context, levelProvider, child) {
|
||||
final level = levelProvider.levels.firstWhere(
|
||||
(level) => level.idLevel == widget.levelId,
|
||||
orElse: () => throw Exception('Level not found'),
|
||||
);
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
elevation: 0,
|
||||
iconTheme: const IconThemeData(color: AppColors.whiteColor),
|
||||
centerTitle: true,
|
||||
leading: IconButton(
|
||||
icon: const Icon(Icons.arrow_back),
|
||||
onPressed: () {
|
||||
_stopAndResetAllMedia();
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
),
|
||||
title: Text(
|
||||
'${level.nameTopic} - ${level.nameSection}',
|
||||
style: AppTextStyles.whiteTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w900,
|
||||
),
|
||||
),
|
||||
flexibleSpace: Container(
|
||||
decoration: BoxDecoration(
|
||||
gradient: AppColors.gradientTheme,
|
||||
),
|
||||
),
|
||||
),
|
||||
body: SingleChildScrollView(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(
|
||||
left: 16.0,
|
||||
right: 16.0,
|
||||
bottom: 16,
|
||||
),
|
||||
child: Column(
|
||||
children: [
|
||||
const SizedBox(height: 22),
|
||||
Text(
|
||||
level.content,
|
||||
style: AppTextStyles.blackTextStyle.copyWith(
|
||||
fontSize: 14,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
if (level.image != null)
|
||||
ImageWidget(
|
||||
imageFileName: level.image!,
|
||||
baseUrl: '${baseUrl}uploads/level/image/',
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
if (level.audio != null)
|
||||
AudioPlayerWidget(
|
||||
key: _audioPlayerKey,
|
||||
audioFileName: level.audio!,
|
||||
baseUrl: '${baseUrl}uploads/level/audio/',
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
if (level.video != null)
|
||||
VideoPlayerWidget(
|
||||
key: _videoPlayerKey,
|
||||
videoUrl: level.video!,
|
||||
),
|
||||
const SizedBox(height: 32),
|
||||
GlobalButton(
|
||||
text: 'Take Pretest',
|
||||
onPressed: _isLoading
|
||||
? null
|
||||
: () {
|
||||
_stopAndResetAllMedia();
|
||||
_createStudentLearning();
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,209 @@
|
|||
import 'package:audioplayers/audioplayers.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class AudioPlayerWidget extends StatefulWidget {
|
||||
final String? audioFileName;
|
||||
final String baseUrl;
|
||||
|
||||
const AudioPlayerWidget({
|
||||
super.key,
|
||||
required this.audioFileName,
|
||||
required this.baseUrl,
|
||||
});
|
||||
|
||||
@override
|
||||
State<AudioPlayerWidget> createState() => AudioPlayerWidgetState();
|
||||
}
|
||||
|
||||
class AudioPlayerWidgetState extends State<AudioPlayerWidget> {
|
||||
late AudioPlayer _audioPlayer;
|
||||
PlayerState _playerState = PlayerState.stopped;
|
||||
Duration _duration = Duration.zero;
|
||||
Duration _position = Duration.zero;
|
||||
bool _isAudioLoaded = false;
|
||||
String? _errorMessage;
|
||||
double _volume = 1.0;
|
||||
|
||||
bool get wantKeepAlive => true;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_audioPlayer = AudioPlayer();
|
||||
_setupAudioPlayer();
|
||||
}
|
||||
|
||||
void _setupAudioPlayer() {
|
||||
if (widget.audioFileName != null && widget.audioFileName!.isNotEmpty) {
|
||||
String fullAudioUrl = '${widget.baseUrl}${widget.audioFileName}';
|
||||
|
||||
_audioPlayer.setSource(UrlSource(fullAudioUrl)).then((_) {
|
||||
setState(() {
|
||||
_isAudioLoaded = true;
|
||||
});
|
||||
}).catchError((error) {
|
||||
setState(() {
|
||||
_errorMessage = "Failed to load audio";
|
||||
});
|
||||
});
|
||||
|
||||
_audioPlayer.onPlayerStateChanged.listen((state) {
|
||||
setState(() {
|
||||
_playerState = state;
|
||||
});
|
||||
});
|
||||
|
||||
_audioPlayer.onDurationChanged.listen((newDuration) {
|
||||
setState(() {
|
||||
_duration = newDuration;
|
||||
});
|
||||
});
|
||||
|
||||
_audioPlayer.onPositionChanged.listen((newPosition) {
|
||||
setState(() {
|
||||
_position = newPosition;
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_audioPlayer.stop();
|
||||
_audioPlayer.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
String _formatDuration(Duration duration) {
|
||||
String twoDigits(int n) => n.toString().padLeft(2, "0");
|
||||
String twoDigitMinutes = twoDigits(duration.inMinutes.remainder(60));
|
||||
String twoDigitSeconds = twoDigits(duration.inSeconds.remainder(60));
|
||||
return "$twoDigitMinutes:$twoDigitSeconds";
|
||||
}
|
||||
|
||||
void stopAndResetAudio() {
|
||||
_audioPlayer.stop();
|
||||
_audioPlayer.seek(Duration.zero);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (_errorMessage != null) {
|
||||
return Text(
|
||||
_errorMessage!,
|
||||
style: const TextStyle(
|
||||
color: Colors.red,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
if (!_isAudioLoaded) {
|
||||
return const CircularProgressIndicator();
|
||||
}
|
||||
|
||||
return Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
color: Colors.black.withOpacity(0.1),
|
||||
blurRadius: 8,
|
||||
offset: const Offset(0, 2),
|
||||
),
|
||||
],
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
// Play/Pause Button
|
||||
IconButton(
|
||||
icon: Icon(
|
||||
_playerState == PlayerState.playing
|
||||
? Icons.pause
|
||||
: Icons.play_arrow,
|
||||
color: Colors.blue,
|
||||
size: 32,
|
||||
),
|
||||
onPressed: () {
|
||||
if (_playerState == PlayerState.playing) {
|
||||
_audioPlayer.pause();
|
||||
} else {
|
||||
_audioPlayer.resume();
|
||||
}
|
||||
},
|
||||
),
|
||||
const SizedBox(width: 12),
|
||||
// Timeline and Slider
|
||||
Expanded(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
// Timeline
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
_formatDuration(_position),
|
||||
style: const TextStyle(
|
||||
fontSize: 12,
|
||||
),
|
||||
),
|
||||
Text(
|
||||
_formatDuration(_duration),
|
||||
style: const TextStyle(
|
||||
fontSize: 12,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
// Slider
|
||||
SliderTheme(
|
||||
data: const SliderThemeData(
|
||||
trackHeight: 4,
|
||||
thumbShape: RoundSliderThumbShape(enabledThumbRadius: 6),
|
||||
overlayShape: RoundSliderOverlayShape(overlayRadius: 14),
|
||||
),
|
||||
child: Slider(
|
||||
value: _position.inSeconds.toDouble(),
|
||||
min: 0.0,
|
||||
max: _duration.inSeconds.toDouble(),
|
||||
onChanged: (value) {
|
||||
final position = Duration(seconds: value.toInt());
|
||||
_audioPlayer.seek(position);
|
||||
},
|
||||
activeColor: Colors.blue,
|
||||
inactiveColor: Colors.grey,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 12),
|
||||
// Mute Button
|
||||
IconButton(
|
||||
icon: Icon(
|
||||
Icons.volume_up,
|
||||
color: _volume == 0.0 ? Colors.grey : Colors.blue,
|
||||
size: 32,
|
||||
),
|
||||
onPressed: () {
|
||||
if (_volume == 0.0) {
|
||||
_audioPlayer.setVolume(1.0);
|
||||
setState(() {
|
||||
_volume = 1.0;
|
||||
});
|
||||
} else {
|
||||
_audioPlayer.setVolume(0.0);
|
||||
setState(() {
|
||||
_volume = 0.0;
|
||||
});
|
||||
}
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class ImageWidget extends StatelessWidget {
|
||||
final String imageFileName;
|
||||
final String baseUrl;
|
||||
|
||||
const ImageWidget({
|
||||
super.key,
|
||||
required this.imageFileName,
|
||||
required this.baseUrl,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
String fullImageUrl = '$baseUrl$imageFileName';
|
||||
|
||||
return Container(
|
||||
width: double.infinity,
|
||||
height: 200,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
color: Colors.black.withOpacity(0.1),
|
||||
blurRadius: 10,
|
||||
offset: Offset(0, 5),
|
||||
),
|
||||
],
|
||||
),
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
child: CachedNetworkImage(
|
||||
imageUrl: fullImageUrl,
|
||||
fit: BoxFit.cover,
|
||||
placeholder: (context, url) =>
|
||||
const Center(child: CircularProgressIndicator()),
|
||||
errorWidget: (context, url, error) => Container(
|
||||
color: Colors.grey[300],
|
||||
child: const Icon(
|
||||
Icons.error_outline,
|
||||
color: Colors.red,
|
||||
size: 50,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:video_player/video_player.dart';
|
||||
import 'package:flick_video_player/flick_video_player.dart';
|
||||
import 'package:youtube_player_flutter/youtube_player_flutter.dart';
|
||||
|
||||
class VideoPlayerWidget extends StatefulWidget {
|
||||
final String videoUrl;
|
||||
|
||||
const VideoPlayerWidget({
|
||||
super.key,
|
||||
required this.videoUrl,
|
||||
});
|
||||
|
||||
@override
|
||||
VideoPlayerWidgetState createState() => VideoPlayerWidgetState();
|
||||
}
|
||||
|
||||
class VideoPlayerWidgetState extends State<VideoPlayerWidget> {
|
||||
late Widget _videoWidget;
|
||||
VideoPlayerController? _videoController;
|
||||
YoutubePlayerController? _youtubeController;
|
||||
FlickManager? _flickManager;
|
||||
|
||||
bool get wantKeepAlive => true;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_initializeVideoPlayerWidget();
|
||||
}
|
||||
|
||||
void _initializeVideoPlayerWidget() {
|
||||
if (YoutubePlayer.convertUrlToId(widget.videoUrl) != null) {
|
||||
_youtubeController = YoutubePlayerController(
|
||||
initialVideoId: YoutubePlayer.convertUrlToId(widget.videoUrl)!,
|
||||
flags: const YoutubePlayerFlags(
|
||||
autoPlay: false,
|
||||
mute: false,
|
||||
),
|
||||
);
|
||||
|
||||
_videoWidget = YoutubePlayer(
|
||||
controller: _youtubeController!,
|
||||
showVideoProgressIndicator: true,
|
||||
onReady: () {
|
||||
_youtubeController!.addListener(_youtubeListener);
|
||||
},
|
||||
);
|
||||
} else {
|
||||
_videoController =
|
||||
VideoPlayerController.networkUrl(Uri.parse(widget.videoUrl));
|
||||
_flickManager = FlickManager(
|
||||
videoPlayerController: _videoController!,
|
||||
autoPlay: false,
|
||||
);
|
||||
_videoWidget = FlickVideoPlayer(
|
||||
flickManager: _flickManager!,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void _youtubeListener() {
|
||||
if (_youtubeController!.value.playerState == PlayerState.ended) {
|
||||
_youtubeController!.seekTo(Duration.zero);
|
||||
_youtubeController!.pause();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_videoController?.dispose();
|
||||
_youtubeController?.dispose();
|
||||
_flickManager?.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ClipRRect(
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
child: AspectRatio(
|
||||
aspectRatio: 16 / 9,
|
||||
child: _videoWidget,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void stopAndResetVideo() {
|
||||
if (_youtubeController != null) {
|
||||
_youtubeController!.seekTo(Duration.zero);
|
||||
_youtubeController!.pause();
|
||||
} else if (_videoController != null) {
|
||||
_videoController!.seekTo(Duration.zero);
|
||||
_videoController!.pause();
|
||||
}
|
||||
}
|
||||
}
|
||||
25
lib/features/learning/modules/model/section_model.dart
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
class Section {
|
||||
final String id;
|
||||
final String name;
|
||||
final String description;
|
||||
final String thumbnail;
|
||||
final DateTime timeSection;
|
||||
|
||||
Section({
|
||||
required this.id,
|
||||
required this.name,
|
||||
required this.description,
|
||||
required this.thumbnail,
|
||||
required this.timeSection,
|
||||
});
|
||||
|
||||
factory Section.fromJson(Map<String, dynamic> json) {
|
||||
return Section(
|
||||
id: json['ID_SECTION'],
|
||||
name: json['NAME_SECTION'],
|
||||
description: json['DESCRIPTION_SECTION'],
|
||||
thumbnail: json['THUMBNAIL'],
|
||||
timeSection: DateTime.parse(json['TIME_SECTION']),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 124 KiB |
|
After Width: | Height: | Size: 60 KiB |