Programming Question

Internazionale
mmobiliare, llc
Software Requirements
Specification
for
Java Clock
Version 1.0 approved
Prepared by Michael Corleone
Internazionale Immobiliare, LLC.
December 20, 2022
I
nternazionale
mmobiliare, llc
Table of Contents
Table of Contents …………………………………………………………………………………………………………..
2
Revision History……………………………………………………………………………………………………………
3
1. Introduction………………………………………………………………………………………………………………
4
1.1 Purpose ……………………………………………………………………………………………………………………….
4
1.2 Document Conventions …………………………………………………………………………………………………
4
1.3 Intended Audience and Reading Suggestions ………………………………………………………………….. 4
2. Overall Description……………………………………………………………………………………………………
5
2.1 Product Perspective ………………………………………………………………………………………………………
5
2.2 Product Features …………………………………………………………………………………………………………..
5
2.3 User Classes and Characteristics…………………………………………………………………………………….
5
2.4 Operating Environment …………………………………………………………………………………………………
5
3. System Features…………………………………………………………………………………………………………
6
3.1 Clock Features ……………………………………………………………………………………………………………..
6
3.1.1 Alarm Execution ……………………………………………………………………………………………………… 6
3.2 Alarm Features …………………………………………………………………………………………………………….
6
3.2.1 New Alarm……………………………………………………………………………………………………………… 6
3.2.2 Edit Alarm………………………………………………………………………………………………………………. 7
3.2.3 Delete Alarm…………………………………………………………………………………………………………… 7
3.2.4 Delete All ……………………………………………………………………………………………………………….. 8
3.2.5 Alarm File ………………………………………………………………………………………………………………. 8
3.2.6 Alarm Snooze………………………………………………………………………………………………………….. 10
3.3 GUI Features & Customizations …………………………………………………………………………………….
10
3.3.1 12/24 Hour Time Display Format ……………………………………………………………………………. 10
3.3.2 Time Display Font Customization …………………………………………………………………………… 10
3.3.3 Time Display Font Color Customization ………………………………………………………………….. 11
3.3.4 Time Display Background Color Customization………………………………………………………. 11
3.3.5 Clock Face Color Customization ……………………………………………………………………………… 11
3.3.6 Alarm Button Color Customization ………………………………………………………………………… 12
3.3.7 System Tray Minimization………………………………………………………………………………………… 12
4. Interface Requirements ……………………………………………………………………………………………
13
4.1 User Interfaces……………………………………………………………………………………………………………
13
4.1.1 Main Java Clock Application Window……………………………………………………………………… 13
4.1.2 Alarms Window…………………………………………………………………………………………………….. 13
4.1.3 New Alarm Window………………………………………………………………………………………………. 14
4.1.4 Edit Alarm Window……………………………………………………………………………………………….. 14
4.1.5 Delete Alarm Confirmation Window:……………………………………………………………………….. 15
4.1.6 Delete All Confirmation Window…………………………………………………………………………….. 15
4.1.7 Alarm Execution Display Window…………………………………………………………………………… 15
4.1.8 Font Selection Window…………………………………………………………………………………………… 16
4.1.9 Time Display Font Color Selection Window & Tabs (Swatches, HSB, RGB) ……………. 16
4.1.10 Time Display Background Color Selection Window & Tabs (Swatches, HSB, RGB)… 17
4.1.11 Clock Face Color Selection Window & Tabs (Swatches, HSB, RGB) ………………………. 17
Software Requirements Specification for “Java Clock” ™
2
I
nternazionale
mmobiliare, llc
4.1.12 Alarm Button Color Selection Window & Tabs (Swatches, HSB, RGB) ………………..
4.1.13 System Tray Icon ……………………………………………………………………………………………………
5. Other Nonfunctional Requirements………………………………………………………………………….
5.1 Usability Requirements ……………………………………………………………………………………………….
5.2 Reliability Requirements……………………………………………………………………………………………..
5.3 Performance Requirements ………………………………………………………………………………………….
5.4 Supportability Requirements………………………………………………………………………………………..
6. Other Requirements ………………………………………………………………………………………………..
6.1 Interface Requirements………………………………………………………………………………………………..
6.2 Implementation Requirements………………………………………………………………………………………
6.3 Operational Requirements……………………………………………………………………………………………
6.4 Packaging Requirements ……………………………………………………………………………………………..
6.5 Legal Requirements…………………………………………………………………………………………………….
18
19
19
19
19
20
20
20
20
20
21
21
21
Revision History
Name
Bruno Tattaglia
Peter Clemenza
Kay Adams
Peter Clemenza
Luca Brasi
Luca Brasi
Date
9/14/22
10/19/22
10/20/22
Reason For Changes
Created initial draft
Added GUI Design Sketches
Added details to the individual functional
requirements
11/22/22 Added functional requirements to GUI sketches.
11/25/22 Added details on non-functional requirements
11/27/22 Added additional non-functional requirement
section.
Software Requirements Specification for “Java Clock” ™
Version
1.0
1.0
1.0
1.0
1.0
1.0
3
I
nternazionale
mmobiliare, llc
1. Introduction
1.1 Purpose
The proposed system, “Java Clock”, will be a fully functional desktop alarm clock application,
featuring user-customizable audio alarms, recurring audio alarms, customizable fonts, colors, digit
sizing, background, and foreground colors, and an alarm “snooze” feature.
The “Java Clock” application will allow users (via Graphical User Interface) to define usercustomizable alarms. Alarms can be customized by defining a name, the alarm date and time, an
external audio file as the alarm sound (a default sound is provided), the number of times an alarm
sound will play, and alarm recurrence (hourly, daily, monthly, etc.).
The clock display will be user-customizable, including support of customizable fonts, including a
choice of colors and fonts, as well as customizable background, and foreground colors.
User-defined alarms are stored in an XML file that can be used for backup purposes, offline editing, or
transferring alarms to other computers running the Java Clock application.
1.2 Document Conventions
The following conventions are used in this document:

Mouse Clicks
o Left-Click – Click on a GUI element the left mouse button or click the mouse button on a
single-button mouse on a Mac.
o
Right-Click – Click on a GUI element the right mouse button or hold down the Ctrl key
and then click the mouse button on a single-button mouse on a Mac.
o
Shift-Click – Click on a GUI element the left mouse button while holding down the
“Shift” key or click the mouse button while holding down the “Shift” key on a singlebutton mouse on a Mac.
o
Ctrl-Click – Click on a GUI element the left mouse button while holding down the “Ctrl”
key, or click the mouse button while holding down the “Ctrl” key on a single-button
mouse on a Mac.
o
Alt-Click – Click on a GUI element the left mouse button while holding down the “Alt”
key, or click the mouse button while holding down the “Alt” key on a single-button
mouse on a Mac.
1.3 Intended Audience and Reading Suggestions
The intended audience for this SRS includes developers, project managers, marketing staff, users,
testers, documentation writers, and any incidental stakeholders.
Software Requirements Specification for “Java Clock” ™
4
I
nternazionale
mmobiliare, llc
2. Overall Description
2.1 Product Perspective
The “Java Clock” application is a new application, not an add-on or subsequent phase to any other
software application. It is planned to be self-contained – it will not connect to any external systems or
applications.
2.2 Product Features
The features of the “Java Clock” application are as follows (detailed in full in Section 3, “System
Features”):

Clock Functionality



Alarm Execution
Alarm Maintenance

Add Alarm

Edit Alarm

Delete Alarm

Delete All

Alarm File

Snooze
GUI Features and Customizations

12/24 Hour Time Display Format

Time Display Font Customization

Time Display Font Color Customization

Time Display Background Color Customization

Clock Face Color Customization

Alarm Button Color Customization

System Tray Minimization
2.3 User Classes and Characteristics
Java Clock is planned as a personal application, there is only one general “user” class – the end user.
The end-user will have complete access to all Java Clock application functions. No “system
administrator” user class is required.
2.4 Operating Environment
The “Java Clock” application will be a java-based application, capable of running on any Java
compatible platform.
Software Requirements Specification for “Java Clock” ™
5
I
nternazionale
mmobiliare, llc
3. System Features
3.1 Clock Features
3.1.1 Alarm Execution
3.1.1.1. Description and Priority
The Java Clock’s fundamental feature is that of a desktop alarm clock. As such, usercreated alarms will be “executed” when their alarm time arrives. Refer to Section 4,
“Interface Requirements”, sub-section 4.1.7 for GUI sketches of this feature. Priority:
High.
3.1.1.2. Functional Requirements
When an alarm’s execution time arrives, the specified alarm sound file will be played.
The sound file can be repeated multiple times, as the Alarm Sound Repeat value
specifies. If no alarm sound file has been specified, Java Clock will play a default alarm
sound.
3.2 Alarm Features
3.2.1 New Alarm
3.2.1.1 Description and Priority
The “Add Alarm” feature allows a user to define a new “Alarm” and add it to the
current list of active alarms. Refer to Section 4, “Interface Requirements”, sub-section
4.1.2 & 4.1.3 for GUI sketches of this feature. Priority: High.
3.2.1.2 Functional Requirements
The following are the Java Clock’s Alarm-Data requirements. Required alarm data is
shown in bold font.

Alarm Name – A unique name identifying the alarm. Attempts to create a 2nd
alarm with the same name will not be accepted – an error message will be
displayed to the user. This is a required data field and cannot be left empty.
There is no maximum size limit on alarm names. Any characters, including
spaces, are allowed in the Alarm name as long as the name remains unique.

Alarm Time – Specifies the desired alarm time in hours and minutes, and as AM
or PM. If the specified alarm time has already passed, the new alarm will not be
accepted – an error message will be displayed to the user. This is a required data
field.
Software Requirements Specification for “Java Clock” ™
6
I
nternazionale
mmobiliare, llc

Alarm Date – Specifies the desired alarm date in MM/DD/YYYY format. If the
specified alarm date has already passed, the new alarm will not be accepted – an
error message will be displayed to the user. This is a required data field.

Alarm Sound (File) – This specifies the location of an audio file (currently only
“.wav” file formats are allowed). The selected audio file will be played (at the
current system volume) when the alarm executes. If no alarm sound file is
specified, Java Clock will play a default alarm sound.

Alarm Sound Repeat – This specifies the number of times Java Clock will play
the selected alarm sound file in a loop. The default is 1.

Comments – Free-formed text/info associated with this alarm. These comments,
in addition to the other alarm data, are displayed when the alarm executes.

Recurrence – This specifies whether the alarm should be a “recurring” alarm.
Recurring alarms are automatically re-scheduled based upon a specified interval.
Intervals supported are: Once (the default), Hourly, Daily (All), Daily (Mon-Fri),
Weekends, Monthly, and Yearly. Alarms with a recurrence other than “Once”
will be automatically re-submitted when the alarm executes.
3.2.2 Edit Alarm
3.2.2.1 Description and Priority
The “Edit Alarm” feature allows a user to edit the data of a previously created alarm.
Refer to Section 4, “Interface Requirements”, sub-section 4.1.2 & 4.1.4 for GUI
sketches of this feature. Priority: Medium.
3.2.2.2 Functional Requirements
The “Edit Alarm” feature allows the user select one (and only one) existing alarm
and edit the related alarm data. A user can edit all alarm data except the Alarm
Name field (the Alarm Name field will be grayed out in the edit-alarm window). The
same data requirements that apply to adding an alarm also apply to editing an
existing alarm. If no alarm is selected, invoking this function will have no effect.
3.2.3 Delete Alarm
3.2.3.1 Description and Priority
The “Delete Alarm” feature allows a user to permanently delete a previously created
alarm. Refer to Section 4, “Interface Requirements”, sub-section 4.1.2 & 4.1.5 for GUI
sketches of this feature. Priority: High.
Software Requirements Specification for “Java Clock” ™
7
I
nternazionale
mmobiliare, llc
3.2.3.2 Functional Requirements
The “Delete Alarm” feature allows the user select one (and only one) existing alarm and
permanently delete it from the Java Clock application. The user must approve the delete
via confirmation pop-up before the alarm will be deleted. If no alarm is selected,
invoking this function will have no effect.
3.2.4 Delete All
3.2.4.1 Description and Priority
The “Delete All” feature allows a user to permanently delete all previously created
alarms. Refer to Section 4, “Interface Requirements”, sub-section 4.1.2 & 4.1.6 for GUI
sketches of this feature. Priority: Low.
3.2.4.2 Functional Requirements
The “Delete All” feature allows the user to permanently delete all alarms from the Java
Clock application. The user must approve the delete via confirmation pop-up before the
alarms will be deleted. Alarm selection is not needed when deleting all alarms. If no
alarms are present, invoking this function will have no effect.
3.2.5 Alarm File
3.2.5.1 Description and Priority
All Java Clock alarms and their related data are stored in an external XML data file
(called “JavaClockAlarms.xml”). This XML file is loaded when the Java Clock
application is started, and is updated whenever an alarm is added, edited, deleted and
when an alarm executes. Priority: Medium.
3.2.5.2 Functional Requirements
Java Clock alarms are stored in an external XML data file called “JavaClockAlarms.xml”.
This file is loaded when the Java Clock application is started, and is updated whenever
an alarm is added, edited, deleted and when an alarm executes.
A backup copy of this alarm file may be saved in a different location and can be restored
by copying it back to the original location. If no “JavaClockAlarms.xml” file is found at
all, Java Clock will create a new one.
This file may be edited outside the Java Clock application if desired. Alarms can be
added, removed or edited in this fashion.
Software Requirements Specification for “Java Clock” ™
8
I
nternazionale
mmobiliare, llc
Note that errors introduced into the “JavaClockAlarms.xml” via external editing in this
fashion can result in mis-formatted alarms being skipped.
Note also that missing alarm data elements in the XML alarm file introduced by external
editing will automatically be set to default values as follows:

Alarm Name – Defaults to:
“Alarm” + number/position in alarm file + [current time/date].
For example: “Alarm 2 [Tue Mar 24 16:24:31 CDT 2017]”

Alarm Time – Defaults to current time plus one minute

Alarm Date – Defaults to current date

Alarm Sound (File) – This field is not required. JavaClock will play a default
alarm sound.

Alarm Sound Repeat – This field is not required. The default is 1.

Comments – This field is not required. No comments will be displayed.

Recurrence – This field is not required. The default is “Once”.
Sample “JavaClockAlarms.xml” file:
Alarm>
Alarm 2
DAILY_MF
3/25/2009 19:00
E:\NewProj\sounds\Explosion.wav
3
Check email!
Alarm 3
ONCE
3/25/2009 20:30
E:\clock2\Alarm.wav
1
Go to fundraiser planning meeting
Software Requirements Specification for “Java Clock” ™
9
I
nternazionale
mmobiliare, llc
3.2.6 Alarm Snooze
3.2.6.1 Description and Priority
The Alarm Snooze feature allows the user to re-submit an alarm a short time in future
once the alarm executes (similar to the conventional “snooze” feature of an alarm clock).
Refer to Section 4, “Interface Requirements”, sub-section 4.1.7 for GUI sketches of this
feature. Priority: Low.
3.2.6.2 Functional Requirements
The user can utilize the snooze feature to re-submit an executed alarm a short period in
the future, using a set of pre-defined “snooze” times: 1, 2, 5, 10, 15, 30 or 60 minutes. The
snooze time duration is selectable by the user via a pull-down combo-box.
When the specified snooze time delay has passed, the alarm will again execute. There is
no limit on how many times an alarm may be “snoozed”.
3.3 GUI Features & Customizations
3.3.1 12/24 Hour Time Display Format
3.3.1.1 Description and Priority
This feature allows the user to toggle the time display between a 12-hour time display
(i.e., 3:30 pm) and a 24-hour time display (i.e., 15:30). Refer to Section 4, “Interface
Requirements”, subsection 4.1.1 for GUI sketches of this feature. Priority: Low.
3.3.1.2 Functional Requirements
This feature is invoked by left-clicking anywhere on the time display text. Left-clicking
when the clock is showing the 12 hour display changes to the 24 hour display. Leftclicking when the clock is showing the 24 hour display changes to the 12 hour display.
3.3.2 Time Display Font Customization
3.3.2.1 Description and Priority
This feature allows the user to change both the time display font, and the time display
font size. Refer to Section 4, “Interface Requirements”, sub-sections 4.1.1 and 4.1.8 for
GUI sketches of this feature. Priority: Low.
3.3.2.2 Functional Requirements
This feature is invoked by Ctrl-clicking anywhere on the time display text. A fontchooser window will be displayed listing all available fonts and the available font sizes
that the user may select. Fonts can be selected as “bold” or “italics” from this window as
well. All font selections can be previewed from this window before applying the font
change.
Software Requirements Specification for “Java Clock” ™
10
I
nternazionale
mmobiliare, llc
3.3.3 Time Display Font Color Customization
3.3.3.1 Description and Priority
This feature allows the user to change the color of the time display text. Refer to Section
4, “Interface Requirements”, sub-sections 4.1.1 and 4.1.9 for GUI sketches of this feature.
Priority: Low.
3.3.3.2 Functional Requirements
This feature is invoked by Shift-clicking anywhere on the time display text. A color
selection window will be displayed that will allow the user to specify their desired time
display text color. The color can be chosen by either selecting a color swatch, by
specifying HSB color values, or by specifying RGB values. All color selections can be
previewed from this window before applying the color change.
3.3.4 Time Display Background Color Customization
3.3.4.1 Description and Priority
This feature allows the user to change the color behind the time display text. Refer to
Section 4, “Interface Requirements”, sub-sections 4.1.1 and 4.1.10 for GUI sketches of this
feature. Priority: Low.
3.3.4.2 Functional Requirements
This feature is invoked by Alt-clicking anywhere on the time display text. A color
selection window will be displayed that will allow the user to specify the desired time
display background color. The color can be chosen by either selecting a color swatch, by
specifying HSB color values, or by specifying RGB values. All color selections can be
previewed from this window before applying the color change.
3.3.5 Clock Face Color Customization
3.3.5.1 Description and Priority
This feature allows the user to change the color of the Java Clock GUI window. Refer to
Section 4, “Interface Requirements”, sub-sections 4.1.1 and 4.1.11 for GUI sketches of this
feature. Priority: Low.
3.3.5.2 Functional Requirements
This feature is invoked by Ctrl-clicking, Shift-clicking, or Alt-clicking anywhere outside
of the time display section or the Alarm Button section of the Java Clock GUI window. A
color selection window will be displayed that will allow the user to specify their desired
color. The color can be chosen by either selecting a color swatch, by specifying HSB color
values, or by specifying RGB values. All color selections can be previewed from this
window before applying the color change.
Software Requirements Specification for “Java Clock” ™
11
I
nternazionale
mmobiliare, llc
3.3.6 Alarm Button Color Customization
3.3.6.1 Description and Priority
This feature allows the user to change the color of the Java Clock Alarm button. Refer to
Section 4, “Interface Requirements”, sub-sections 4.1.1 and 4.1.12 for GUI sketches of this
feature. Priority: Low.
3.3.6.2 Functional Requirements
This feature is invoked by Right-clicking anywhere on the Java Clock GUI’s alarm
button. A color selection window will be displayed that will allow the user to specify
their desired color. The color can be chosen by either selecting a color swatch, by
specifying HSB color values, or by specifying RGB values. All color selections can be
previewed from this window before applying the color change.
3.3.7 System Tray Minimization
3.3.7.1 Description and Priority
When minimized, the Java Clock GUI will minimize to the System Tray (not to the
Taskbar). Refer to Section 4, “Interface Requirements”, sub-sections 4.1.13 for GUI
sketches of this feature. Priority: Medium.
3.3.7.2 Functional Requirements
Minimizing the Java Clock GUI will minimize the GUI to the System Tray. Note this is
not minimized to the usual minimization to the Taskbar. Double clicking on the
minimized System Tray icon will restore the GUI. Right-clicking the minimized System
Tray icon will display a menu of options that includes “Open” (restore the GUI), “Close”
(minimize to the System Tray), and “Exit”(stop the Java Clock application).
Software Requirements Specification for “Java Clock” ™
12
I
nternazionale
mmobiliare, llc
4. Interface Requirements
4.1 User Interfaces
The following are Graphical User Interface prototype diagrams of the Java Clock applications
GUI.
Nonobvious GUI based functionality is detailed with each GUI window diagram.
4.1.1 Main Java Clock Application Window
4.1.2 Alarms Window
Table columns can be drag-n-dropped (to the left or to the right) to create a view with an alternate column order:
Alarm Time, Recurrence, Alarm, etc. – or – Recurrence, Alarm Sound, Alarm Time, etc.
Software Requirements Specification for “Java Clock” ™
13
I
nternazionale
mmobiliare, llc
4.1.3 New Alarm Window
4.1.4 Edit Alarm Window
Software Requirements Specification for “Java Clock” ™
14
I
nternazionale
mmobiliare, llc
4.1.5 Delete Alarm Confirmation Window
4.1.6 Delete All Confirmation Window
4.1.7 Alarm Execution Display Window
Software Requirements Specification for “Java Clock” ™
15
I
nternazionale
mmobiliare, llc
4.1.8 Font Selection Window
4.1.9 Time Display Font Color Selection Window & Tabs (Swatches, HSB, RGB)
Software Requirements Specification for “Java Clock” ™
16
I
nternazionale
mmobiliare, llc
4.1.10 Time Display Background Color Selection Window & Tabs (Swatches, HSB, RGB)
4.1.11 Clock Face Color Selection Window & Tabs (Swatches, HSB, RGB)
Software Requirements Specification for “Java Clock” ™
17
I
nternazionale
mmobiliare, llc
4.1.12 Alarm Button Color Selection Window & Tabs (Swatches, HSB, RGB)
Software Requirements Specification for “Java Clock” ™
18
I
nternazionale
mmobiliare, llc
4.1.13 System Tray Icon
5. Other Nonfunctional Requirements
5.1 Usability Requirements
o
o
o
GUI

Each GUI component on each GUI window should have “tool-tip” text (text that
is displayed when mouse arrow hovers over a GUI element for a few moments)
that tells the user what is expected in that data field and any limitations to that
data that might exist.
Errors
• Any errors generated by the application, whether due to user data entry issues or
internal application issues, should be displayed to the user as a plain, nontechnical error message. For example: “The ‘Alarm Name’ field cannot be left
empty” – not “InvalidDataException: Bad name found – alarmNameIn string size
< 0” Java “exception” text should never be used in user-visible messages or pop-up window. 5.2 Reliability Requirements o o o o The Java Clock application should never “crash” as a result of user-entered data. All errors based upon user inputs should be properly handled such that the application can continue. Internal application errors should not crash the application. An indication should be provided to the user what has happened only if user action is needed. For example, if XML file access fails somehow, the application should not unceremoniously crash. The Java Clock application can be left running indefinitely with no change in performance or function. There is no application limit on the number of Alarms that can be added to Java Clock. Software Requirements Specification for “Java Clock” ™ 19 I nternazionale mmobiliare, llc 5.3 Performance Requirements o o The Java Clock Alarm Maintenance functions have no specific minimum execution time requirements, but the maximum execution time for any of the alarm maintenance functions is one second. (This refers to actual time, not the time it takes to enter the data in the GUI). As more & more Alarms are added to Java Clock, the performance of any “Alarm Maintenance” function should never exceed 150% of the time the function takes to execute with no alarms loaded For example, if an alarm can be added to Java Clock when no alarms are yet present in 180 ms, then as more & more alarms are added – 5, 10, 50, 100, etc. – adding an alarm to Java Clock should take no more than (180 ms * 150%) = 270 ms. Or, if executing an alarm takes 4 ms, then the function should take no more than (4 ms * 150%) = 6 ms with a large number of alarms present. 5.4 Supportability Requirements • The “JavaClockAlarms.xml” XML file should be exportable. This exporting function serves 3 purposes: o External editing - This file may be edited outside the Java Clock application if desired. Alarms can be added, removed, edited, etc. o Application migration – moving the Java Clock application to a new computer will require the Java Clock alarms to be moved there as well. o Backup – The exported XML alarm file can act as a backup in case something happens to the active XML alarm file. 6. Other Requirements 6.1 Interface Requirements No interaction with any external systems. 6.2 Implementation Requirements • • • • Implementation Language: Java Alarm File Format: XML Target Platform(s): Windows, Mac OS, Linux (any java compatible platform) Coding standards - Code Conventions for the Java Programming Language (http://java.sun.com/docs/codeconv/) Software Requirements Specification for “Java Clock” ™ 20 I nternazionale mmobiliare, llc 6.3 Operational Requirements No operational support needed. 6.4 Packaging Requirements • • The Java Clock application will be distributed via compressed “ZIP” file containing a folder that will contain all files needed to run the application. Java (at least the JRE) must be installed on the end-user’s computer. 6.5 Legal Requirements No known legal requirements. Software Requirements Specification for “Java Clock” ™ 21

Save Time On Research and Writing
Hire a Pro to Write You a 100% Plagiarism-Free Paper.
Get My Paper
Still stressed from student homework?
Get quality assistance from academic writers!

Order your essay today and save 25% with the discount code LAVENDER