You are on page 1of 22

CHAPTER-4

Design & Development Tools

23
DESIGN & DEVELOPMENT TOOLS

In this project we mainly used software to develop the entire idea. However, we have
used few hardware for simulation. There are also few python dependencies used in this
project.

Table 4.1: List of software and hardware used

24
Name version Category
Python 3.7
Java 11
TypeScript 4.1
HTML 5
XML 1.1
CSS 3
ECMAScript Software
JavaScript
5.1
PyCharm 2020.2
Spring Tool Suits 4
Visual Studio Code 1.52
Android Studio 201.7
MySql 3
opencv-python 3.4.6.27
numpy 1.19.1
cmake 3.18.2
dlib 19.18.0 Dependency
face-recognition 1.3.0
twilio 6.45.3
tkinter 8.6
Spring Boot 2.3.5
Angular 10 Framework
Bootstrap 4
Android Native -
Retrofit 2 Library
Glide 4
Android Phone API 28
Webcam -
Hardware
Computer -
Web Server localhost

4.1 SOFTWARE

4.1.1 Python [18]


Python is an interpreted, high-level and general-purpose programming language. Created
by Guido van Rossum and first released in 1991, Python's design philosophy emphasizes
code readability with its notable use of significant whitespace. Its language constructs
and object-oriented approach aim to help programmers write clear, logical code for small
and large-scale projects. Python is dynamically typed and garbage-collected. It supports
multiple programming paradigms, including structured (particularly, procedural), object-
Page | 25
oriented, and functional programming. Python is often described as a "batteries included"
language due to its comprehensive standard library. Python was created in the late 1980s
as a successor to the ABC language. Python 2.0, released in 2000, introduced features
like list comprehensions and a garbage collection system with reference counting.

Python 3.0, released in 2008, was a major revision of the language that is not completely
backward-compatible, and much Python 2 code does not run unmodified on Python 3.
The Python 2 language was officially discontinued in 2020 (first planned for 2015), and
Python 2.7.18 is the last Python 2.7 release and therefore the last Python 2 release. No
more security patches or other improvements will be released for it. With Python 2's end-
of-life, only Python 3.6.x and later are supported.

Figure 4.1: Logo of Python

Python interpreters are available for many operating systems. A global community of
programmers develops and maintains CPython, a free and open-source reference
implementation. A non-profit organization, the Python Software Foundation, manages
and directs resources for Python and CPython development.

4.1.2 Java [19]


Java is a class-based, object-oriented programming language that is designed to have as
few implementation dependencies as possible. It is a general-purpose programming
language intended to let application developers write once, run anywhere (WORA),[17]
meaning that compiled Java code can run on all platforms that support Java without the
need for recompilation.[18] Java applications are typically compiled to bytecode that can
run on any Java virtual machine (JVM) regardless of the underlying computer
architecture. The syntax of Java is similar to C and C++, but has fewer low-level facilities
than either of them. The Java runtime provides dynamic capabilities (such as reflection
and runtime code modification) that are typically not available in traditional compiled
languages. As of 2019, Java was one of the most popular programming languages in use
according to GitHub,[19][20] particularly for client-server web applications, with a
reported 9 million developers.[21]

Page | 26
Java was originally developed by James Gosling at Sun Microsystems (which has since
been acquired by Oracle) and released in 1995 as a core component of Sun Microsystems'
Java platform. The original and reference implementation Java compilers, virtual
machines, and class libraries were originally released by Sun under proprietary licenses.
As of May 2007, in compliance with the specifications of the Java Community Process,
Sun had relicensed most of its Java technologies under the GNU General Public License.
Oracle offers its own HotSpot Java Virtual Machine, however the official reference
implementation is the OpenJDK JVM which is free open source software and used by
most developers and is the default JVM for almost all Linux distributions.

Figure 4.2: Logo of Java

4.1.2 TypeScript [19]


TypeScript is a superset developed and maintained by Microsoft. It is a strict syntactical
superset of JavaScript and adds optional static typing to the language. TypeScript is
designed for the development of large applications and transcompiles to JavaScript. As
TypeScript is a superset of JavaScript, existing JavaScript programs are also valid
TypeScript programs.

TypeScript may be used to develop JavaScript applications for both client-side and
server-side execution (as with Node.js or Deno). There are multiple options available for
transcompilation. Either the default TypeScript Checker can be used, or the Babel
compiler can be invoked to convert TypeScript to JavaScript.

TypeScript supports definition files that can contain type information of existing
JavaScript libraries, much like C++ header files can describe the structure of existing
object files. This enables other programs to use the values defined in the files as if they
were statically typed TypeScript entities. There are third-party header files for popular
libraries such as jQuery, MongoDB, and D3.js. TypeScript headers for the Node.js basic
modules are also available, allowing development of Node.js programs within
TypeScript.[6]

Page | 27
Figure 4.2: Logo of TypeScript

4.1.2 HTML [19]


Hypertext Markup Language (HTML) is the standard markup language for documents
designed to be displayed in a web browser. It can be assisted by technologies such as
Cascading Style Sheets (CSS) and scripting languages such as JavaScript.

Web browsers receive HTML documents from a web server or from local storage and
render the documents into multimedia web pages. HTML describes the structure of a web
page semantically and originally included cues for the appearance of the document.

HTML elements are the building blocks of HTML pages. With HTML constructs, images
and other objects such as interactive forms may be embedded into the rendered page.
HTML provides a means to create structured documents by denoting structural semantics
for text such as headings, paragraphs, lists, links, quotes and other items. HTML elements
are delineated by tags, written using angle brackets. Tags such as <img /> and <input />
directly introduce content into the page. Other tags such as <p> surround and provide
information about document text and may include other tags as sub-elements. Browsers
do not display the HTML tags, but use them to interpret the content of the page.

HTML can embed programs written in a scripting language such as JavaScript, which
affects the behavior and content of web pages. Inclusion of CSS defines the look and
layout of content. The World Wide Web Consortium (W3C), former maintainer of the
HTML and current maintainer of the CSS standards, has encouraged the use of CSS over
explicit presentational HTML since 1997.[2]

Page | 28
Figure 4.2: Logo of HTML

4.1.2 CSS [19]


Cascading Style Sheets (CSS) is a style sheet language used for describing the
presentation of a document written in a markup language such as HTML.[1] CSS is a
cornerstone technology of the World Wide Web, alongside HTML and JavaScript.[2]

CSS is designed to enable the separation of presentation and content, including layout,
colors, and fonts.[3] This separation can improve content accessibility, provide more
flexibility and control in the specification of presentation characteristics, enable multiple
web pages to share formatting by specifying the relevant CSS in a separate .css file which
reduces complexity and repetition in the structural content as well as enabling the .css file
to be cached to improve the page load speed between the pages that share the file and its
formatting.

Separation of formatting and content also makes it feasible to present the same markup
page in different styles for different rendering methods, such as on-screen, in print, by
voice (via speech-based browser or screen reader), and on Braille-based tactile devices.
CSS also has rules for alternate formatting if the content is accessed on a mobile device.
[4]

The name cascading comes from the specified priority scheme to determine which style
rule applies if more than one rule matches a particular element. This cascading priority
scheme is predictable.

Page | 29
Figure 4.2: Logo of CSS

4.1.2 JavaScript [19]


JavaScript (/ˈdʒɑːvəˌskrɪpt/),[6] often abbreviated as JS, is a programming language that
conforms to the ECMAScript specification.[7] JavaScript is high-level, often just-in-time
compiled, and multi-paradigm. It has curly-bracket syntax, dynamic typing, prototype-
based object-orientation, and first-class functions.

Alongside HTML and CSS, JavaScript is one of the core technologies of the World Wide
Web.[8] JavaScript enables interactive web pages and is an essential part of web
applications. The vast majority of websites use it for client-side page behavior,[9] and all
major web browsers have a dedicated JavaScript engine to execute it.

As a multi-paradigm language, JavaScript supports event-driven, functional, and


imperative programming styles. It has application programming interfaces (APIs) for
working with text, dates, regular expressions, standard data structures, and the Document
Object Model (DOM). However, ECMAScript itself does not include any input/output
(I/O), such as networking, storage, or graphics facilities, as the host environment (usually
a web browser) provides those APIs.

Figure 4.2: Logo of JavaScript

4.1.2 PyCharm [19]


Page | 30
PyCharm is an integrated development environment (IDE) used in computer
programming, specifically for the Python language. It is developed by the Czech
company JetBrains. It provides code analysis, a graphical debugger, an integrated unit
tester, integration with version control systems (VCSes), and supports web development
with Django as well as data science with Anaconda.

PyCharm is cross-platform, with Windows, macOS and Linux versions. The Community
Edition is released under the Apache License, and there is also Professional Edition with
extra features – released under a proprietary license.

Some common features of PyCharm are:


 Coding assistance and analysis, with code completion, syntax and error
highlighting, linter integration, and quick fixes
 Project and code navigation: specialized project views, file structure views and
quick jumping between files, classes, methods and usages
 Python refactoring: includes rename, extract method, introduce variable,
introduce constant, pull up, push down and others
 Support for web frameworks: Django, web2py and Flask [professional edition
only]
 Integrated Python debugger
 Integrated unit testing, with line-by-line code coverage
 Google App Engine Python development [professional edition only]
 Version control integration: unified user interface for Mercurial, Git, Subversion,
Perforce and CVS with change lists and merge
 Support for scientific tools like matplotlib, numpy and scipy [professional edition
only]
 It competes mainly with a number of other Python-oriented IDEs, including
Eclipse's PyDev, and the more broadly focused Komodo IDE.

Page | 31
Figure 4.2: Logo of PyCharm

4.1.3 Spring Tool Suit [20]


Spring Tools 4 is the next generation of Spring tooling for your favorite coding
environment. Largely rebuilt from scratch, it provides world-class support for developing
Spring-based enterprise applications, whether you prefer Eclipse, Visual Studio Code, or
Theia IDE.

Figure 4.2: Logo of Spring Tools Suit

4.1.3 Visual Studio Code [20]


Visual Studio Code is a free source-code editor made by Microsoft for Windows, Linux
and macOS.[8] Features include support for debugging, syntax highlighting, intelligent
code completion, snippets, code refactoring, and embedded Git. Users can change the
theme, keyboard shortcuts, preferences, and install extensions that add additional
functionality.

Microsoft has released Visual Studio Code's source code on the VSCode repository of
GitHub, under the permissive MIT License,[5][9] while the compiled releases are
freeware.[7]

In the Stack Overflow 2019 Developer Survey, Visual Studio Code was ranked the most
popular developer environment tool, with 50.7% of 87,317 respondents reporting that
they use it.[10]

Figure 4.2: Logo of Visual Studio Code

Page | 32
4.1.3 Android Studio [20]
Android Studio is the official[7] integrated development environment (IDE) for Google's
Android operating system, built on JetBrains' IntelliJ IDEA software and designed
specifically for Android development.[8] It is available for download on Windows,
macOS and Linux based operating systems or as a subscription-based service in 2020.[9]
[10] It is a replacement for the Eclipse Android Development Tools (E-ADT) as the
primary IDE for native Android application development.

Figure 4.2: Logo of Android Studio

Android Studio was announced on May 16, 2013 at the Google I/O conference. It was in
early access preview stage starting from version 0.1 in May 2013, then entered beta stage
starting from version 0.8 which was released in June 2014.[11] The first stable build was
released in December 2014, starting from version 1.0.

4.1.3 MySql [20]


MySQL (/ˌmaɪˌɛsˌkjuːˈɛl/)[5] is an open-source relational database management system
(RDBMS).[5][6] Its name is a combination of "My", the name of co-founder Michael
Widenius's daughter,[7] and "SQL", the abbreviation for Structured Query Language. A
relational database organizes data into one or more data tables in which data types may
be related to each other; these relations help structure the data. SQL is a language
programmers use to create, modify and extract data from the relational database, as well
as control user access to the database. In addition to relational databases and SQL, an
RDBMS like MySQL works with an operating system to implement a relational database
in a computer's storage system, manages users, allows for network access and facilitates
testing database integrity and creation of backups.

MySQL is free and open-source software under the terms of the GNU General Public
License, and is also available under a variety of proprietary licenses. MySQL was owned
and sponsored by the Swedish company MySQL AB, which was bought by Sun
Microsystems (now Oracle Corporation).[8] In 2010, when Oracle acquired Sun,
Widenius forked the open-source MySQL project to create MariaDB.[9]
Page | 33
MySQL has stand-alone clients that allow users to interact directly with a MySQL
database using SQL, but more often MySQL is used with other programs to implement
applications that need relational database capability. MySQL is a component of the
LAMP web application software stack (and others), which is an acronym for Linux,
Apache, MySQL, Perl/PHP/Python. MySQL is used by many database-driven web
applications, including Drupal, Joomla, phpBB, and WordPress. MySQL is also used by
many popular websites, including Facebook,[10][11] Flickr,[12] MediaWiki,[13] Twitter,
[14] and YouTube.[15]

Figure 4.3: Logo of MySql

4.2 DEPENDENCIES

4.2.1 OpenCV [21]


OpenCV is a huge open-source library for computer vision, machine learning, and image
processing. OpenCV supports a wide variety of programming languages like Python, C+
+, Java, etc. It can process images and videos to identify objects, faces, or even the
handwriting of a human. When it is integrated with various libraries, such as Numpy
which is a highly optimized library for numerical operations, then the number of weapons
increases in your Arsenal i.e whatever operations one can do in Numpy can be combined
with OpenCV.

This OpenCV tutorial will help you learn the Image-processing from Basics to Advance,
like operations on Images, Videos using a huge set of Opencv-programs and projects.

OpenCV's application areas include:


 2D and 3D feature toolkits
 Egomotion estimation
 Facial recognition system

Page | 34
 Gesture recognition
 Human–computer interaction (HCI)
 Mobile robotics
 Motion understanding
 Object identification
 Segmentation and recognition
 Stereopsis stereo vision: depth perception from 2 cameras
 Structure from motion (SFM)
 Motion tracking
 Augmented reality
 To support some of the above areas, OpenCV includes a statistical machine
learning library that contains:
 Boosting
 Decision tree learning
 Gradient boosting trees
 Expectation-maximization algorithm
 k-nearest neighbor algorithm
 Naive Bayes classifier
 Artificial neural networks
 Random forest
 Support vector machine (SVM)
 Deep neural networks (DNN)

Figure 4.4: Logo of OpenCV


4.2.2 NumPy [22]
NumPy is a library for the Python programming language, adding support for large,
multi-dimensional arrays and matrices, along with a large collection of high-level
mathematical functions to operate on these arrays. The ancestor of NumPy, Numeric, was
originally created by Jim Hugunin with contributions from several other developers. In

Page | 35
2005, Travis Oliphant created NumPy by incorporating features of the competing
Numarray into Numeric, with extensive modifications. NumPy is open-source software.

Some common features of NumPy are:


 NumPy targets the CPython reference implementation of Python, which is a non-
optimizing bytecode interpreter. Mathematical algorithms written for this version
of Python often run much slower than compiled equivalents. NumPy addresses
the slowness problem partly by providing multidimensional arrays and functions
and operators that operate efficiently on arrays, requiring rewriting some code,
mostly inner loops, using NumPy.
 Using NumPy in Python gives functionality comparable to MATLAB since they
are both interpreted, and they both allow the user to write fast programs as long as
most operations work on arrays or matrices instead of scalars. In comparison,
MATLAB boasts a large number of additional toolboxes, notably Simulink,
whereas NumPy is intrinsically integrated with Python, a more modern and
complete programming language. Moreover, complementary Python packages are
available; SciPy is a library that adds more MATLAB-like functionality and
Matplotlib is a plotting package that provides MATLAB-like plotting
functionality. Internally, both MATLAB and NumPy rely on BLAS and
LAPACK for efficient linear algebra computations.
 Python bindings of the widely used computer vision library OpenCV utilize
NumPy arrays to store and operate on data. Since images with multiple channels
are simply represented as three-dimensional arrays, indexing, slicing or masking
with other arrays are very efficient ways to access specific pixels of an image.
The NumPy array as universal data structure in OpenCV for images, extracted
feature points, filter kernels and many more vastly simplifies the programming
workflow and debugging.

Figure 4.5: Logo of NumPy

Page | 36
Figure 4.6: Methods in NumPy
Page | 37
4.2.3 CMake [23]
CMake is a cross-platform free and open-source software tool for managing the build
process of software using a compiler-independent method. It supports directory
hierarchies and applications that depend on multiple libraries. It is used in conjunction
with native build environments such as Make, Qt Creator, Ninja, Apple's Xcode, and
Microsoft Visual Studio. It has minimal dependencies, requiring only a C++ compiler on
its own build system.

Some common features of CMake are:


 CMake can handle in-place and out-of-place builds, enabling several builds from
the same source tree, and cross-compilation. The ability to build a directory tree
outside the source tree is a key feature, ensuring that if a build directory is
removed, the source files remain unaffected.
 CMake can locate executables, files, and libraries. These locations are stored in a
cache, which can then be tailored before generating the target build files. The
cache can be edited with a graphical editor, which is included in the project.
 Complicated directory hierarchies and applications that rely on several libraries
are well supported by CMake. For instance, CMake is able to accommodate a
project that has multiple toolkits, or libraries that each have multiple directories.
In addition, CMake can work with projects that require executables to be created
before generating code to be compiled for the final application. Its open-source,
extensible design allows CMake to be adapted as necessary for specific projects.
 CMake can generate project files for several prominent IDEs, such as Microsoft
Visual Studio, Xcode, and Eclipse CDT. It can also produce build scripts for
MSBuild or NMake on Windows; Unix Make on Unix-like platforms such as
Linux, macOS, and Cygwin; and Ninja on both Windows and Unix-like
platforms.

Figure 4.7: Logo of CMake

Page | 38
4.2.4 Dlib [24]
Dlib is a general-purpose cross-platform software library written in the programming
language C++. Its design is heavily influenced by ideas from design by contract and
component-based software engineering. Thus, it is, first and foremost, a set of
independent software components. It is open-source software released under a Boost
Software License.

Since development began in 2002, Dlib has grown to include a wide variety of tools. As
of 2016, it contains software components for dealing with networking, threads, graphical
user interfaces, data structures, linear algebra, machine learning, image processing, data
mining, XML and text parsing, numerical optimization, Bayesian networks, and many
other tasks. In recent years, much of the development has been focused on creating a
broad set of statistical machine learning tools and in 2009 Dlib was published in the
Journal of Machine Learning Research. Since then it has been used in a wide range of
domains.

Figure 4.8: Logo of Dlib

4.2.5 Face-Recognition [25]


Recognize and manipulate faces from Python or from the command line with the world’s
simplest face recognition library. Built using dlib’s state-of-the-art face recognition built
with deep learning. The model has an accuracy of 99.38% on the Labeled Faces in the
Wild benchmark. This also provides a simple face_recognition command line tool that
lets you do face recognition on a folder of images from the command line!

4.2.6 Tkinter [27]


Tkinter is a Python binding to the Tk GUI toolkit. It is the standard Python interface to
the Tk GUI toolkit, and is Python's de facto standard GUI. Tkinter is included with
standard Linux, Microsoft Windows and Mac OS X installs of Python. The name Tkinter
comes from Tk interface. Tkinter was written by Fredrik Lundh. Tkinter is free software
released under a Python license.

Page | 39
Creating a GUI application using Tkinter is an easy task. All we need to do is perform the
following steps:
 Import the Tkinter module.
 Create the GUI application main window.
 Add one or more of the above-mentioned widgets to the GUI application.
 Enter the main event loop to take action against each event triggered by the user.

4.3 FRAMEWORK

4.3.1 Spring Boot [28]


Spring Boot makes it easy to create stand-alone, production-grade Spring based
Applications that you can "just run".

We take an opinionated view of the Spring platform and third-party libraries so you can
get started with minimum fuss. Most Spring Boot applications need minimal Spring
configuration.

If you’re looking for information about a specific version, or instructions about how to
upgrade from an earlier release, check out the project release notes section on our wiki.

Features
 Create stand-alone Spring applications
 Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
 Provide opinionated 'starter' dependencies to simplify your build configuration
 Automatically configure Spring and 3rd party libraries whenever possible
 Provide production-ready features such as metrics, health checks, and
externalized configuration
 Absolutely no code generation and no requirement for XML configuration

Page | 40
Figure 4.2: Logo of Spring Boot

4.3.1 Angular [28]


Angular is a platform and framework for building single-page client applications using
HTML and TypeScript. Angular is written in TypeScript. It implements core and optional
functionality as a set of TypeScript libraries that you import into your apps.

The architecture of an Angular application relies on certain fundamental concepts. The


basic building blocks of the Angular framework are Angular components that are
organized into NgModules. NgModules collect related code into functional sets; an
Angular app is defined by a set of NgModules. An app always has at least a root module
that enables bootstrapping, and typically has many more feature modules.

 Components define views, which are sets of screen elements that Angular can
choose among and modify according to your program logic and data.
 Components use services, which provide specific functionality not directly related
to views. Service providers can be injected into components as dependencies,
making your code modular, reusable, and efficient.

Modules, components and services are classes that use decorators. These decorators mark
their type and provide metadata that tells Angular how to use them.
 The metadata for a component class associates it with a template that defines a
view. A template combines ordinary HTML with Angular directives and binding
markup that allow Angular to modify the HTML before rendering it for display.
 The metadata for a service class provides the information Angular needs to make
it available to components through dependency injection (DI).

Page | 41
Figure 4.2: Logo of Angular
4.3.1 Bootstrap [28]
Bootstrap is a free and open-source CSS framework directed at responsive, mobile-first
front-end web development. It contains CSS- and (optionally) JavaScript-based design
templates for typography, forms, buttons, navigation, and other interface components.

Bootstrap is among the most starred projects on GitHub, with more than 142,000 stars,
behind freeCodeCamp (almost 312,000 stars) and marginally behind Vue.js framework.
[2]

Figure 4.2: Logo of Bootstrap


4.4 LIBRARY

4.4.1 Android Native [28]


Android software development is the process by which applications are created for
devices running the Android operating system. Google states that[3] "Android apps can
be written using Kotlin, Java, and C++ languages" using the Android software
development kit (SDK), while using other languages is also possible. All non-JVM
languages, such as Go, JavaScript, C, C++ or assembly, need the help of JVM language
code, that may be supplied by tools, likely with restricted API support. Some
Page | 42
programming languages and tools allow cross-platform app support (i.e. for both Android
and iOS). Third party tools, development environments, and language support have also
continued to evolve and expand since the initial SDK was released in 2008. The official
Android app distribution mechanism to end users is Google Play; it also allows staged
gradual app release, as well as distribution of pre-release app versions to testers.

Figure 4.2: Logo of Android Native

4.3.1 Retrofit [28]


Retrofit is a type-safe REST client for Android, Java and Kotlin developed by Square.
The library provides a powerful framework for authenticating and interacting with APIs
and sending network requests with OkHttp. See this guide to understand how OkHttp
works.

Figure 4.2: Logo of Retrofit

This library makes downloading JSON or XML data from a web API fairly
straightforward. Once the data is downloaded then it is parsed into a Plain Old Java
Object (POJO) which must be defined for each "resource" in the response.

4.3.1 Glide [28]


Glide is a fast and efficient open source media management and image loading
framework for Android that wraps media decoding, memory and disk caching, and
resource pooling into a simple and easy to use interface.

Page | 43
Figure 4.2: Logo of Glide

Glide supports fetching, decoding, and displaying video stills, images, and animated
GIFs. Glide includes a flexible API that allows developers to plug in to almost any
network stack. By default Glide uses a custom HttpUrlConnection based stack, but also
includes utility libraries plug in to Google's Volley project or Square's OkHttp library
instead.

Glide's primary focus is on making scrolling any kind of a list of images as smooth and
fast as possible, but Glide is also effective for almost any case where you need to fetch,
resize, and display a remote image.

4.5 HARDWARE

4.5.1 Android Mobile [28]


Android is a mobile operating system based on a modified version of the Linux kernel
and other open source software, designed primarily for touchscreen mobile devices such
as smartphones and tablets. Android is developed by a consortium of developers known
as the Open Handset Alliance and commercially sponsored by Google. It was unveiled in
November 2007, with the first commercial Android device launched in September 2008.

It is free and open source software; its source code is known as Android Open Source
Project (AOSP), which is primarily licensed under the Apache License. However most
Android devices ship with additional proprietary software pre-installed,[10] most notably
Google Mobile Services (GMS)[11] which includes core apps such as Google Chrome,
the digital distribution platform Google Play and associated Google Play Services
development platform. About 70 percent of Android smartphones run Google's
ecosystem;[12] competing Android ecosystems and forks include Fire OS (developed by
Amazon) or LineageOS. However the "Android" name and logo are trademarks of
Google which impose standards to restrict "uncertified" devices outside their ecosystem
to use Android branding.[13][14]

Page | 44

You might also like