Commit Graph

104 Commits

Author SHA1 Message Date
Daniel Markstedt
693ade2967
Bump Macproxy version to 21.12.2 (#550) 2021-12-20 21:04:23 +01:00
akuker
958fb95908
Adjust bus settle delay to match SCSI standard (#544)
* Move the GCC v10 compiler flags into makefile instead of easyinstall.sh

* #504 - Update the bus settle time to match the SCSI standard

Co-authored-by: RaSCSI User <user@rascsi.com>
2021-12-20 19:50:14 +01:00
Daniel Markstedt
c887edfc8c
Remove special elevated privileges for the Web Interface (#536)
* Use the pi_shutdown method to restart the rascsi service

* Use the pi_shutdown method to restart the rascsi service

* Remove modifications to sudoers no longer needed

* Introduce sleeps attempting to connect to socket; reduce overall number of retries

* Remove systemd helped methods and the functionality that depends on it

* Attempts to speed up splash code

* Remove unneccessary verbosity

* Attempt to optimize service definition
2021-12-19 17:50:03 -06:00
Daniel Markstedt
39bc485671
Add pip3 to global dependencies; remove duplicates from monitor_rascs… (#523)
* Add pip3 to global dependencies; remove duplicates from monitor_rascsi dependencies

* Cleanup
2021-12-19 17:28:22 -06:00
Daniel Markstedt
8f1cc95195
Small fixes for HFS formatted drive creation in easyinstall (#511)
* More descriptive messages for creating drive images

* Revert back to using hda file extension for created drives
2021-12-08 17:59:17 -06:00
Daniel Markstedt
824a9c5ecd
Bump to Macproxy release 21.12.1 (#509)
* Bump Macproxy version to 21.12.1

* Add functions for starting and stopping macproxy service; rename start script

* Remove superfluous step

* Fix bugs
2021-12-06 20:41:46 -06:00
Daniel Markstedt
47717ad0e0
Check for iptables, and install if missing (#506) 2021-12-04 20:07:17 +01:00
Daniel Markstedt
267625d1e8
Handle corner case scenarios in easyinstall when compilation of rascsi failed (#502)
* Backup rascsi.service AFTER compilation to avoid disabling the service when compilation fails

* Rename constant to match naming convention

* Introduce SYSTEMD_PATH global constant

* Rename constant to match naming convention

* Change method of checking for existing systemd services, to handle a corner case scenario where the service previously existed but the .service file had been removed unexpectedly
2021-12-02 19:18:45 -06:00
Daniel Markstedt
d4f30a4e34
Remove DSPDLOG_FMT_EXTERNAL from gcc 10+ compiler flags, since it caused errors on 64-bit systems, and it seems to work without it on 32-bit systems. (#501) 2021-12-01 10:16:59 +01:00
akuker
a24a07508e
Updated message in easyinstall (#486) 2021-11-26 20:49:45 -08:00
Daniel Markstedt
5346d110a9
User authentication in the Web Interface (#483)
* Add flask-login library

* Add simplepam lib to requirements

* We don't use flask-login after all

* User authentication in the web app using simplepam

* Allow only users in the sudo group to log in

* Tweak string

* This way to enforce authenticated state doesn't work here

* Open links to github in new tab

* Disallow uploads when not authenticated

* Check for the rascsi group on the system to enable webapp auth. Allow only users in the rascsi group to authenticate.

* Make the AUTH_GROUP a global constant.

* Add easyinstall option for web interface auth

* Make AUTH_GROUP a constant

* More accurate change scope
2021-11-26 22:41:10 -06:00
Daniel Markstedt
ba7647da12
Introduce easyinstall options for installing stand-alone rascsi (#472)
* Introduce advanced options for installing stand-alone rascsi and rascsi-web

* Add usage notes message after configuration

* Adds code comments

* Separate function for managing the cfg dir

* Add code comments

* Update easyinstall.sh

* Add sudoCheck function to prompt for user password with a contextual message, and error out when not in sudoers group

* Up-front messages on the changes that will be made to the system

* Web service message

* Message about manpage installs

* One more manpage notice

* Update manpage targets

* Use a more sturdy parameter expansion syntax

* Use a more sturdy parameter expansion syntax
2021-11-18 20:17:24 -06:00
Daniel Markstedt
95808aca6b
Add check for root user to easyinstall + other fixes (#466)
* Add check for root user

* Avoid dirty rascsi.service files when easyinstall fails unexpectedly

* Clean up the use of sudo
2021-11-14 13:57:38 -06:00
Daniel Markstedt
e1a4a963ed
Updates for running on Bullseye (#469)
* Conditionally use compiler flags needed for gcc 10+

* Cleanup

* Remove deprecated systemd options

* Better message
2021-11-14 19:34:24 +01:00
Daniel Markstedt
df361f70d9
Make number of cores used for compilation a command line option for easyinstall.sh (#465) 2021-11-14 10:42:34 +01:00
Daniel Markstedt
133eab068c
Use the 21.11 release tarball for Macproxy; allow you to specify port number (#450)
* Tweak UI strings

* Pull a stable macproxy release tarball

* Add option to customize port
2021-11-13 19:45:40 -06:00
Daniel Markstedt
61c4534eab
Add support for 64px OLED screen height (#448)
* Add support for 64px screen height

* Handle case when only one argument is passed

* Simplify arg parsing

* Update install script to handle screen height selection

* Cleanup

* Update README

* Add blurb on running start.sh standalone

* Format

* Global constant for LINE_SPACING

* Make FONT_SIZE a global constant; improve code comments
2021-11-13 19:40:49 -06:00
Uwe Seimet
492c7331cf
Feature parallel make, -j $(nproc) (#446)
* Use make $(nproc)

* Fixed option
2021-11-09 18:20:55 -08:00
Daniel Markstedt
8aa7ab5401
Install script for macproxy + cleanup (#430)
* Script for installing macproxy

* Fix errors

* Add friendly message after installing

* Improve labels and remove scsi id reservation
2021-11-08 20:58:30 -06:00
Daniel Markstedt
988a2ffe1a
Make rascsi, rascsi-web and easyinstall.sh portable (#426)
* Make install script portable

* Modify rascsi-web service to accommodate portability

* Remove initialChecks call

* Introduce USER global variable

* Make the web app portable

* Make netatalk installation script portable

* Cleanup

* Cleanup

* Configure default image dir in rascsi.service
2021-11-08 20:33:33 -06:00
Daniel Markstedt
bd52da7ebd
Do not save a new tarball every time you install netatalk (#414) 2021-11-02 20:22:36 -05:00
Daniel Markstedt
3e769de373 Add raspi-config to required packages 2021-10-28 12:12:13 -07:00
Daniel Markstedt
fea1c150f3 Cleanup 2021-10-28 11:17:33 -07:00
Daniel Markstedt
2044c5e0d1 Cleanup 2021-10-28 11:16:48 -07:00
Daniel Markstedt
967fbd2999 Use raspi-config to manage the boot config 2021-10-28 11:15:16 -07:00
Daniel Markstedt
192bbb6391 Add checks for running services before stopping + stop&start monitor_rascsi when installing rascsi proper 2021-10-20 22:06:00 -07:00
Daniel Markstedt
269b718ec7
Configurable OLED screen rotation (#359)
* Read rotation from the 1st command line arg

* Configure screen rotation during installation

* Better argument validation + use human readable arguments

* Cleanup
2021-10-20 21:33:06 -05:00
Daniel Markstedt
7ce84aac6c
Script for installing OLED Screen software (#348)
* Script for installing OLED Screen software

* Reboot is required

* Compile protobuf lib

* Reboot only when kernel config has changed
2021-10-19 22:16:11 -05:00
Daniel Markstedt
542f9b6905
Script for installing Netatalk (#336)
* Script for installing Netatalk

* Fix errors

* Tweak labels

* Improve script

* Fix error

* Fix error

* Fix error

* Fix errors

* Fix errors

* Add message

* Clean up old config files

* Cleanup

* Fix errors

* Cleanup

* Avoid erroring out of script

* Improve help text

* Improve help text

* Flesh out help text

* Improve help text
2021-10-17 18:31:17 -07:00
Daniel Markstedt
34f5bc99b7
Easyinstall fixups (#305)
* Fix minor errors in easyinstall.sh and start.sh

* Make easyinstall directory portable

* Make RASCSI-web directory portable in easyinstall.sh

* Remove directory check from easyinstall.sh

* Fix failed merge

* Fix copy of web files

* Fix VIRTUAL_DRIVER_PATH

* Revert to fixed checkout dir

* Simplify rascsi-web.service installation

* Fix bugs

* Better iptables-persistent check

* Revert line commented out for testing

* Fix unintentional indentation

* Add check for the existance of a remote branch

* Add echo message when detecing local branch

* Fallback name and email for git stash command

* Add quotation marks

* Add set -x for testing

* Avoid script to exit out when sudoIsReady check fails

* Tweak conditional check

* Pass argument with -S

* Options for testing

* Testing

* Testing

* Reset stdin for suspicious actions

* Reset stdin for suspicious actions

* Testing

* Testing

* Stop testing

Co-authored-by: Jonathan karras <karrots@users.noreply.github.com>
2021-10-13 20:01:13 -05:00
Jonathan Karras
5bd8807c9e
Fix script errors in easyinstall.sh (#297)
* Fix minor errors in easyinstall.sh and start.sh

* Make easyinstall directory portable

* Remove directory check from easyinstall.sh

* Revert to requiring the checkout dir to be /home/pi/RASCSI

Co-authored-by: Daniel Markstedt <markstedt@gmail.com>
2021-10-07 18:00:49 -07:00
Daniel Markstedt
7717890b5f
Feature config dir (#299)
* Define a separate config directory

* Create config dir when installing

* Fix typo

* Introduce delete_file method for deleting non-image files

* Add docstring
2021-10-05 20:58:49 -05:00
Daniel Markstedt
7e456b76bf
Back up rascsi.service before installing new one (#273)
* Back up rascsi.service before installing new one

* Error out on errors

* Extra notification to user that rascsi.service has been overwritten
2021-09-28 10:56:14 -07:00
Daniel Markstedt
04ee2cf8d6 Reserve no ids with no inpu 2021-09-24 12:49:02 -07:00
Daniel Markstedt
54219f66d4 Update easyinstall.sh script 2021-09-19 17:11:38 -07:00
Daniel Markstedt
523ad801a6 Fix typo 2021-09-19 15:42:24 -07:00
Daniel Markstedt
15febd1ee6
Disk image profile management using a sidecar config file (#242)
* Handle a case where reserved ids on the Web UI side are not actually reserved on the backend side

* Better error handling when no device is found in list_devices

* Better warning message

* Tag message as error

* Fix device_info

* Get reserved ids from the server instead of storing a client side state, which caused front and backend to get out of sync in certain cases.

* Initial implementation of sidecar configuration reading and writing

* Use bytes for drive image creation internally

* Add named drive section

* Move header to base.html

* Create the disk profile list page

* Make lists of HDDs, CDRs, and Removable drives

* Implement disk image + sidecar creation

* Implement CD-ROM device sidecar creation method

* Add more device configurations

* Add disclaimer

* Hide URL if none is provided

* Make the web ui use the new protobuf parameter maps

* Make daynaport attaching UI more flexible

* Use the protobuf interface to create image files

* Use new create image method for the sidecar flow as well

* Move file deletion logic to protobuf commands; Refactor saving/loading config files

* Update disk image creation

* Fix error

* Disk images the script makes are in Mac format

* Add blurb about the risks with using Lido driver (issue#40) to the easyinstall script, while pushing less for using that feature.

* Make shutdown and reboot async operations

* More informative footer contents

* Wordsmith the Mac drive options

* Link to relevant section in the wiki

* Added GET_IMAGE_FILES

* Added default folder to GET_IMAGE_FILES

* Renaming

* Updated setting image folder

* Lists available net interfaces as a drop down when attaching daynaport

* Macs should use the hds image file ending

* Fixed default image folder handling

* Refer to device properties, instead of sidecars

* Added NETWORK_INTERFACES_INFO

* Filter "lo"

* Use PF_INET in favor of PF_INET6

* Added network interfaces to server info

* Drive property file ending defined in one place; Add handling of common urllib and file system exceptions.

* Use protobuf interface to get network interface info

* Use protobuf interface for list_files

* Repeated field cleanup

* Renaming

* Added DEVICE_TYPES_INFO

* Comment update

* Added -y option to rasctl

* Add the remaining recommended drive profiles provided by rpajarola

* Fix typos

* Add warnings to CD-ROM descriptions

* Add more recommended Sun drives

* Add capacity to name

* Move footer into base.html

* Handle removable drive insertion in the attach method (easy to do with protobuf)

* Limit which arguments to pass to an image injection command

* Cleanup

* Sort image and config files alphabetically

* Make compatible with updated protobuf interface

* Sort drives alphabetically by name

* Decriptive text for CD-ROM section

* Better description

* Hyperlink to disks page instead of button

Co-authored-by: Uwe Seimet <Uwe.Seimet@seimet.de>
2021-09-19 14:29:01 -07:00
Daniel Markstedt
8a3642bf9a
Move to protobuf for the webapp, major overhaul to easyinstall.sh, code comment translations (#229)
* Making saving and loading config files work with protobuf

* Formatted the Status column, and fixed the available ID logic

* Updated handling of removed status for devices without image file support

* Comment update

* Fixed typo

* Updated logging

* Updated handling of removed status for devices without image file support

* Comment update

* Fixed typo

* Updated logging

* Better handling of device status

* Updated parameter handling

* Updated setting default interfaces

* Revert "Updated setting default interfaces"

This reverts commit 210abc775d.

* Revert "Updated parameter handling"

This reverts commit 35302addd5.

* Abort with a 404 if rascsi is not running. Use any protobuf response to determine whether rascsi is running (should hardly be required anymore due to the other change, but just in case).

* Move id reservation back into __main__

* Remove check for device type when validating Removed image

* Leverage device property data for better status messages

* Remove redundant string sanitation when reading config csv file

* Clean up device list generation

* Cleanup

* Remove duplicates before building valid scsi id list

* Fully translated cfilesystem.h code comments to English; partially translated cfilesystem.cpp

* rascsi supports reserving IDs

* Updated help message

* Replaced BOOL by bool

* Logging update

* Logging update

* Cleanup

* Restructure the easyinstall.sh script to combine the install/update flows, and disallow installing the webapp by itself

* Remove redundant steps handled in Makefile

* Add the functionality to specify connect_type through a parameter

* Add validation to the argument parser allowing only STANDARD and FULLSPEC as options

* Complete translation of code comments for cfilesystem.h; partial translation for cfilesystem.cpp

* Cleanup

* Merge parts of the Network Assistant script by sonique6784; fix the run_choice startup parameter

* Improve on the network setup messages

* Fix routing address

* Add checks for previous configuration; cleanup

* Cleanup

* Remove redundant step in wired setup. Improve messages.

* Cleanup

* Added default parameters to device properties

* Return parameters a device was set up with

* Add flows for configuring custom network settings; adopting some logic by –sonique6784

* Improved device initialization

* Updated default parameter handling

* Updated default parameter handling

* Fixed typo

* Comment updates

* Comment update

* Make iso generation work again, and add error handling to urllib actions

* Manage default parameters in the respective device

* Print available network interfaces. Clean up step and improve descriptive messages.

* Make the script clean up previous configurations

* Make the script only show relevant interfaces

* Partial translation of cfilesystem.cpp

* Do not pass empty parameter string

* Added supports_params flag

* Completely translate code comments in cfilesystem.cpp

* Show rascsi-web status after installing

* Refactoring

* Made comparisons more consistent

* Updated error handling

* Updated exception handling

* Made comparisons more consistent

* Updated error handling

* Overlooked code comment translation

* Renaming

* Better error handling for socket connection

* Disable two NEC hd image types due to issue#232

* Comment update

* NEC sectors size must be 512 bytes

* Updated logging

* Updated vendor name handling

* Updated handling of media loading/unloading

* Comment update

* NEC sectors size must be 512 bytes

* Updated logging

* Updated vendor name handling

* Updated handling of media loading/unloading

* Better handling of removable disks in the web ui

* Added stoppable property and stopped status

* Made MO stoppable

* Removed duplicate code

* Removed duplicate code

* Copy read-only property

* Renaming

* Add an assistant for reserving scsi ids

* Don't show action if no device attached

* Implement a device_info app path, and cut down on device columns always shown

* Cleanup

* Removed duplicate code, added START/STOP

* Improved default parameter handling

* Updated load/eject handling

* Logging update

* Fixed typo

* Verified START/STOP UNIT

* Updated logging

* Updated status handling

* Updated status handling

* More status handling updates

* Logging update

* Made instance fields local variables

* Removed duplicate code, added START/STOP

* Improved default parameter handling

* Updated load/eject handling

* Logging update

* Fixed typo

* Verified START/STOP UNIT

* Updated logging

* Updated status handling

* Updated status handling

* More status handling updates

* Logging update

* Made instance fields local variables

* Made disk_t private

* Made some data structures private

* Fixed ARM compile issue

* Fast forward instead of rebase existing git repo

* Fixed ctapdriver initialization issue

* Reset read-only status when opening an image file

* Cleanup

* Cleanup

* Made logging more consistent

* Updated log level

* Cleanup

* Log load/eject on error level for testing

* Revert "Log load/eject on error level for testing"

This reverts commit d35a15ea8e.

* Assume drive is not ready after having been stopped

* Updated status handling

* Make the csv config files store all relevant device data for reading

* Read 9 column csv config files

* Fixed typo

* Rebuild manpage

* Fixed issue #234 (MODE SENSE (10) returns wrong mode parameter header)

* Removed unused code

* Enum data type update

* Removed duplicate range check

* Removed duplicate code

* Removed more duplicate code

* Logging update

* SCCD sector size was not meant to be configurable

* Better error handling for csv reading and writing

* Updated configurable sector size properties

* Removed assertion

* Improved error handling

* Updated error handling

* Re-added special error handling only relevant for SASI

* Added TODOs

* Comment update

* Added override modifier

* Removed obsolete debug flag (related code was not called)

* Comment and logging updates

* Removed obsolete try/catch

* Revert "Removed obsolete try/catch"

This reverts commit 39ca12d8b1.

* Comment update

* Removed duplicate code

* Updated error messages, use more foreach loops

* Avoid storing RaSCSI generated product info in config file

* Updated logging

* Logging update

* Save config files in json instead of csv

* Fix bugs with json config loading

* Refactoring & remove unused code

* Refactoring

* Display upper case file endings in file management list

* Only show product vendor for non-RaSCSI devices in the device list

* Translate code comment

* Refactoring

* Fix bad identation

* Improve valid file extension handling

* Add validation when attaching removable media

* Display valid file endings under the file list

* Cleanup

* Don't store 0 block size

* Fix indentation

* Read and write config files in key:pair format

* Add section for controlling logging

* README update

* Added block_count

* Cleanup, fix typos

* Support attaching CD-ROM with custom block size

* Evaluate block size when inserting a media

* rasctl display capacity if available

* Info message update

* Use kwargs for device attachment

* Fix bugs in attach_image kwargs; make config file more readable

* POC for attaching device with profile

* Only list product types valid for the particular image file

* Perform validation of HDD image size based on the product profile

* Implement sidecar config files for drive images.

* Added missing product name to NEC vital product data

* MO block size depends on capacity only

* Better error handling for device sidecar config loading

* Extended property/status display

* Property display update

* Updated error handling

* Handle image sizes in bytes internally

* Revert change

* Resolve bad merge

Co-authored-by: Uwe Seimet <Uwe.Seimet@seimet.de>
2021-09-14 21:51:12 -05:00
Eric Helgeson
ea4486d1c0
Speed up web uploads and various fixes (#158)
* Move to bjoern

* Stream upload

* wip

* Streams

* check for filename

* Allow easyinstall to be scripted

* Tell user we're done

* show help

* ignore hfdisk

* fix var

* Allow override of remote by setting GIT_REMOTE, default to origin

* Better handling of local changes

* Give user more info

* Fix #156 - show all supported types in web interface

* *.mos does not seem to be valid - ractl throws error

* Try some minor optomizations
Error handling
2021-07-31 10:52:09 -05:00
Eric Helgeson
1695b40c65
fix bridge-utils missing from dev (#157) 2021-07-29 19:04:29 -05:00
uweseimet
af6e311e6e
protobuf-based rasctl/rascsi command interface (#129)
* Initial protobuf definition

* protobuf result message draft

* Merge with develop branch

* Makefile generates protobuf-based source files

* Interface update

* Fixed typo

* Fixed typo

* Updated returning status

* Serialize return data

* Use correct descriptor

* Made interface fields required

* Deserialize result

* Serialization update

* Updated serialization

* Serialization update

* Updated deserialization

* status handling update

* Evaluate status

* Revert "Evaluate status"

This reverts commit 3d8f2c3252.

* Completed sense_key enum

* Renaming

* Added protobuf Command

* Updated command evaluation

* Interface update

* Interface update

* Added DeviceType enum

* Improved type-safety

* Fixed typo

* Type-safety update

* Fixed typo

* Error handling update

* Updated list handling

* Error handling update

* Use more C++ strings

* protobuf enums can provide their names

* Fixed listing devices

* Updated logging

* Enum usage cleanup

* More enum cleanup

* Fixed command check

* Updated type check

* Updated enums

* Removed unused variable

* Removed goto, added exception

* Socket handling cleanup

* Code locality cleanup

* Added helper method

* Extracted code

* Updated socket/file handling

* Use C++ I/O

* Use tolower()

* Renaming

* Simplified has_suffix

* Fixed typo

* Use spdlog namespace

* Simplified formatting (endl) of error messages

* Added -s option for changing the runtime log level to rasctl

* Renaming

* Renaming

* Updated error reporting

* Fixed log string formatting

* String conversion cleanup

* Fixed typo

* Log mmap error (happens on 64 bit)

* Improved proto3 compatibility, updated error handling

* CHanges based on review

* Fixed comment

* Comment update

* Updated ListDevice to not directly write to the stream

* Use size_t

* Renaming

* Buffering update

* MapController should not use fp

* Use fd, not fp

* rasctl has to display *all* results

* rasctl has to display *all* results

* Error handling update

* Updated to proto3 protocol

* Optimization by using protobuf-lite

* RaspBian outdated protoc does not support _Name

* Added protobuf-compiler to easyinstall.sh

Co-authored-by: akuker <34318535+akuker@users.noreply.github.com>
2021-07-18 17:15:13 -05:00
akuker
dbf78b772b
Merge pull request #96 from akuker/daynaport3
Add DaynaPort Functionality into the Development branch
2021-05-26 10:50:13 -05:00
Eric Helgeson
c2c0d5cbf7 Use truncate instead of dd 2021-05-13 12:22:28 -05:00
Eric Helgeson
ab0082dfcc Dont stop output when showing status 2021-05-13 12:17:40 -05:00
Eric Helgeson
3c5d68a1f4 Add libpcap-dev and move all pkgs into installPackages() 2021-04-05 16:24:51 -05:00
Tony Kuker
61c7644250 Merge branch 'develop' into daynaport3 2021-04-05 16:11:54 -05:00
Quentin Smith
2579437b57 Allow generating pcap files of Daynaport traffic
If rasctl is given a file to "attach" to a daynaport interface, rascsi
will generate a pcap file at that path containing all sent/received
packets.
2021-04-04 23:13:51 +01:00
Quentin Smith
5ef97b99db Use native ioctls to create/join bridge interface 2021-04-04 23:13:36 +01:00
Eric Helgeson
cbd7f17508 Stay on currently checked out branch for easy intall 2021-03-07 09:52:04 -06:00
Eric Helgeson
0b78f09f8d Add DaynaPORT config to web
Add bridge-utils

Minor fixes to easyinstall

Can now save config, detach all devices

Bridge script error out if any command fails
2021-02-01 19:48:56 -06:00
Eric Helgeson
37f1166fd8
New Web Interface (#69)
* gitignore

* New Web Interface
Fixed spacing/tabs in easy install
Added migration check
Fix update web not actually updating

Migrating from https://github.com/erichelgeson/RaSCSI-web

* Allow user to select multiple types when creating images

* Show all devices even if nothing is attached.

* If attaching an iso to a cd device, dont detach, just insert

* UI feedback and restart rascsi service

* Check for any non-0 exit code for apache2 detection

* Pretty/informative 502

* Add confirms to some actions. Works in netscape 4.7

* Fix order of params for create_new_image

* Move non-route method to service

* Add method for getting logs

* Move settings to single file
add ability to mock commands for local dev
2020-12-30 19:39:32 -06:00
Eric Helgeson
d63b27f7d1
Fix dir for update (#68) 2020-12-28 13:39:20 -06:00
sonique6784
524f1c7826
improved HD creator with partioning and formatting Drive with HFS. (#51) 2020-11-07 18:10:09 -06:00
sonique6784
f907e85b55
added easy install script. helps setup your Pi/RaSCSI. (#47) 2020-10-25 18:55:53 -05:00