Merge remote-tracking branch 'upstream/dev' into emergency-shuttle
Conflicts: code/setup.dm
@@ -1381,6 +1381,36 @@
|
|||||||
#include "code\WorkInProgress\Chinsky\ashtray.dm"
|
#include "code\WorkInProgress\Chinsky\ashtray.dm"
|
||||||
#include "code\WorkInProgress\Chinsky\guestpass.dm"
|
#include "code\WorkInProgress\Chinsky\guestpass.dm"
|
||||||
#include "code\WorkInProgress\Cib\MedicalSideEffects.dm"
|
#include "code\WorkInProgress\Cib\MedicalSideEffects.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\bios.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\buildandrepair.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\component.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\computer.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\computer3_notes.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\file.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\laptop.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\lapvend.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\networking.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\NTOS.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\program.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\program_disks.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\server.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\storage.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\computers\arcade.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\computers\atmos_alert.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\computers\camera.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\computers\card.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\computers\communications.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\computers\crew.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\computers\customs.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\computers\HolodeckControl.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\computers\law.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\computers\medical.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\computers\Operating.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\computers\power.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\computers\prisoner.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\computers\robot.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\computers\security.dm"
|
||||||
|
#include "code\WorkInProgress\computer3\computers\welcome.dm"
|
||||||
#include "code\WorkInProgress\kilakk\fax.dm"
|
#include "code\WorkInProgress\kilakk\fax.dm"
|
||||||
#include "code\WorkInProgress\Mini\atmos_control.dm"
|
#include "code\WorkInProgress\Mini\atmos_control.dm"
|
||||||
#include "code\WorkInProgress\Ported\policetape.dm"
|
#include "code\WorkInProgress\Ported\policetape.dm"
|
||||||
|
|||||||
207
code/WorkInProgress/computer3/NTOS.dm
Normal file
@@ -0,0 +1,207 @@
|
|||||||
|
/*
|
||||||
|
The Big Bad NT Operating System
|
||||||
|
*/
|
||||||
|
|
||||||
|
/datum/file/program/ntos
|
||||||
|
name = "Nanotrasen Operating System"
|
||||||
|
extension = "prog"
|
||||||
|
active_state = "ntos"
|
||||||
|
var/obj/item/part/computer/storage/current // the drive being viewed, null for desktop/computer
|
||||||
|
var/fileop = "runfile"
|
||||||
|
|
||||||
|
/*
|
||||||
|
Generate a basic list of files in the selected scope
|
||||||
|
*/
|
||||||
|
|
||||||
|
/datum/file/program/ntos/proc/list_files()
|
||||||
|
if(!computer || !current) return null
|
||||||
|
return current.files
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/program/ntos/proc/filegrid(var/list/filelist)
|
||||||
|
var/dat = "<table border='0' align='left'>"
|
||||||
|
var/i = 0
|
||||||
|
for(var/datum/file/F in filelist)
|
||||||
|
i++
|
||||||
|
if(i==1)
|
||||||
|
dat += "<tr>"
|
||||||
|
if(i>= 6)
|
||||||
|
i = 0
|
||||||
|
dat += "</tr>"
|
||||||
|
continue
|
||||||
|
dat += {"
|
||||||
|
<td>
|
||||||
|
<center><a href='?src=\ref[src];[fileop]=\ref[F]'>
|
||||||
|
<img src=\ref[F.image]><br>
|
||||||
|
<span>[F.name]</span>
|
||||||
|
</a></center>
|
||||||
|
</td>"}
|
||||||
|
|
||||||
|
dat += "</tr></table>"
|
||||||
|
return dat
|
||||||
|
|
||||||
|
//
|
||||||
|
// I am separating this from filegrid so that I don't have to
|
||||||
|
// make metadata peripheral files
|
||||||
|
//
|
||||||
|
/datum/file/program/ntos/proc/desktop(var/peripheralop = "viewperipheral")
|
||||||
|
var/dat = "<table border='0' align='left'>"
|
||||||
|
var/i = 0
|
||||||
|
var/list/peripherals = list(computer.hdd,computer.floppy,computer.cardslot)
|
||||||
|
for(var/obj/item/part/computer/C in peripherals)
|
||||||
|
if(!istype(C)) continue
|
||||||
|
i++
|
||||||
|
if(i==1)
|
||||||
|
dat += "<tr>"
|
||||||
|
if(i>= 6)
|
||||||
|
i = 0
|
||||||
|
dat += "</tr>"
|
||||||
|
continue
|
||||||
|
dat += {"
|
||||||
|
<td>
|
||||||
|
<a href='?src=\ref[src];[peripheralop]=\ref[C]'>
|
||||||
|
\icon[C]<br>
|
||||||
|
<span>[C.name]</span>
|
||||||
|
</a>
|
||||||
|
</td>"}
|
||||||
|
|
||||||
|
dat += "</tr></table>"
|
||||||
|
return dat
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/program/ntos/proc/window(var/title,var/buttonbar,var/content)
|
||||||
|
return {"
|
||||||
|
<div class='filewin'>
|
||||||
|
<div class='titlebar'>[title] <a href='?src=\ref[src];winclose'><img src=\ref['icons/ntos/tb_close.png']></a></div>
|
||||||
|
<div class='buttonbar'>[buttonbar]</div>
|
||||||
|
<div class='contentpane'>[content]</div>
|
||||||
|
</div>"}
|
||||||
|
|
||||||
|
/datum/file/program/ntos/proc/buttonbar(var/type = 0)
|
||||||
|
switch(type)
|
||||||
|
if(0) // FILE OPERATIONS
|
||||||
|
return {""}
|
||||||
|
|
||||||
|
/datum/file/program/ntos/interact()
|
||||||
|
if(!interactable())
|
||||||
|
return
|
||||||
|
var/dat = {"
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Nanotrasen Operating System</title>
|
||||||
|
<style>
|
||||||
|
div.filewin {
|
||||||
|
position:absolute;
|
||||||
|
left:80px;
|
||||||
|
top:114px;
|
||||||
|
width:480px;
|
||||||
|
height:360px;
|
||||||
|
border:2px inset black;
|
||||||
|
background-color:#F0F0F0;
|
||||||
|
overflow:auto
|
||||||
|
}
|
||||||
|
div.titlebar {
|
||||||
|
position:fixed;
|
||||||
|
left:80px;
|
||||||
|
top:60px;
|
||||||
|
width:480px;
|
||||||
|
height:18px;
|
||||||
|
padding:1px;
|
||||||
|
padding-left:8px;
|
||||||
|
border:none;
|
||||||
|
background-color:#2020a0;
|
||||||
|
color:#FFFFFF;
|
||||||
|
z-index:5
|
||||||
|
}
|
||||||
|
.titlebar a {
|
||||||
|
position:absolute;
|
||||||
|
right:4px;
|
||||||
|
display: block;
|
||||||
|
width:16px;
|
||||||
|
height:100%;
|
||||||
|
background-color:#000000;
|
||||||
|
color:#808080;
|
||||||
|
}
|
||||||
|
div.buttonbar {
|
||||||
|
position:fixed;
|
||||||
|
left:80px;
|
||||||
|
top:78px;
|
||||||
|
width:480px;
|
||||||
|
height:36px;
|
||||||
|
padding:2px;
|
||||||
|
background-color:#f0d0d0;
|
||||||
|
}
|
||||||
|
div.contentpane {
|
||||||
|
padding:4px;
|
||||||
|
width:100%;
|
||||||
|
height:100%
|
||||||
|
}
|
||||||
|
table a {
|
||||||
|
display: block;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
text-decoration: none;
|
||||||
|
color: black;
|
||||||
|
text-align:center;
|
||||||
|
}
|
||||||
|
table span {
|
||||||
|
background-color: #E0E0E0;
|
||||||
|
font-family: verdana;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
td {
|
||||||
|
width: 64;
|
||||||
|
height: 64;
|
||||||
|
overflow: hidden;
|
||||||
|
valign: "top";
|
||||||
|
}
|
||||||
|
a img {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body><div style='width:640px;height:480px; border:2px solid black;padding:8px;background-position:center;background-image:url(\ref['nano/images/uiBackground.png'])'>"}
|
||||||
|
|
||||||
|
var/list/files = list_files()
|
||||||
|
if(current)
|
||||||
|
dat +=window(current.name,buttonbar(),filegrid(files))
|
||||||
|
else
|
||||||
|
dat += desktop()
|
||||||
|
|
||||||
|
dat += "</div></body></html>"
|
||||||
|
|
||||||
|
usr << browse(dat, "window=\ref[computer];size=670x510")
|
||||||
|
onclose(usr, "\ref[computer]")
|
||||||
|
|
||||||
|
/datum/file/program/ntos/Topic(href, list/href_list)
|
||||||
|
if(!interactable() || ..(href,href_list))
|
||||||
|
return
|
||||||
|
|
||||||
|
if("viewperipheral" in href_list) // open drive, show status of peripheral
|
||||||
|
var/obj/item/part/computer/C = locate(href_list["viewperipheral"])
|
||||||
|
if(istype(C,/obj/item/part/computer/storage))
|
||||||
|
current = C
|
||||||
|
interact()
|
||||||
|
return
|
||||||
|
// else ???
|
||||||
|
if(istype(C,/obj/item/part/computer/cardslot))
|
||||||
|
if(computer.cardslot.reader != null)
|
||||||
|
computer.cardslot.remove()
|
||||||
|
if(istype(C,/obj/item/part/computer/cardslot/dual))
|
||||||
|
if(computer.cardslot.writer != null)
|
||||||
|
computer.cardslot.remove(computer.cardslot.writer)
|
||||||
|
if(computer.cardslot.reader != null)
|
||||||
|
computer.cardslot.remove(computer.cardslot.reader)
|
||||||
|
interact()
|
||||||
|
return
|
||||||
|
|
||||||
|
// distinct from close, this is the file dialog window
|
||||||
|
if("winclose" in href_list)
|
||||||
|
current = null
|
||||||
|
interact()
|
||||||
|
return
|
||||||
|
|
||||||
|
#undef MAX_ROWS
|
||||||
|
#undef MAX_COLUMNS
|
||||||
182
code/WorkInProgress/computer3/bios.dm
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
/*
|
||||||
|
Okay so my last effort to have a central BIOS function was interesting
|
||||||
|
but completely unmaintainable, I have scrapped it.
|
||||||
|
|
||||||
|
The parts that were actually useful will be put here in functions instead.
|
||||||
|
If we want a central bios function we can add one that just indexes them.
|
||||||
|
That should at least allow sensible debugging.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/obj/machinery/computer3
|
||||||
|
|
||||||
|
/*
|
||||||
|
interactable(user): performs all standard sanity checks
|
||||||
|
Call in topic() and interact().
|
||||||
|
*/
|
||||||
|
proc/interactable(var/mob/user)
|
||||||
|
if( !src || !user || stat || user.stat || user.lying || user.blinded )
|
||||||
|
return 0
|
||||||
|
if(!program)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
if(!istype(loc,/turf) || !istype(user.loc,/turf)) // todo handheld maybe
|
||||||
|
return 0
|
||||||
|
|
||||||
|
if(istype(user,/mob/living/silicon))
|
||||||
|
if(!program.ai_allowed)
|
||||||
|
user << "\blue You are forbidden from accessing this program."
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
if(program.human_controls)
|
||||||
|
if(!ishuman(user))
|
||||||
|
user << "\red Your body can't work the controls!"
|
||||||
|
return 0
|
||||||
|
if(user.restrained())
|
||||||
|
user << "\red You need a free hand!"
|
||||||
|
return 0
|
||||||
|
|
||||||
|
if(!in_range(src,user))
|
||||||
|
// telekinesis check
|
||||||
|
if(ishuman(user) && istype(user.get_active_hand(),/obj/item/tk_grab))
|
||||||
|
if(program.human_controls)
|
||||||
|
user << "\red It's too complicated to work at a distance!"
|
||||||
|
return 0
|
||||||
|
add_fingerprint(user)
|
||||||
|
user.set_machine(src)
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
add_fingerprint(user)
|
||||||
|
user.set_machine(src)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
Deduplicates an item list and gives you range and direction.
|
||||||
|
This is used for networking so you can determine which of several
|
||||||
|
identically named objects you're referring to.
|
||||||
|
*/
|
||||||
|
proc/format_atomlist(var/list/atoms)
|
||||||
|
var/list/output = list()
|
||||||
|
for(var/atom/A in atoms)
|
||||||
|
var/title = "[A] (Range [get_dist(A,src)] meters, [dir2text(get_dir(src,A))])"
|
||||||
|
output[title] = A
|
||||||
|
return output
|
||||||
|
|
||||||
|
/*
|
||||||
|
This is used by the camera monitoring program to see if you're still in range
|
||||||
|
*/
|
||||||
|
check_eye(var/mob/user as mob)
|
||||||
|
if(!interactable(user) || user.machine != src)
|
||||||
|
if(user.machine == src)
|
||||||
|
user.unset_machine()
|
||||||
|
return null
|
||||||
|
|
||||||
|
var/datum/file/program/security/S = program
|
||||||
|
if( !istype(S) || !S.current || !S.current.status || !camnet )
|
||||||
|
if( user.machine == src )
|
||||||
|
user.unset_machine()
|
||||||
|
return null
|
||||||
|
|
||||||
|
user.reset_view(S.current)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
List all files, including removable disks and data cards
|
||||||
|
(I don't know why but I don't want to rip data cards out.
|
||||||
|
It just seems... interesting?)
|
||||||
|
*/
|
||||||
|
proc/list_files(var/typekey = null)
|
||||||
|
var/list/files = list()
|
||||||
|
if(hdd)
|
||||||
|
files += hdd.files
|
||||||
|
if(floppy && floppy.inserted)
|
||||||
|
files += floppy.inserted.files
|
||||||
|
if(cardslot && istype(cardslot.reader,/obj/item/weapon/card/data))
|
||||||
|
files += cardslot.reader:files
|
||||||
|
if(!ispath(typekey))
|
||||||
|
return files
|
||||||
|
|
||||||
|
var/i = 1
|
||||||
|
while(i<=files.len)
|
||||||
|
if(istype(files[i],typekey))
|
||||||
|
i++
|
||||||
|
continue
|
||||||
|
files.Cut(i,i+1)
|
||||||
|
return files
|
||||||
|
|
||||||
|
/*
|
||||||
|
Crash the computer with an error.
|
||||||
|
Todo: redo
|
||||||
|
*/
|
||||||
|
proc/Crash(var/errorcode = PROG_CRASH)
|
||||||
|
if(!src)
|
||||||
|
return null
|
||||||
|
|
||||||
|
switch(errorcode)
|
||||||
|
if(PROG_CRASH)
|
||||||
|
if(usr)
|
||||||
|
usr << "\red The program crashed!"
|
||||||
|
usr << browse(null,"\ref[src]")
|
||||||
|
Reset()
|
||||||
|
|
||||||
|
if(MISSING_PERIPHERAL)
|
||||||
|
Reset()
|
||||||
|
if(usr)
|
||||||
|
usr << browse("<h2>ERROR: Missing or disabled component</h2><b>A hardware failure has occured. Please insert or replace the missing or damaged component and restart the computer.</b>","window=\ref[src]")
|
||||||
|
|
||||||
|
if(BUSTED_ASS_COMPUTER)
|
||||||
|
Reset()
|
||||||
|
os.error = BUSTED_ASS_COMPUTER
|
||||||
|
if(usr)
|
||||||
|
usr << browse("<h2>ERROR: Missing or disabled component</h2><b>A hardware failure has occured. Please insert or replace the missing or damaged component and restart the computer.</b>","window=\ref[src]")
|
||||||
|
|
||||||
|
if(MISSING_PROGRAM)
|
||||||
|
Reset()
|
||||||
|
if(usr)
|
||||||
|
usr << browse("<h2>ERROR: No associated program</h2><b>This file requires a specific program to open, which cannot be located. Please install the related program and try again.</b>","window=\ref[src]")
|
||||||
|
|
||||||
|
if(FILE_DRM)
|
||||||
|
Reset()
|
||||||
|
if(usr)
|
||||||
|
usr << browse("<h2>ERROR: File operation prohibited</h2><b>Copy protection exception: missing authorization token.</b>","window=\ref[src]")
|
||||||
|
|
||||||
|
if(NETWORK_FAILURE)
|
||||||
|
Reset()
|
||||||
|
if(usr)
|
||||||
|
usr << browse("<h2>ERROR: Networking exception: Unable to connect to remote host.</b>","window=\ref[src]")
|
||||||
|
|
||||||
|
|
||||||
|
else
|
||||||
|
if(usr)
|
||||||
|
usr << "\red The program crashed!"
|
||||||
|
usr << browse(null,"\ref[src]")
|
||||||
|
testing("computer/Crash() - unknown error code [errorcode]")
|
||||||
|
Reset()
|
||||||
|
return null
|
||||||
|
|
||||||
|
#define ANY_DRIVE 0
|
||||||
|
#define PREFER_FLOPPY 1
|
||||||
|
#define PREFER_CARD 2
|
||||||
|
#define PREFER_HDD 4
|
||||||
|
|
||||||
|
|
||||||
|
// required_location: only put on preferred devices
|
||||||
|
proc/writefile(var/datum/file/F, var/where = ANY_DRIVE, var/required_location = 0)
|
||||||
|
if(where != ANY_DRIVE)
|
||||||
|
if((where&PREFER_FLOPPY) && floppy && floppy.addfile(F))
|
||||||
|
return 1
|
||||||
|
if((where&PREFER_CARD) && cardslot && cardslot.addfile(F))
|
||||||
|
return 1
|
||||||
|
if((where&PREFER_HDD) && hdd && hdd.addfile(F))
|
||||||
|
return 1
|
||||||
|
|
||||||
|
if(required_location)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
if(floppy && floppy.addfile(F))
|
||||||
|
return 1
|
||||||
|
if(cardslot && cardslot.addfile(F))
|
||||||
|
return 1
|
||||||
|
if(hdd && hdd.addfile(F))
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
302
code/WorkInProgress/computer3/buildandrepair.dm
Normal file
@@ -0,0 +1,302 @@
|
|||||||
|
// Computer3 circuitboard specifically
|
||||||
|
/obj/item/part/computer/circuitboard
|
||||||
|
density = 0
|
||||||
|
anchored = 0
|
||||||
|
w_class = 2.0
|
||||||
|
name = "Circuit board"
|
||||||
|
icon = 'icons/obj/module.dmi'
|
||||||
|
icon_state = "id_mod"
|
||||||
|
item_state = "electronic"
|
||||||
|
origin_tech = "programming=2"
|
||||||
|
var/id = null
|
||||||
|
var/frequency = null
|
||||||
|
var/build_path = null
|
||||||
|
var/board_type = "computer"
|
||||||
|
var/list/req_components = null
|
||||||
|
var/powernet = null
|
||||||
|
var/list/records = null
|
||||||
|
var/frame_desc = null
|
||||||
|
|
||||||
|
var/datum/file/program/OS = new/datum/file/program/ntos
|
||||||
|
|
||||||
|
/obj/machinery/computer3/proc/disassemble(mob/user as mob) // todo
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/structure/computer3frame
|
||||||
|
density = 1
|
||||||
|
anchored = 0
|
||||||
|
name = "computer frame"
|
||||||
|
icon = 'icons/obj/stock_parts.dmi'
|
||||||
|
icon_state = "0"
|
||||||
|
var/state = 0
|
||||||
|
|
||||||
|
var/obj/item/part/computer/circuitboard/circuit = null
|
||||||
|
var/completed = /obj/machinery/computer
|
||||||
|
|
||||||
|
// Computer3 components - a carbon copy of the list from
|
||||||
|
// computer.dm; however, we will need to check to make sure
|
||||||
|
// we don't install more components than the computer frame
|
||||||
|
// can handle. This will be different for certain formfactors.
|
||||||
|
|
||||||
|
var/max_components = 4
|
||||||
|
var/list/components = list()
|
||||||
|
|
||||||
|
// Storage
|
||||||
|
var/obj/item/part/computer/storage/hdd/hdd = null
|
||||||
|
var/obj/item/part/computer/storage/removable/floppy = null
|
||||||
|
// Networking
|
||||||
|
var/obj/item/part/computer/networking/radio/radio = null // not handled the same as other networks
|
||||||
|
var/obj/item/part/computer/networking/cameras/camnet = null // just plain special
|
||||||
|
var/obj/item/part/computer/networking/net = null // Proximity, area, or cable network
|
||||||
|
var/obj/item/part/computer/networking/subspace/centcom = null // only for offstation communications
|
||||||
|
|
||||||
|
// Card reader - note the HoP reader is a subtype
|
||||||
|
var/obj/item/part/computer/cardslot/cardslot = null
|
||||||
|
|
||||||
|
// Misc & special purpose
|
||||||
|
var/obj/item/part/computer/ai_holder/cradle = null
|
||||||
|
var/obj/item/part/computer/toybox/toybox = null
|
||||||
|
|
||||||
|
// Battery must be installed BEFORE wiring the computer.
|
||||||
|
// if installing it in an existing computer, you will have to
|
||||||
|
// get back to this state first.
|
||||||
|
var/obj/item/weapon/cell/battery = null
|
||||||
|
|
||||||
|
/obj/structure/computer3frame/server
|
||||||
|
name = "server frame"
|
||||||
|
completed = /obj/machinery/computer3/server
|
||||||
|
max_components = 6
|
||||||
|
/obj/structure/computer3frame/wallcomp
|
||||||
|
name = "wall-computer frame"
|
||||||
|
completed = /obj/machinery/computer3/wall_comp
|
||||||
|
max_components = 3
|
||||||
|
/obj/structure/computer3frame/laptop
|
||||||
|
name = "laptop frame"
|
||||||
|
completed = /obj/machinery/computer3/laptop
|
||||||
|
max_components = 3
|
||||||
|
|
||||||
|
/obj/structure/computer3frame/attackby(obj/item/P as obj, mob/user as mob)
|
||||||
|
switch(state)
|
||||||
|
if(0)
|
||||||
|
if(istype(P, /obj/item/weapon/wrench))
|
||||||
|
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||||
|
if(do_after(user, 20))
|
||||||
|
user << "\blue You wrench the frame into place."
|
||||||
|
src.anchored = 1
|
||||||
|
src.state = 1
|
||||||
|
if(istype(P, /obj/item/weapon/weldingtool))
|
||||||
|
var/obj/item/weapon/weldingtool/WT = P
|
||||||
|
if(!WT.remove_fuel(0, user))
|
||||||
|
user << "The welding tool must be on to complete this task."
|
||||||
|
return
|
||||||
|
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
||||||
|
if(do_after(user, 20))
|
||||||
|
if(!src || !WT.isOn()) return
|
||||||
|
user << "\blue You deconstruct the frame."
|
||||||
|
new /obj/item/stack/sheet/metal( src.loc, 5 )
|
||||||
|
del(src)
|
||||||
|
if(1)
|
||||||
|
if(istype(P, /obj/item/weapon/wrench))
|
||||||
|
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||||
|
if(do_after(user, 20))
|
||||||
|
user << "\blue You unfasten the frame."
|
||||||
|
src.anchored = 0
|
||||||
|
src.state = 0
|
||||||
|
if(istype(P, /obj/item/weapon/circuitboard) && !circuit)
|
||||||
|
var/obj/item/weapon/circuitboard/B = P
|
||||||
|
if(B.board_type == "computer")
|
||||||
|
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||||
|
user << "\blue You place the circuit board inside the frame."
|
||||||
|
src.icon_state = "1"
|
||||||
|
src.circuit = P
|
||||||
|
user.drop_item()
|
||||||
|
P.loc = src
|
||||||
|
else
|
||||||
|
user << "\red This frame does not accept circuit boards of this type!"
|
||||||
|
if(istype(P, /obj/item/weapon/screwdriver) && circuit)
|
||||||
|
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||||
|
user << "\blue You screw the circuit board into place."
|
||||||
|
src.state = 2
|
||||||
|
src.icon_state = "2"
|
||||||
|
if(istype(P, /obj/item/weapon/crowbar) && circuit)
|
||||||
|
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||||
|
user << "\blue You remove the circuit board."
|
||||||
|
src.state = 1
|
||||||
|
src.icon_state = "0"
|
||||||
|
circuit.loc = src.loc
|
||||||
|
src.circuit = null
|
||||||
|
if(2)
|
||||||
|
if(istype(P, /obj/item/weapon/screwdriver) && circuit)
|
||||||
|
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||||
|
user << "\blue You unfasten the circuit board."
|
||||||
|
src.state = 1
|
||||||
|
src.icon_state = "1"
|
||||||
|
|
||||||
|
if(istype(P, /obj/item/weapon/crowbar))
|
||||||
|
if(battery)
|
||||||
|
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||||
|
if(do_after(10))
|
||||||
|
battery.loc = loc
|
||||||
|
user << "\blue You remove [battery]."
|
||||||
|
battery = null
|
||||||
|
else
|
||||||
|
user << "\red There's no battery to remove!"
|
||||||
|
|
||||||
|
if(istype(P, /obj/item/weapon/cell))
|
||||||
|
if(!battery)
|
||||||
|
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||||
|
if(do_after(5))
|
||||||
|
battery = P
|
||||||
|
P.loc = src
|
||||||
|
user << "\blue You insert [battery]."
|
||||||
|
else
|
||||||
|
user << "\red There's already \an [battery] in [src]!"
|
||||||
|
|
||||||
|
|
||||||
|
if(istype(P, /obj/item/weapon/cable_coil))
|
||||||
|
if(P:amount >= 5)
|
||||||
|
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||||
|
if(do_after(user, 20))
|
||||||
|
if(P)
|
||||||
|
P:amount -= 5
|
||||||
|
if(!P:amount) del(P)
|
||||||
|
user << "\blue You add cables to the frame."
|
||||||
|
src.state = 3
|
||||||
|
src.icon_state = "3"
|
||||||
|
if(3)
|
||||||
|
if(istype(P, /obj/item/weapon/wirecutters))
|
||||||
|
if(components.len)
|
||||||
|
user << "There are parts in the way!"
|
||||||
|
return
|
||||||
|
playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||||
|
user << "\blue You remove the cables."
|
||||||
|
src.state = 2
|
||||||
|
src.icon_state = "2"
|
||||||
|
var/obj/item/weapon/cable_coil/A = new /obj/item/weapon/cable_coil( src.loc )
|
||||||
|
A.amount = 5
|
||||||
|
|
||||||
|
if(istype(P, /obj/item/weapon/crowbar)) // complicated check
|
||||||
|
remove_peripheral()
|
||||||
|
|
||||||
|
if(istype(P, /obj/item/stack/sheet/glass))
|
||||||
|
if(P:amount >= 2)
|
||||||
|
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||||
|
if(do_after(user, 20))
|
||||||
|
if(P)
|
||||||
|
P:use(2)
|
||||||
|
user << "\blue You put in the glass panel."
|
||||||
|
src.state = 4
|
||||||
|
src.icon_state = "4"
|
||||||
|
if(4)
|
||||||
|
if(istype(P, /obj/item/weapon/crowbar))
|
||||||
|
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||||
|
user << "\blue You remove the glass panel."
|
||||||
|
src.state = 3
|
||||||
|
src.icon_state = "3"
|
||||||
|
new /obj/item/stack/sheet/glass( src.loc, 2 )
|
||||||
|
if(istype(P, /obj/item/weapon/screwdriver))
|
||||||
|
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||||
|
user << "\blue You connect the monitor."
|
||||||
|
var/obj/machinery/computer3/B = new src.circuit.build_path ( src.loc, built=1 )
|
||||||
|
/*if(circuit.powernet) B:powernet = circuit.powernet
|
||||||
|
if(circuit.id) B:id = circuit.id
|
||||||
|
//if(circuit.records) B:records = circuit.records
|
||||||
|
if(circuit.frequency) B:frequency = circuit.frequency
|
||||||
|
if(istype(circuit,/obj/item/weapon/circuitboard/supplycomp))
|
||||||
|
var/obj/machinery/computer/supplycomp/SC = B
|
||||||
|
var/obj/item/weapon/circuitboard/supplycomp/C = circuit
|
||||||
|
SC.can_order_contraband = C.contraband_enabled*/
|
||||||
|
B.circuit = circuit
|
||||||
|
circuit.loc = B
|
||||||
|
if(circuit.OS)
|
||||||
|
circuit.OS.computer = B
|
||||||
|
B.RefreshParts() // todo
|
||||||
|
del(src)
|
||||||
|
|
||||||
|
/*
|
||||||
|
This will remove peripherals if you specify one, but the main function is to
|
||||||
|
allow the user to remove a part specifically.
|
||||||
|
*/
|
||||||
|
/obj/structure/computer3frame/proc/remove_peripheral(var/obj/item/I = null)
|
||||||
|
if(!components || !components.len)
|
||||||
|
usr << "\red There are no components in [src] to take out!"
|
||||||
|
return 0
|
||||||
|
if(!I)
|
||||||
|
I = input(usr, "Remove which component?","Remove component", null) as null|obj in components
|
||||||
|
|
||||||
|
if(I)
|
||||||
|
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||||
|
if(do_after(usr,25))
|
||||||
|
if(I==hdd)
|
||||||
|
components -= hdd
|
||||||
|
hdd.loc = loc
|
||||||
|
hdd = null
|
||||||
|
else if(I==floppy)
|
||||||
|
components -= floppy
|
||||||
|
floppy.loc = loc
|
||||||
|
floppy = null
|
||||||
|
else if(I==radio)
|
||||||
|
components -= radio
|
||||||
|
radio.loc = loc
|
||||||
|
radio = null
|
||||||
|
else if(I==camnet)
|
||||||
|
components -= camnet
|
||||||
|
camnet.loc = loc
|
||||||
|
camnet = null
|
||||||
|
else if(I==net)
|
||||||
|
components -= net
|
||||||
|
net.loc = loc
|
||||||
|
net = null
|
||||||
|
else if(I==cradle)
|
||||||
|
components -= cradle
|
||||||
|
cradle.loc = loc
|
||||||
|
cradle = null
|
||||||
|
else if(I==toybox)
|
||||||
|
components -= toybox
|
||||||
|
toybox.loc = loc
|
||||||
|
toybox = null
|
||||||
|
else
|
||||||
|
warning("Erronous component in computerframe/remove_peripheral: [I]")
|
||||||
|
I.loc = loc
|
||||||
|
usr << "\blue You remove [I]"
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
/obj/structure/computer3frame/proc/insert_peripheral(var/obj/item/I)
|
||||||
|
if(components.len >= max_components)
|
||||||
|
usr << "There isn't room in [src] for another component!"
|
||||||
|
return 0
|
||||||
|
switch(I.type)
|
||||||
|
if(/obj/item/part/computer/storage/hdd)
|
||||||
|
if(hdd)
|
||||||
|
usr << "There is already \an [hdd] in [src]!"
|
||||||
|
return 0
|
||||||
|
hdd = I
|
||||||
|
components += hdd
|
||||||
|
hdd.loc = src
|
||||||
|
if(/obj/item/part/computer/storage/removable)
|
||||||
|
if(floppy)
|
||||||
|
usr << "There is already \an [floppy] in [src]!"
|
||||||
|
return 0
|
||||||
|
floppy = I
|
||||||
|
components += floppy
|
||||||
|
floppy.loc = src
|
||||||
|
if(/obj/item/part/computer/networking/radio)
|
||||||
|
if(radio)
|
||||||
|
usr << "There is already \an [radio] in [src]!"
|
||||||
|
return 0
|
||||||
|
radio = I
|
||||||
|
components += radio
|
||||||
|
radio.loc = src
|
||||||
|
if(/obj/item/part/computer/networking/cameras)
|
||||||
|
if(camnet)
|
||||||
|
usr << "There is already \an [camnet] in [src]!"
|
||||||
|
return 0
|
||||||
|
camnet = I
|
||||||
|
components += camnet
|
||||||
|
camnet.loc = src
|
||||||
|
if(/obj/item/part/computer/networking)
|
||||||
|
if(net)
|
||||||
|
usr << "There is already \an [net] in [src]!"
|
||||||
|
|
||||||
|
|
||||||
198
code/WorkInProgress/computer3/component.dm
Normal file
@@ -0,0 +1,198 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
Objects used to construct computers, and objects that can be inserted into them, etc.
|
||||||
|
|
||||||
|
TODO:
|
||||||
|
* Synthesizer part (toybox, injectors, etc)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/obj/item/part/computer
|
||||||
|
name = "computer part"
|
||||||
|
desc = "Holy jesus you donnit now"
|
||||||
|
gender = PLURAL
|
||||||
|
icon = 'icons/obj/stock_parts.dmi'
|
||||||
|
icon_state = "hdd1"
|
||||||
|
w_class = 2.0
|
||||||
|
|
||||||
|
var/emagged = 0
|
||||||
|
crit_fail = 0
|
||||||
|
|
||||||
|
// the computer that this device is attached to
|
||||||
|
var/obj/machinery/computer3/computer
|
||||||
|
|
||||||
|
// If the computer is attacked by an item it will reference this to decide which peripheral(s) are affected.
|
||||||
|
var/list/attackby_types = list()
|
||||||
|
proc/allow_attackby(var/obj/item/I as obj,var/mob/user as mob)
|
||||||
|
|
||||||
|
for(var/typekey in attackby_types)
|
||||||
|
if(istype(I,typekey))
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
proc/init(var/obj/machinery/computer/target)
|
||||||
|
computer = target
|
||||||
|
// continue to handle all other type-specific procedures
|
||||||
|
|
||||||
|
/*
|
||||||
|
Below are all the miscellaneous components
|
||||||
|
For storage drives, see storage.dm
|
||||||
|
For networking parts, see
|
||||||
|
*/
|
||||||
|
|
||||||
|
/obj/item/part/computer/ai_holder
|
||||||
|
name = "intelliCard computer module"
|
||||||
|
desc = "Contains a specialized nacelle for dealing with highly sensitive equipment without interference."
|
||||||
|
|
||||||
|
attackby_types = list(/obj/item/device/aicard)
|
||||||
|
|
||||||
|
var/mob/living/silicon/ai/occupant = null
|
||||||
|
var/busy = 0
|
||||||
|
|
||||||
|
// Ninja gloves check
|
||||||
|
attack_hand(mob/user as mob)
|
||||||
|
if(ishuman(user) && istype(user:gloves, /obj/item/clothing/gloves/space_ninja) && user:gloves:candrain && !user:gloves:draining)
|
||||||
|
if(user:wear_suit:s_control)
|
||||||
|
user:wear_suit.transfer_ai("AIFIXER","NINJASUIT",src,user)
|
||||||
|
else
|
||||||
|
user << "\red <b>ERROR</b>: \black Remote access channel disabled."
|
||||||
|
return
|
||||||
|
..()
|
||||||
|
|
||||||
|
attackby(obj/I as obj,mob/user as mob)
|
||||||
|
if(computer && !computer.stat)
|
||||||
|
if(istype(I, /obj/item/device/aicard))
|
||||||
|
I:transfer_ai("AIFIXER","AICARD",src,user)
|
||||||
|
if(computer.program)
|
||||||
|
computer.program.update_icon()
|
||||||
|
computer.update_icon()
|
||||||
|
computer.occupant = occupant
|
||||||
|
..()
|
||||||
|
return
|
||||||
|
|
||||||
|
/*
|
||||||
|
ID computer cardslot - reading and writing slots
|
||||||
|
*/
|
||||||
|
|
||||||
|
/obj/item/part/computer/cardslot
|
||||||
|
name = "magnetic card slot"
|
||||||
|
desc = "Contains a slot for reading magnetic swipe cards."
|
||||||
|
|
||||||
|
var/obj/item/weapon/card/reader = null
|
||||||
|
var/obj/item/weapon/card/writer = null // so that you don't need to typecast dual cardslots, but pretend it's not here
|
||||||
|
// alternately pretend they did it to save money on manufacturing somehow
|
||||||
|
var/dualslot = 0 // faster than typechecking
|
||||||
|
attackby_types = list(/obj/item/weapon/card)
|
||||||
|
|
||||||
|
attackby(var/obj/item/I as obj, var/mob/user as mob)
|
||||||
|
if(istype(I,/obj/item/weapon/card))
|
||||||
|
insert(I)
|
||||||
|
return
|
||||||
|
..(I,user)
|
||||||
|
|
||||||
|
proc/insert(var/obj/item/weapon/card/card)
|
||||||
|
if(!computer)
|
||||||
|
return 0
|
||||||
|
if(reader != null)
|
||||||
|
usr << "There is already something in the slot!"
|
||||||
|
return 0
|
||||||
|
if(istype(card,/obj/item/weapon/card/emag)) // emag reader slot
|
||||||
|
usr << "You insert \the [card], and the computer grinds, sparks, and beeps. After a moment, the card ejects itself."
|
||||||
|
computer.emagged = 1
|
||||||
|
return 1
|
||||||
|
var/mob/living/L = usr
|
||||||
|
L.drop_item()
|
||||||
|
card.loc = src
|
||||||
|
reader = card
|
||||||
|
|
||||||
|
proc/remove()
|
||||||
|
reader.loc = loc
|
||||||
|
var/mob/living/carbon/human/user = usr
|
||||||
|
if(istype(user) && !user.get_active_hand())
|
||||||
|
user.put_in_hands(reader)
|
||||||
|
else
|
||||||
|
reader.loc = computer.loc
|
||||||
|
reader = null
|
||||||
|
|
||||||
|
// Authorizes the user based on the computer's requirements
|
||||||
|
proc/authenticate()
|
||||||
|
return computer.check_access(reader)
|
||||||
|
|
||||||
|
proc/addfile(var/datum/file/F)
|
||||||
|
if(!dualslot || !istype(writer,/obj/item/weapon/card/data))
|
||||||
|
return 0
|
||||||
|
var/obj/item/weapon/card/data/D = writer
|
||||||
|
if(D.files.len > 3)
|
||||||
|
return 0
|
||||||
|
D.files += F
|
||||||
|
return 1
|
||||||
|
|
||||||
|
/obj/item/part/computer/cardslot/dual
|
||||||
|
name = "magnetic card reader"
|
||||||
|
desc = "Contains slots for inserting magnetic swipe cards for reading and writing."
|
||||||
|
dualslot = 1
|
||||||
|
|
||||||
|
insert(var/obj/item/weapon/card/card,var/slot = 0)
|
||||||
|
if(!computer)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
if(istype(card,/obj/item/weapon/card/emag) && !reader) // emag reader slot
|
||||||
|
usr.visible_message("[computer]'s screen flickers for a moment.","You insert \the [card]. After a moment, the card ejects itself, and [computer] beeps.","[computer] beeps.")
|
||||||
|
computer.emagged = 1
|
||||||
|
return 1
|
||||||
|
|
||||||
|
if(slot == 1) // 1: writer
|
||||||
|
if(writer != null)
|
||||||
|
usr << "There's already a card in that slot!"
|
||||||
|
return 0
|
||||||
|
var/mob/living/L = usr
|
||||||
|
L.drop_item()
|
||||||
|
card.loc = src
|
||||||
|
writer = card
|
||||||
|
return 1
|
||||||
|
else if(slot == 2) // 2: reader
|
||||||
|
if(reader != null)
|
||||||
|
usr << "There's already a card in that slot!"
|
||||||
|
return 0
|
||||||
|
var/mob/living/L = usr
|
||||||
|
L.drop_item()
|
||||||
|
card.loc = src
|
||||||
|
reader = card
|
||||||
|
return 1
|
||||||
|
else // 0: auto
|
||||||
|
if(reader && writer)
|
||||||
|
usr << "Both slots are full!"
|
||||||
|
return 0
|
||||||
|
var/mob/living/L = usr
|
||||||
|
L.drop_item()
|
||||||
|
card.loc = src
|
||||||
|
if(reader)
|
||||||
|
writer = card
|
||||||
|
computer.updateUsrDialog()
|
||||||
|
return 1
|
||||||
|
if(istype(card,/obj/item/weapon/card/id) && !(access_change_ids in card:access) && !writer) // not authorized
|
||||||
|
writer = card
|
||||||
|
computer.updateUsrDialog()
|
||||||
|
return 1
|
||||||
|
if(!reader)
|
||||||
|
reader = card
|
||||||
|
computer.updateUsrDialog()
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
remove(var/obj/item/weapon/card/card)
|
||||||
|
if(card != reader && card != writer)
|
||||||
|
return
|
||||||
|
|
||||||
|
if(card == reader) reader = null
|
||||||
|
if(card == writer) writer = null
|
||||||
|
card.loc = loc
|
||||||
|
|
||||||
|
var/mob/living/carbon/human/user = usr
|
||||||
|
if(ishuman(user) && !user.get_active_hand())
|
||||||
|
user.put_in_hands(card)
|
||||||
|
else
|
||||||
|
card.loc = computer.loc
|
||||||
|
|
||||||
|
|
||||||
449
code/WorkInProgress/computer3/computer.dm
Normal file
@@ -0,0 +1,449 @@
|
|||||||
|
/obj/machinery/computer3
|
||||||
|
name = "computer"
|
||||||
|
icon = 'icons/obj/computer3.dmi'
|
||||||
|
icon_state = "frame"
|
||||||
|
density = 1
|
||||||
|
anchored = 1.0
|
||||||
|
|
||||||
|
idle_power_usage = 20
|
||||||
|
active_power_usage = 50
|
||||||
|
|
||||||
|
var/allow_disassemble = 1
|
||||||
|
var/legacy_icon = 0 // if 1, use old style icons
|
||||||
|
var/show_keyboard = 1
|
||||||
|
|
||||||
|
// These is all you should need to change when creating a new computer.
|
||||||
|
// If there is no default program, the OS will run instead.
|
||||||
|
// If there is no hard drive, but there is a default program, the OS rom on
|
||||||
|
// the circuitboard will be overridden.
|
||||||
|
|
||||||
|
// For these, typepaths are used, NOT objects
|
||||||
|
|
||||||
|
var/default_prog = null // the program running when spawned
|
||||||
|
var/list/spawn_files = list() // files added when spawned
|
||||||
|
var/list/spawn_parts = list(/obj/item/part/computer/storage/hdd/big) // peripherals to spawn
|
||||||
|
|
||||||
|
// Computer3 components - put an object in them in New() when not built
|
||||||
|
// I used to have a more pliable /list, but the ambiguities
|
||||||
|
// there in how many of what you had was killing me, especially
|
||||||
|
// when you had to search the list to find what you had.
|
||||||
|
|
||||||
|
// Mostly decorative, holds the OS rom
|
||||||
|
var/obj/item/part/computer/circuitboard/circuit
|
||||||
|
|
||||||
|
// Storage
|
||||||
|
var/obj/item/part/computer/storage/hdd/hdd = null
|
||||||
|
var/obj/item/part/computer/storage/removable/floppy = null
|
||||||
|
// Networking
|
||||||
|
var/obj/item/part/computer/networking/radio/radio = null // not handled the same as other networks
|
||||||
|
var/obj/item/part/computer/networking/cameras/camnet = null // just plain special
|
||||||
|
var/obj/item/part/computer/networking/net = null // Proximity, area, or cable network
|
||||||
|
|
||||||
|
// Card reader - note the HoP reader is a subtype
|
||||||
|
var/obj/item/part/computer/cardslot/cardslot = null
|
||||||
|
|
||||||
|
// Misc & special purpose
|
||||||
|
var/obj/item/part/computer/ai_holder/cradle = null
|
||||||
|
var/obj/item/part/computer/toybox/toybox = null
|
||||||
|
var/mob/living/silicon/ai/occupant = null
|
||||||
|
|
||||||
|
|
||||||
|
// Legacy variables
|
||||||
|
// camera networking - overview (???)
|
||||||
|
var/mapping = 0
|
||||||
|
var/last_pic = 1.0
|
||||||
|
|
||||||
|
// Purely graphical effect
|
||||||
|
var/icon/kb = null
|
||||||
|
|
||||||
|
// These are necessary in order to consolidate all computer types into one
|
||||||
|
var/datum/wires/wires = null
|
||||||
|
var/powernet = null
|
||||||
|
|
||||||
|
// Used internally
|
||||||
|
var/datum/file/program/program = null // the active program (null if defaulting to os)
|
||||||
|
var/datum/file/program/os = null // the base code of the machine (os or hardcoded program)
|
||||||
|
|
||||||
|
// If you want the computer to have a UPS, add a battery during construction. This is useful for things like
|
||||||
|
// the comms computer, solar trackers, etc, that should function when all else is off.
|
||||||
|
// Laptops will require batteries and have no mains power.
|
||||||
|
|
||||||
|
var/obj/item/weapon/cell/battery = null // uninterruptible power supply aka battery
|
||||||
|
|
||||||
|
|
||||||
|
verb/ResetComputer()
|
||||||
|
set name = "Reset Computer"
|
||||||
|
set category = "Object"
|
||||||
|
set src in view(1)
|
||||||
|
Reset()
|
||||||
|
|
||||||
|
New(var/L, var/built = 0)
|
||||||
|
..()
|
||||||
|
spawn(2)
|
||||||
|
power_change()
|
||||||
|
|
||||||
|
if(show_keyboard)
|
||||||
|
var/kb_state = "kb[rand(1,15)]"
|
||||||
|
kb = image('icons/obj/computer3.dmi',icon_state=kb_state)
|
||||||
|
overlays += kb
|
||||||
|
|
||||||
|
if(!built)
|
||||||
|
if(!circuit || !istype(circuit))
|
||||||
|
circuit = new(src)
|
||||||
|
if(circuit.OS)
|
||||||
|
os = circuit.OS
|
||||||
|
circuit.OS.computer = src
|
||||||
|
else
|
||||||
|
os = null
|
||||||
|
|
||||||
|
// separated into its own function because blech
|
||||||
|
spawn_parts()
|
||||||
|
|
||||||
|
if(default_prog) // Add the default software if applicable
|
||||||
|
var/datum/file/program/P = new default_prog
|
||||||
|
if(hdd)
|
||||||
|
hdd.addfile(P,1)
|
||||||
|
program = P
|
||||||
|
if(!os)
|
||||||
|
os = P
|
||||||
|
else if(floppy)
|
||||||
|
floppy.inserted = new(floppy)
|
||||||
|
floppy.files = floppy.inserted.files
|
||||||
|
floppy.addfile(P)
|
||||||
|
program = P
|
||||||
|
else
|
||||||
|
circuit.OS = P
|
||||||
|
circuit.OS.computer = src
|
||||||
|
os = circuit.OS
|
||||||
|
circuit.name = "Circuitboard ([P])"
|
||||||
|
|
||||||
|
|
||||||
|
if(hdd) // Spawn files
|
||||||
|
for(var/typekey in spawn_files)
|
||||||
|
hdd.addfile(new typekey,1)
|
||||||
|
|
||||||
|
if(program)
|
||||||
|
program.execute(os)
|
||||||
|
update_icon()
|
||||||
|
|
||||||
|
|
||||||
|
proc/update_spawn_files()
|
||||||
|
for(var/typekey in spawn_files)
|
||||||
|
hdd.addfile(new typekey,1)
|
||||||
|
|
||||||
|
proc/spawn_parts()
|
||||||
|
for(var/typekey in spawn_parts)
|
||||||
|
|
||||||
|
if(ispath(typekey,/obj/item/part/computer/storage/removable))
|
||||||
|
if(floppy) continue
|
||||||
|
floppy = new typekey(src)
|
||||||
|
floppy.init(src)
|
||||||
|
continue
|
||||||
|
if(ispath(typekey,/obj/item/part/computer/storage/hdd))
|
||||||
|
if(hdd) continue
|
||||||
|
hdd = new typekey(src)
|
||||||
|
hdd.init(src)
|
||||||
|
continue
|
||||||
|
|
||||||
|
if(ispath(typekey,/obj/item/part/computer/networking/cameras))
|
||||||
|
if(camnet) continue
|
||||||
|
camnet = new typekey(src)
|
||||||
|
camnet.init(src)
|
||||||
|
continue
|
||||||
|
if(ispath(typekey,/obj/item/part/computer/networking/radio))
|
||||||
|
if(radio) continue
|
||||||
|
radio = new typekey(src)
|
||||||
|
radio.init(src)
|
||||||
|
continue
|
||||||
|
if(ispath(typekey,/obj/item/part/computer/networking))
|
||||||
|
if(net) continue
|
||||||
|
net = new typekey(src)
|
||||||
|
net.init(src)
|
||||||
|
continue
|
||||||
|
|
||||||
|
if(ispath(typekey,/obj/item/part/computer/cardslot))
|
||||||
|
if(cardslot) continue
|
||||||
|
cardslot = new typekey(src)
|
||||||
|
cardslot.init(src)
|
||||||
|
continue
|
||||||
|
if(ispath(typekey,/obj/item/part/computer/ai_holder))
|
||||||
|
if(cradle) continue
|
||||||
|
cradle = new typekey(src)
|
||||||
|
cradle.init(src)
|
||||||
|
if(ispath(typekey,/obj/item/part/computer/toybox))
|
||||||
|
if(toybox) continue
|
||||||
|
toybox = new typekey(src)
|
||||||
|
toybox.init(src)
|
||||||
|
continue
|
||||||
|
|
||||||
|
if(ispath(typekey,/obj/item/weapon/cell))
|
||||||
|
if(battery) continue
|
||||||
|
battery = new typekey(src)
|
||||||
|
continue
|
||||||
|
|
||||||
|
proc/Reset(var/error = 0)
|
||||||
|
for(var/mob/living/M in range(1))
|
||||||
|
M << browse(null,"window=\ref[src]")
|
||||||
|
if(program)
|
||||||
|
program.Reset()
|
||||||
|
program = null
|
||||||
|
req_access = os.req_access
|
||||||
|
update_icon()
|
||||||
|
|
||||||
|
// todo does this do enough
|
||||||
|
|
||||||
|
|
||||||
|
meteorhit(var/obj/O as obj)
|
||||||
|
for(var/x in verbs)
|
||||||
|
verbs -= x
|
||||||
|
set_broken()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
emp_act(severity)
|
||||||
|
if(prob(20/severity)) set_broken()
|
||||||
|
..()
|
||||||
|
|
||||||
|
|
||||||
|
ex_act(severity)
|
||||||
|
switch(severity)
|
||||||
|
if(1.0)
|
||||||
|
del(src)
|
||||||
|
return
|
||||||
|
if(2.0)
|
||||||
|
if (prob(25))
|
||||||
|
del(src)
|
||||||
|
return
|
||||||
|
if (prob(50))
|
||||||
|
for(var/x in verbs)
|
||||||
|
verbs -= x
|
||||||
|
set_broken()
|
||||||
|
if(3.0)
|
||||||
|
if (prob(25))
|
||||||
|
for(var/x in verbs)
|
||||||
|
verbs -= x
|
||||||
|
set_broken()
|
||||||
|
else
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
blob_act()
|
||||||
|
if (prob(75))
|
||||||
|
set_broken()
|
||||||
|
density = 0
|
||||||
|
|
||||||
|
/*
|
||||||
|
Computers have the capability to use a battery backup.
|
||||||
|
Note that auto_use_power's return value is strictly whether
|
||||||
|
or not it is successfully powered.
|
||||||
|
|
||||||
|
This allows laptops, and also allows you to create computers that
|
||||||
|
remain active when:
|
||||||
|
|
||||||
|
* the APC is destroy'd, emag'd, malf'd, emp'd, ninja'd etc
|
||||||
|
* the computer was built in an unpowered zone
|
||||||
|
* the station power is out, cables are cut, etc
|
||||||
|
|
||||||
|
By default, most computers will NOT spawn with a battery backup, and
|
||||||
|
SHOULD not. Players can take apart a computer to insert the battery
|
||||||
|
if they want to ensure, for example, the AI upload remains when the
|
||||||
|
power is cut off.
|
||||||
|
|
||||||
|
Make sure to use use_power() a bunch in peripherals code
|
||||||
|
*/
|
||||||
|
auto_use_power()
|
||||||
|
if(!powered(power_channel))
|
||||||
|
if(battery && battery.charge > 0)
|
||||||
|
if(use_power == 1)
|
||||||
|
battery.use(idle_power_usage)
|
||||||
|
else
|
||||||
|
battery.use(active_power_usage)
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
if(src.use_power == 1)
|
||||||
|
use_power(idle_power_usage,power_channel)
|
||||||
|
else if(src.use_power >= 2)
|
||||||
|
use_power(active_power_usage,power_channel)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
use_power(var/amount, var/chan = -1)
|
||||||
|
if(chan == -1)
|
||||||
|
chan = power_channel
|
||||||
|
|
||||||
|
var/area/A = get_area(loc)
|
||||||
|
if(istype(A) && A.master && A.master.powered(chan))
|
||||||
|
A.master.use_power(amount, chan)
|
||||||
|
else if(battery && battery.charge > 0)
|
||||||
|
battery.use(amount)
|
||||||
|
|
||||||
|
power_change()
|
||||||
|
if( !powered(power_channel) && (!battery || battery.charge <= 0) )
|
||||||
|
stat |= NOPOWER
|
||||||
|
else
|
||||||
|
stat &= ~NOPOWER
|
||||||
|
|
||||||
|
process()
|
||||||
|
auto_use_power()
|
||||||
|
power_change()
|
||||||
|
update_icon()
|
||||||
|
if(stat & (NOPOWER|BROKEN))
|
||||||
|
return
|
||||||
|
|
||||||
|
if(program)
|
||||||
|
program.process()
|
||||||
|
return
|
||||||
|
|
||||||
|
if(os)
|
||||||
|
program = os
|
||||||
|
os.process()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
proc/set_broken()
|
||||||
|
icon_state = "computer_b"
|
||||||
|
stat |= BROKEN
|
||||||
|
crit_fail = 1
|
||||||
|
if(program)
|
||||||
|
program.error = BUSTED_ASS_COMPUTER
|
||||||
|
if(os)
|
||||||
|
os.error = BUSTED_ASS_COMPUTER
|
||||||
|
|
||||||
|
attackby(I as obj, mob/user as mob)
|
||||||
|
if(istype(I, /obj/item/weapon/screwdriver) && allow_disassemble)
|
||||||
|
disassemble(user)
|
||||||
|
return
|
||||||
|
|
||||||
|
/*
|
||||||
|
+++++++++++
|
||||||
|
|IMPORTANT| If you add a peripheral, put it in this list
|
||||||
|
+++++++++++ --------------------------------------------
|
||||||
|
*/
|
||||||
|
var/list/peripherals = list(hdd,floppy,radio,net,cardslot,cradle) //camnet, toybox removed
|
||||||
|
|
||||||
|
var/list/p_list = list()
|
||||||
|
for(var/obj/item/part/computer/C in peripherals)
|
||||||
|
if(!isnull(C) && C.allow_attackby(I,user))
|
||||||
|
p_list += C
|
||||||
|
if(p_list.len)
|
||||||
|
var/obj/item/part/computer/P = null
|
||||||
|
if(p_list.len == 1)
|
||||||
|
P = p_list[1]
|
||||||
|
else
|
||||||
|
P = input(user,"Which component?") as null|anything in p_list
|
||||||
|
|
||||||
|
if(P)
|
||||||
|
P.attackby(I,user)
|
||||||
|
return
|
||||||
|
..()
|
||||||
|
|
||||||
|
attack_hand(var/mob/user as mob)
|
||||||
|
if(stat)
|
||||||
|
Reset()
|
||||||
|
return
|
||||||
|
|
||||||
|
// I don't want to deal with computers that you can't walk up to and use
|
||||||
|
// there is still cardauth anyway
|
||||||
|
//if(!allowed(user))
|
||||||
|
// return
|
||||||
|
|
||||||
|
if(program)
|
||||||
|
if(program.computer != src) // floppy disk may have been removed, etc
|
||||||
|
Reset()
|
||||||
|
attack_hand(user)
|
||||||
|
return
|
||||||
|
if(program.error)
|
||||||
|
Crash(program.error)
|
||||||
|
return
|
||||||
|
user.set_machine(src)
|
||||||
|
program.attack_hand(user) // will normally translate to program/interact()
|
||||||
|
return
|
||||||
|
|
||||||
|
if(os)
|
||||||
|
program = os
|
||||||
|
user.set_machine(src)
|
||||||
|
os.attack_hand(user)
|
||||||
|
return
|
||||||
|
|
||||||
|
user << "\The [src] won't boot!"
|
||||||
|
|
||||||
|
attack_ai(var/mob/user as mob) // copypasta because server racks lose attack_hand()
|
||||||
|
if(stat)
|
||||||
|
Reset()
|
||||||
|
return
|
||||||
|
|
||||||
|
if(program)
|
||||||
|
if(program.computer != src) // floppy disk may have been removed, etc
|
||||||
|
Reset()
|
||||||
|
attack_ai(user)
|
||||||
|
return
|
||||||
|
if(program.error)
|
||||||
|
Crash(program.error)
|
||||||
|
return
|
||||||
|
user.set_machine(src)
|
||||||
|
program.attack_hand(user) // will normally translate to program/interact()
|
||||||
|
return
|
||||||
|
|
||||||
|
if(os)
|
||||||
|
program = os
|
||||||
|
user.set_machine(src)
|
||||||
|
os.attack_hand(user)
|
||||||
|
return
|
||||||
|
|
||||||
|
user << "\The [src] won't boot!"
|
||||||
|
|
||||||
|
interact()
|
||||||
|
if(stat)
|
||||||
|
Reset()
|
||||||
|
return
|
||||||
|
if(!allowed(usr) || !usr in view(1))
|
||||||
|
usr.unset_machine()
|
||||||
|
return
|
||||||
|
|
||||||
|
if(program)
|
||||||
|
program.interact()
|
||||||
|
return
|
||||||
|
|
||||||
|
if(os)
|
||||||
|
program = os
|
||||||
|
os.interact()
|
||||||
|
return
|
||||||
|
|
||||||
|
update_icon()
|
||||||
|
if(legacy_icon)
|
||||||
|
icon_state = initial(icon_state)
|
||||||
|
// Broken
|
||||||
|
if(stat & BROKEN)
|
||||||
|
icon_state += "b"
|
||||||
|
|
||||||
|
// Powered
|
||||||
|
else if(stat & NOPOWER)
|
||||||
|
icon_state = initial(icon_state)
|
||||||
|
icon_state += "0"
|
||||||
|
return
|
||||||
|
if(stat)
|
||||||
|
overlays.Cut()
|
||||||
|
return
|
||||||
|
if(program)
|
||||||
|
overlays = list(program.overlay)
|
||||||
|
if(show_keyboard)
|
||||||
|
overlays += kb
|
||||||
|
name = "[program.name] [initial(name)]"
|
||||||
|
else if(os)
|
||||||
|
overlays = list(os.overlay)
|
||||||
|
if(show_keyboard)
|
||||||
|
overlays += kb
|
||||||
|
name = initial(name)
|
||||||
|
else
|
||||||
|
var/global/image/generic = image('icons/obj/computer3.dmi',icon_state="osod") // orange screen of death
|
||||||
|
overlays = list(generic)
|
||||||
|
if(show_keyboard)
|
||||||
|
overlays += kb
|
||||||
|
name = initial(name) + " (orange screen of death)"
|
||||||
|
|
||||||
|
/obj/machinery/computer3/wall_comp
|
||||||
|
name = "terminal"
|
||||||
|
icon = 'icons/obj/computer3.dmi'
|
||||||
|
icon_state = "wallframe"
|
||||||
|
density = 0
|
||||||
|
pixel_y = -3
|
||||||
|
show_keyboard = 0
|
||||||
34
code/WorkInProgress/computer3/computer3_notes.dm
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
1. Do NOT confuse Computer.Crash(errorcode) with byond CRASH(message)
|
||||||
|
2 Do NOT talk about fight club.
|
||||||
|
3 If this if your first night here, you have to crash the computer.
|
||||||
|
4 Where am I?
|
||||||
|
5 Someone help me, please...
|
||||||
|
6. Be sure to use computer.use_power() appropriately. Laptops should run out of battery occasionally.
|
||||||
|
7 Everyone fights, no-one quits. If you don't do your job, I'll crash you myself.
|
||||||
|
6 Don't allow more than 42 angels to dance on the head of a pin.
|
||||||
|
5. Once a computer has spawned, they are just like the rest, except when they aren't.
|
||||||
|
4 Get me four glasses of apple juice.
|
||||||
|
3. Components are only added or removed when disassembled and rebuilt. However, they may be EMP'd.
|
||||||
|
2 Only you can prevent friendly fire.
|
||||||
|
1 Do not talk about fight club.
|
||||||
|
2. If a component subtype needs to be handled separately (removable drives, radio networks), declare it separately.
|
||||||
|
3 Television rules the nation
|
||||||
|
4. interactable() does all the sanity checks, adds fingerprints, sets machines, initializes popup, and makes a damn fine pot of coffee.
|
||||||
|
5 Love conquers all.
|
||||||
|
6 If at all possible, do a barrel roll.
|
||||||
|
7. Don't forget to use the network verify function to make sure you still have access to remote machines.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TODO:
|
||||||
|
* "Nothing left to call the shuttle" check
|
||||||
|
* Communications terminal printing - move it to a printer of some sort? Make a printer peripheral--but then which ones print the comms?
|
||||||
|
* Remove the partially transparent border on program screens, as it clashes with some frames
|
||||||
|
* Chop the corners on program screens now that screen sizes are standard
|
||||||
|
* ntos:
|
||||||
|
* Needs a text editor/viewer
|
||||||
|
* Needs file copy and file move - I think I know how I'm gonna do it
|
||||||
|
* Needs a peripheral view (eject disks and cards, network actions, ???)
|
||||||
|
*/
|
||||||
254
code/WorkInProgress/computer3/computers/HolodeckControl.dm
Normal file
@@ -0,0 +1,254 @@
|
|||||||
|
/obj/machinery/computer3/HolodeckControl
|
||||||
|
default_prog = /datum/file/program/holodeck
|
||||||
|
|
||||||
|
|
||||||
|
// Todo: I personally would like to add a second holodeck in the theater for making appropriate playgrounds.
|
||||||
|
// perhaps a holodeck association keyfile?
|
||||||
|
// One more thing while I'm here
|
||||||
|
// C3 allows multiple computers to run this program, but it was designed on the assumption that only one would, ever
|
||||||
|
// I am not going to add or remove anything right now, I'm just porting it
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/program/holodeck
|
||||||
|
name = "Holodeck Control Console"
|
||||||
|
desc = "Used to control a nearby holodeck."
|
||||||
|
active_state = "holocontrol"
|
||||||
|
var/area/linkedholodeck = null
|
||||||
|
var/area/target = null
|
||||||
|
var/active = 0
|
||||||
|
var/list/holographic_items = list()
|
||||||
|
var/damaged = 0
|
||||||
|
var/last_change = 0
|
||||||
|
var/emagged = 0
|
||||||
|
|
||||||
|
|
||||||
|
interact()
|
||||||
|
if(!interactable())
|
||||||
|
return
|
||||||
|
var/dat = "<h3>Current Loaded Programs</h3>"
|
||||||
|
dat += "<A href='?src=\ref[src];emptycourt'>((Empty Court)</font>)</A><BR>"
|
||||||
|
dat += "<A href='?src=\ref[src];boxingcourt'>((Boxing Court)</font>)</A><BR>"
|
||||||
|
dat += "<A href='?src=\ref[src];basketball'>((Basketball Court)</font>)</A><BR>"
|
||||||
|
dat += "<A href='?src=\ref[src];thunderdomecourt'>((Thunderdome Court)</font>)</A><BR>"
|
||||||
|
dat += "<A href='?src=\ref[src];beach'>((Beach)</font>)</A><BR>"
|
||||||
|
// dat += "<A href='?src=\ref[src];turnoff'>((Shutdown System)</font>)</A><BR>"
|
||||||
|
|
||||||
|
dat += "<span class='notice'>Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.</span><BR>"
|
||||||
|
|
||||||
|
if(emagged)
|
||||||
|
dat += "<A href='?src=\ref[src];burntest'>(<font color=red>Begin Atmospheric Burn Simulation</font>)</A><BR>"
|
||||||
|
dat += "Ensure the holodeck is empty before testing.<BR>"
|
||||||
|
dat += "<BR>"
|
||||||
|
dat += "<A href='?src=\ref[src];wildlifecarp'>(<font color=red>Begin Wildlife Simulation</font>)</A><BR>"
|
||||||
|
dat += "Ensure the holodeck is empty before testing.<BR>"
|
||||||
|
dat += "<BR>"
|
||||||
|
if(issilicon(usr))
|
||||||
|
dat += "<A href='?src=\ref[src];AIoverride'>(<font color=green>Re-Enable Safety Protocols?</font>)</A><BR>"
|
||||||
|
dat += "Safety Protocols are <font class='bad'>DISABLED</font><BR>"
|
||||||
|
else
|
||||||
|
if(issilicon(usr))
|
||||||
|
dat += "<A href='?src=\ref[src];AIoverride'>(<font color=red>Override Safety Protocols?</font>)</A><BR>"
|
||||||
|
dat += "<BR>"
|
||||||
|
dat += "Safety Protocols are <font class='good'>ENABLED</font><BR>"
|
||||||
|
|
||||||
|
popup.set_content(dat)
|
||||||
|
popup.open()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
Topic(var/href, var/list/href_list)
|
||||||
|
if(!interactable() || ..(href,href_list))
|
||||||
|
return
|
||||||
|
|
||||||
|
if("emptycourt" in href_list)
|
||||||
|
target = locate(/area/holodeck/source_emptycourt)
|
||||||
|
if(target)
|
||||||
|
loadProgram(target)
|
||||||
|
|
||||||
|
else if("boxingcourt" in href_list)
|
||||||
|
target = locate(/area/holodeck/source_boxingcourt)
|
||||||
|
if(target)
|
||||||
|
loadProgram(target)
|
||||||
|
|
||||||
|
else if("basketball" in href_list)
|
||||||
|
target = locate(/area/holodeck/source_basketball)
|
||||||
|
if(target)
|
||||||
|
loadProgram(target)
|
||||||
|
|
||||||
|
else if("thunderdomecourt" in href_list)
|
||||||
|
target = locate(/area/holodeck/source_thunderdomecourt)
|
||||||
|
if(target)
|
||||||
|
loadProgram(target)
|
||||||
|
|
||||||
|
else if("beach" in href_list)
|
||||||
|
target = locate(/area/holodeck/source_beach)
|
||||||
|
if(target)
|
||||||
|
loadProgram(target)
|
||||||
|
|
||||||
|
else if("turnoff" in href_list)
|
||||||
|
target = locate(/area/holodeck/source_plating)
|
||||||
|
if(target)
|
||||||
|
loadProgram(target)
|
||||||
|
|
||||||
|
else if("burntest" in href_list)
|
||||||
|
if(!emagged) return
|
||||||
|
target = locate(/area/holodeck/source_burntest)
|
||||||
|
if(target)
|
||||||
|
loadProgram(target)
|
||||||
|
|
||||||
|
else if("wildlifecarp" in href_list)
|
||||||
|
if(!emagged) return
|
||||||
|
target = locate(/area/holodeck/source_wildlife)
|
||||||
|
if(target)
|
||||||
|
loadProgram(target)
|
||||||
|
|
||||||
|
else if("AIoverride" in href_list)
|
||||||
|
if(!issilicon(usr)) return
|
||||||
|
emagged = !emagged
|
||||||
|
if(emagged)
|
||||||
|
message_admins("[key_name_admin(usr)] overrode the holodeck's safeties")
|
||||||
|
log_game("[key_name(usr)] overrided the holodeck's safeties")
|
||||||
|
else
|
||||||
|
message_admins("[key_name_admin(usr)] restored the holodeck's safeties")
|
||||||
|
log_game("[key_name(usr)] restored the holodeck's safeties")
|
||||||
|
|
||||||
|
interact()
|
||||||
|
return
|
||||||
|
|
||||||
|
Reset()
|
||||||
|
emergencyShutdown()
|
||||||
|
|
||||||
|
process()
|
||||||
|
if(active)
|
||||||
|
if(!checkInteg(linkedholodeck))
|
||||||
|
damaged = 1
|
||||||
|
target = locate(/area/holodeck/source_plating)
|
||||||
|
if(target)
|
||||||
|
loadProgram(target)
|
||||||
|
active = 0
|
||||||
|
for(var/mob/M in range(10,src))
|
||||||
|
M.show_message("The holodeck overloads!")
|
||||||
|
|
||||||
|
|
||||||
|
for(var/turf/T in linkedholodeck)
|
||||||
|
if(prob(30))
|
||||||
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||||
|
s.set_up(2, 1, T)
|
||||||
|
s.start()
|
||||||
|
T.ex_act(3)
|
||||||
|
T.hotspot_expose(1000,500,1)
|
||||||
|
|
||||||
|
|
||||||
|
for(var/item in holographic_items)
|
||||||
|
if(!(get_turf(item) in linkedholodeck))
|
||||||
|
derez(item, 0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
proc/derez(var/obj/obj , var/silent = 1)
|
||||||
|
holographic_items.Remove(obj)
|
||||||
|
|
||||||
|
if(obj == null)
|
||||||
|
return
|
||||||
|
|
||||||
|
if(isobj(obj))
|
||||||
|
var/mob/M = obj.loc
|
||||||
|
if(ismob(M))
|
||||||
|
M.u_equip(obj)
|
||||||
|
M.update_icons() //so their overlays update
|
||||||
|
|
||||||
|
if(!silent)
|
||||||
|
var/obj/oldobj = obj
|
||||||
|
obj.visible_message("The [oldobj.name] fades away!")
|
||||||
|
del(obj)
|
||||||
|
|
||||||
|
proc/checkInteg(var/area/A)
|
||||||
|
for(var/turf/T in A)
|
||||||
|
if(istype(T, /turf/space))
|
||||||
|
return 0
|
||||||
|
|
||||||
|
return 1
|
||||||
|
|
||||||
|
proc/togglePower(var/toggleOn = 0)
|
||||||
|
|
||||||
|
if(toggleOn)
|
||||||
|
var/area/targetsource = locate(/area/holodeck/source_emptycourt)
|
||||||
|
holographic_items = targetsource.copy_contents_to(linkedholodeck)
|
||||||
|
|
||||||
|
spawn(30)
|
||||||
|
for(var/obj/effect/landmark/L in linkedholodeck)
|
||||||
|
if(L.name=="Atmospheric Test Start")
|
||||||
|
spawn(20)
|
||||||
|
var/turf/T = get_turf(L)
|
||||||
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||||
|
s.set_up(2, 1, T)
|
||||||
|
s.start()
|
||||||
|
if(T)
|
||||||
|
T.temperature = 5000
|
||||||
|
T.hotspot_expose(50000,50000,1)
|
||||||
|
|
||||||
|
active = 1
|
||||||
|
else
|
||||||
|
for(var/item in holographic_items)
|
||||||
|
derez(item)
|
||||||
|
var/area/targetsource = locate(/area/holodeck/source_plating)
|
||||||
|
targetsource.copy_contents_to(linkedholodeck , 1)
|
||||||
|
active = 0
|
||||||
|
|
||||||
|
|
||||||
|
proc/loadProgram(var/area/A)
|
||||||
|
|
||||||
|
if(world.time < (last_change + 25))
|
||||||
|
if(world.time < (last_change + 15))//To prevent super-spam clicking, reduced process size and annoyance -Sieve
|
||||||
|
return
|
||||||
|
for(var/mob/M in range(3,src))
|
||||||
|
M.show_message("\b ERROR. Recalibrating projetion apparatus.")
|
||||||
|
last_change = world.time
|
||||||
|
return
|
||||||
|
|
||||||
|
last_change = world.time
|
||||||
|
active = 1
|
||||||
|
|
||||||
|
for(var/item in holographic_items)
|
||||||
|
derez(item)
|
||||||
|
|
||||||
|
for(var/obj/effect/decal/cleanable/blood/B in linkedholodeck)
|
||||||
|
del(B)
|
||||||
|
|
||||||
|
for(var/mob/living/simple_animal/hostile/carp/C in linkedholodeck)
|
||||||
|
del(C)
|
||||||
|
|
||||||
|
holographic_items = A.copy_contents_to(linkedholodeck , 1)
|
||||||
|
|
||||||
|
if(emagged)
|
||||||
|
for(var/obj/item/weapon/holo/esword/H in linkedholodeck)
|
||||||
|
H.damtype = BRUTE
|
||||||
|
|
||||||
|
spawn(30)
|
||||||
|
for(var/obj/effect/landmark/L in linkedholodeck)
|
||||||
|
if(L.name=="Atmospheric Test Start")
|
||||||
|
spawn(20)
|
||||||
|
var/turf/T = get_turf(L)
|
||||||
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||||
|
s.set_up(2, 1, T)
|
||||||
|
s.start()
|
||||||
|
if(T)
|
||||||
|
T.temperature = 5000
|
||||||
|
T.hotspot_expose(50000,50000,1)
|
||||||
|
if(L.name=="Holocarp Spawn")
|
||||||
|
new /mob/living/simple_animal/hostile/carp(L.loc)
|
||||||
|
|
||||||
|
|
||||||
|
proc/emergencyShutdown()
|
||||||
|
//Get rid of any items
|
||||||
|
for(var/item in holographic_items)
|
||||||
|
derez(item)
|
||||||
|
//Turn it back to the regular non-holographic room
|
||||||
|
target = locate(/area/holodeck/source_plating)
|
||||||
|
if(target)
|
||||||
|
loadProgram(target)
|
||||||
|
|
||||||
|
var/area/targetsource = locate(/area/holodeck/source_plating)
|
||||||
|
targetsource.copy_contents_to(linkedholodeck , 1)
|
||||||
|
active = 0
|
||||||
|
|
||||||
47
code/WorkInProgress/computer3/computers/Operating.dm
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
/obj/machinery/computer3/operating
|
||||||
|
default_prog = /datum/file/program/op_monitor
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/prox)
|
||||||
|
icon_state = "frame-med"
|
||||||
|
|
||||||
|
/datum/file/program/op_monitor
|
||||||
|
name = "operating table monitor"
|
||||||
|
desc = "Monitors patient status during surgery."
|
||||||
|
active_state = "operating"
|
||||||
|
var/mob/living/carbon/human/patient = null
|
||||||
|
var/obj/machinery/optable/table = null
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/program/op_monitor/interact()
|
||||||
|
if(!interactable())
|
||||||
|
return
|
||||||
|
if(!computer.net)
|
||||||
|
computer.Crash(MISSING_PERIPHERAL)
|
||||||
|
return
|
||||||
|
table = computer.net.connect_to(/obj/machinery/optable,table)
|
||||||
|
|
||||||
|
var/dat = ""
|
||||||
|
if(table)
|
||||||
|
dat += "<B>Patient information:</B><BR>"
|
||||||
|
if(src.table && (src.table.check_victim()))
|
||||||
|
src.patient = src.table.victim
|
||||||
|
dat += {"<B>Patient Status:</B> [patient.stat ? "Non-Responsive" : "Stable"]<BR>
|
||||||
|
<B>Blood Type:</B> [patient.b_type]<BR>
|
||||||
|
<BR>
|
||||||
|
<B>Health:</B> [round(patient.health)]<BR>
|
||||||
|
<B>Brute Damage:</B> [round(patient.getBruteLoss())]<BR>
|
||||||
|
<B>Toxins Damage:</B> [round(patient.getToxLoss())]<BR>
|
||||||
|
<B>Fire Damage:</B> [round(patient.getFireLoss())]<BR>
|
||||||
|
<B>Suffocation Damage:</B> [round(patient.getOxyLoss())]<BR>
|
||||||
|
"}
|
||||||
|
else
|
||||||
|
src.patient = null
|
||||||
|
dat += "<B>No patient detected</B>"
|
||||||
|
else
|
||||||
|
dat += "<B>Operating table not found.</B>"
|
||||||
|
|
||||||
|
popup.set_content(dat)
|
||||||
|
popup.open()
|
||||||
|
/datum/file/program/op_monitor/Topic()
|
||||||
|
if(!interactable())
|
||||||
|
return
|
||||||
|
..()
|
||||||
117
code/WorkInProgress/computer3/computers/aifixer.dm
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
/obj/machinery/computer3/aifixer
|
||||||
|
default_prog = /datum/file/program/aifixer
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd/big,/obj/item/part/computer/ai_holder)
|
||||||
|
icon_state = "frame-rnd"
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/program/aifixer
|
||||||
|
name = "AI system integrity restorer"
|
||||||
|
desc = "Repairs and revives artificial intelligence cores."
|
||||||
|
image = 'icons/ntos/airestore.png'
|
||||||
|
active_state = "ai-fixer-empty"
|
||||||
|
req_access = list(access_captain, access_robotics, access_heads)
|
||||||
|
|
||||||
|
update_icon()
|
||||||
|
if(!computer || !computer.cradle)
|
||||||
|
overlay.icon_state = "ai-fixer-404"
|
||||||
|
return // what
|
||||||
|
|
||||||
|
if(!computer.cradle.occupant)
|
||||||
|
overlay.icon_state = "ai-fixer-empty"
|
||||||
|
else
|
||||||
|
if (computer.cradle.occupant.health >= 0 && computer.cradle.occupant.stat != 2)
|
||||||
|
overlay.icon_state = "ai-fixer-full"
|
||||||
|
else
|
||||||
|
overlay.icon_state = "ai-fixer-404"
|
||||||
|
computer.update_icon()
|
||||||
|
|
||||||
|
interact()
|
||||||
|
if(!interactable())
|
||||||
|
return
|
||||||
|
|
||||||
|
if(!computer.cradle)
|
||||||
|
computer.Crash(MISSING_PERIPHERAL)
|
||||||
|
return
|
||||||
|
|
||||||
|
popup.set_content(aifixer_menu())
|
||||||
|
popup.open()
|
||||||
|
return
|
||||||
|
|
||||||
|
proc/aifixer_menu()
|
||||||
|
var/dat = ""
|
||||||
|
if (computer.cradle.occupant)
|
||||||
|
var/laws
|
||||||
|
dat += "<h3>Stored AI: [computer.cradle.occupant.name]</h3>"
|
||||||
|
dat += "<b>System integrity:</b> [(computer.cradle.occupant.health+100)/2]%<br>"
|
||||||
|
|
||||||
|
if (computer.cradle.occupant.laws.zeroth)
|
||||||
|
laws += "<b>0:</b> [computer.cradle.occupant.laws.zeroth]<BR>"
|
||||||
|
|
||||||
|
var/number = 1
|
||||||
|
for (var/index = 1, index <= computer.cradle.occupant.laws.inherent.len, index++)
|
||||||
|
var/law = computer.cradle.occupant.laws.inherent[index]
|
||||||
|
if (length(law) > 0)
|
||||||
|
laws += "<b>[number]:</b> [law]<BR>"
|
||||||
|
number++
|
||||||
|
|
||||||
|
for (var/index = 1, index <= computer.cradle.occupant.laws.supplied.len, index++)
|
||||||
|
var/law = computer.cradle.occupant.laws.supplied[index]
|
||||||
|
if (length(law) > 0)
|
||||||
|
laws += "<b>[number]:</b> [law]<BR>"
|
||||||
|
number++
|
||||||
|
|
||||||
|
dat += "<b>Laws:</b><br>[laws]<br>"
|
||||||
|
|
||||||
|
if (computer.cradle.occupant.stat == 2)
|
||||||
|
dat += "<span class='bad'>AI non-functional</span>"
|
||||||
|
else
|
||||||
|
dat += "<span class='good'>AI functional</span>"
|
||||||
|
if (!computer.cradle.busy)
|
||||||
|
dat += "<br><br>[topic_link(src,"fix","Begin Reconstruction")]"
|
||||||
|
else
|
||||||
|
dat += "<br><br>Reconstruction in process, please wait.<br>"
|
||||||
|
dat += "<br>[topic_link(src,"close","Close")]"
|
||||||
|
return dat
|
||||||
|
|
||||||
|
Topic(var/href, var/list/href_list)
|
||||||
|
if(!interactable() || !computer.cradle || ..(href,href_list))
|
||||||
|
return
|
||||||
|
|
||||||
|
if ("fix" in href_list)
|
||||||
|
var/mob/living/silicon/ai/occupant = computer.cradle.occupant
|
||||||
|
if(!occupant) return
|
||||||
|
|
||||||
|
computer.cradle.busy = 1
|
||||||
|
computer.overlays += image('icons/obj/computer.dmi', "ai-fixer-on")
|
||||||
|
|
||||||
|
var/i = 0
|
||||||
|
while (occupant.health < 100)
|
||||||
|
if(!computer || (computer.stat&~MAINT)) // takes some time, keep checking
|
||||||
|
break
|
||||||
|
|
||||||
|
occupant.adjustOxyLoss(-1)
|
||||||
|
occupant.adjustFireLoss(-1)
|
||||||
|
occupant.adjustToxLoss(-1)
|
||||||
|
occupant.adjustBruteLoss(-1)
|
||||||
|
occupant.updatehealth()
|
||||||
|
if (occupant.health >= 0 && computer.cradle.occupant.stat == 2)
|
||||||
|
occupant.stat = 0
|
||||||
|
occupant.lying = 0
|
||||||
|
dead_mob_list -= occupant
|
||||||
|
living_mob_list += occupant
|
||||||
|
update_icon()
|
||||||
|
|
||||||
|
i++
|
||||||
|
if(i == 5)
|
||||||
|
computer.use_power(50) // repairing an AI is nontrivial. laptop battery may not be enough.
|
||||||
|
computer.power_change() // if the power runs out, set stat
|
||||||
|
i = 0
|
||||||
|
|
||||||
|
computer.updateUsrDialog()
|
||||||
|
|
||||||
|
sleep(10)
|
||||||
|
computer.cradle.busy = 0
|
||||||
|
computer.overlays -= image('icons/obj/computer.dmi', "ai-fixer-on")
|
||||||
|
|
||||||
|
computer.updateUsrDialog()
|
||||||
|
return
|
||||||
180
code/WorkInProgress/computer3/computers/arcade.dm
Normal file
@@ -0,0 +1,180 @@
|
|||||||
|
/obj/machinery/computer3/arcade
|
||||||
|
default_prog = /datum/file/program/arcade
|
||||||
|
spawn_parts = list(/obj/item/part/computer/toybox) //NO HDD - the game is loaded on the circuitboard's OS slot
|
||||||
|
|
||||||
|
/obj/item/part/computer/toybox
|
||||||
|
var/list/prizes = list( /obj/item/weapon/storage/box/snappops = 2,
|
||||||
|
/obj/item/toy/blink = 2,
|
||||||
|
/obj/item/clothing/under/syndicate/tacticool = 2,
|
||||||
|
/obj/item/toy/sword = 2,
|
||||||
|
/obj/item/toy/gun = 2,
|
||||||
|
/obj/item/toy/crossbow = 2,
|
||||||
|
/obj/item/clothing/suit/syndicatefake = 2,
|
||||||
|
/obj/item/weapon/storage/fancy/crayons = 2,
|
||||||
|
/obj/item/toy/spinningtoy = 2,
|
||||||
|
/obj/item/toy/prize/ripley = 1,
|
||||||
|
/obj/item/toy/prize/fireripley = 1,
|
||||||
|
/obj/item/toy/prize/deathripley = 1,
|
||||||
|
/obj/item/toy/prize/gygax = 1,
|
||||||
|
/obj/item/toy/prize/durand = 1,
|
||||||
|
/obj/item/toy/prize/honk = 1,
|
||||||
|
/obj/item/toy/prize/marauder = 1,
|
||||||
|
/obj/item/toy/prize/seraph = 1,
|
||||||
|
/obj/item/toy/prize/mauler = 1,
|
||||||
|
/obj/item/toy/prize/odysseus = 1,
|
||||||
|
/obj/item/toy/prize/phazon = 1
|
||||||
|
)
|
||||||
|
proc/dispense()
|
||||||
|
if(computer && !computer.stat)
|
||||||
|
var/prizeselect = pickweight(prizes)
|
||||||
|
new prizeselect(computer.loc)
|
||||||
|
if(istype(prizeselect, /obj/item/toy/gun)) //Ammo comes with the gun
|
||||||
|
new /obj/item/toy/ammo/gun(computer.loc)
|
||||||
|
else if(istype(prizeselect, /obj/item/clothing/suit/syndicatefake)) //Helmet is part of the suit
|
||||||
|
new /obj/item/clothing/head/syndicatefake(computer.loc)
|
||||||
|
feedback_inc("arcade_win_normal")
|
||||||
|
computer.use_power(500)
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/program/arcade
|
||||||
|
desc = "The best arcade game ever produced by Nanotrasen's short-lived entertainment divison."
|
||||||
|
//headcanon: they also ported E.T. for the atari 2600, superman 64, and basically every other movie tie-in game ever
|
||||||
|
|
||||||
|
active_state = "generic"
|
||||||
|
|
||||||
|
var/turtle = 0
|
||||||
|
var/enemy_name = "Space Villian"
|
||||||
|
var/temp = "Winners Don't Use Spacedrugs" //Temporary message, for attack messages, etc
|
||||||
|
var/player_hp = 30 //Player health/attack points
|
||||||
|
var/player_mp = 10
|
||||||
|
var/enemy_hp = 45 //Enemy health/attack points
|
||||||
|
var/enemy_mp = 20
|
||||||
|
var/gameover = 0
|
||||||
|
var/blocked = 0 //Player cannot attack/heal while set
|
||||||
|
|
||||||
|
/datum/file/program/arcade/New()
|
||||||
|
..()
|
||||||
|
var/name_action
|
||||||
|
var/name_part1
|
||||||
|
var/name_part2
|
||||||
|
|
||||||
|
name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Pwn ", "Own ", "ERP ")
|
||||||
|
|
||||||
|
name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ")
|
||||||
|
name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "slime", "Griefer", "ERPer", "Lizard Man", "Unicorn")
|
||||||
|
|
||||||
|
enemy_name = replacetext(name_part1, "the ", "") + name_part2
|
||||||
|
name = (name_action + name_part1 + name_part2)
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/program/arcade/interact()
|
||||||
|
if(!interactable())
|
||||||
|
return
|
||||||
|
var/dat// = topic_link(src,"close","Close")
|
||||||
|
dat = "<center><h4>[enemy_name]</h4></center>"
|
||||||
|
|
||||||
|
dat += "<br><center><h3>[temp]</h3></center>"
|
||||||
|
dat += "<br><center>Health: [player_hp] | Magic: [player_mp] | Enemy Health: [enemy_hp]</center>"
|
||||||
|
|
||||||
|
if (gameover)
|
||||||
|
dat += "<center><b>[topic_link(src,"newgame","New Game")]"
|
||||||
|
else
|
||||||
|
dat += "<center><b>[topic_link(src,"attack","Attack")] | [topic_link(src,"heal","Heal")] | [topic_link(src,"charge","Recharge Power")]"
|
||||||
|
|
||||||
|
dat += "</b></center>"
|
||||||
|
|
||||||
|
popup.set_content(dat)
|
||||||
|
popup.open()
|
||||||
|
|
||||||
|
/datum/file/program/arcade/Topic(href, list/href_list)
|
||||||
|
if(!interactable() || ..(href,href_list))
|
||||||
|
return
|
||||||
|
if (!blocked && !gameover)
|
||||||
|
if ("attack" in href_list)
|
||||||
|
blocked = 1
|
||||||
|
var/attackamt = rand(2,6)
|
||||||
|
temp = "You attack for [attackamt] damage!"
|
||||||
|
computer.updateUsrDialog()
|
||||||
|
if(turtle > 0)
|
||||||
|
turtle--
|
||||||
|
|
||||||
|
sleep(10)
|
||||||
|
enemy_hp -= attackamt
|
||||||
|
arcade_action()
|
||||||
|
|
||||||
|
else if ("heal" in href_list)
|
||||||
|
blocked = 1
|
||||||
|
var/pointamt = rand(1,3)
|
||||||
|
var/healamt = rand(6,8)
|
||||||
|
temp = "You use [pointamt] magic to heal for [healamt] damage!"
|
||||||
|
computer.updateUsrDialog()
|
||||||
|
turtle++
|
||||||
|
|
||||||
|
sleep(10)
|
||||||
|
player_mp -= pointamt
|
||||||
|
player_hp += healamt
|
||||||
|
blocked = 1
|
||||||
|
computer.updateUsrDialog()
|
||||||
|
arcade_action()
|
||||||
|
|
||||||
|
else if ("charge" in href_list)
|
||||||
|
blocked = 1
|
||||||
|
var/chargeamt = rand(4,7)
|
||||||
|
temp = "You regain [chargeamt] points"
|
||||||
|
player_mp += chargeamt
|
||||||
|
if(turtle > 0)
|
||||||
|
turtle--
|
||||||
|
|
||||||
|
computer.updateUsrDialog()
|
||||||
|
sleep(10)
|
||||||
|
arcade_action()
|
||||||
|
|
||||||
|
if ("newgame" in href_list) //Reset everything
|
||||||
|
temp = "New Round"
|
||||||
|
player_hp = 30
|
||||||
|
player_mp = 10
|
||||||
|
enemy_hp = 45
|
||||||
|
enemy_mp = 20
|
||||||
|
gameover = 0
|
||||||
|
turtle = 0
|
||||||
|
computer.updateUsrDialog()
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/program/arcade/proc/arcade_action()
|
||||||
|
if ((enemy_mp <= 0) || (enemy_hp <= 0))
|
||||||
|
if(!gameover)
|
||||||
|
gameover = 1
|
||||||
|
temp = "[enemy_name] has fallen! Rejoice!"
|
||||||
|
if(computer.toybox)
|
||||||
|
computer.toybox.dispense()
|
||||||
|
|
||||||
|
else if ((enemy_mp <= 5) && (prob(70)))
|
||||||
|
var/stealamt = rand(2,3)
|
||||||
|
temp = "[enemy_name] steals [stealamt] of your power!"
|
||||||
|
player_mp -= stealamt
|
||||||
|
|
||||||
|
if (player_mp <= 0)
|
||||||
|
gameover = 1
|
||||||
|
sleep(10)
|
||||||
|
temp = "You have been drained! GAME OVER"
|
||||||
|
feedback_inc("arcade_loss_mana_normal")
|
||||||
|
|
||||||
|
else if ((enemy_hp <= 10) && (enemy_mp > 4))
|
||||||
|
temp = "[enemy_name] heals for 4 health!"
|
||||||
|
enemy_hp += 4
|
||||||
|
enemy_mp -= 4
|
||||||
|
|
||||||
|
else
|
||||||
|
var/attackamt = rand(3,6)
|
||||||
|
temp = "[enemy_name] attacks for [attackamt] damage!"
|
||||||
|
player_hp -= attackamt
|
||||||
|
|
||||||
|
if ((player_mp <= 0) || (player_hp <= 0))
|
||||||
|
gameover = 1
|
||||||
|
temp = "You have been crushed! GAME OVER"
|
||||||
|
feedback_inc("arcade_loss_hp_normal")
|
||||||
|
|
||||||
|
if(interactable())
|
||||||
|
computer.updateUsrDialog()
|
||||||
|
blocked = 0
|
||||||
|
return
|
||||||
110
code/WorkInProgress/computer3/computers/atmos_alert.dm
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
/obj/machinery/computer3/atmos_alert
|
||||||
|
default_prog = /datum/file/program/atmos_alert
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio)
|
||||||
|
icon_state = "frame-eng"
|
||||||
|
|
||||||
|
/datum/file/program/atmos_alert
|
||||||
|
name = "atmospheric alert monitor"
|
||||||
|
desc = "Recieves alerts over the radio."
|
||||||
|
active_state = "alert:2"
|
||||||
|
refresh = 1
|
||||||
|
var/list/priority_alarms = list()
|
||||||
|
var/list/minor_alarms = list()
|
||||||
|
|
||||||
|
|
||||||
|
execute(var/datum/file/program/source)
|
||||||
|
..(source)
|
||||||
|
|
||||||
|
if(!computer.radio)
|
||||||
|
computer.Crash(MISSING_PERIPHERAL)
|
||||||
|
|
||||||
|
computer.radio.set_frequency(1437,RADIO_ATMOSIA)
|
||||||
|
|
||||||
|
|
||||||
|
Reset()
|
||||||
|
..()
|
||||||
|
// Never save your work
|
||||||
|
priority_alarms.Cut()
|
||||||
|
minor_alarms.Cut()
|
||||||
|
|
||||||
|
|
||||||
|
// This will be called as long as the program is running on the parent computer
|
||||||
|
// and the computer has the radio peripheral
|
||||||
|
receive_signal(datum/signal/signal)
|
||||||
|
if(!signal || signal.encryption) return
|
||||||
|
|
||||||
|
var/zone = signal.data["zone"]
|
||||||
|
var/severity = signal.data["alert"]
|
||||||
|
if(!zone || !severity) return
|
||||||
|
|
||||||
|
minor_alarms -= zone
|
||||||
|
priority_alarms -= zone
|
||||||
|
if(severity=="severe")
|
||||||
|
priority_alarms += zone
|
||||||
|
else if (severity=="minor")
|
||||||
|
minor_alarms += zone
|
||||||
|
update_icon()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
interact()
|
||||||
|
if(!interactable())
|
||||||
|
return
|
||||||
|
if(!computer.radio)
|
||||||
|
computer.Crash(MISSING_PERIPHERAL)
|
||||||
|
|
||||||
|
popup.set_content(return_text())
|
||||||
|
popup.open()
|
||||||
|
|
||||||
|
|
||||||
|
update_icon()
|
||||||
|
..()
|
||||||
|
if(priority_alarms.len > 0)
|
||||||
|
overlay.icon_state = "alert:2"
|
||||||
|
else if(minor_alarms.len > 0)
|
||||||
|
overlay.icon_state = "alert:1"
|
||||||
|
else
|
||||||
|
overlay.icon_state = "alert:0"
|
||||||
|
|
||||||
|
if(computer)
|
||||||
|
computer.update_icon()
|
||||||
|
|
||||||
|
|
||||||
|
proc/return_text()
|
||||||
|
var/priority_text = "<h2>Priority Alerts:</h2>"
|
||||||
|
var/minor_text = "<h2>Minor Alerts:</h2>"
|
||||||
|
|
||||||
|
if(priority_alarms.len)
|
||||||
|
for(var/zone in priority_alarms)
|
||||||
|
priority_text += "<FONT color='red'><B>[format_text(zone)]</B></FONT> [topic_link(src,"priority_clear=[ckey(zone)]","X")]<BR>"
|
||||||
|
else
|
||||||
|
priority_text += "No priority alerts detected.<BR>"
|
||||||
|
|
||||||
|
if(minor_alarms.len)
|
||||||
|
for(var/zone in minor_alarms)
|
||||||
|
minor_text += "<B>[format_text(zone)]</B> [topic_link(src,"minor_clear=[ckey(zone)]","X")]<BR>"
|
||||||
|
else
|
||||||
|
minor_text += "No minor alerts detected.<BR>"
|
||||||
|
|
||||||
|
return "[priority_text]<BR><HR>[minor_text]<BR>[topic_link(src,"close","Close")]"
|
||||||
|
|
||||||
|
|
||||||
|
Topic(var/href, var/list/href_list)
|
||||||
|
if(!interactable() || ..(href,href_list))
|
||||||
|
return
|
||||||
|
|
||||||
|
if("priority_clear" in href_list)
|
||||||
|
var/removing_zone = href_list["priority_clear"]
|
||||||
|
for(var/zone in priority_alarms)
|
||||||
|
if(ckey(zone) == removing_zone)
|
||||||
|
usr << "\green Priority Alert for area [zone] cleared."
|
||||||
|
priority_alarms -= zone
|
||||||
|
|
||||||
|
if("minor_clear" in href_list)
|
||||||
|
var/removing_zone = href_list["minor_clear"]
|
||||||
|
for(var/zone in minor_alarms)
|
||||||
|
if(ckey(zone) == removing_zone)
|
||||||
|
usr << "\green Minor Alert for area [zone] cleared."
|
||||||
|
minor_alarms -= zone
|
||||||
|
|
||||||
|
computer.updateUsrDialog()
|
||||||
277
code/WorkInProgress/computer3/computers/camera.dm
Normal file
@@ -0,0 +1,277 @@
|
|||||||
|
/*
|
||||||
|
Camera monitoring computers
|
||||||
|
|
||||||
|
NOTE: If we actually split the station camera network into regions that will help with sorting through the
|
||||||
|
tediously large list of cameras. The new camnet_key architecture lets you switch between keys easily,
|
||||||
|
so you don't lose the capability of seeing everything, you just switch to a subnet.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/obj/machinery/computer3/security
|
||||||
|
default_prog = /datum/file/program/security
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/cameras)
|
||||||
|
spawn_files = list(/datum/file/camnet_key)
|
||||||
|
icon_state = "frame-sec"
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/computer3/security/wooden_tv
|
||||||
|
name = "security cameras"
|
||||||
|
desc = "An old TV hooked into the stations camera network."
|
||||||
|
icon = 'icons/obj/computer.dmi'
|
||||||
|
icon_state = "security_det"
|
||||||
|
|
||||||
|
legacy_icon = 1
|
||||||
|
allow_disassemble = 0
|
||||||
|
|
||||||
|
// No operating system
|
||||||
|
New()
|
||||||
|
..(built=0)
|
||||||
|
os = program
|
||||||
|
circuit.OS = os
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/computer3/security/mining
|
||||||
|
name = "Outpost Cameras"
|
||||||
|
desc = "Used to access the various cameras on the outpost."
|
||||||
|
spawn_files = list(/datum/file/camnet_key/mining)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Camera monitoring computers, wall-mounted
|
||||||
|
*/
|
||||||
|
/obj/machinery/computer3/wall_comp/telescreen
|
||||||
|
default_prog = /datum/file/program/security
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/cameras)
|
||||||
|
spawn_files = list(/datum/file/camnet_key)
|
||||||
|
|
||||||
|
/obj/machinery/computer3/wall_comp/telescreen/entertainment
|
||||||
|
desc = "Damn, they better have /tg/thechannel on these things."
|
||||||
|
spawn_files = list(/datum/file/camnet_key/entertainment)
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
File containing an encrypted camera network key.
|
||||||
|
|
||||||
|
(Where by encrypted I don't actually mean encrypted at all)
|
||||||
|
*/
|
||||||
|
/datum/file/camnet_key
|
||||||
|
name = "Security Camera Network Main Key"
|
||||||
|
var/title = "Station"
|
||||||
|
var/desc = "Connects to station security cameras."
|
||||||
|
var/list/networks = list("SS13")
|
||||||
|
var/screen = "cameras"
|
||||||
|
|
||||||
|
execute(var/datum/file/source)
|
||||||
|
if(istype(source,/datum/file/program/security))
|
||||||
|
var/datum/file/program/security/prog = source
|
||||||
|
prog.key = src
|
||||||
|
prog.camera_list = null
|
||||||
|
return
|
||||||
|
if(istype(source,/datum/file/program/ntos))
|
||||||
|
for(var/obj/item/part/computer/storage/S in list(computer.hdd,computer.floppy))
|
||||||
|
for(var/datum/file/F in S.files)
|
||||||
|
if(istype(F,/datum/file/program/security))
|
||||||
|
var/datum/file/program/security/Sec = F
|
||||||
|
Sec.key = src
|
||||||
|
Sec.camera_list = null
|
||||||
|
Sec.execute(source)
|
||||||
|
return
|
||||||
|
computer.Crash(MISSING_PROGRAM)
|
||||||
|
|
||||||
|
/datum/file/camnet_key/mining
|
||||||
|
name = "Mining Camera Network Key"
|
||||||
|
title = "mining station"
|
||||||
|
desc = "Connects to mining security cameras."
|
||||||
|
networks = list("MINE")
|
||||||
|
screen = "miningcameras"
|
||||||
|
|
||||||
|
/datum/file/camnet_key/research
|
||||||
|
name = "Research Camera Network Key"
|
||||||
|
title = "research"
|
||||||
|
networks = list("RD")
|
||||||
|
|
||||||
|
/datum/file/camnet_key/bombrange
|
||||||
|
name = "R&D Bomb Range Camera Network Key"
|
||||||
|
title = "bomb range"
|
||||||
|
desc = "Monitors the bomb range."
|
||||||
|
networks = list("Toxins")
|
||||||
|
|
||||||
|
/datum/file/camnet_key/xeno
|
||||||
|
name = "R&D Misc. Research Camera Network Key"
|
||||||
|
title = "special research"
|
||||||
|
networks = list("Misc")
|
||||||
|
|
||||||
|
/datum/file/camnet_key/singulo
|
||||||
|
name = "Singularity Camera Network Key"
|
||||||
|
title = "singularity"
|
||||||
|
networks = list("Singularity")
|
||||||
|
|
||||||
|
/datum/file/camnet_key/entertainment
|
||||||
|
name = "Entertainment Channel Encryption Key"
|
||||||
|
title = "entertainment"
|
||||||
|
desc = "Damn, I hope they have /tg/thechannel on here."
|
||||||
|
networks = list("thunder")
|
||||||
|
screen = "entertainment"
|
||||||
|
|
||||||
|
/datum/file/camnet_key/creed
|
||||||
|
name = "Special Ops Camera Encryption Key"
|
||||||
|
title = "special ops"
|
||||||
|
desc = "Connects to special ops secure camera feeds."
|
||||||
|
networks = list("CREED")
|
||||||
|
|
||||||
|
/datum/file/camnet_key/prison
|
||||||
|
name = "Prison Camera Network Key"
|
||||||
|
title = "prison"
|
||||||
|
desc = "Monitors the prison."
|
||||||
|
networks = list("Prison")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Computer part needed to connect to cameras
|
||||||
|
*/
|
||||||
|
|
||||||
|
/obj/item/part/computer/networking/cameras
|
||||||
|
name = "camera network access module"
|
||||||
|
desc = "Connects a computer to the camera network."
|
||||||
|
|
||||||
|
// I have no idea what the following does
|
||||||
|
var/mapping = 0//For the overview file, interesting bit of code.
|
||||||
|
|
||||||
|
//proc/camera_list(var/datum/file/camnet_key/key)
|
||||||
|
get_machines(var/datum/file/camnet_key/key)
|
||||||
|
if (!computer || computer.z > 6)
|
||||||
|
return null
|
||||||
|
|
||||||
|
var/list/L = list()
|
||||||
|
for(var/obj/machinery/camera/C in cameranet.cameras)
|
||||||
|
var/list/temp = C.network & key.networks
|
||||||
|
if(temp.len)
|
||||||
|
L.Add(C)
|
||||||
|
|
||||||
|
//camera_sort(L)
|
||||||
|
|
||||||
|
return L
|
||||||
|
verify_machine(var/obj/machinery/camera/C,var/datum/file/camnet_key/key = null)
|
||||||
|
if(!istype(C) || !C.can_use())
|
||||||
|
return 0
|
||||||
|
|
||||||
|
if(key)
|
||||||
|
var/list/temp = C.network & key.networks
|
||||||
|
if(!temp.len)
|
||||||
|
return 0
|
||||||
|
return 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
Camera monitoring program
|
||||||
|
|
||||||
|
The following things should break you out of the camera view:
|
||||||
|
* The computer resetting, being damaged, losing power, etc
|
||||||
|
* The program quitting
|
||||||
|
* Closing the window
|
||||||
|
* Going out of range of the computer
|
||||||
|
* Becoming incapacitated
|
||||||
|
* The camera breaking, emping, disconnecting, etc
|
||||||
|
*/
|
||||||
|
|
||||||
|
/datum/file/program/security
|
||||||
|
name = "camera monitor"
|
||||||
|
desc = "Connets to the Nanotrasen Camera Network"
|
||||||
|
image = 'icons/ntos/camera.png'
|
||||||
|
active_state = "camera-static"
|
||||||
|
|
||||||
|
var/datum/file/camnet_key/key = null
|
||||||
|
var/last_pic = 1.0
|
||||||
|
var/last_camera_refresh = 0
|
||||||
|
var/camera_list = null
|
||||||
|
|
||||||
|
var/obj/machinery/camera/current = null
|
||||||
|
|
||||||
|
execute(var/datum/file/program/caller)
|
||||||
|
..(caller)
|
||||||
|
if(computer && !key)
|
||||||
|
var/list/fkeys = computer.list_files(/datum/file/camnet_key)
|
||||||
|
if(fkeys && fkeys.len)
|
||||||
|
key = fkeys[1]
|
||||||
|
update_icon()
|
||||||
|
computer.update_icon()
|
||||||
|
for(var/mob/living/L in viewers(1))
|
||||||
|
if(!istype(L,/mob/living/silicon/ai) && L.machine == src)
|
||||||
|
L.reset_view(null)
|
||||||
|
|
||||||
|
|
||||||
|
Reset()
|
||||||
|
..()
|
||||||
|
current = null
|
||||||
|
for(var/mob/living/L in viewers(1))
|
||||||
|
if(!istype(L,/mob/living/silicon/ai) && L.machine == src)
|
||||||
|
L.reset_view(null)
|
||||||
|
|
||||||
|
interact()
|
||||||
|
if(!interactable())
|
||||||
|
return
|
||||||
|
|
||||||
|
if(!computer.camnet)
|
||||||
|
computer.Crash(MISSING_PERIPHERAL)
|
||||||
|
return
|
||||||
|
|
||||||
|
if(!key)
|
||||||
|
var/list/fkeys = computer.list_files(/datum/file/camnet_key)
|
||||||
|
if(fkeys && fkeys.len)
|
||||||
|
key = fkeys[1]
|
||||||
|
update_icon()
|
||||||
|
computer.update_icon()
|
||||||
|
if(!key)
|
||||||
|
return
|
||||||
|
|
||||||
|
if(computer.camnet.verify_machine(current))
|
||||||
|
usr.reset_view(current)
|
||||||
|
|
||||||
|
if(world.time - last_camera_refresh > 50 || !camera_list)
|
||||||
|
last_camera_refresh = world.time
|
||||||
|
|
||||||
|
var/list/temp_list = computer.camnet.get_machines(key)
|
||||||
|
|
||||||
|
camera_list = "Network Key: [key.title] [topic_link(src,"keyselect","\[ Select key \]")]<hr>"
|
||||||
|
for(var/obj/machinery/camera/C in temp_list)
|
||||||
|
if(C.status)
|
||||||
|
camera_list += "[C.c_tag] - [topic_link(src,"show=\ref[C]","Show")]<br>"
|
||||||
|
else
|
||||||
|
camera_list += "[C.c_tag] - <b>DEACTIVATED</b><br>"
|
||||||
|
//camera_list += "<br>" + topic_link(src,"close","Close")
|
||||||
|
|
||||||
|
popup.set_content(camera_list)
|
||||||
|
popup.open()
|
||||||
|
|
||||||
|
|
||||||
|
update_icon()
|
||||||
|
if(key)
|
||||||
|
overlay.icon_state = key.screen
|
||||||
|
name = key.title + " Camera Monitor"
|
||||||
|
else
|
||||||
|
overlay.icon_state = "camera-static"
|
||||||
|
name = initial(name)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Topic(var/href,var/list/href_list)
|
||||||
|
if(!interactable() || !computer.camnet || ..(href,href_list))
|
||||||
|
return
|
||||||
|
|
||||||
|
if("show" in href_list)
|
||||||
|
var/obj/machinery/camera/C = locate(href_list["show"])
|
||||||
|
current = C
|
||||||
|
usr.reset_view(C)
|
||||||
|
interact()
|
||||||
|
return
|
||||||
|
|
||||||
|
if("keyselect" in href_list)
|
||||||
|
current = null
|
||||||
|
usr.reset_view(null)
|
||||||
|
key = input(usr,"Select a camera network key:", "Key Select", null) as null|anything in computer.list_files(/datum/file/camnet_key)
|
||||||
|
camera_list = null
|
||||||
|
update_icon()
|
||||||
|
computer.update_icon()
|
||||||
|
if(key)
|
||||||
|
interact()
|
||||||
|
else
|
||||||
|
usr << "The screen turns to static."
|
||||||
|
return
|
||||||
347
code/WorkInProgress/computer3/computers/card.dm
Normal file
@@ -0,0 +1,347 @@
|
|||||||
|
/obj/machinery/computer3/card
|
||||||
|
default_prog = /datum/file/program/card_comp
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/cardslot/dual)
|
||||||
|
/obj/machinery/computer3/card/hop
|
||||||
|
default_prog = /datum/file/program/card_comp
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/cardslot/dual)
|
||||||
|
spawn_files = list(/datum/file/program/arcade, /datum/file/program/security, /datum/file/camnet_key/mining, /datum/file/camnet_key/entertainment,/datum/file/camnet_key/prison)
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/computer3/card/centcom
|
||||||
|
default_prog = /datum/file/program/card_comp/centcom
|
||||||
|
|
||||||
|
/datum/file/program/card_comp
|
||||||
|
name = "identification card console"
|
||||||
|
desc = "Used to modify magnetic strip ID cards."
|
||||||
|
image = 'icons/ntos/cardcomp.png'
|
||||||
|
active_state = "id"
|
||||||
|
|
||||||
|
var/obj/item/weapon/card/id/reader = null
|
||||||
|
var/obj/item/weapon/card/id/writer = null
|
||||||
|
|
||||||
|
var/mode = 0
|
||||||
|
var/auth = 0
|
||||||
|
var/printing = 0
|
||||||
|
|
||||||
|
proc/list_jobs()
|
||||||
|
return get_all_jobs() + "Custom"
|
||||||
|
|
||||||
|
// creates the block with the script in it
|
||||||
|
// cache the result since it's almost constant but not quite
|
||||||
|
// the list of jobs won't change after all...
|
||||||
|
proc/scriptblock()
|
||||||
|
var/global/dat = null
|
||||||
|
var/counter = 0
|
||||||
|
var jobs_all = ""
|
||||||
|
jobs_all += "<table><tr><td></td><td><b>Command</b></td>"
|
||||||
|
|
||||||
|
jobs_all += "</tr><tr height='20'><td><b>Special</b></font></td>"//Captain in special because he is head of heads ~Intercross21
|
||||||
|
jobs_all += "<td weight='100'><a href='?src=\ref[src];;assign=Captain'>Captain</a></td>"
|
||||||
|
jobs_all += "<td weight='100'><a href='?src=\ref[src];;assign=Custom'>Custom</a></td>"
|
||||||
|
|
||||||
|
counter = 0
|
||||||
|
jobs_all += "</tr><tr><td><font color='#A50000'><b>Security</b></font></td>"//Red
|
||||||
|
for(var/job in security_positions)
|
||||||
|
counter++
|
||||||
|
if(counter >= 6)
|
||||||
|
jobs_all += "</tr><tr height='20'><td></td><td></td>"
|
||||||
|
counter = 0
|
||||||
|
jobs_all += "<td height='20' weight='100'><a href='?src=\ref[src];assign=[job]'>[replacetext(job, " ", " ")]</a></td>"
|
||||||
|
|
||||||
|
counter = 0
|
||||||
|
jobs_all += "</tr><tr><td><font color='#FFA500'><b>Engineering</b></font></td>"//Orange
|
||||||
|
for(var/job in engineering_positions)
|
||||||
|
counter++
|
||||||
|
if(counter >= 6)
|
||||||
|
jobs_all += "</tr><tr height='20'><td></td><td></td>"
|
||||||
|
counter = 0
|
||||||
|
jobs_all += "<td height='20' weight='100'><a href='?src=\ref[src];assign=[job]'>[replacetext(job, " ", " ")]</a></td>"
|
||||||
|
|
||||||
|
counter = 0
|
||||||
|
jobs_all += "</tr><tr height='20'><td><font color='#008000'><b>Medical</b></font></td>"//Green
|
||||||
|
for(var/job in medical_positions)
|
||||||
|
counter++
|
||||||
|
if(counter >= 6)
|
||||||
|
jobs_all += "</tr><tr height='20'><td></td><td></td>"
|
||||||
|
counter = 0
|
||||||
|
jobs_all += "<td weight='100'><a href='?src=\ref[src];assign=[job]'>[replacetext(job, " ", " ")]</a></td>"
|
||||||
|
|
||||||
|
counter = 0
|
||||||
|
jobs_all += "</tr><tr height='20'><td><font color='#800080'><b>Science</b></font></td>"//Purple
|
||||||
|
for(var/job in science_positions)
|
||||||
|
counter++
|
||||||
|
if(counter >= 6)
|
||||||
|
jobs_all += "</tr><tr height='20'><td></td><td></td>"
|
||||||
|
counter = 0
|
||||||
|
jobs_all += "<td weight='100'><a href='?src=\ref[src];assign=[job]'>[replacetext(job, " ", " ")]</a></td>"
|
||||||
|
|
||||||
|
counter = 0
|
||||||
|
jobs_all += "</tr><tr height='20'><td><font color='#808080'><b>Civilian</b></font></td>"//Grey
|
||||||
|
for(var/job in civilian_positions)
|
||||||
|
counter++
|
||||||
|
if(counter >= 6)
|
||||||
|
jobs_all += "</tr><tr height='20'><td></td><td></td>"
|
||||||
|
counter = 0
|
||||||
|
jobs_all += "<td weight='100'><a href='?src=\ref[src];assign=[job]'>[replacetext(job, " ", " ")]</a></td>"
|
||||||
|
|
||||||
|
dat = {"<script type="text/javascript">
|
||||||
|
function markRed(){
|
||||||
|
var nameField = document.getElementById('namefield');
|
||||||
|
nameField.style.backgroundColor = "#FFDDDD";
|
||||||
|
}
|
||||||
|
function markGreen(){
|
||||||
|
var nameField = document.getElementById('namefield');
|
||||||
|
nameField.style.backgroundColor = "#DDFFDD";
|
||||||
|
}
|
||||||
|
function markAccountGreen(){
|
||||||
|
var nameField = document.getElementById('accountfield');
|
||||||
|
nameField.style.backgroundColor = "#DDFFDD";
|
||||||
|
}
|
||||||
|
function markAccountRed(){
|
||||||
|
var nameField = document.getElementById('accountfield');
|
||||||
|
nameField.style.backgroundColor = "#FFDDDD";
|
||||||
|
}
|
||||||
|
function showAll(){
|
||||||
|
var allJobsSlot = document.getElementById('alljobsslot');
|
||||||
|
allJobsSlot.innerHTML = "<a href='#' onclick='hideAll()'>hide</a><br>"+ "[jobs_all]";
|
||||||
|
}
|
||||||
|
function hideAll(){
|
||||||
|
var allJobsSlot = document.getElementById('alljobsslot');
|
||||||
|
allJobsSlot.innerHTML = "<a href='#' onclick='showAll()'>[(writer.assignment) ? writer.assignment : "Unassgied"]</a>";
|
||||||
|
}
|
||||||
|
</script>"}
|
||||||
|
return dat
|
||||||
|
|
||||||
|
// creates the list of access rights on the card
|
||||||
|
proc/accessblock()
|
||||||
|
var/accesses = "<div align='center'><b>Access</b></div>"
|
||||||
|
accesses += "<table style='width:100%'>"
|
||||||
|
accesses += "<tr>"
|
||||||
|
for(var/i = 1; i <= 7; i++)
|
||||||
|
accesses += "<td style='width:14%'><b>[get_region_accesses_name(i)]:</b></td>"
|
||||||
|
accesses += "</tr><tr>"
|
||||||
|
for(var/i = 1; i <= 7; i++)
|
||||||
|
accesses += "<td style='width:14%' valign='top'>"
|
||||||
|
for(var/A in get_region_accesses(i))
|
||||||
|
if(A in writer.access)
|
||||||
|
accesses += topic_link(src,"access=[A]","<font color='red'>[replacetext(get_access_desc(A), " ", " ")]</font>") + " "
|
||||||
|
else
|
||||||
|
accesses += topic_link(src,"access=[A]",replacetext(get_access_desc(A), " ", " ")) + " "
|
||||||
|
accesses += "<br>"
|
||||||
|
accesses += "</td>"
|
||||||
|
accesses += "</tr></table>"
|
||||||
|
return accesses
|
||||||
|
|
||||||
|
proc/card_modify_menu()
|
||||||
|
//assume peripherals and cards, do checks for them in interact
|
||||||
|
|
||||||
|
// Header
|
||||||
|
var/dat = "<div align='center'><br>"
|
||||||
|
dat += topic_link(src,"remove=writer","Remove [writer.name]") + " || "
|
||||||
|
dat += topic_link(src,"remove=reader","Remove [reader.name]") + " <br> "
|
||||||
|
dat += topic_link(src,"mode=1","Access Crew Manifest") + " || "
|
||||||
|
dat += topic_link(src,"logout","Log Out") + "</div>"
|
||||||
|
dat += "<hr>" + scriptblock()
|
||||||
|
|
||||||
|
// form for renaming the ID
|
||||||
|
dat += "<form name='cardcomp' action='byond://' method='get'>"
|
||||||
|
dat += "<input type='hidden' name='src' value='\ref[src]'>"
|
||||||
|
dat += "<b>registered_name:</b> <input type='text' id='namefield' name='reg' value='[writer.registered_name]' style='width:250px; background-color:white;' onchange='markRed()'>"
|
||||||
|
dat += "<input type='submit' value='Rename' onclick='markGreen()'>"
|
||||||
|
dat += "</form>"
|
||||||
|
|
||||||
|
// form for changing assignment, taken care of by scriptblock() mostly
|
||||||
|
var/assign_temp = writer.assignment
|
||||||
|
if(!assign_temp || assign_temp == "") assign_temp = "Unassigned"
|
||||||
|
dat += "<b>Assignment:</b> [assign_temp] <span id='alljobsslot'><a href='#' onclick='showAll()'>change</a></span>"
|
||||||
|
|
||||||
|
// list of access rights
|
||||||
|
dat += accessblock()
|
||||||
|
|
||||||
|
return dat
|
||||||
|
|
||||||
|
proc/login_menu()
|
||||||
|
//assume peripherals and cards, do checks for them in interact
|
||||||
|
var/dat = "<br><i>Please insert the cards into the slots</i><br>"
|
||||||
|
|
||||||
|
if(istype(writer))
|
||||||
|
dat += "Target: [topic_link(src,"remove=writer",writer.name)]<br>"
|
||||||
|
else
|
||||||
|
dat += "Target: [topic_link(src,"insert=writer","--------")]<br>"
|
||||||
|
|
||||||
|
if(istype(reader))
|
||||||
|
dat += "Confirm Identity: [topic_link(src,"remove=reader",reader.name)]<br>"
|
||||||
|
else
|
||||||
|
dat += "Confirm Identity: [topic_link(src,"insert=reader","--------")]<br>"
|
||||||
|
dat += "[topic_link(src,"auth","{Log in}")]<br><hr>"
|
||||||
|
dat += topic_link(src,"mode=1","Access Crew Manifest")
|
||||||
|
return dat
|
||||||
|
|
||||||
|
proc/show_manifest()
|
||||||
|
// assume linked_db since called by interact()
|
||||||
|
var/crew = ""
|
||||||
|
var/list/L = list()
|
||||||
|
for (var/datum/data/record/t in data_core.general)
|
||||||
|
var/R = t.fields["name"] + " - " + t.fields["rank"]
|
||||||
|
L += R
|
||||||
|
for(var/R in sortList(L))
|
||||||
|
crew += "[R]<br>"
|
||||||
|
return "<tt><b>Crew Manifest:</b><br>Please use security record computer to modify entries.<br><br>[crew][topic_link(src,"print","Print")]<br><br>[topic_link(src,"mode=0","Access ID modification console.")]<br></tt>"
|
||||||
|
|
||||||
|
// These are here partly in order to be overwritten by the centcom card computer code
|
||||||
|
proc/authenticate()
|
||||||
|
if(access_change_ids in reader.access)
|
||||||
|
return 1
|
||||||
|
if(istype(usr,/mob/living/silicon/ai))
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
proc/set_default_access(var/jobname)
|
||||||
|
var/datum/job/jobdatum
|
||||||
|
for(var/jobtype in typesof(/datum/job))
|
||||||
|
var/datum/job/J = new jobtype
|
||||||
|
if(ckey(J.title) == ckey(jobname))
|
||||||
|
jobdatum = J
|
||||||
|
break
|
||||||
|
if(jobdatum)
|
||||||
|
writer.access = jobdatum.get_access() // ( istype(src,/obj/machinery/computer/card/centcom) ? get_centcom_access(t1)
|
||||||
|
|
||||||
|
|
||||||
|
interact()
|
||||||
|
if(!interactable()) return
|
||||||
|
|
||||||
|
if(!computer.cardslot || !computer.cardslot.dualslot)
|
||||||
|
computer.Crash(MISSING_PERIPHERAL)
|
||||||
|
return
|
||||||
|
|
||||||
|
reader = computer.cardslot.reader
|
||||||
|
writer = computer.cardslot.writer
|
||||||
|
|
||||||
|
var/dat
|
||||||
|
|
||||||
|
switch(mode)
|
||||||
|
if(0)
|
||||||
|
if( !istype(writer) || !istype(reader) )
|
||||||
|
auth = 0
|
||||||
|
if( !auth )
|
||||||
|
dat = login_menu()
|
||||||
|
else
|
||||||
|
dat = card_modify_menu()
|
||||||
|
if(1)
|
||||||
|
dat = show_manifest()
|
||||||
|
|
||||||
|
|
||||||
|
popup.width = 940
|
||||||
|
popup.height = 520
|
||||||
|
popup.set_content(dat)
|
||||||
|
popup.open()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
Topic(href, list/href_list)
|
||||||
|
if(!interactable() || !computer.cardslot || ..(href,href_list))
|
||||||
|
return
|
||||||
|
// todo distance/disability checks
|
||||||
|
|
||||||
|
if("mode" in href_list)
|
||||||
|
mode = text2num(href_list["mode"])
|
||||||
|
if(mode != 0 && mode != 1)
|
||||||
|
mode = 0
|
||||||
|
|
||||||
|
auth = 0 // always log out if switching modes just in case
|
||||||
|
|
||||||
|
if("remove" in href_list)
|
||||||
|
var/which = href_list["remove"]
|
||||||
|
if(which == "writer")
|
||||||
|
computer.cardslot.remove(computer.cardslot.writer)
|
||||||
|
else
|
||||||
|
computer.cardslot.remove(computer.cardslot.reader)
|
||||||
|
auth = 0
|
||||||
|
|
||||||
|
if("insert" in href_list)
|
||||||
|
var/obj/item/weapon/card/card = usr.get_active_hand()
|
||||||
|
if(!istype(card)) return
|
||||||
|
|
||||||
|
var/which = href_list["insert"]
|
||||||
|
if(which == "writer")
|
||||||
|
computer.cardslot.insert(card,1)
|
||||||
|
else
|
||||||
|
computer.cardslot.insert(card,2)
|
||||||
|
|
||||||
|
if("print" in href_list)
|
||||||
|
if (printing)
|
||||||
|
return
|
||||||
|
|
||||||
|
printing = 1
|
||||||
|
sleep(50)
|
||||||
|
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( computer.loc )
|
||||||
|
P.info = "<B>Crew Manifest:</B><BR>"
|
||||||
|
var/list/L = list()
|
||||||
|
for (var/datum/data/record/t in data_core.general)
|
||||||
|
var/R = t.fields["name"] + " - " + t.fields["rank"]
|
||||||
|
L += R
|
||||||
|
for(var/R in sortList(L))
|
||||||
|
P.info += "[R]<br>"
|
||||||
|
P.name = "paper- 'Crew Manifest'"
|
||||||
|
printing = 0
|
||||||
|
|
||||||
|
if("auth" in href_list)
|
||||||
|
auth = 0
|
||||||
|
if(istype(reader) && istype(writer) && authenticate())
|
||||||
|
auth = 1
|
||||||
|
|
||||||
|
if("logout" in href_list)
|
||||||
|
auth = 0
|
||||||
|
|
||||||
|
// Actual ID changing
|
||||||
|
|
||||||
|
if("access" in href_list)
|
||||||
|
if(auth)
|
||||||
|
var/access_type = text2num(href_list["access"])
|
||||||
|
writer.access ^= list(access_type) //logical xor: remove if present, add if not
|
||||||
|
|
||||||
|
if("assign" in href_list)
|
||||||
|
if(auth)
|
||||||
|
var/t1 = href_list["assign"]
|
||||||
|
if(t1 == "Custom")
|
||||||
|
var/temp_t = copytext(sanitize(input("Enter a custom job assignment.","Assignment")),1,MAX_MESSAGE_LEN)
|
||||||
|
if(temp_t)
|
||||||
|
t1 = temp_t
|
||||||
|
set_default_access(t1)
|
||||||
|
|
||||||
|
writer.assignment = t1
|
||||||
|
writer.name = text("[writer.registered_name]'s ID Card ([writer.assignment])")
|
||||||
|
|
||||||
|
if("reg" in href_list)
|
||||||
|
if(auth)
|
||||||
|
writer.registered_name = href_list["reg"]
|
||||||
|
writer.name = text("[writer.registered_name]'s ID Card ([writer.assignment])")
|
||||||
|
|
||||||
|
computer.updateUsrDialog()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/program/card_comp/centcom
|
||||||
|
name = "CentCom identification console"
|
||||||
|
drm = 1
|
||||||
|
|
||||||
|
list_jobs()
|
||||||
|
return get_all_centcom_jobs() + "Custom"
|
||||||
|
|
||||||
|
accessblock()
|
||||||
|
var/accesses = "<h5>Central Command:</h5>"
|
||||||
|
for(var/A in get_all_centcom_access())
|
||||||
|
if(A in writer.access)
|
||||||
|
accesses += topic_link(src,"access=[A]","<font color='red'>[replacetext(get_centcom_access_desc(A), " ", " ")]</font>") + " "
|
||||||
|
else
|
||||||
|
accesses += topic_link(src,"access=[A]",replacetext(get_centcom_access_desc(A), " ", " ")) + " "
|
||||||
|
return accesses
|
||||||
|
|
||||||
|
authenticate()
|
||||||
|
if(access_cent_captain in reader.access)
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
363
code/WorkInProgress/computer3/computers/cloning.dm
Normal file
@@ -0,0 +1,363 @@
|
|||||||
|
/obj/machinery/computer3/cloning
|
||||||
|
default_prog = /datum/file/program/cloning
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/storage/removable,/obj/item/part/computer/networking/prox)
|
||||||
|
|
||||||
|
/datum/file/program/cloning
|
||||||
|
name = "cloning console"
|
||||||
|
desc = "Connects to cloning machinery through the local network."
|
||||||
|
active_state = "dna_old"
|
||||||
|
|
||||||
|
req_access = list(access_heads) //Only used for record deletion right now.
|
||||||
|
|
||||||
|
var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning.
|
||||||
|
var/obj/machinery/clonepod/pod1 = null //Linked cloning pod.
|
||||||
|
|
||||||
|
var/temp = "Inactive"
|
||||||
|
var/scantemp_ckey
|
||||||
|
var/scantemp = "Ready to Scan"
|
||||||
|
var/menu = 1 //Which menu screen to display
|
||||||
|
var/list/records = list()
|
||||||
|
var/datum/data/record/active_record = null
|
||||||
|
var/loading = 0 // Nice loading text
|
||||||
|
var/has_disk = 0
|
||||||
|
|
||||||
|
proc/updatemodules()
|
||||||
|
if(!computer.net) return
|
||||||
|
|
||||||
|
if(scanner && pod1)
|
||||||
|
if(!computer.net.verify_machine(scanner))
|
||||||
|
scanner = null
|
||||||
|
if(!computer.net.verify_machine(pod1))
|
||||||
|
pod1 = null
|
||||||
|
|
||||||
|
if(!scanner || !pod1)
|
||||||
|
var/list/nearby = computer.net.get_machines()
|
||||||
|
scanner = locate(/obj/machinery/dna_scannernew) in nearby
|
||||||
|
pod1 = locate(/obj/machinery/clonepod) in nearby
|
||||||
|
|
||||||
|
if (pod1)
|
||||||
|
pod1.connected = src // Some variable the pod needs
|
||||||
|
|
||||||
|
proc/ScanningMenu()
|
||||||
|
if (isnull(scanner))
|
||||||
|
return "<font class='bad'>ERROR: No Scanner detected!</font><br>"
|
||||||
|
|
||||||
|
var/dat = "<h3>Scanner Functions</h3>"
|
||||||
|
dat += "<div class='statusDisplay'>"
|
||||||
|
|
||||||
|
if (!scanner.occupant)
|
||||||
|
dat += "Scanner Unoccupied"
|
||||||
|
else if(loading)
|
||||||
|
dat += "[scanner.occupant] => Scanning..."
|
||||||
|
else
|
||||||
|
if (scanner.occupant.ckey != scantemp_ckey)
|
||||||
|
scantemp = "Ready to Scan"
|
||||||
|
scantemp_ckey = scanner.occupant.ckey
|
||||||
|
dat += "[scanner.occupant] => [scantemp]"
|
||||||
|
|
||||||
|
dat += "</div>"
|
||||||
|
|
||||||
|
if (scanner.occupant)
|
||||||
|
dat += topic_link(src,"scan","Start Scan") + "<br>"
|
||||||
|
if(scanner.locked)
|
||||||
|
dat += topic_link(src,"lock","Unlock Scanner")
|
||||||
|
else
|
||||||
|
dat += topic_link(src,"lock","Lock Scanner")
|
||||||
|
else
|
||||||
|
dat += fake_link("Start Scan")
|
||||||
|
|
||||||
|
// Footer
|
||||||
|
dat += "<h3>Database Functions</h3>"
|
||||||
|
if (records.len > 0)
|
||||||
|
dat += topic_link(src,"menu=2","View Records ([records.len])") + "<br>"
|
||||||
|
else
|
||||||
|
dat += fake_link("View Records (0)")
|
||||||
|
|
||||||
|
if (has_disk)
|
||||||
|
dat += topic_link(src,"eject_disk","Eject Disk") + "<br>"
|
||||||
|
return dat
|
||||||
|
|
||||||
|
proc/RecordsList()
|
||||||
|
var/dat = "<h3>Current records</h3>"
|
||||||
|
dat += topic_link(src,"menu=1","<< Back") + "<br><br>"
|
||||||
|
for(var/datum/data/record/R in records)
|
||||||
|
dat += "<h4>[R.fields["name"]]</h4>Scan ID [R.fields["id"]] " + topic_link(src,"view_rec=\ref[R]","View Record")
|
||||||
|
return dat
|
||||||
|
|
||||||
|
proc/ShowRecord()
|
||||||
|
var/dat = "<h3>Selected Record</h3>"
|
||||||
|
dat += topic_link(src,"menu=2","<< Back") + "<br><br>"
|
||||||
|
|
||||||
|
if (!active_record)
|
||||||
|
dat += "<font class='bad'>Record not found.</font>"
|
||||||
|
else
|
||||||
|
dat += "<h4>[active_record.fields["name"]]</h4>"
|
||||||
|
dat += "Scan ID [active_record.fields["id"]] [topic_link(src,"clone","Clone")]<br>"
|
||||||
|
|
||||||
|
var/obj/item/weapon/implant/health/H = locate(active_record.fields["imp"])
|
||||||
|
|
||||||
|
if ((H) && (istype(H)))
|
||||||
|
dat += "<b>Health Implant Data:</b><br />[H.sensehealth()]<br><br />"
|
||||||
|
else
|
||||||
|
dat += "<font class='bad'>Unable to locate Health Implant.</font><br /><br />"
|
||||||
|
|
||||||
|
dat += "<b>Unique Identifier:</b><br /><span class='highlight'>[active_record.fields["UI"]]</span><br>"
|
||||||
|
dat += "<b>Structural Enzymes:</b><br /><span class='highlight'>[active_record.fields["SE"]]</span><br>"
|
||||||
|
|
||||||
|
if (has_disk)
|
||||||
|
dat += "<div class='block'>"
|
||||||
|
dat += "<h4>Inserted Disk</h4>"
|
||||||
|
dat += "<b>Contents:</b> "
|
||||||
|
if (computer.floppy.inserted.files.len == 0)
|
||||||
|
dat += "<i>Empty</i>"
|
||||||
|
else
|
||||||
|
for(var/datum/file/data/genome/G in computer.floppy.inserted.files)
|
||||||
|
dat += topic_link(src,"loadfile=\ref[G]","[G.name]") + "<br>"
|
||||||
|
|
||||||
|
dat += "<br /><br /><b>Save to Disk:<b><br />"
|
||||||
|
dat += topic_link(src,"save_disk=ue","Unique Identifier + Unique Enzymes") + "<br />"
|
||||||
|
dat += topic_link(src,"save_disk=ui","Unique Identifier") + "<br />"
|
||||||
|
dat += topic_link(src,"save_disk=se","Structural Enzymes") + "<br />"
|
||||||
|
dat += "</div>"
|
||||||
|
|
||||||
|
dat += "<font size=1>[topic_link(src,"del_rec","Delete Record")]</font>"
|
||||||
|
return dat
|
||||||
|
proc/ConfirmDelete()
|
||||||
|
var/dat = "[temp]<br>"
|
||||||
|
dat += "<h3>Confirm Record Deletion</h3>"
|
||||||
|
|
||||||
|
dat += "<b>[topic_link(src,"del_rec","Scan card to confirm")]</b><br>"
|
||||||
|
dat += "<b>[topic_link(src,"menu=3","Cancel")]</b>"
|
||||||
|
return dat
|
||||||
|
|
||||||
|
interact()
|
||||||
|
if(!interactable())
|
||||||
|
return
|
||||||
|
|
||||||
|
updatemodules()
|
||||||
|
|
||||||
|
var/dat = ""
|
||||||
|
dat += topic_link(src,"refresh","Refresh")
|
||||||
|
dat += "<h3>Cloning Pod Status</h3>"
|
||||||
|
dat += "<div class='statusDisplay'>[temp] </div>"
|
||||||
|
|
||||||
|
has_disk = (computer.floppy && computer.floppy.inserted)
|
||||||
|
if(!active_record && menu > 2)
|
||||||
|
menu = 2
|
||||||
|
|
||||||
|
switch(menu)
|
||||||
|
if(1)
|
||||||
|
dat += ScanningMenu()
|
||||||
|
|
||||||
|
if(2)
|
||||||
|
dat += RecordsList()
|
||||||
|
|
||||||
|
if(3)
|
||||||
|
dat += ShowRecord()
|
||||||
|
|
||||||
|
if(4)
|
||||||
|
dat = ConfirmDelete() // not (+=), this is how it used to be, just putting it in a function
|
||||||
|
|
||||||
|
if(!popup)
|
||||||
|
popup = new(usr, "\ref[computer]", "Cloning System Control")
|
||||||
|
popup.set_title_image(usr.browse_rsc_icon(overlay.icon, overlay.icon_state))
|
||||||
|
|
||||||
|
popup.set_content(dat)
|
||||||
|
popup.open()
|
||||||
|
return
|
||||||
|
|
||||||
|
Topic(var/href, var/list/href_list)
|
||||||
|
if(loading || !interactable())
|
||||||
|
return
|
||||||
|
|
||||||
|
if (href_list["menu"])
|
||||||
|
menu = text2num(href_list["menu"])
|
||||||
|
else if (("scan" in href_list) && !isnull(scanner))
|
||||||
|
scantemp = ""
|
||||||
|
|
||||||
|
loading = 1
|
||||||
|
computer.updateUsrDialog()
|
||||||
|
|
||||||
|
spawn(20)
|
||||||
|
scan_mob(scanner.occupant)
|
||||||
|
|
||||||
|
loading = 0
|
||||||
|
computer.updateUsrDialog()
|
||||||
|
|
||||||
|
|
||||||
|
//No locking an open scanner.
|
||||||
|
else if (("lock" in href_list) && !isnull(scanner))
|
||||||
|
if ((!scanner.locked) && (scanner.occupant))
|
||||||
|
scanner.locked = 1
|
||||||
|
else
|
||||||
|
scanner.locked = 0
|
||||||
|
|
||||||
|
else if ("view_rec" in href_list)
|
||||||
|
active_record = locate(href_list["view_rec"])
|
||||||
|
if(istype(active_record,/datum/data/record))
|
||||||
|
if ( !active_record.fields["ckey"] || active_record.fields["ckey"] == "" )
|
||||||
|
del(active_record)
|
||||||
|
temp = "<font class='bad'>Record Corrupt</font>"
|
||||||
|
else
|
||||||
|
menu = 3
|
||||||
|
else
|
||||||
|
active_record = null
|
||||||
|
temp = "Record missing."
|
||||||
|
|
||||||
|
else if ("del_rec" in href_list)
|
||||||
|
if ((!active_record) || (menu < 3))
|
||||||
|
return
|
||||||
|
if (menu == 3) //If we are viewing a record, confirm deletion
|
||||||
|
temp = "Delete record?"
|
||||||
|
menu = 4
|
||||||
|
|
||||||
|
else if (menu == 4)
|
||||||
|
var/obj/item/weapon/card/id/C = usr.get_active_hand()
|
||||||
|
if (istype(C)||istype(C, /obj/item/device/pda))
|
||||||
|
if(check_access(C))
|
||||||
|
temp = "[active_record.fields["name"]] => Record deleted."
|
||||||
|
records.Remove(active_record)
|
||||||
|
del(active_record)
|
||||||
|
menu = 2
|
||||||
|
else
|
||||||
|
temp = "<font class='bad'>Access Denied.</font>"
|
||||||
|
|
||||||
|
else if ("eject_disk" in href_list)
|
||||||
|
if(computer.floppy)
|
||||||
|
computer.floppy.eject_disk()
|
||||||
|
|
||||||
|
else if("loadfile" in href_list)
|
||||||
|
|
||||||
|
var/datum/file/data/genome/G = locate(href_list["loadfile"]) in computer.floppy.files
|
||||||
|
if(!istype(G))
|
||||||
|
temp = "<font class='bad'>Load error.</font>"
|
||||||
|
computer.updateUsrDialog()
|
||||||
|
return
|
||||||
|
switch(G.type)
|
||||||
|
if(/datum/file/data/genome/UI)
|
||||||
|
active_record.fields["UI"] = G.content
|
||||||
|
if(/datum/file/data/genome/UE)
|
||||||
|
active_record.fields["name"] = G.real_name
|
||||||
|
if(/datum/file/data/genome/SE)
|
||||||
|
active_record.fields["SE"] = G.content
|
||||||
|
if(/datum/file/data/genome/cloning)
|
||||||
|
active_record = G:record
|
||||||
|
else if("savefile" in href_list)
|
||||||
|
if (!active_record || !computer || !computer.floppy)
|
||||||
|
temp = "<font class='bad'>Save error.</font>"
|
||||||
|
computer.updateUsrDialog()
|
||||||
|
return
|
||||||
|
var/rval = 0
|
||||||
|
switch(href_list["save_disk"])
|
||||||
|
if("ui")
|
||||||
|
var/datum/file/data/genome/UI/ui = new
|
||||||
|
ui.content = active_record.fields["UI"]
|
||||||
|
ui.real_name = active_record.fields["name"]
|
||||||
|
rval = computer.floppy.addfile(ui)
|
||||||
|
if("ue")
|
||||||
|
var/datum/file/data/genome/UI/UE/ui = new
|
||||||
|
ui.content = active_record.fields["UI"]
|
||||||
|
ui.real_name = active_record.fields["name"]
|
||||||
|
rval = computer.floppy.addfile(ui)
|
||||||
|
if("se")
|
||||||
|
var/datum/file/data/genome/SE/se = new
|
||||||
|
se.content = active_record.fields["SE"]
|
||||||
|
se.real_name = active_record.fields["name"]
|
||||||
|
rval = computer.floppy.addfile(se)
|
||||||
|
if("clone")
|
||||||
|
var/datum/file/data/genome/cloning/c = new
|
||||||
|
c.record = active_record
|
||||||
|
c.real_name = active_record.fields["name"]
|
||||||
|
rval = computer.floppy.addfile(c)
|
||||||
|
if(!rval)
|
||||||
|
temp = "<font class='bad'>Disk write error.</font>"
|
||||||
|
|
||||||
|
else if ("refresh" in href_list)
|
||||||
|
computer.updateUsrDialog()
|
||||||
|
|
||||||
|
else if ("clone" in href_list)
|
||||||
|
//Look for that player! They better be dead!
|
||||||
|
if(active_record)
|
||||||
|
//Can't clone without someone to clone. Or a pod. Or if the pod is busy. Or full of gibs.
|
||||||
|
if(!pod1)
|
||||||
|
temp = "<font class='bad'>No Clonepod detected.</font>"
|
||||||
|
else if(pod1.occupant)
|
||||||
|
temp = "<font class='bad'>Clonepod is currently occupied.</font>"
|
||||||
|
else if(pod1.mess)
|
||||||
|
temp = "<font class='bad'>Clonepod malfunction.</font>"
|
||||||
|
else if(!config.revival_cloning)
|
||||||
|
temp = "<font class='bad'>Unable to initiate cloning cycle.</font>"
|
||||||
|
else if(pod1.growclone(active_record.fields["ckey"], active_record.fields["name"], active_record.fields["UI"], active_record.fields["SE"], active_record.fields["mind"], active_record.fields["mrace"]))
|
||||||
|
temp = "[active_record.fields["name"]] => <font class='good'>Cloning cycle in progress...</font>"
|
||||||
|
records.Remove(active_record)
|
||||||
|
del(active_record)
|
||||||
|
menu = 1
|
||||||
|
else
|
||||||
|
temp = "[active_record.fields["name"]] => <font class='bad'>Initialisation failure.</font>"
|
||||||
|
|
||||||
|
else
|
||||||
|
temp = "<font class='bad'>Data corruption.</font>"
|
||||||
|
|
||||||
|
computer.add_fingerprint(usr)
|
||||||
|
computer.updateUsrDialog()
|
||||||
|
return
|
||||||
|
|
||||||
|
proc/scan_mob(mob/living/carbon/human/subject as mob)
|
||||||
|
if ((isnull(subject)) || (!(ishuman(subject))) || (!subject.dna))
|
||||||
|
scantemp = "<font class='bad'>Unable to locate valid genetic data.</font>"
|
||||||
|
return
|
||||||
|
if (!getbrain(subject))
|
||||||
|
scantemp = "<font class='bad'>No signs of intelligence detected.</font>"
|
||||||
|
return
|
||||||
|
if (subject.suiciding == 1)
|
||||||
|
scantemp = "<font class='bad'>Subject's brain is not responding to scanning stimuli.</font>"
|
||||||
|
return
|
||||||
|
if ((!subject.ckey) || (!subject.client))
|
||||||
|
scantemp = "<font class='bad'>Mental interface failure.</font>"
|
||||||
|
return
|
||||||
|
if (NOCLONE in subject.mutations)
|
||||||
|
scantemp = "<font class='bad'>Mental interface failure.</font>"
|
||||||
|
return
|
||||||
|
if (!isnull(find_record(subject.ckey)))
|
||||||
|
scantemp = "<font class='average'>Subject already in database.</font>"
|
||||||
|
return
|
||||||
|
|
||||||
|
subject.dna.check_integrity()
|
||||||
|
|
||||||
|
var/datum/data/record/R = new /datum/data/record( )
|
||||||
|
if(subject.dna)
|
||||||
|
R.fields["mrace"] = subject.dna.mutantrace
|
||||||
|
R.fields["UI"] = subject.dna.uni_identity
|
||||||
|
R.fields["SE"] = subject.dna.struc_enzymes
|
||||||
|
else
|
||||||
|
R.fields["mrace"] = null
|
||||||
|
R.fields["UI"] = null
|
||||||
|
R.fields["SE"] = null
|
||||||
|
R.fields["ckey"] = subject.ckey
|
||||||
|
R.fields["name"] = subject.real_name
|
||||||
|
R.fields["id"] = copytext(md5(subject.real_name), 2, 6)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Add an implant if needed
|
||||||
|
var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject)
|
||||||
|
if (isnull(imp))
|
||||||
|
imp = new /obj/item/weapon/implant/health(subject)
|
||||||
|
imp.implanted = subject
|
||||||
|
R.fields["imp"] = "\ref[imp]"
|
||||||
|
//Update it if needed
|
||||||
|
else
|
||||||
|
R.fields["imp"] = "\ref[imp]"
|
||||||
|
|
||||||
|
if (!isnull(subject.mind)) //Save that mind so traitors can continue traitoring after cloning.
|
||||||
|
R.fields["mind"] = "\ref[subject.mind]"
|
||||||
|
|
||||||
|
records += R
|
||||||
|
scantemp = "Subject successfully scanned."
|
||||||
|
|
||||||
|
//Find a specific record by key.
|
||||||
|
proc/find_record(var/find_key)
|
||||||
|
for(var/datum/data/record/R in records)
|
||||||
|
if (R.fields["ckey"] == find_key)
|
||||||
|
return R
|
||||||
|
return null
|
||||||
384
code/WorkInProgress/computer3/computers/communications.dm
Normal file
@@ -0,0 +1,384 @@
|
|||||||
|
/obj/machinery/computer3/communications
|
||||||
|
default_prog = /datum/file/program/communications
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio/subspace)
|
||||||
|
|
||||||
|
/obj/machinery/computer3/communications/captain
|
||||||
|
default_prog = /datum/file/program/communications
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio/subspace,/obj/item/part/computer/cardslot/dual)
|
||||||
|
spawn_files = list(/datum/file/program/card_comp, /datum/file/program/security, /datum/file/program/crew, /datum/file/program/arcade,
|
||||||
|
/datum/file/camnet_key, /datum/file/camnet_key/entertainment, /datum/file/camnet_key/singulo)
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/program/communications
|
||||||
|
var/const/STATE_DEFAULT = 1
|
||||||
|
var/const/STATE_CALLSHUTTLE = 2
|
||||||
|
var/const/STATE_CANCELSHUTTLE = 3
|
||||||
|
var/const/STATE_MESSAGELIST = 4
|
||||||
|
var/const/STATE_VIEWMESSAGE = 5
|
||||||
|
var/const/STATE_DELMESSAGE = 6
|
||||||
|
var/const/STATE_STATUSDISPLAY = 7
|
||||||
|
var/const/STATE_ALERT_LEVEL = 8
|
||||||
|
var/const/STATE_CONFIRM_LEVEL = 9
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/program/communications
|
||||||
|
name = "Centcom communications relay"
|
||||||
|
desc = "Used to connect to Centcom."
|
||||||
|
active_state = "comm"
|
||||||
|
req_access = list(access_heads)
|
||||||
|
|
||||||
|
var/prints_intercept = 1
|
||||||
|
var/authenticated = 0
|
||||||
|
var/list/messagetitle = list()
|
||||||
|
var/list/messagetext = list()
|
||||||
|
var/currmsg = 0
|
||||||
|
var/aicurrmsg = 0
|
||||||
|
var/state = STATE_DEFAULT
|
||||||
|
var/aistate = STATE_DEFAULT
|
||||||
|
var/message_cooldown = 0
|
||||||
|
var/centcomm_message_cooldown = 0
|
||||||
|
var/tmp_alertlevel = 0
|
||||||
|
|
||||||
|
var/status_display_freq = "1435"
|
||||||
|
var/stat_msg1
|
||||||
|
var/stat_msg2
|
||||||
|
|
||||||
|
Reset()
|
||||||
|
..()
|
||||||
|
authenticated = 0
|
||||||
|
state = STATE_DEFAULT
|
||||||
|
aistate = STATE_DEFAULT
|
||||||
|
|
||||||
|
|
||||||
|
Topic(var/href, var/list/href_list)
|
||||||
|
if(!interactable() || !computer.radio || ..(href,href_list) )
|
||||||
|
return
|
||||||
|
if (computer.z > 1)
|
||||||
|
usr << "\red <b>Unable to establish a connection</b>: \black You're too far away from the station!"
|
||||||
|
return
|
||||||
|
|
||||||
|
if("main" in href_list)
|
||||||
|
state = STATE_DEFAULT
|
||||||
|
if("login" in href_list)
|
||||||
|
var/mob/M = usr
|
||||||
|
var/obj/item/I = M.get_active_hand()
|
||||||
|
if(I)
|
||||||
|
I = I.GetID()
|
||||||
|
if(istype(I,/obj/item/weapon/card/id) && check_access(I))
|
||||||
|
authenticated = 1
|
||||||
|
if(access_captain in I.GetAccess())
|
||||||
|
authenticated = 2
|
||||||
|
if(istype(I,/obj/item/weapon/card/emag))
|
||||||
|
authenticated = 2
|
||||||
|
computer.emagged = 1
|
||||||
|
if("logout" in href_list)
|
||||||
|
authenticated = 0
|
||||||
|
|
||||||
|
if("swipeidseclevel" in href_list)
|
||||||
|
var/mob/M = usr
|
||||||
|
var/obj/item/I = M.get_active_hand()
|
||||||
|
I = I.GetID()
|
||||||
|
|
||||||
|
if (istype(I,/obj/item/weapon/card/id))
|
||||||
|
if(access_captain in I.GetAccess())
|
||||||
|
var/old_level = security_level
|
||||||
|
if(!tmp_alertlevel) tmp_alertlevel = SEC_LEVEL_GREEN
|
||||||
|
if(tmp_alertlevel < SEC_LEVEL_GREEN) tmp_alertlevel = SEC_LEVEL_GREEN
|
||||||
|
if(tmp_alertlevel > SEC_LEVEL_BLUE) tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this
|
||||||
|
set_security_level(tmp_alertlevel)
|
||||||
|
if(security_level != old_level)
|
||||||
|
//Only notify the admins if an actual change happened
|
||||||
|
log_game("[key_name(usr)] has changed the security level to [get_security_level()].")
|
||||||
|
message_admins("[key_name_admin(usr)] has changed the security level to [get_security_level()].")
|
||||||
|
switch(security_level)
|
||||||
|
if(SEC_LEVEL_GREEN)
|
||||||
|
feedback_inc("alert_comms_green",1)
|
||||||
|
if(SEC_LEVEL_BLUE)
|
||||||
|
feedback_inc("alert_comms_blue",1)
|
||||||
|
tmp_alertlevel = 0
|
||||||
|
else:
|
||||||
|
usr << "You are not authorized to do this."
|
||||||
|
tmp_alertlevel = 0
|
||||||
|
state = STATE_DEFAULT
|
||||||
|
else
|
||||||
|
usr << "You need to swipe your ID."
|
||||||
|
if("announce" in href_list)
|
||||||
|
if(authenticated==2)
|
||||||
|
if(message_cooldown) return
|
||||||
|
var/input = stripped_input(usr, "Please choose a message to announce to the station crew.", "What?")
|
||||||
|
if(!input || !interactable())
|
||||||
|
return
|
||||||
|
captain_announce(input)//This should really tell who is, IE HoP, CE, HoS, RD, Captain
|
||||||
|
log_say("[key_name(usr)] has made a captain announcement: [input]")
|
||||||
|
message_admins("[key_name_admin(usr)] has made a captain announcement.", 1)
|
||||||
|
message_cooldown = 1
|
||||||
|
spawn(600)//One minute cooldown
|
||||||
|
message_cooldown = 0
|
||||||
|
|
||||||
|
if("callshuttle" in href_list)
|
||||||
|
state = STATE_DEFAULT
|
||||||
|
if(authenticated)
|
||||||
|
state = STATE_CALLSHUTTLE
|
||||||
|
if("callshuttle2" in href_list)
|
||||||
|
if(!computer.radio.subspace)
|
||||||
|
return
|
||||||
|
if(authenticated)
|
||||||
|
call_shuttle_proc(usr)
|
||||||
|
if(emergency_shuttle.online())
|
||||||
|
post_status("shuttle")
|
||||||
|
state = STATE_DEFAULT
|
||||||
|
if("cancelshuttle" in href_list)
|
||||||
|
state = STATE_DEFAULT
|
||||||
|
if(authenticated)
|
||||||
|
state = STATE_CANCELSHUTTLE
|
||||||
|
if("messagelist" in href_list)
|
||||||
|
currmsg = 0
|
||||||
|
state = STATE_MESSAGELIST
|
||||||
|
if("viewmessage" in href_list)
|
||||||
|
state = STATE_VIEWMESSAGE
|
||||||
|
if (!currmsg)
|
||||||
|
if(href_list["message-num"])
|
||||||
|
currmsg = text2num(href_list["message-num"])
|
||||||
|
else
|
||||||
|
state = STATE_MESSAGELIST
|
||||||
|
if("delmessage" in href_list)
|
||||||
|
state = (currmsg) ? STATE_DELMESSAGE : STATE_MESSAGELIST
|
||||||
|
if("delmessage2" in href_list)
|
||||||
|
if(authenticated)
|
||||||
|
if(currmsg)
|
||||||
|
var/title = messagetitle[currmsg]
|
||||||
|
var/text = messagetext[currmsg]
|
||||||
|
messagetitle.Remove(title)
|
||||||
|
messagetext.Remove(text)
|
||||||
|
if(currmsg == aicurrmsg)
|
||||||
|
aicurrmsg = 0
|
||||||
|
currmsg = 0
|
||||||
|
state = STATE_MESSAGELIST
|
||||||
|
else
|
||||||
|
state = STATE_VIEWMESSAGE
|
||||||
|
if("status" in href_list)
|
||||||
|
state = STATE_STATUSDISPLAY
|
||||||
|
|
||||||
|
// Status display stuff
|
||||||
|
if("setstat" in href_list)
|
||||||
|
switch(href_list["statdisp"])
|
||||||
|
if("message")
|
||||||
|
post_status("message", stat_msg1, stat_msg2)
|
||||||
|
if("alert")
|
||||||
|
post_status("alert", href_list["alert"])
|
||||||
|
else
|
||||||
|
post_status(href_list["statdisp"])
|
||||||
|
|
||||||
|
if("setmsg1" in href_list)
|
||||||
|
stat_msg1 = reject_bad_text(input("Line 1", "Enter Message Text", stat_msg1) as text|null, 40)
|
||||||
|
computer.updateDialog()
|
||||||
|
if("setmsg2" in href_list)
|
||||||
|
stat_msg2 = reject_bad_text(input("Line 2", "Enter Message Text", stat_msg2) as text|null, 40)
|
||||||
|
computer.updateDialog()
|
||||||
|
|
||||||
|
// OMG CENTCOMM LETTERHEAD
|
||||||
|
if("MessageCentcomm" in href_list)
|
||||||
|
if(!computer.radio.subspace)
|
||||||
|
return
|
||||||
|
if(authenticated==2)
|
||||||
|
if(centcomm_message_cooldown)
|
||||||
|
usr << "Arrays recycling. Please stand by."
|
||||||
|
return
|
||||||
|
var/input = stripped_input(usr, "Please choose a message to transmit to Centcomm via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", "")
|
||||||
|
if(!input || !interactable())
|
||||||
|
return
|
||||||
|
Centcomm_announce(input, usr)
|
||||||
|
usr << "Message transmitted."
|
||||||
|
log_say("[key_name(usr)] has made a Centcomm announcement: [input]")
|
||||||
|
centcomm_message_cooldown = 1
|
||||||
|
spawn(600)//10 minute cooldown
|
||||||
|
centcomm_message_cooldown = 0
|
||||||
|
|
||||||
|
|
||||||
|
// OMG SYNDICATE ...LETTERHEAD
|
||||||
|
if("MessageSyndicate" in href_list)
|
||||||
|
if((authenticated==2) && (computer.emagged))
|
||||||
|
if(centcomm_message_cooldown)
|
||||||
|
usr << "Arrays recycling. Please stand by."
|
||||||
|
return
|
||||||
|
var/input = stripped_input(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING CORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", "")
|
||||||
|
if(!input || !interactable())
|
||||||
|
return
|
||||||
|
Syndicate_announce(input, usr)
|
||||||
|
usr << "Message transmitted."
|
||||||
|
log_say("[key_name(usr)] has made a Syndicate announcement: [input]")
|
||||||
|
centcomm_message_cooldown = 1
|
||||||
|
spawn(600)//10 minute cooldown
|
||||||
|
centcomm_message_cooldown = 0
|
||||||
|
|
||||||
|
if("RestoreBackup" in href_list)
|
||||||
|
usr << "Backup routing data restored!"
|
||||||
|
computer.emagged = 0
|
||||||
|
computer.updateDialog()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// AI interface
|
||||||
|
if("ai-main" in href_list)
|
||||||
|
aicurrmsg = 0
|
||||||
|
aistate = STATE_DEFAULT
|
||||||
|
if("ai-callshuttle" in href_list)
|
||||||
|
aistate = STATE_CALLSHUTTLE
|
||||||
|
if("ai-callshuttle2" in href_list)
|
||||||
|
if(!computer.radio.subspace)
|
||||||
|
return
|
||||||
|
call_shuttle_proc(usr)
|
||||||
|
aistate = STATE_DEFAULT
|
||||||
|
if("ai-messagelist" in href_list)
|
||||||
|
aicurrmsg = 0
|
||||||
|
aistate = STATE_MESSAGELIST
|
||||||
|
if("ai-viewmessage" in href_list)
|
||||||
|
aistate = STATE_VIEWMESSAGE
|
||||||
|
if (!aicurrmsg)
|
||||||
|
if(href_list["message-num"])
|
||||||
|
aicurrmsg = text2num(href_list["message-num"])
|
||||||
|
else
|
||||||
|
aistate = STATE_MESSAGELIST
|
||||||
|
if("ai-delmessage" in href_list)
|
||||||
|
aistate = (aicurrmsg) ? STATE_DELMESSAGE : STATE_MESSAGELIST
|
||||||
|
if("ai-delmessage2" in href_list)
|
||||||
|
if(aicurrmsg)
|
||||||
|
var/title = messagetitle[aicurrmsg]
|
||||||
|
var/text = messagetext[aicurrmsg]
|
||||||
|
messagetitle.Remove(title)
|
||||||
|
messagetext.Remove(text)
|
||||||
|
if(currmsg == aicurrmsg)
|
||||||
|
currmsg = 0
|
||||||
|
aicurrmsg = 0
|
||||||
|
aistate = STATE_MESSAGELIST
|
||||||
|
if("ai-status" in href_list)
|
||||||
|
aistate = STATE_STATUSDISPLAY
|
||||||
|
|
||||||
|
if("securitylevel" in href_list)
|
||||||
|
tmp_alertlevel = text2num( href_list["newalertlevel"] )
|
||||||
|
if(!tmp_alertlevel) tmp_alertlevel = 0
|
||||||
|
state = STATE_CONFIRM_LEVEL
|
||||||
|
|
||||||
|
if("changeseclevel" in href_list)
|
||||||
|
state = STATE_ALERT_LEVEL
|
||||||
|
|
||||||
|
computer.updateUsrDialog()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
proc/main_menu()
|
||||||
|
var/dat = ""
|
||||||
|
if (computer.radio.subspace)
|
||||||
|
if(emergency_shuttle.online() && emergency_shuttle.location())
|
||||||
|
var/timeleft = emergency_shuttle.estimate_arrival_time()
|
||||||
|
dat += "<B>Emergency shuttle</B>\n<BR>\nETA: [timeleft / 60 % 60]:[add_zero(num2text(timeleft % 60), 2)]<BR>"
|
||||||
|
refresh = 1
|
||||||
|
else
|
||||||
|
refresh = 0
|
||||||
|
if (authenticated)
|
||||||
|
dat += "<BR>\[ <A HREF='?src=\ref[src];logout'>Log Out</A> \]"
|
||||||
|
if (authenticated==2)
|
||||||
|
dat += "<BR>\[ <A HREF='?src=\ref[src];announce'>Make An Announcement</A> \]"
|
||||||
|
if(computer.emagged == 0)
|
||||||
|
dat += "<BR>\[ <A HREF='?src=\ref[src];MessageCentcomm'>Send an emergency message to Centcomm</A> \]"
|
||||||
|
else
|
||||||
|
dat += "<BR>\[ <A HREF='?src=\ref[src];MessageSyndicate'>Send an emergency message to \[UNKNOWN\]</A> \]"
|
||||||
|
dat += "<BR>\[ <A HREF='?src=\ref[src];RestoreBackup'>Restore Backup Routing Data</A> \]"
|
||||||
|
|
||||||
|
dat += "<BR>\[ <A HREF='?src=\ref[src];changeseclevel'>Change alert level</A> \]"
|
||||||
|
if(emergency_shuttle.location())
|
||||||
|
if (emergency_shuttle.online())
|
||||||
|
dat += "<BR>\[ <A HREF='?src=\ref[src];cancelshuttle'>Cancel Shuttle Call</A> \]"
|
||||||
|
else
|
||||||
|
dat += "<BR>\[ <A HREF='?src=\ref[src];callshuttle'>Call Emergency Shuttle</A> \]"
|
||||||
|
|
||||||
|
dat += "<BR>\[ <A HREF='?src=\ref[src];status'>Set Status Display</A> \]"
|
||||||
|
else
|
||||||
|
dat += "<BR>\[ <A HREF='?src=\ref[src];login'>Log In</A> \]"
|
||||||
|
dat += "<BR>\[ <A HREF='?src=\ref[src];messagelist'>Message List</A> \]"
|
||||||
|
return dat
|
||||||
|
|
||||||
|
proc/confirm_menu(var/prompt,var/yes_option)
|
||||||
|
return "Are you sure you want to [prompt]? \[ [topic_link(src,yes_option,"OK")] | [topic_link(src,"main","Cancel")] \]"
|
||||||
|
|
||||||
|
interact()
|
||||||
|
if(!interactable())
|
||||||
|
return
|
||||||
|
if(!computer.radio)
|
||||||
|
computer.Crash(MISSING_PERIPHERAL)
|
||||||
|
return
|
||||||
|
|
||||||
|
var/dat = ""
|
||||||
|
switch(state)
|
||||||
|
if(STATE_DEFAULT)
|
||||||
|
dat = main_menu()
|
||||||
|
if(STATE_CALLSHUTTLE)
|
||||||
|
dat = confirm_menu("call the shuttle","callshuttle2")
|
||||||
|
if(STATE_CANCELSHUTTLE)
|
||||||
|
dat = confirm_menu("cancel the shuttle","cancelshuttle2")
|
||||||
|
if(STATE_MESSAGELIST)
|
||||||
|
dat += "Messages:"
|
||||||
|
for(var/i = 1; i<=messagetitle.len; i++)
|
||||||
|
dat += "<BR><A HREF='?src=\ref[src];viewmessage;message-num=[i]'>[messagetitle[i]]</A>"
|
||||||
|
if(STATE_VIEWMESSAGE)
|
||||||
|
if (currmsg)
|
||||||
|
dat += "<B>[messagetitle[currmsg]]</B><BR><BR>[messagetext[currmsg]]"
|
||||||
|
if (authenticated)
|
||||||
|
dat += "<BR><BR>\[ <A HREF='?src=\ref[src];delmessage'>Delete \]"
|
||||||
|
else
|
||||||
|
state = STATE_MESSAGELIST
|
||||||
|
interact()
|
||||||
|
return
|
||||||
|
if(STATE_DELMESSAGE)
|
||||||
|
if (currmsg)
|
||||||
|
dat += "Are you sure you want to delete this message? \[ <A HREF='?src=\ref[src];delmessage2'>OK</A> | <A HREF='?src=\ref[src];viewmessage'>Cancel</A> \]"
|
||||||
|
else
|
||||||
|
state = STATE_MESSAGELIST
|
||||||
|
interact()
|
||||||
|
return
|
||||||
|
if(STATE_STATUSDISPLAY)
|
||||||
|
dat += "\[ <A HREF='?src=\ref[src];main'>Back</A> \]<BR>"
|
||||||
|
dat += "Set Status Displays<BR>"
|
||||||
|
dat += "\[ <A HREF='?src=\ref[src];setstat;statdisp=blank'>Clear</A> \]<BR>"
|
||||||
|
dat += "\[ <A HREF='?src=\ref[src];setstat;statdisp=shuttle'>Shuttle ETA</A> \]<BR>"
|
||||||
|
dat += "\[ <A HREF='?src=\ref[src];setstat;statdisp=message'>Message</A> \]"
|
||||||
|
dat += "<ul><li> Line 1: <A HREF='?src=\ref[src];setmsg1'>[ stat_msg1 ? stat_msg1 : "(none)"]</A>"
|
||||||
|
dat += "<li> Line 2: <A HREF='?src=\ref[src];setmsg2'>[ stat_msg2 ? stat_msg2 : "(none)"]</A></ul><br>"
|
||||||
|
dat += "\[ Alert: <A HREF='?src=\ref[src];setstat;statdisp=alert;alert=default'>None</A> |"
|
||||||
|
dat += " <A HREF='?src=\ref[src];setstat;statdisp=alert;alert=redalert'>Red Alert</A> |"
|
||||||
|
dat += " <A HREF='?src=\ref[src];setstat;statdisp=alert;alert=lockdown'>Lockdown</A> |"
|
||||||
|
dat += " <A HREF='?src=\ref[src];setstat;statdisp=alert;alert=biohazard'>Biohazard</A> \]<BR><HR>"
|
||||||
|
if(STATE_ALERT_LEVEL)
|
||||||
|
dat += "Current alert level: [get_security_level()]<BR>"
|
||||||
|
if(security_level == SEC_LEVEL_DELTA)
|
||||||
|
dat += "<font color='red'><b>The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate.</b></font>"
|
||||||
|
else
|
||||||
|
dat += "<A HREF='?src=\ref[src];securitylevel;newalertlevel=[SEC_LEVEL_BLUE]'>Blue</A><BR>"
|
||||||
|
dat += "<A HREF='?src=\ref[src];securitylevel;newalertlevel=[SEC_LEVEL_GREEN]'>Green</A>"
|
||||||
|
if(STATE_CONFIRM_LEVEL)
|
||||||
|
dat += "Current alert level: [get_security_level()]<BR>"
|
||||||
|
dat += "Confirm the change to: [num2seclevel(tmp_alertlevel)]<BR>"
|
||||||
|
dat += "<A HREF='?src=\ref[src];swipeidseclevel'>Swipe ID</A> to confirm change.<BR>"
|
||||||
|
|
||||||
|
popup.set_content(dat)
|
||||||
|
popup.open()
|
||||||
|
|
||||||
|
|
||||||
|
proc/post_status(var/command, var/data1, var/data2)
|
||||||
|
var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435)
|
||||||
|
|
||||||
|
if(!frequency) return
|
||||||
|
|
||||||
|
var/datum/signal/status_signal = new
|
||||||
|
status_signal.source = src
|
||||||
|
status_signal.transmission_method = 1
|
||||||
|
status_signal.data["command"] = command
|
||||||
|
|
||||||
|
switch(command)
|
||||||
|
if("message")
|
||||||
|
status_signal.data["msg1"] = data1
|
||||||
|
status_signal.data["msg2"] = data2
|
||||||
|
if("alert")
|
||||||
|
status_signal.data["picture_state"] = data1
|
||||||
|
|
||||||
|
frequency.post_signal(src, status_signal)
|
||||||
78
code/WorkInProgress/computer3/computers/crew.dm
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
/obj/machinery/computer3/crew
|
||||||
|
default_prog = /datum/file/program/crew
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio)
|
||||||
|
icon_state = "frame-med"
|
||||||
|
|
||||||
|
/datum/file/program/crew
|
||||||
|
name = "Crew Monitoring Console"
|
||||||
|
desc = "Used to monitor active health sensors built into most of the crew's uniforms."
|
||||||
|
active_state = "crew"
|
||||||
|
var/list/tracked = list( )
|
||||||
|
|
||||||
|
interact(mob/user)
|
||||||
|
if(!interactable())
|
||||||
|
return
|
||||||
|
|
||||||
|
scan()
|
||||||
|
var/t = "<TT><B>Crew Monitoring</B><HR>"
|
||||||
|
t += "<BR><A href='?src=\ref[src];update=1'>Refresh</A> "
|
||||||
|
t += "<A href='?src=\ref[src];close=1'>Close</A><BR>"
|
||||||
|
t += "<table><tr><td width='40%'>Name</td><td width='20%'>Vitals</td><td width='40%'>Position</td></tr>"
|
||||||
|
var/list/logs = list()
|
||||||
|
for(var/obj/item/clothing/under/C in src.tracked)
|
||||||
|
var/log = ""
|
||||||
|
var/turf/pos = get_turf(C)
|
||||||
|
if((C) && (C.has_sensor) && (pos) && (pos.z == computer.z) && C.sensor_mode)
|
||||||
|
if(istype(C.loc, /mob/living/carbon/human))
|
||||||
|
|
||||||
|
var/mob/living/carbon/human/H = C.loc
|
||||||
|
|
||||||
|
var/dam1 = round(H.getOxyLoss(),1)
|
||||||
|
var/dam2 = round(H.getToxLoss(),1)
|
||||||
|
var/dam3 = round(H.getFireLoss(),1)
|
||||||
|
var/dam4 = round(H.getBruteLoss(),1)
|
||||||
|
|
||||||
|
var/life_status = "[H.stat > 1 ? "<font color=red>Deceased</font>" : "Living"]"
|
||||||
|
var/damage_report = "(<font color='blue'>[dam1]</font>/<font color='green'>[dam2]</font>/<font color='orange'>[dam3]</font>/<font color='red'>[dam4]</font>)"
|
||||||
|
|
||||||
|
if(H.wear_id)
|
||||||
|
log += "<tr><td width='40%'>[H.wear_id.name]</td>"
|
||||||
|
else
|
||||||
|
log += "<tr><td width='40%'>Unknown</td>"
|
||||||
|
|
||||||
|
switch(C.sensor_mode)
|
||||||
|
if(1)
|
||||||
|
log += "<td width='15%'>[life_status]</td><td width='40%'>Not Available</td></tr>"
|
||||||
|
if(2)
|
||||||
|
log += "<td width='20%'>[life_status] [damage_report]</td><td width='40%'>Not Available</td></tr>"
|
||||||
|
if(3)
|
||||||
|
var/area/player_area = get_area(H)
|
||||||
|
log += "<td width='20%'>[life_status] [damage_report]</td><td width='40%'>[player_area.name] ([pos.x], [pos.y])</td></tr>"
|
||||||
|
logs += log
|
||||||
|
logs = sortList(logs)
|
||||||
|
for(var/log in logs)
|
||||||
|
t += log
|
||||||
|
t += "</table>"
|
||||||
|
t += "</FONT></PRE></TT>"
|
||||||
|
|
||||||
|
popup.set_content(t)
|
||||||
|
popup.open()
|
||||||
|
|
||||||
|
|
||||||
|
proc/scan()
|
||||||
|
for(var/obj/item/clothing/under/C in world)
|
||||||
|
if((C.has_sensor) && (istype(C.loc, /mob/living/carbon/human)))
|
||||||
|
tracked |= C
|
||||||
|
return 1
|
||||||
|
|
||||||
|
Topic(href, list/href_list)
|
||||||
|
if(!interactable() || !computer.cardslot || ..(href,href_list))
|
||||||
|
return
|
||||||
|
if( href_list["close"] )
|
||||||
|
usr << browse(null, "window=crewcomp")
|
||||||
|
usr.unset_machine()
|
||||||
|
return
|
||||||
|
if(href_list["update"])
|
||||||
|
interact()
|
||||||
|
//src.updateUsrDialog()
|
||||||
|
return
|
||||||
3
code/WorkInProgress/computer3/computers/customs.dm
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
/obj/machinery/computer3/customs
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio/subspace,/obj/item/part/computer/networking/cameras)
|
||||||
|
spawn_files = list(/datum/file/program/arcade,/datum/file/program/security,/datum/file/camnet_key/entertainment,/datum/file/program/crew)
|
||||||
84
code/WorkInProgress/computer3/computers/law.dm
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/computer3/aiupload
|
||||||
|
name = "AI Upload"
|
||||||
|
desc = "Used to upload laws to the AI."
|
||||||
|
icon_state = "frame-rnd"
|
||||||
|
circuit = "/obj/item/part/board/circuit/aiupload"
|
||||||
|
var/mob/living/silicon/ai/current = null
|
||||||
|
var/opened = 0
|
||||||
|
|
||||||
|
|
||||||
|
verb/AccessInternals()
|
||||||
|
set category = "Object"
|
||||||
|
set name = "Access Computer's Internals"
|
||||||
|
set src in oview(1)
|
||||||
|
if(get_dist(src, usr) > 1 || usr.restrained() || usr.lying || usr.stat || istype(usr, /mob/living/silicon))
|
||||||
|
return
|
||||||
|
|
||||||
|
opened = !opened
|
||||||
|
if(opened)
|
||||||
|
usr << "\blue The access panel is now open."
|
||||||
|
else
|
||||||
|
usr << "\blue The access panel is now closed."
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
attackby(obj/item/weapon/aiModule/module as obj, mob/user as mob)
|
||||||
|
if (user.z > 6)
|
||||||
|
user << "\red <b>Unable to establish a connection</b>: \black You're too far away from the station!"
|
||||||
|
return
|
||||||
|
if(istype(module, /obj/item/weapon/aiModule))
|
||||||
|
module.install(src)
|
||||||
|
else
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
|
||||||
|
attack_hand(var/mob/user as mob)
|
||||||
|
if(src.stat & NOPOWER)
|
||||||
|
usr << "The upload computer has no power!"
|
||||||
|
return
|
||||||
|
if(src.stat & BROKEN)
|
||||||
|
usr << "The upload computer is broken!"
|
||||||
|
return
|
||||||
|
|
||||||
|
src.current = select_active_ai(user)
|
||||||
|
|
||||||
|
if (!src.current)
|
||||||
|
usr << "No active AIs detected."
|
||||||
|
else
|
||||||
|
usr << "[src.current.name] selected for law changes."
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/computer3/borgupload
|
||||||
|
name = "Cyborg Upload"
|
||||||
|
desc = "Used to upload laws to Cyborgs."
|
||||||
|
icon_state = "frame-rnd"
|
||||||
|
circuit = "/obj/item/part/board/circuit/borgupload"
|
||||||
|
var/mob/living/silicon/robot/current = null
|
||||||
|
|
||||||
|
|
||||||
|
attackby(obj/item/weapon/aiModule/module as obj, mob/user as mob)
|
||||||
|
if(istype(module, /obj/item/weapon/aiModule))
|
||||||
|
module.install(src)
|
||||||
|
else
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
|
||||||
|
attack_hand(var/mob/user as mob)
|
||||||
|
if(src.stat & NOPOWER)
|
||||||
|
usr << "The upload computer has no power!"
|
||||||
|
return
|
||||||
|
if(src.stat & BROKEN)
|
||||||
|
usr << "The upload computer is broken!"
|
||||||
|
return
|
||||||
|
|
||||||
|
src.current = freeborg()
|
||||||
|
|
||||||
|
if (!src.current)
|
||||||
|
usr << "No free cyborgs detected."
|
||||||
|
else
|
||||||
|
usr << "[src.current.name] selected for law changes."
|
||||||
|
return
|
||||||
509
code/WorkInProgress/computer3/computers/medical.dm
Normal file
@@ -0,0 +1,509 @@
|
|||||||
|
/*
|
||||||
|
I hate to make this a todo, but I cannot possibly complete all of computer3
|
||||||
|
if I have to rearchitecture datacores and everything else that uses them right now.
|
||||||
|
|
||||||
|
In the future the datacore should probably be a server, perhaps on station, perhaps on centcom,
|
||||||
|
with data records as files probably. It's not difficult unless you're trying to do a million
|
||||||
|
impossible things before breakfast.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/obj/machinery/computer3/med_data
|
||||||
|
default_prog = /datum/file/program/med_data
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/cardslot,/obj/item/part/computer/networking/radio)
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/computer3/laptop/medical
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/cardslot,/obj/item/part/computer/networking/radio)
|
||||||
|
spawn_files = list(/datum/file/program/arcade,/datum/file/program/crew,/datum/file/program/med_data)
|
||||||
|
|
||||||
|
/datum/file/program/med_data
|
||||||
|
name = "Medical Records"
|
||||||
|
desc = "This can be used to check medical records."
|
||||||
|
active_state = "medcomp"
|
||||||
|
req_one_access = list(access_medical, access_forensics_lockers)
|
||||||
|
|
||||||
|
var/obj/item/weapon/card/id/scan = null
|
||||||
|
var/authenticated = null
|
||||||
|
var/rank = null
|
||||||
|
var/screen = null
|
||||||
|
var/datum/data/record/active1 = null
|
||||||
|
var/datum/data/record/active2 = null
|
||||||
|
var/a_id = null
|
||||||
|
var/temp = null
|
||||||
|
var/printing = null
|
||||||
|
|
||||||
|
|
||||||
|
proc/authenticate()
|
||||||
|
if(access_medical in scan.access)
|
||||||
|
return 1
|
||||||
|
if(istype(usr,/mob/living/silicon/ai))
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
interact()
|
||||||
|
if(!computer.cardslot)
|
||||||
|
computer.Crash(MISSING_PERIPHERAL)
|
||||||
|
return
|
||||||
|
usr.set_machine(src)
|
||||||
|
scan = computer.cardslot.reader
|
||||||
|
if(!interactable())
|
||||||
|
return
|
||||||
|
if (computer.z > 6)
|
||||||
|
usr << "\red <b>Unable to establish a connection</b>: \black You're too far away from the station!"
|
||||||
|
return
|
||||||
|
var/dat
|
||||||
|
|
||||||
|
if (temp)
|
||||||
|
dat = text("<TT>[src.temp]</TT><BR><BR><A href='?src=\ref[src];temp=1'>Clear Screen</A>")
|
||||||
|
else
|
||||||
|
dat = text("Confirm Identity: <A href='?src=\ref[];scan=1'>[]</A><HR>", src, (src.scan ? text("[]", src.scan.name) : "----------"))
|
||||||
|
if (src.authenticated)
|
||||||
|
switch(src.screen)
|
||||||
|
if(1.0)
|
||||||
|
dat += {"
|
||||||
|
<A href='?src=\ref[src];search=1'>Search Records</A>
|
||||||
|
<BR><A href='?src=\ref[src];screen=2'>List Records</A>
|
||||||
|
<BR>
|
||||||
|
<BR><A href='?src=\ref[src];screen=5'>Virus Database</A>
|
||||||
|
<BR><A href='?src=\ref[src];screen=6'>Medbot Tracking</A>
|
||||||
|
<BR>
|
||||||
|
<BR><A href='?src=\ref[src];screen=3'>Record Maintenance</A>
|
||||||
|
<BR><A href='?src=\ref[src];logout=1'>{Log Out}</A><BR>
|
||||||
|
"}
|
||||||
|
if(2.0)
|
||||||
|
dat += "<B>Record List</B>:<HR>"
|
||||||
|
if(!isnull(data_core.general))
|
||||||
|
for(var/datum/data/record/R in sortRecord(data_core.general))
|
||||||
|
dat += text("<A href='?src=\ref[];d_rec=\ref[]'>[]: []<BR>", src, R, R.fields["id"], R.fields["name"])
|
||||||
|
//Foreach goto(132)
|
||||||
|
dat += text("<HR><A href='?src=\ref[];screen=1'>Back</A>", src)
|
||||||
|
if(3.0)
|
||||||
|
dat += text("<B>Records Maintenance</B><HR>\n<A href='?src=\ref[];back=1'>Backup To Disk</A><BR>\n<A href='?src=\ref[];u_load=1'>Upload From disk</A><BR>\n<A href='?src=\ref[];del_all=1'>Delete All Records</A><BR>\n<BR>\n<A href='?src=\ref[];screen=1'>Back</A>", src, src, src, src)
|
||||||
|
if(4.0)
|
||||||
|
var/icon/front = new(active1.fields["photo"], dir = SOUTH)
|
||||||
|
var/icon/side = new(active1.fields["photo"], dir = WEST)
|
||||||
|
usr << browse_rsc(front, "front.png")
|
||||||
|
usr << browse_rsc(side, "side.png")
|
||||||
|
dat += "<CENTER><B>Medical Record</B></CENTER><BR>"
|
||||||
|
if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1)))
|
||||||
|
dat += "<table><tr><td>Name: [active1.fields["name"]] \
|
||||||
|
ID: [active1.fields["id"]]<BR>\n \
|
||||||
|
Sex: <A href='?src=\ref[src];field=sex'>[active1.fields["sex"]]</A><BR>\n \
|
||||||
|
Age: <A href='?src=\ref[src];field=age'>[active1.fields["age"]]</A><BR>\n \
|
||||||
|
Fingerprint: <A href='?src=\ref[src];field=fingerprint'>[active1.fields["fingerprint"]]</A><BR>\n \
|
||||||
|
Physical Status: <A href='?src=\ref[src];field=p_stat'>[active1.fields["p_stat"]]</A><BR>\n \
|
||||||
|
Mental Status: <A href='?src=\ref[src];field=m_stat'>[active1.fields["m_stat"]]</A><BR></td><td align = center valign = top> \
|
||||||
|
Photo:<br><img src=front.png height=64 width=64 border=5><img src=side.png height=64 width=64 border=5></td></tr></table>"
|
||||||
|
else
|
||||||
|
dat += "<B>General Record Lost!</B><BR>"
|
||||||
|
if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2)))
|
||||||
|
dat += text("<BR>\n<CENTER><B>Medical Data</B></CENTER><BR>\nBlood Type: <A href='?src=\ref[];field=b_type'>[]</A><BR>\nDNA: <A href='?src=\ref[];field=b_dna'>[]</A><BR>\n<BR>\nMinor Disabilities: <A href='?src=\ref[];field=mi_dis'>[]</A><BR>\nDetails: <A href='?src=\ref[];field=mi_dis_d'>[]</A><BR>\n<BR>\nMajor Disabilities: <A href='?src=\ref[];field=ma_dis'>[]</A><BR>\nDetails: <A href='?src=\ref[];field=ma_dis_d'>[]</A><BR>\n<BR>\nAllergies: <A href='?src=\ref[];field=alg'>[]</A><BR>\nDetails: <A href='?src=\ref[];field=alg_d'>[]</A><BR>\n<BR>\nCurrent Diseases: <A href='?src=\ref[];field=cdi'>[]</A> (per disease info placed in log/comment section)<BR>\nDetails: <A href='?src=\ref[];field=cdi_d'>[]</A><BR>\n<BR>\nImportant Notes:<BR>\n\t<A href='?src=\ref[];field=notes'>[]</A><BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>", src, src.active2.fields["b_type"], src, src.active2.fields["b_dna"], src, src.active2.fields["mi_dis"], src, src.active2.fields["mi_dis_d"], src, src.active2.fields["ma_dis"], src, src.active2.fields["ma_dis_d"], src, src.active2.fields["alg"], src, src.active2.fields["alg_d"], src, src.active2.fields["cdi"], src, src.active2.fields["cdi_d"], src, decode(src.active2.fields["notes"]))
|
||||||
|
var/counter = 1
|
||||||
|
while(src.active2.fields[text("com_[]", counter)])
|
||||||
|
dat += text("[]<BR><A href='?src=\ref[];del_c=[]'>Delete Entry</A><BR><BR>", src.active2.fields[text("com_[]", counter)], src, counter)
|
||||||
|
counter++
|
||||||
|
dat += text("<A href='?src=\ref[];add_c=1'>Add Entry</A><BR><BR>", src)
|
||||||
|
dat += text("<A href='?src=\ref[];del_r=1'>Delete Record (Medical Only)</A><BR><BR>", src)
|
||||||
|
else
|
||||||
|
dat += "<B>Medical Record Lost!</B><BR>"
|
||||||
|
dat += text("<A href='?src=\ref[src];new=1'>New Record</A><BR><BR>")
|
||||||
|
dat += text("\n<A href='?src=\ref[];print_p=1'>Print Record</A><BR>\n<A href='?src=\ref[];screen=2'>Back</A><BR>", src, src)
|
||||||
|
if(5.0)
|
||||||
|
dat += "<CENTER><B>Virus Database</B></CENTER>"
|
||||||
|
/* Advanced diseases is weak! Feeble! Glory to virus2!
|
||||||
|
for(var/Dt in typesof(/datum/disease/))
|
||||||
|
var/datum/disease/Dis = new Dt(0)
|
||||||
|
if(istype(Dis, /datum/disease/advance))
|
||||||
|
continue // TODO (tm): Add advance diseases to the virus database which no one uses.
|
||||||
|
if(!Dis.desc)
|
||||||
|
continue
|
||||||
|
dat += "<br><a href='?src=\ref[src];vir=[Dt]'>[Dis.name]</a>"
|
||||||
|
*/
|
||||||
|
for (var/ID in virusDB)
|
||||||
|
var/datum/data/record/v = virusDB[ID]
|
||||||
|
dat += "<br><a href='?src=\ref[src];vir=\ref[v]'>[v.fields["name"]]</a>"
|
||||||
|
|
||||||
|
dat += "<br><a href='?src=\ref[src];screen=1'>Back</a>"
|
||||||
|
if(6.0)
|
||||||
|
dat += "<center><b>Medical Robot Monitor</b></center>"
|
||||||
|
dat += "<a href='?src=\ref[src];screen=1'>Back</a>"
|
||||||
|
dat += "<br><b>Medical Robots:</b>"
|
||||||
|
var/bdat = null
|
||||||
|
for(var/obj/machinery/bot/medbot/M in world)
|
||||||
|
|
||||||
|
if(M.z != computer.z) continue //only find medibots on the same z-level as the computer
|
||||||
|
var/turf/bl = get_turf(M)
|
||||||
|
if(bl) //if it can't find a turf for the medibot, then it probably shouldn't be showing up
|
||||||
|
bdat += "[M.name] - <b>\[[bl.x],[bl.y]\]</b> - [M.on ? "Online" : "Offline"]<br>"
|
||||||
|
if((!isnull(M.reagent_glass)) && M.use_beaker)
|
||||||
|
bdat += "Reservoir: \[[M.reagent_glass.reagents.total_volume]/[M.reagent_glass.reagents.maximum_volume]\]<br>"
|
||||||
|
else
|
||||||
|
bdat += "Using Internal Synthesizer.<br>"
|
||||||
|
if(!bdat)
|
||||||
|
dat += "<br><center>None detected</center>"
|
||||||
|
else
|
||||||
|
dat += "<br>[bdat]"
|
||||||
|
|
||||||
|
else
|
||||||
|
else
|
||||||
|
dat += text("<A href='?src=\ref[];login=1'>{Log In}</A>", src)
|
||||||
|
popup.width = 600
|
||||||
|
popup.height = 400
|
||||||
|
popup.set_content(dat)
|
||||||
|
popup.set_title_image(usr.browse_rsc_icon(computer.icon, computer.icon_state))
|
||||||
|
popup.open()
|
||||||
|
return
|
||||||
|
|
||||||
|
Topic(href, href_list)
|
||||||
|
if(!interactable() || !computer.cardslot || ..(href,href_list))
|
||||||
|
return
|
||||||
|
if (!( data_core.general.Find(src.active1) ))
|
||||||
|
src.active1 = null
|
||||||
|
if (!( data_core.medical.Find(src.active2) ))
|
||||||
|
src.active2 = null
|
||||||
|
|
||||||
|
if (href_list["temp"])
|
||||||
|
src.temp = null
|
||||||
|
|
||||||
|
if (href_list["scan"])
|
||||||
|
if (scan)
|
||||||
|
if(istype(usr,/mob/living/carbon/human) && !usr.get_active_hand())
|
||||||
|
computer.cardslot.remove(scan)
|
||||||
|
else
|
||||||
|
scan.loc = get_turf(src)
|
||||||
|
scan = null
|
||||||
|
else
|
||||||
|
var/obj/item/I = usr.get_active_hand()
|
||||||
|
if (istype(I, /obj/item/weapon/card/id))
|
||||||
|
computer.cardslot.insert(I)
|
||||||
|
scan = I
|
||||||
|
|
||||||
|
else if (href_list["logout"])
|
||||||
|
src.authenticated = null
|
||||||
|
src.screen = null
|
||||||
|
src.active1 = null
|
||||||
|
src.active2 = null
|
||||||
|
|
||||||
|
else if (href_list["login"])
|
||||||
|
|
||||||
|
if (istype(usr, /mob/living/silicon/ai))
|
||||||
|
src.active1 = null
|
||||||
|
src.active2 = null
|
||||||
|
src.authenticated = usr.name
|
||||||
|
src.rank = "AI"
|
||||||
|
src.screen = 1
|
||||||
|
|
||||||
|
else if (istype(usr, /mob/living/silicon/robot))
|
||||||
|
src.active1 = null
|
||||||
|
src.active2 = null
|
||||||
|
src.authenticated = usr.name
|
||||||
|
var/mob/living/silicon/robot/R = usr
|
||||||
|
src.rank = "[R.modtype] [R.braintype]"
|
||||||
|
src.screen = 1
|
||||||
|
|
||||||
|
else if (istype(src.scan, /obj/item/weapon/card/id))
|
||||||
|
src.active1 = null
|
||||||
|
src.active2 = null
|
||||||
|
|
||||||
|
if (src.check_access(src.scan))
|
||||||
|
src.authenticated = src.scan.registered_name
|
||||||
|
src.rank = src.scan.assignment
|
||||||
|
src.screen = 1
|
||||||
|
|
||||||
|
if (src.authenticated)
|
||||||
|
|
||||||
|
if(href_list["screen"])
|
||||||
|
src.screen = text2num(href_list["screen"])
|
||||||
|
if(src.screen < 1)
|
||||||
|
src.screen = 1
|
||||||
|
|
||||||
|
src.active1 = null
|
||||||
|
src.active2 = null
|
||||||
|
|
||||||
|
if(href_list["vir"])
|
||||||
|
var/datum/data/record/v = locate(href_list["vir"])
|
||||||
|
src.temp = "<center>GNAv2 based virus lifeform V-[v.fields["id"]]</center>"
|
||||||
|
src.temp += "<br><b>Name:</b> <A href='?src=\ref[src];field=vir_name;edit_vir=\ref[v]'>[v.fields["name"]]</A>"
|
||||||
|
src.temp += "<br><b>Antigen:</b> [v.fields["antigen"]]"
|
||||||
|
src.temp += "<br><b>Spread:</b> [v.fields["spread type"]] "
|
||||||
|
src.temp += "<br><b>Details:</b><br> <A href='?src=\ref[src];field=vir_desc;edit_vir=\ref[v]'>[v.fields["description"]]</A>"
|
||||||
|
|
||||||
|
if (href_list["del_all"])
|
||||||
|
src.temp = text("Are you sure you wish to delete all records?<br>\n\t<A href='?src=\ref[];temp=1;del_all2=1'>Yes</A><br>\n\t<A href='?src=\ref[];temp=1'>No</A><br>", src, src)
|
||||||
|
|
||||||
|
if (href_list["del_all2"])
|
||||||
|
for(var/datum/data/record/R in data_core.medical)
|
||||||
|
//R = null
|
||||||
|
del(R)
|
||||||
|
//Foreach goto(494)
|
||||||
|
src.temp = "All records deleted."
|
||||||
|
|
||||||
|
if (href_list["field"])
|
||||||
|
var/a1 = src.active1
|
||||||
|
var/a2 = src.active2
|
||||||
|
switch(href_list["field"])
|
||||||
|
if("fingerprint")
|
||||||
|
if (istype(src.active1, /datum/data/record))
|
||||||
|
var/t1 = copytext(sanitize(input("Please input fingerprint hash:", "Med. records", src.active1.fields["fingerprint"], null) as text),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active1 != a1))
|
||||||
|
return
|
||||||
|
src.active1.fields["fingerprint"] = t1
|
||||||
|
if("sex")
|
||||||
|
if (istype(src.active1, /datum/data/record))
|
||||||
|
if (src.active1.fields["sex"] == "Male")
|
||||||
|
src.active1.fields["sex"] = "Female"
|
||||||
|
else
|
||||||
|
src.active1.fields["sex"] = "Male"
|
||||||
|
if("age")
|
||||||
|
if (istype(src.active1, /datum/data/record))
|
||||||
|
var/t1 = input("Please input age:", "Med. records", src.active1.fields["age"], null) as num
|
||||||
|
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active1 != a1))
|
||||||
|
return
|
||||||
|
src.active1.fields["age"] = t1
|
||||||
|
if("mi_dis")
|
||||||
|
if (istype(src.active2, /datum/data/record))
|
||||||
|
var/t1 = copytext(sanitize(input("Please input minor disabilities list:", "Med. records", src.active2.fields["mi_dis"], null) as text),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
|
||||||
|
return
|
||||||
|
src.active2.fields["mi_dis"] = t1
|
||||||
|
if("mi_dis_d")
|
||||||
|
if (istype(src.active2, /datum/data/record))
|
||||||
|
var/t1 = copytext(sanitize(input("Please summarize minor dis.:", "Med. records", src.active2.fields["mi_dis_d"], null) as message),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
|
||||||
|
return
|
||||||
|
src.active2.fields["mi_dis_d"] = t1
|
||||||
|
if("ma_dis")
|
||||||
|
if (istype(src.active2, /datum/data/record))
|
||||||
|
var/t1 = copytext(sanitize(input("Please input major diabilities list:", "Med. records", src.active2.fields["ma_dis"], null) as text),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
|
||||||
|
return
|
||||||
|
src.active2.fields["ma_dis"] = t1
|
||||||
|
if("ma_dis_d")
|
||||||
|
if (istype(src.active2, /datum/data/record))
|
||||||
|
var/t1 = copytext(sanitize(input("Please summarize major dis.:", "Med. records", src.active2.fields["ma_dis_d"], null) as message),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
|
||||||
|
return
|
||||||
|
src.active2.fields["ma_dis_d"] = t1
|
||||||
|
if("alg")
|
||||||
|
if (istype(src.active2, /datum/data/record))
|
||||||
|
var/t1 = copytext(sanitize(input("Please state allergies:", "Med. records", src.active2.fields["alg"], null) as text),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
|
||||||
|
return
|
||||||
|
src.active2.fields["alg"] = t1
|
||||||
|
if("alg_d")
|
||||||
|
if (istype(src.active2, /datum/data/record))
|
||||||
|
var/t1 = copytext(sanitize(input("Please summarize allergies:", "Med. records", src.active2.fields["alg_d"], null) as message),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
|
||||||
|
return
|
||||||
|
src.active2.fields["alg_d"] = t1
|
||||||
|
if("cdi")
|
||||||
|
if (istype(src.active2, /datum/data/record))
|
||||||
|
var/t1 = copytext(sanitize(input("Please state diseases:", "Med. records", src.active2.fields["cdi"], null) as text),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
|
||||||
|
return
|
||||||
|
src.active2.fields["cdi"] = t1
|
||||||
|
if("cdi_d")
|
||||||
|
if (istype(src.active2, /datum/data/record))
|
||||||
|
var/t1 = copytext(sanitize(input("Please summarize diseases:", "Med. records", src.active2.fields["cdi_d"], null) as message),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
|
||||||
|
return
|
||||||
|
src.active2.fields["cdi_d"] = t1
|
||||||
|
if("notes")
|
||||||
|
if (istype(src.active2, /datum/data/record))
|
||||||
|
var/t1 = copytext(html_encode(input("Please summarize notes:", "Med. records", html_decode(src.active2.fields["notes"]), null) as message),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
|
||||||
|
return
|
||||||
|
src.active2.fields["notes"] = t1
|
||||||
|
if("p_stat")
|
||||||
|
if (istype(src.active1, /datum/data/record))
|
||||||
|
src.temp = text("<B>Physical Condition:</B><BR>\n\t<A href='?src=\ref[];temp=1;p_stat=deceased'>*Deceased*</A><BR>\n\t<A href='?src=\ref[];temp=1;p_stat=ssd'>*SSD*</A><BR>\n\t<A href='?src=\ref[];temp=1;p_stat=active'>Active</A><BR>\n\t<A href='?src=\ref[];temp=1;p_stat=unfit'>Physically Unfit</A><BR>\n\t<A href='?src=\ref[];temp=1;p_stat=disabled'>Disabled</A><BR>", src, src, src, src, src)
|
||||||
|
if("m_stat")
|
||||||
|
if (istype(src.active1, /datum/data/record))
|
||||||
|
src.temp = text("<B>Mental Condition:</B><BR>\n\t<A href='?src=\ref[];temp=1;m_stat=insane'>*Insane*</A><BR>\n\t<A href='?src=\ref[];temp=1;m_stat=unstable'>*Unstable*</A><BR>\n\t<A href='?src=\ref[];temp=1;m_stat=watch'>*Watch*</A><BR>\n\t<A href='?src=\ref[];temp=1;m_stat=stable'>Stable</A><BR>", src, src, src, src)
|
||||||
|
if("b_type")
|
||||||
|
if (istype(src.active2, /datum/data/record))
|
||||||
|
src.temp = text("<B>Blood Type:</B><BR>\n\t<A href='?src=\ref[];temp=1;b_type=an'>A-</A> <A href='?src=\ref[];temp=1;b_type=ap'>A+</A><BR>\n\t<A href='?src=\ref[];temp=1;b_type=bn'>B-</A> <A href='?src=\ref[];temp=1;b_type=bp'>B+</A><BR>\n\t<A href='?src=\ref[];temp=1;b_type=abn'>AB-</A> <A href='?src=\ref[];temp=1;b_type=abp'>AB+</A><BR>\n\t<A href='?src=\ref[];temp=1;b_type=on'>O-</A> <A href='?src=\ref[];temp=1;b_type=op'>O+</A><BR>", src, src, src, src, src, src, src, src)
|
||||||
|
if("b_dna")
|
||||||
|
if (istype(src.active1, /datum/data/record))
|
||||||
|
var/t1 = copytext(sanitize(input("Please input DNA hash:", "Med. records", src.active1.fields["dna"], null) as text),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active1 != a1))
|
||||||
|
return
|
||||||
|
src.active1.fields["dna"] = t1
|
||||||
|
if("vir_name")
|
||||||
|
var/datum/data/record/v = locate(href_list["edit_vir"])
|
||||||
|
if (v)
|
||||||
|
var/t1 = copytext(sanitize(input("Please input pathogen name:", "VirusDB", v.fields["name"], null) as text),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active1 != a1))
|
||||||
|
return
|
||||||
|
v.fields["name"] = t1
|
||||||
|
if("vir_desc")
|
||||||
|
var/datum/data/record/v = locate(href_list["edit_vir"])
|
||||||
|
if (v)
|
||||||
|
var/t1 = copytext(sanitize(input("Please input information about pathogen:", "VirusDB", v.fields["description"], null) as message),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active1 != a1))
|
||||||
|
return
|
||||||
|
v.fields["description"] = t1
|
||||||
|
else
|
||||||
|
|
||||||
|
if (href_list["p_stat"])
|
||||||
|
if (src.active1)
|
||||||
|
switch(href_list["p_stat"])
|
||||||
|
if("deceased")
|
||||||
|
src.active1.fields["p_stat"] = "*Deceased*"
|
||||||
|
if("ssd")
|
||||||
|
src.active1.fields["p_stat"] = "*SSD*"
|
||||||
|
if("active")
|
||||||
|
src.active1.fields["p_stat"] = "Active"
|
||||||
|
if("unfit")
|
||||||
|
src.active1.fields["p_stat"] = "Physically Unfit"
|
||||||
|
if("disabled")
|
||||||
|
src.active1.fields["p_stat"] = "Disabled"
|
||||||
|
|
||||||
|
if (href_list["m_stat"])
|
||||||
|
if (src.active1)
|
||||||
|
switch(href_list["m_stat"])
|
||||||
|
if("insane")
|
||||||
|
src.active1.fields["m_stat"] = "*Insane*"
|
||||||
|
if("unstable")
|
||||||
|
src.active1.fields["m_stat"] = "*Unstable*"
|
||||||
|
if("watch")
|
||||||
|
src.active1.fields["m_stat"] = "*Watch*"
|
||||||
|
if("stable")
|
||||||
|
src.active1.fields["m_stat"] = "Stable"
|
||||||
|
|
||||||
|
|
||||||
|
if (href_list["b_type"])
|
||||||
|
if (src.active2)
|
||||||
|
switch(href_list["b_type"])
|
||||||
|
if("an")
|
||||||
|
src.active2.fields["b_type"] = "A-"
|
||||||
|
if("bn")
|
||||||
|
src.active2.fields["b_type"] = "B-"
|
||||||
|
if("abn")
|
||||||
|
src.active2.fields["b_type"] = "AB-"
|
||||||
|
if("on")
|
||||||
|
src.active2.fields["b_type"] = "O-"
|
||||||
|
if("ap")
|
||||||
|
src.active2.fields["b_type"] = "A+"
|
||||||
|
if("bp")
|
||||||
|
src.active2.fields["b_type"] = "B+"
|
||||||
|
if("abp")
|
||||||
|
src.active2.fields["b_type"] = "AB+"
|
||||||
|
if("op")
|
||||||
|
src.active2.fields["b_type"] = "O+"
|
||||||
|
|
||||||
|
|
||||||
|
if (href_list["del_r"])
|
||||||
|
if (src.active2)
|
||||||
|
src.temp = text("Are you sure you wish to delete the record (Medical Portion Only)?<br>\n\t<A href='?src=\ref[];temp=1;del_r2=1'>Yes</A><br>\n\t<A href='?src=\ref[];temp=1'>No</A><br>", src, src)
|
||||||
|
|
||||||
|
if (href_list["del_r2"])
|
||||||
|
if (src.active2)
|
||||||
|
//src.active2 = null
|
||||||
|
del(src.active2)
|
||||||
|
|
||||||
|
if (href_list["d_rec"])
|
||||||
|
var/datum/data/record/R = locate(href_list["d_rec"])
|
||||||
|
var/datum/data/record/M = locate(href_list["d_rec"])
|
||||||
|
if (!( data_core.general.Find(R) ))
|
||||||
|
src.temp = "Record Not Found!"
|
||||||
|
return
|
||||||
|
for(var/datum/data/record/E in data_core.medical)
|
||||||
|
if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
|
||||||
|
M = E
|
||||||
|
else
|
||||||
|
//Foreach continue //goto(2540)
|
||||||
|
src.active1 = R
|
||||||
|
src.active2 = M
|
||||||
|
src.screen = 4
|
||||||
|
|
||||||
|
if (href_list["new"])
|
||||||
|
if ((istype(src.active1, /datum/data/record) && !( istype(src.active2, /datum/data/record) )))
|
||||||
|
var/datum/data/record/R = new /datum/data/record( )
|
||||||
|
R.fields["name"] = src.active1.fields["name"]
|
||||||
|
R.fields["id"] = src.active1.fields["id"]
|
||||||
|
R.name = text("Medical Record #[]", R.fields["id"])
|
||||||
|
R.fields["b_type"] = "Unknown"
|
||||||
|
R.fields["b_dna"] = "Unknown"
|
||||||
|
R.fields["mi_dis"] = "None"
|
||||||
|
R.fields["mi_dis_d"] = "No minor disabilities have been declared."
|
||||||
|
R.fields["ma_dis"] = "None"
|
||||||
|
R.fields["ma_dis_d"] = "No major disabilities have been diagnosed."
|
||||||
|
R.fields["alg"] = "None"
|
||||||
|
R.fields["alg_d"] = "No allergies have been detected in this patient."
|
||||||
|
R.fields["cdi"] = "None"
|
||||||
|
R.fields["cdi_d"] = "No diseases have been diagnosed at the moment."
|
||||||
|
R.fields["notes"] = "No notes."
|
||||||
|
data_core.medical += R
|
||||||
|
src.active2 = R
|
||||||
|
src.screen = 4
|
||||||
|
|
||||||
|
if (href_list["add_c"])
|
||||||
|
if (!( istype(src.active2, /datum/data/record) ))
|
||||||
|
return
|
||||||
|
var/a2 = src.active2
|
||||||
|
var/t1 = copytext(sanitize(input("Add Comment:", "Med. records", null, null) as message),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
|
||||||
|
return
|
||||||
|
var/counter = 1
|
||||||
|
while(src.active2.fields[text("com_[]", counter)])
|
||||||
|
counter++
|
||||||
|
src.active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year]<BR>[t1]")
|
||||||
|
|
||||||
|
if (href_list["del_c"])
|
||||||
|
if ((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])]))
|
||||||
|
src.active2.fields[text("com_[]", href_list["del_c"])] = "<B>Deleted</B>"
|
||||||
|
|
||||||
|
if (href_list["search"])
|
||||||
|
var/t1 = input("Search String: (Name, DNA, or ID)", "Med. records", null, null) as text
|
||||||
|
if ((!( t1 ) || usr.stat || !( src.authenticated ) || usr.restrained() || ((!interactable()) && (!istype(usr, /mob/living/silicon)))))
|
||||||
|
return
|
||||||
|
src.active1 = null
|
||||||
|
src.active2 = null
|
||||||
|
t1 = lowertext(t1)
|
||||||
|
for(var/datum/data/record/R in data_core.medical)
|
||||||
|
if ((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["b_dna"])))
|
||||||
|
src.active2 = R
|
||||||
|
else
|
||||||
|
//Foreach continue //goto(3229)
|
||||||
|
if (!( src.active2 ))
|
||||||
|
src.temp = text("Could not locate record [].", t1)
|
||||||
|
else
|
||||||
|
for(var/datum/data/record/E in data_core.general)
|
||||||
|
if ((E.fields["name"] == src.active2.fields["name"] || E.fields["id"] == src.active2.fields["id"]))
|
||||||
|
src.active1 = E
|
||||||
|
else
|
||||||
|
//Foreach continue //goto(3334)
|
||||||
|
src.screen = 4
|
||||||
|
|
||||||
|
if (href_list["print_p"])
|
||||||
|
if (!( src.printing ))
|
||||||
|
src.printing = 1
|
||||||
|
var/datum/data/record/record1 = null
|
||||||
|
var/datum/data/record/record2 = null
|
||||||
|
if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1)))
|
||||||
|
record1 = active1
|
||||||
|
if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2)))
|
||||||
|
record2 = active2
|
||||||
|
sleep(50)
|
||||||
|
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( computer.loc )
|
||||||
|
P.info = "<CENTER><B>Medical Record</B></CENTER><BR>"
|
||||||
|
if (record1)
|
||||||
|
P.info += text("Name: [] ID: []<BR>\nSex: []<BR>\nAge: []<BR>\nFingerprint: []<BR>\nPhysical Status: []<BR>\nMental Status: []<BR>", record1.fields["name"], record1.fields["id"], record1.fields["sex"], record1.fields["age"], record1.fields["fingerprint"], record1.fields["p_stat"], record1.fields["m_stat"])
|
||||||
|
P.name = text("Medical Record ([])", record1.fields["name"])
|
||||||
|
else
|
||||||
|
P.info += "<B>General Record Lost!</B><BR>"
|
||||||
|
P.name = "Medical Record"
|
||||||
|
if (record2)
|
||||||
|
P.info += text("<BR>\n<CENTER><B>Medical Data</B></CENTER><BR>\nBlood Type: []<BR>\nDNA: []<BR>\n<BR>\nMinor Disabilities: []<BR>\nDetails: []<BR>\n<BR>\nMajor Disabilities: []<BR>\nDetails: []<BR>\n<BR>\nAllergies: []<BR>\nDetails: []<BR>\n<BR>\nCurrent Diseases: [] (per disease info placed in log/comment section)<BR>\nDetails: []<BR>\n<BR>\nImportant Notes:<BR>\n\t[]<BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>", record2.fields["b_type"], record2.fields["b_dna"], record2.fields["mi_dis"], record2.fields["mi_dis_d"], record2.fields["ma_dis"], record2.fields["ma_dis_d"], record2.fields["alg"], record2.fields["alg_d"], record2.fields["cdi"], record2.fields["cdi_d"], decode(record2.fields["notes"]))
|
||||||
|
var/counter = 1
|
||||||
|
while(record2.fields[text("com_[]", counter)])
|
||||||
|
P.info += text("[]<BR>", record2.fields[text("com_[]", counter)])
|
||||||
|
counter++
|
||||||
|
else
|
||||||
|
P.info += "<B>Medical Record Lost!</B><BR>"
|
||||||
|
P.info += "</TT>"
|
||||||
|
src.printing = null
|
||||||
|
|
||||||
|
interact()
|
||||||
|
return
|
||||||
450
code/WorkInProgress/computer3/computers/message.dm
Normal file
@@ -0,0 +1,450 @@
|
|||||||
|
/obj/machinery/computer3/message_monitor
|
||||||
|
default_prog = /datum/file/program/message_mon
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/prox)
|
||||||
|
|
||||||
|
|
||||||
|
//BROKEN AS HELL, DON'T USE UNTIL FIXED
|
||||||
|
|
||||||
|
/datum/file/program/message_mon
|
||||||
|
name = "Message Monitor Console"
|
||||||
|
desc = "Used to Monitor the crew's messages, that are sent via PDA. Can also be used to view Request Console messages."
|
||||||
|
active_state = "comm_logs"
|
||||||
|
var/hack_icon = "comm_logsc"
|
||||||
|
var/normal_icon = "comm_logs"
|
||||||
|
|
||||||
|
//Server linked to.
|
||||||
|
var/obj/machinery/message_server/linkedServer = null
|
||||||
|
//Sparks effect - For emag
|
||||||
|
//var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread
|
||||||
|
|
||||||
|
//Messages - Saves me time if I want to change something.
|
||||||
|
var/noserver = "<span class='alert'>ALERT: No server detected.</span>"
|
||||||
|
var/incorrectkey = "<span class='warning'>ALERT: Incorrect decryption key!</span>"
|
||||||
|
var/defaultmsg = "<span class='notice'>Welcome. Please select an option.</span>"
|
||||||
|
var/rebootmsg = "<span class='warning'>%$&(<28>: Critical %$$@ Error // !RestArting! <lOadiNg backUp iNput ouTput> - ?pLeaSe wAit!</span>"
|
||||||
|
|
||||||
|
//Computer properties
|
||||||
|
var/screen = 0 // 0 = Main menu, 1 = Message Logs, 2 = Hacked screen, 3 = Custom Message
|
||||||
|
var/hacking = 0 // Is it being hacked into by the AI/Cyborg
|
||||||
|
var/emag = 0 // When it is emagged.
|
||||||
|
var/message = "<span class='notice'>System bootup complete. Please select an option.</span>" // The message that shows on the main menu.
|
||||||
|
var/auth = 0 // Are they authenticated?
|
||||||
|
var/optioncount = 7
|
||||||
|
|
||||||
|
// Custom Message Properties
|
||||||
|
var/customsender = "System Administrator"
|
||||||
|
var/obj/item/device/pda/customrecepient = null
|
||||||
|
var/customjob = "Admin"
|
||||||
|
var/custommessage = "This is a test, please ignore."
|
||||||
|
|
||||||
|
|
||||||
|
procinitialize()
|
||||||
|
if(!linkedServer)
|
||||||
|
if(message_servers && message_servers.len > 0)
|
||||||
|
linkedServer = message_servers[1]
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
update_icon()
|
||||||
|
if(emag || hacking)
|
||||||
|
overlay.icon_state = hack_icon
|
||||||
|
else
|
||||||
|
overlay.icon_state = normal_icon
|
||||||
|
computer.update_icon()
|
||||||
|
|
||||||
|
interact()
|
||||||
|
if(!interactable())
|
||||||
|
return
|
||||||
|
//If the computer is being hacked or is emagged, display the reboot message.
|
||||||
|
if(hacking || emag)
|
||||||
|
message = rebootmsg
|
||||||
|
var/dat = "<head><title>Message Monitor Console</title></head><body>"
|
||||||
|
dat += "<center><h2>Message Monitor Console</h2></center><hr>"
|
||||||
|
dat += "<center><h4><font color='blue'[message]</h5></center>"
|
||||||
|
|
||||||
|
if(auth)
|
||||||
|
dat += "<h4><dd><A href='?src=\ref[src];auth=1'>	<font color='green'>\[Authenticated\]</font></a>	/"
|
||||||
|
dat += " Server Power: <A href='?src=\ref[src];active=1'>[src.linkedServer && src.linkedServer.active ? "<font color='green'>\[On\]</font>":"<font color='red'>\[Off\]</font>"]</a></h4>"
|
||||||
|
else
|
||||||
|
dat += "<h4><dd><A href='?src=\ref[src];auth=1'>	<font color='red'>\[Unauthenticated\]</font></a>	/"
|
||||||
|
dat += " Server Power: <u>[src.linkedServer && src.linkedServer.active ? "<font color='green'>\[On\]</font>":"<font color='red'>\[Off\]</font>"]</u></h4>"
|
||||||
|
|
||||||
|
if(hacking || emag)
|
||||||
|
screen = 2
|
||||||
|
else if(!auth || !linkedServer || (linkedServer.stat & (NOPOWER|BROKEN)))
|
||||||
|
if(!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN))) message = noserver
|
||||||
|
screen = 0
|
||||||
|
|
||||||
|
switch(screen)
|
||||||
|
//Main menu
|
||||||
|
if(0)
|
||||||
|
//	 = TAB
|
||||||
|
var/i = 0
|
||||||
|
dat += "<dd><A href='?src=\ref[src];find=1'>	[++i]. Link To A Server</a></dd>"
|
||||||
|
if(auth)
|
||||||
|
if(!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN)))
|
||||||
|
dat += "<dd><A>	ERROR: Server not found!</A><br></dd>"
|
||||||
|
else
|
||||||
|
dat += "<dd><A href='?src=\ref[src];view=1'>	[++i]. View Message Logs </a><br></dd>"
|
||||||
|
dat += "<dd><A href='?src=\ref[src];viewr=1'>	[++i]. View Request Console Logs </a></br></dd>"
|
||||||
|
dat += "<dd><A href='?src=\ref[src];clear=1'>	[++i]. Clear Message Logs</a><br></dd>"
|
||||||
|
dat += "<dd><A href='?src=\ref[src];clearr=1'>	[++i]. Clear Request Console Logs</a><br></dd>"
|
||||||
|
dat += "<dd><A href='?src=\ref[src];pass=1'>	[++i]. Set Custom Key</a><br></dd>"
|
||||||
|
dat += "<dd><A href='?src=\ref[src];msg=1'>	[++i]. Send Admin Message</a><br></dd>"
|
||||||
|
else
|
||||||
|
for(var/n = ++i; n <= optioncount; n++)
|
||||||
|
dat += "<dd><font color='blue'>	[n]. ---------------</font><br></dd>"
|
||||||
|
if((istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) && (usr.mind.special_role && usr.mind.original == usr))
|
||||||
|
//Malf/Traitor AIs can bruteforce into the system to gain the Key.
|
||||||
|
dat += "<dd><A href='?src=\ref[src];hack=1'><i><font color='Red'>*&@#. Bruteforce Key</font></i></font></a><br></dd>"
|
||||||
|
else
|
||||||
|
dat += "<br>"
|
||||||
|
|
||||||
|
//Bottom message
|
||||||
|
if(!auth)
|
||||||
|
dat += "<br><hr><dd><span class='notice'>Please authenticate with the server in order to show additional options.</span>"
|
||||||
|
else
|
||||||
|
dat += "<br><hr><dd><span class='warning'>Reg, #514 forbids sending messages to a Head of Staff containing Erotic Rendering Properties.</span>"
|
||||||
|
|
||||||
|
//Message Logs
|
||||||
|
if(1)
|
||||||
|
var/index = 0
|
||||||
|
//var/recipient = "Unspecified" //name of the person
|
||||||
|
//var/sender = "Unspecified" //name of the sender
|
||||||
|
//var/message = "Blank" //transferred message
|
||||||
|
dat += "<center><A href='?src=\ref[src];back=1'>Back</a> - <A href='?src=\ref[src];refresh=1'>Refresh</center><hr>"
|
||||||
|
dat += "<table border='1' width='100%'><tr><th width = '5%'>X</th><th width='15%'>Sender</th><th width='15%'>Recipient</th><th width='300px' word-wrap: break-word>Message</th></tr>"
|
||||||
|
for(var/datum/data_pda_msg/pda in src.linkedServer.pda_msgs)
|
||||||
|
index++
|
||||||
|
if(index > 3000)
|
||||||
|
break
|
||||||
|
// Del - Sender - Recepient - Message
|
||||||
|
// X - Al Green - Your Mom - WHAT UP!?
|
||||||
|
dat += "<tr><td width = '5%'><center><A href='?src=\ref[src];delete=\ref[pda]' style='color: rgb(255,0,0)'>X</a></center></td><td width='15%'>[pda.sender]</td><td width='15%'>[pda.recipient]</td><td width='300px'>[pda.message]</td></tr>"
|
||||||
|
dat += "</table>"
|
||||||
|
//Hacking screen.
|
||||||
|
if(2)
|
||||||
|
if(istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot))
|
||||||
|
dat += "Brute-forcing for server key.<br> It will take 20 seconds for every character that the password has."
|
||||||
|
dat += "In the meantime, this console can reveal your true intentions if you let someone access it. Make sure no humans enter the room during that time."
|
||||||
|
else
|
||||||
|
//It's the same message as the one above but in binary. Because robots understand binary and humans don't... well I thought it was clever.
|
||||||
|
dat += {"01000010011100100111010101110100011001010010110<br>
|
||||||
|
10110011001101111011100100110001101101001011011100110011<br>
|
||||||
|
10010000001100110011011110111001000100000011100110110010<br>
|
||||||
|
10111001001110110011001010111001000100000011010110110010<br>
|
||||||
|
10111100100101110001000000100100101110100001000000111011<br>
|
||||||
|
10110100101101100011011000010000001110100011000010110101<br>
|
||||||
|
10110010100100000001100100011000000100000011100110110010<br>
|
||||||
|
10110001101101111011011100110010001110011001000000110011<br>
|
||||||
|
00110111101110010001000000110010101110110011001010111001<br>
|
||||||
|
00111100100100000011000110110100001100001011100100110000<br>
|
||||||
|
10110001101110100011001010111001000100000011101000110100<br>
|
||||||
|
00110000101110100001000000111010001101000011001010010000<br>
|
||||||
|
00111000001100001011100110111001101110111011011110111001<br>
|
||||||
|
00110010000100000011010000110000101110011001011100010000<br>
|
||||||
|
00100100101101110001000000111010001101000011001010010000<br>
|
||||||
|
00110110101100101011000010110111001110100011010010110110<br>
|
||||||
|
10110010100101100001000000111010001101000011010010111001<br>
|
||||||
|
10010000001100011011011110110111001110011011011110110110<br>
|
||||||
|
00110010100100000011000110110000101101110001000000111001<br>
|
||||||
|
00110010101110110011001010110000101101100001000000111100<br>
|
||||||
|
10110111101110101011100100010000001110100011100100111010<br>
|
||||||
|
10110010100100000011010010110111001110100011001010110111<br>
|
||||||
|
00111010001101001011011110110111001110011001000000110100<br>
|
||||||
|
10110011000100000011110010110111101110101001000000110110<br>
|
||||||
|
00110010101110100001000000111001101101111011011010110010<br>
|
||||||
|
10110111101101110011001010010000001100001011000110110001<br>
|
||||||
|
10110010101110011011100110010000001101001011101000010111<br>
|
||||||
|
00010000001001101011000010110101101100101001000000111001<br>
|
||||||
|
10111010101110010011001010010000001101110011011110010000<br>
|
||||||
|
00110100001110101011011010110000101101110011100110010000<br>
|
||||||
|
00110010101101110011101000110010101110010001000000111010<br>
|
||||||
|
00110100001100101001000000111001001101111011011110110110<br>
|
||||||
|
10010000001100100011101010111001001101001011011100110011<br>
|
||||||
|
10010000001110100011010000110000101110100001000000111010<br>
|
||||||
|
001101001011011010110010100101110"}
|
||||||
|
|
||||||
|
//Fake messages
|
||||||
|
if(3)
|
||||||
|
dat += "<center><A href='?src=\ref[src];back=1'>Back</a> - <A href='?src=\ref[src];Reset=1'>Reset</a></center><hr>"
|
||||||
|
|
||||||
|
dat += {"<table border='1' width='100%'>
|
||||||
|
<tr><td width='20%'><A href='?src=\ref[src];select=Sender'>Sender</a></td>
|
||||||
|
<td width='20%'><A href='?src=\ref[src];select=RecJob'>Sender's Job</a></td>
|
||||||
|
<td width='20%'><A href='?src=\ref[src];select=Recepient'>Recipient</a></td>
|
||||||
|
<td width='300px' word-wrap: break-word><A href='?src=\ref[src];select=Message'>Message</a></td></tr>"}
|
||||||
|
//Sender - Sender's Job - Recepient - Message
|
||||||
|
//Al Green- Your Dad - Your Mom - WHAT UP!?
|
||||||
|
|
||||||
|
dat += {"<tr><td width='20%'>[customsender]</td>
|
||||||
|
<td width='20%'>[customjob]</td>
|
||||||
|
<td width='20%'>[customrecepient ? customrecepient.owner : "NONE"]</td>
|
||||||
|
<td width='300px'>[custommessage]</td></tr>"}
|
||||||
|
dat += "</table><br><center><A href='?src=\ref[src];select=Send'>Send</a>"
|
||||||
|
|
||||||
|
//Request Console Logs
|
||||||
|
if(4)
|
||||||
|
|
||||||
|
var/index = 0
|
||||||
|
/* data_rc_msg
|
||||||
|
X - 5%
|
||||||
|
var/rec_dpt = "Unspecified" //name of the person - 15%
|
||||||
|
var/send_dpt = "Unspecified" //name of the sender- 15%
|
||||||
|
var/message = "Blank" //transferred message - 300px
|
||||||
|
var/stamp = "Unstamped" - 15%
|
||||||
|
var/id_auth = "Unauthenticated" - 15%
|
||||||
|
var/priority = "Normal" - 10%
|
||||||
|
*/
|
||||||
|
dat += "<center><A href='?src=\ref[src];back=1'>Back</a> - <A href='?src=\ref[src];refresh=1'>Refresh</center><hr>"
|
||||||
|
dat += {"<table border='1' width='100%'><tr><th width = '5%'>X</th><th width='15%'>Sending Dep.</th><th width='15%'>Receiving Dep.</th>
|
||||||
|
<th width='300px' word-wrap: break-word>Message</th><th width='15%'>Stamp</th><th width='15%'>ID Auth.</th><th width='15%'>Priority.</th></tr>"}
|
||||||
|
for(var/datum/data_rc_msg/rc in src.linkedServer.rc_msgs)
|
||||||
|
index++
|
||||||
|
if(index > 3000)
|
||||||
|
break
|
||||||
|
// Del - Sender - Recepient - Message
|
||||||
|
// X - Al Green - Your Mom - WHAT UP!?
|
||||||
|
dat += {"<tr><td width = '5%'><center><A href='?src=\ref[src];deleter=\ref[rc]' style='color: rgb(255,0,0)'>X</a></center></td><td width='15%'>[rc.send_dpt]</td>
|
||||||
|
<td width='15%'>[rc.rec_dpt]</td><td width='300px'>[rc.message]</td><td width='15%'>[rc.stamp]</td><td width='15%'>[rc.id_auth]</td><td width='15%'>[rc.priority]</td></tr>"}
|
||||||
|
dat += "</table>"
|
||||||
|
|
||||||
|
|
||||||
|
popup.width = 700
|
||||||
|
popup.height = 700
|
||||||
|
popup.set_content(dat)
|
||||||
|
popup.set_title_image(usr.browse_rsc_icon(computer.icon, computer.icon_state))
|
||||||
|
popup.open()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
proc/BruteForce(mob/usr as mob)
|
||||||
|
if(isnull(linkedServer))
|
||||||
|
usr << "<span class='warning'>Could not complete brute-force: Linked Server Disconnected!</span>"
|
||||||
|
else
|
||||||
|
var/currentKey = src.linkedServer.decryptkey
|
||||||
|
usr << "<span class='warning'>Brute-force completed! The key is '[currentKey]'.</span>"
|
||||||
|
src.hacking = 0
|
||||||
|
src.active_state = normal_icon
|
||||||
|
src.screen = 0 // Return the screen back to normal
|
||||||
|
|
||||||
|
proc/UnmagConsole()
|
||||||
|
src.active_state = normal_icon
|
||||||
|
src.emag = 0
|
||||||
|
|
||||||
|
proc/ResetMessage()
|
||||||
|
customsender = "System Administrator"
|
||||||
|
customrecepient = null
|
||||||
|
custommessage = "This is a test, please ignore."
|
||||||
|
customjob = "Admin"
|
||||||
|
|
||||||
|
Topic(var/href, var/list/href_list)
|
||||||
|
if(!interactable() || ..(href,href_list))
|
||||||
|
return
|
||||||
|
|
||||||
|
if ("auth" in href_list)
|
||||||
|
if(auth)
|
||||||
|
auth = 0
|
||||||
|
screen = 0
|
||||||
|
else
|
||||||
|
var/dkey = trim(input(usr, "Please enter the decryption key.") as text|null)
|
||||||
|
if(dkey && dkey != "")
|
||||||
|
if(src.linkedServer.decryptkey == dkey)
|
||||||
|
auth = 1
|
||||||
|
else
|
||||||
|
message = incorrectkey
|
||||||
|
|
||||||
|
//Turn the server on/off.
|
||||||
|
if ("active" in href_list)
|
||||||
|
if(auth) linkedServer.active = !linkedServer.active
|
||||||
|
//Find a server
|
||||||
|
if ("find" in href_list)
|
||||||
|
if(message_servers && message_servers.len > 1)
|
||||||
|
src.linkedServer = input(usr,"Please select a server.", "Select a server.", null) as null|anything in message_servers
|
||||||
|
message = "<span class='alert'>NOTICE: Server selected.</span>"
|
||||||
|
else if(message_servers && message_servers.len > 0)
|
||||||
|
linkedServer = message_servers[1]
|
||||||
|
message = "<span class='notice'>NOTICE: Only Single Server Detected - Server selected.</span>"
|
||||||
|
else
|
||||||
|
message = noserver
|
||||||
|
|
||||||
|
//View the logs - KEY REQUIRED
|
||||||
|
if ("view" in href_list)
|
||||||
|
if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN)))
|
||||||
|
message = noserver
|
||||||
|
else
|
||||||
|
if(auth)
|
||||||
|
src.screen = 1
|
||||||
|
|
||||||
|
//Clears the logs - KEY REQUIRED
|
||||||
|
if ("clear" in href_list)
|
||||||
|
if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN)))
|
||||||
|
message = noserver
|
||||||
|
else
|
||||||
|
if(auth)
|
||||||
|
src.linkedServer.pda_msgs = list()
|
||||||
|
message = "<span class='notice'>NOTICE: Logs cleared.</span>"
|
||||||
|
//Clears the request console logs - KEY REQUIRED
|
||||||
|
if ("clearr" in href_list)
|
||||||
|
if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN)))
|
||||||
|
message = noserver
|
||||||
|
else
|
||||||
|
if(auth)
|
||||||
|
src.linkedServer.rc_msgs = list()
|
||||||
|
message = "<span class='notice'>NOTICE: Logs cleared.</span>"
|
||||||
|
//Change the password - KEY REQUIRED
|
||||||
|
if ("pass" in href_list)
|
||||||
|
if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN)))
|
||||||
|
message = noserver
|
||||||
|
else
|
||||||
|
if(auth)
|
||||||
|
var/dkey = trim(input(usr, "Please enter the decryption key.") as text|null)
|
||||||
|
if(dkey && dkey != "")
|
||||||
|
if(src.linkedServer.decryptkey == dkey)
|
||||||
|
var/newkey = trim(input(usr,"Please enter the new key (3 - 16 characters max):"))
|
||||||
|
if(length(newkey) <= 3)
|
||||||
|
message = "<span class='notice'>NOTICE: Decryption key too short!</span>"
|
||||||
|
else if(length(newkey) > 16)
|
||||||
|
message = "<span class='notice'>NOTICE: Decryption key too long!</span>"
|
||||||
|
else if(newkey && newkey != "")
|
||||||
|
src.linkedServer.decryptkey = newkey
|
||||||
|
message = "<span class='notice'>NOTICE: Decryption key set.</span>"
|
||||||
|
else
|
||||||
|
message = incorrectkey
|
||||||
|
|
||||||
|
//Hack the Console to get the password
|
||||||
|
if ("hack" in href_list)
|
||||||
|
if((istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) && (usr.mind.special_role && usr.mind.original == usr))
|
||||||
|
src.hacking = 1
|
||||||
|
src.screen = 2
|
||||||
|
src.active_state = hack_icon
|
||||||
|
//Time it takes to bruteforce is dependant on the password length.
|
||||||
|
spawn(100*length(src.linkedServer.decryptkey))
|
||||||
|
if(src && src.linkedServer && usr)
|
||||||
|
BruteForce(usr)
|
||||||
|
//Delete the log.
|
||||||
|
if ("delete" in href_list)
|
||||||
|
//Are they on the view logs screen?
|
||||||
|
if(screen == 1)
|
||||||
|
if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN)))
|
||||||
|
message = noserver
|
||||||
|
else //if(istype(href_list["delete"], /datum/data_pda_msg))
|
||||||
|
src.linkedServer.pda_msgs -= locate(href_list["delete"])
|
||||||
|
message = "<span class='notice'>NOTICE: Log Deleted!</span>"
|
||||||
|
//Delete the request console log.
|
||||||
|
if ("deleter" in href_list)
|
||||||
|
//Are they on the view logs screen?
|
||||||
|
if(screen == 4)
|
||||||
|
if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN)))
|
||||||
|
message = noserver
|
||||||
|
else //if(istype(href_list["delete"], /datum/data_pda_msg))
|
||||||
|
src.linkedServer.rc_msgs -= locate(href_list["deleter"])
|
||||||
|
message = "<span class='notice'>NOTICE: Log Deleted!</span>"
|
||||||
|
//Create a custom message
|
||||||
|
if ("msg" in href_list)
|
||||||
|
if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN)))
|
||||||
|
message = noserver
|
||||||
|
else
|
||||||
|
if(auth)
|
||||||
|
src.screen = 3
|
||||||
|
//Fake messaging selection - KEY REQUIRED
|
||||||
|
if ("select" in href_list)
|
||||||
|
if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN)))
|
||||||
|
message = noserver
|
||||||
|
screen = 0
|
||||||
|
else
|
||||||
|
switch(href_list["select"])
|
||||||
|
|
||||||
|
//Reset
|
||||||
|
if("Reset")
|
||||||
|
ResetMessage()
|
||||||
|
|
||||||
|
//Select Your Name
|
||||||
|
if("Sender")
|
||||||
|
customsender = input(usr, "Please enter the sender's name.") as text|null
|
||||||
|
|
||||||
|
//Select Receiver
|
||||||
|
if("Recepient")
|
||||||
|
//Get out list of viable PDAs
|
||||||
|
var/list/obj/item/device/pda/sendPDAs = list()
|
||||||
|
for(var/obj/item/device/pda/P in PDAs)
|
||||||
|
if(!P.owner || P.toff || P.hidden) continue
|
||||||
|
sendPDAs += P
|
||||||
|
if(PDAs && PDAs.len > 0)
|
||||||
|
customrecepient = input(usr, "Select a PDA from the list.") as null|anything in sortAtom(sendPDAs)
|
||||||
|
else
|
||||||
|
customrecepient = null
|
||||||
|
|
||||||
|
|
||||||
|
//Enter custom job
|
||||||
|
if("RecJob")
|
||||||
|
customjob = input(usr, "Please enter the sender's job.") as text|null
|
||||||
|
|
||||||
|
//Enter message
|
||||||
|
if("Message")
|
||||||
|
custommessage = input(usr, "Please enter your message.") as text|null
|
||||||
|
custommessage = copytext(sanitize(custommessage), 1, MAX_MESSAGE_LEN)
|
||||||
|
|
||||||
|
//Send message
|
||||||
|
if("Send")
|
||||||
|
|
||||||
|
if(isnull(customsender) || customsender == "")
|
||||||
|
customsender = "UNKNOWN"
|
||||||
|
|
||||||
|
if(isnull(customrecepient))
|
||||||
|
message = "<span class='notice'>NOTICE: No recepient selected!</span>"
|
||||||
|
return src.attack_hand(usr)
|
||||||
|
|
||||||
|
if(isnull(custommessage) || custommessage == "")
|
||||||
|
message = "<span class='notice'>NOTICE: No message entered!</span>"
|
||||||
|
return src.attack_hand(usr)
|
||||||
|
|
||||||
|
var/obj/item/device/pda/PDARec = null
|
||||||
|
for (var/obj/item/device/pda/P in PDAs)
|
||||||
|
if (!P.owner || P.toff || P.hidden) continue
|
||||||
|
if(P.owner == customsender)
|
||||||
|
PDARec = P
|
||||||
|
//Sender isn't faking as someone who exists
|
||||||
|
if(isnull(PDARec))
|
||||||
|
src.linkedServer.send_pda_message("[customrecepient.owner]", "[customsender]","[custommessage]")
|
||||||
|
customrecepient.tnote += "<i><b>← From <a href='byond://?src=\ref[customrecepient];choice=Message;target=\ref[src]'>[customsender]</a> ([customjob]):</b></i><br>[custommessage]<br>"
|
||||||
|
if (!customrecepient.silent)
|
||||||
|
playsound(customrecepient.loc, 'sound/machines/twobeep.ogg', 50, 1)
|
||||||
|
for (var/mob/O in hearers(3, customrecepient.loc))
|
||||||
|
O.show_message(text("\icon[customrecepient] *[customrecepient.ttone]*"))
|
||||||
|
if( customrecepient.loc && ishuman(customrecepient.loc) )
|
||||||
|
var/mob/living/carbon/human/H = customrecepient.loc
|
||||||
|
H << "\icon[customrecepient] <b>Message from [customsender] ([customjob]), </b>\"[custommessage]\" (<a href='byond://?src=\ref[src];choice=Message;skiprefresh=1;target=\ref[src]'>Reply</a>)"
|
||||||
|
log_pda("[usr] (PDA: [customsender]) sent \"[custommessage]\" to [customrecepient.owner]")
|
||||||
|
customrecepient.overlays.Cut()
|
||||||
|
customrecepient.overlays += image('icons/obj/pda.dmi', "pda-r")
|
||||||
|
//Sender is faking as someone who exists
|
||||||
|
else
|
||||||
|
src.linkedServer.send_pda_message("[customrecepient.owner]", "[PDARec.owner]","[custommessage]")
|
||||||
|
customrecepient.tnote += "<i><b>← From <a href='byond://?src=\ref[customrecepient];choice=Message;target=\ref[PDARec]'>[PDARec.owner]</a> ([customjob]):</b></i><br>[custommessage]<br>"
|
||||||
|
if (!customrecepient.silent)
|
||||||
|
playsound(customrecepient.loc, 'sound/machines/twobeep.ogg', 50, 1)
|
||||||
|
for (var/mob/O in hearers(3, customrecepient.loc))
|
||||||
|
O.show_message(text("\icon[customrecepient] *[customrecepient.ttone]*"))
|
||||||
|
if( customrecepient.loc && ishuman(customrecepient.loc) )
|
||||||
|
var/mob/living/carbon/human/H = customrecepient.loc
|
||||||
|
H << "\icon[customrecepient] <b>Message from [PDARec.owner] ([customjob]), </b>\"[custommessage]\" (<a href='byond://?src=\ref[customrecepient];choice=Message;skiprefresh=1;target=\ref[PDARec]'>Reply</a>)"
|
||||||
|
log_pda("[usr] (PDA: [PDARec.owner]) sent \"[custommessage]\" to [customrecepient.owner]")
|
||||||
|
customrecepient.overlays.Cut()
|
||||||
|
customrecepient.overlays += image('icons/obj/pda.dmi', "pda-r")
|
||||||
|
//Finally..
|
||||||
|
ResetMessage()
|
||||||
|
|
||||||
|
//Request Console Logs - KEY REQUIRED
|
||||||
|
if("viewr" in href_list)
|
||||||
|
if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN)))
|
||||||
|
message = noserver
|
||||||
|
else
|
||||||
|
if(auth)
|
||||||
|
src.screen = 4
|
||||||
|
|
||||||
|
//usr << href_list["select"]
|
||||||
|
|
||||||
|
if ("back" in href_list)
|
||||||
|
src.screen = 0
|
||||||
|
interact()
|
||||||
48
code/WorkInProgress/computer3/computers/power.dm
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
/obj/machinery/computer3/powermonitor
|
||||||
|
default_prog = /datum/file/program/powermon
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/cable)
|
||||||
|
icon_state = "frame-eng"
|
||||||
|
|
||||||
|
/datum/file/program/powermon
|
||||||
|
name = "power monitoring console"
|
||||||
|
desc = "It monitors APC status."
|
||||||
|
active_state = "power"
|
||||||
|
|
||||||
|
proc/format(var/obj/machinery/power/apc/A)
|
||||||
|
var/static/list/S = list(" Off","AOff"," On", " AOn")
|
||||||
|
var/static/list/chg = list("N","C","F")
|
||||||
|
return "[copytext(add_tspace("\The [A.area]", 30), 1, 30)] [S[A.equipment+1]] [S[A.lighting+1]] [S[A.environ+1]] \
|
||||||
|
[add_lspace(A.lastused_total, 6)] [A.cell ? "[add_lspace(round(A.cell.percent()), 3)]% [chg[A.charging+1]]" : " N/C"]<BR>"
|
||||||
|
|
||||||
|
interact()
|
||||||
|
if(!interactable())
|
||||||
|
return
|
||||||
|
if(!computer.net)
|
||||||
|
computer.Crash(MISSING_PERIPHERAL)
|
||||||
|
return
|
||||||
|
var/list/L = computer.net.get_machines(/obj/machinery/power/apc)
|
||||||
|
var/t = ""
|
||||||
|
t += "<A href='?src=\ref[src]'>Refresh</A><br /><br />"
|
||||||
|
if(!L || !L.len)
|
||||||
|
t += "No connection"
|
||||||
|
else
|
||||||
|
var/datum/powernet/powernet = computer.net.connect_to(/datum/powernet,null)
|
||||||
|
if(powernet)
|
||||||
|
t += "<PRE>Total power: [powernet.avail] W<BR>Total load: [num2text(powernet.viewload,10)] W<BR>"
|
||||||
|
else
|
||||||
|
t += "<PRE><i>Power statistics unavailable</i><BR>"
|
||||||
|
t += "<FONT SIZE=-1>"
|
||||||
|
|
||||||
|
if(L.len > 0)
|
||||||
|
t += "Area Eqp./Lgt./Env. Load Cell<HR>"
|
||||||
|
for(var/obj/machinery/power/apc/A in L)
|
||||||
|
t += src.format(A)
|
||||||
|
t += "</FONT></PRE>"
|
||||||
|
|
||||||
|
popup.set_content(t)
|
||||||
|
popup.open()
|
||||||
|
|
||||||
|
Topic(var/href, var/list/href_list)
|
||||||
|
if(!interactable() || ..(href,href_list))
|
||||||
|
return
|
||||||
|
interact()
|
||||||
100
code/WorkInProgress/computer3/computers/prisoner.dm
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
|
||||||
|
/obj/machinery/computer3/prisoner
|
||||||
|
default_prog = /datum/file/program/prisoner
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio)
|
||||||
|
icon_state = "frame-sec"
|
||||||
|
|
||||||
|
/datum/file/program/prisoner
|
||||||
|
name = "Prisoner Management Console"
|
||||||
|
active_state = "explosive"
|
||||||
|
req_access = list(access_armory)
|
||||||
|
|
||||||
|
var/id = 0.0
|
||||||
|
var/temp = null
|
||||||
|
var/status = 0
|
||||||
|
var/timeleft = 60
|
||||||
|
var/stop = 0.0
|
||||||
|
var/screen = 0 // 0 - No Access Denied, 1 - Access allowed
|
||||||
|
|
||||||
|
|
||||||
|
interact()
|
||||||
|
if(!interactable())
|
||||||
|
return
|
||||||
|
var/dat
|
||||||
|
dat += "<B>Prisoner Implant Manager System</B><BR>"
|
||||||
|
if(screen == 0)
|
||||||
|
dat += "<HR><A href='?src=\ref[src];lock=1'>Unlock Console</A>"
|
||||||
|
else if(screen == 1)
|
||||||
|
dat += "<HR>Chemical Implants<BR>"
|
||||||
|
var/turf/Tr = null
|
||||||
|
for(var/obj/item/weapon/implant/chem/C in world)
|
||||||
|
Tr = get_turf(C)
|
||||||
|
if((Tr) && (Tr.z != computer.z)) continue//Out of range
|
||||||
|
if(!C.implanted) continue
|
||||||
|
dat += "[C.imp_in.name] | Remaining Units: [C.reagents.total_volume] | Inject: "
|
||||||
|
dat += "<A href='?src=\ref[src];inject1=\ref[C]'>(<font color=red>(1)</font>)</A>"
|
||||||
|
dat += "<A href='?src=\ref[src];inject5=\ref[C]'>(<font color=red>(5)</font>)</A>"
|
||||||
|
dat += "<A href='?src=\ref[src];inject10=\ref[C]'>(<font color=red>(10)</font>)</A><BR>"
|
||||||
|
dat += "********************************<BR>"
|
||||||
|
dat += "<HR>Tracking Implants<BR>"
|
||||||
|
for(var/obj/item/weapon/implant/tracking/T in world)
|
||||||
|
Tr = get_turf(T)
|
||||||
|
if((Tr) && (Tr.z != computer.z)) continue//Out of range
|
||||||
|
if(!T.implanted) continue
|
||||||
|
var/loc_display = "Unknown"
|
||||||
|
var/mob/living/carbon/M = T.imp_in
|
||||||
|
if(M.z == 1 && !istype(M.loc, /turf/space))
|
||||||
|
var/turf/mob_loc = get_turf(M)
|
||||||
|
loc_display = mob_loc.loc
|
||||||
|
if(T.malfunction)
|
||||||
|
loc_display = pick(teleportlocs)
|
||||||
|
dat += "ID: [T.id] | Location: [loc_display]<BR>"
|
||||||
|
dat += "<A href='?src=\ref[src];warn=\ref[T]'>(<i>Send Message</i></font>)</A> |<BR>"
|
||||||
|
dat += "********************************<BR>"
|
||||||
|
dat += "<HR><A href='?src=\ref[src];lock=1'>Lock Console</A>"
|
||||||
|
|
||||||
|
popup.width = 400
|
||||||
|
popup.height = 500
|
||||||
|
popup.set_content(dat)
|
||||||
|
popup.set_title_image(usr.browse_rsc_icon(computer.icon, computer.icon_state))
|
||||||
|
popup.open()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
process()
|
||||||
|
if(!..())
|
||||||
|
interact()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
Topic(href, href_list)
|
||||||
|
if(!interactable() || ..(href,href_list))
|
||||||
|
return
|
||||||
|
|
||||||
|
if(href_list["inject1"])
|
||||||
|
var/obj/item/weapon/implant/I = locate(href_list["inject1"])
|
||||||
|
if(I) I.activate(1)
|
||||||
|
|
||||||
|
else if(href_list["inject5"])
|
||||||
|
var/obj/item/weapon/implant/I = locate(href_list["inject5"])
|
||||||
|
if(I) I.activate(5)
|
||||||
|
|
||||||
|
else if(href_list["inject10"])
|
||||||
|
var/obj/item/weapon/implant/I = locate(href_list["inject10"])
|
||||||
|
if(I) I.activate(10)
|
||||||
|
|
||||||
|
else if(href_list["lock"])
|
||||||
|
screen = !screen
|
||||||
|
|
||||||
|
else if(href_list["warn"])
|
||||||
|
var/warning = copytext(sanitize(input(usr,"Message:","Enter your message here!","")),1,MAX_MESSAGE_LEN)
|
||||||
|
if(!warning) return
|
||||||
|
var/obj/item/weapon/implant/I = locate(href_list["warn"])
|
||||||
|
if((I)&&(I.imp_in))
|
||||||
|
var/mob/living/carbon/R = I.imp_in
|
||||||
|
R << "\green You hear a voice in your head saying: '[warning]'"
|
||||||
|
|
||||||
|
interact()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
242
code/WorkInProgress/computer3/computers/prisonshuttle.dm
Normal file
@@ -0,0 +1,242 @@
|
|||||||
|
//Config stuff
|
||||||
|
#define PRISON_MOVETIME 150 //Time to station is milliseconds.
|
||||||
|
#define PRISON_STATION_AREATYPE "/area/shuttle/prison/station" //Type of the prison shuttle area for station
|
||||||
|
#define PRISON_DOCK_AREATYPE "/area/shuttle/prison/prison" //Type of the prison shuttle area for dock
|
||||||
|
|
||||||
|
var/prison_shuttle_moving_to_station = 0
|
||||||
|
var/prison_shuttle_moving_to_prison = 0
|
||||||
|
var/prison_shuttle_at_station = 0
|
||||||
|
var/prison_shuttle_can_send = 1
|
||||||
|
var/prison_shuttle_time = 0
|
||||||
|
var/prison_shuttle_timeleft = 0
|
||||||
|
|
||||||
|
/obj/machinery/computer3/prison_shuttle
|
||||||
|
name = "Prison Shuttle Console"
|
||||||
|
icon = 'icons/obj/computer.dmi'
|
||||||
|
icon_state = "shuttle"
|
||||||
|
req_access = list(access_security)
|
||||||
|
circuit = "/obj/item/part/board/circuit/prison_shuttle"
|
||||||
|
var/temp = null
|
||||||
|
var/hacked = 0
|
||||||
|
var/allowedtocall = 0
|
||||||
|
var/prison_break = 0
|
||||||
|
|
||||||
|
|
||||||
|
attackby(I as obj, user as mob)
|
||||||
|
return src.attack_hand(user)
|
||||||
|
|
||||||
|
|
||||||
|
attack_ai(var/mob/user as mob)
|
||||||
|
return src.attack_hand(user)
|
||||||
|
|
||||||
|
|
||||||
|
attack_paw(var/mob/user as mob)
|
||||||
|
return src.attack_hand(user)
|
||||||
|
|
||||||
|
|
||||||
|
attackby(I as obj, user as mob)
|
||||||
|
if(istype(I, /obj/item/tool/screwdriver))
|
||||||
|
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||||
|
if(do_after(user, 20))
|
||||||
|
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
|
||||||
|
var/obj/item/part/board/circuit/prison_shuttle/M = new /obj/item/part/board/circuit/prison_shuttle( A )
|
||||||
|
for (var/obj/C in src)
|
||||||
|
C.loc = src.loc
|
||||||
|
A.circuit = M
|
||||||
|
A.anchored = 1
|
||||||
|
|
||||||
|
if (src.stat & BROKEN)
|
||||||
|
user << "\blue The broken glass falls out."
|
||||||
|
new /obj/item/trash/shard( src.loc )
|
||||||
|
A.state = 3
|
||||||
|
A.icon_state = "3"
|
||||||
|
else
|
||||||
|
user << "\blue You disconnect the monitor."
|
||||||
|
A.state = 4
|
||||||
|
A.icon_state = "4"
|
||||||
|
|
||||||
|
del(src)
|
||||||
|
else if(istype(I,/obj/item/card/emag) && (!hacked))
|
||||||
|
hacked = 1
|
||||||
|
user << "\blue You disable the lock."
|
||||||
|
else
|
||||||
|
return src.attack_hand(user)
|
||||||
|
|
||||||
|
|
||||||
|
attack_hand(var/mob/user as mob)
|
||||||
|
if(!src.allowed(user) && (!hacked))
|
||||||
|
user << "\red Access Denied."
|
||||||
|
return
|
||||||
|
if(prison_break)
|
||||||
|
user << "\red Unable to locate shuttle."
|
||||||
|
return
|
||||||
|
if(..())
|
||||||
|
return
|
||||||
|
user.set_machine(src)
|
||||||
|
post_signal("prison")
|
||||||
|
var/dat
|
||||||
|
if (src.temp)
|
||||||
|
dat = src.temp
|
||||||
|
else
|
||||||
|
dat += {"<b>Location:</b> [prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison ? "Moving to station ([prison_shuttle_timeleft] Secs.)":prison_shuttle_at_station ? "Station":"Dock"]<BR>
|
||||||
|
[prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison ? "\n*Shuttle already called*<BR>\n<BR>":prison_shuttle_at_station ? "\n<A href='?src=\ref[src];sendtodock=1'>Send to Dock</A><BR>\n<BR>":"\n<A href='?src=\ref[src];sendtostation=1'>Send to Station</A><BR>\n<BR>"]
|
||||||
|
\n<A href='?src=\ref[user];mach_close=computer'>Close</A>"}
|
||||||
|
|
||||||
|
//user << browse(dat, "window=computer;size=575x450")
|
||||||
|
//onclose(user, "computer")
|
||||||
|
var/datum/browser/popup = new(user, "computer", name, 575, 450)
|
||||||
|
popup.set_content(dat)
|
||||||
|
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||||
|
popup.open()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
Topic(href, href_list)
|
||||||
|
if(..())
|
||||||
|
return
|
||||||
|
|
||||||
|
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||||
|
usr.set_machine(src)
|
||||||
|
|
||||||
|
if (href_list["sendtodock"])
|
||||||
|
if (!prison_can_move())
|
||||||
|
usr << "\red The prison shuttle is unable to leave."
|
||||||
|
return
|
||||||
|
if(!prison_shuttle_at_station|| prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return
|
||||||
|
post_signal("prison")
|
||||||
|
usr << "\blue The prison shuttle has been called and will arrive in [(PRISON_MOVETIME/10)] seconds."
|
||||||
|
src.temp += "Shuttle sent.<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
||||||
|
src.updateUsrDialog()
|
||||||
|
prison_shuttle_moving_to_prison = 1
|
||||||
|
prison_shuttle_time = world.timeofday + PRISON_MOVETIME
|
||||||
|
spawn(0)
|
||||||
|
prison_process()
|
||||||
|
|
||||||
|
else if (href_list["sendtostation"])
|
||||||
|
if (!prison_can_move())
|
||||||
|
usr << "\red The prison shuttle is unable to leave."
|
||||||
|
return
|
||||||
|
if(prison_shuttle_at_station || prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return
|
||||||
|
post_signal("prison")
|
||||||
|
usr << "\blue The prison shuttle has been called and will arrive in [(PRISON_MOVETIME/10)] seconds."
|
||||||
|
src.temp += "Shuttle sent.<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
||||||
|
src.updateUsrDialog()
|
||||||
|
prison_shuttle_moving_to_station = 1
|
||||||
|
prison_shuttle_time = world.timeofday + PRISON_MOVETIME
|
||||||
|
spawn(0)
|
||||||
|
prison_process()
|
||||||
|
|
||||||
|
else if (href_list["mainmenu"])
|
||||||
|
src.temp = null
|
||||||
|
|
||||||
|
src.add_fingerprint(usr)
|
||||||
|
src.updateUsrDialog()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
proc/prison_can_move()
|
||||||
|
if(prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return 0
|
||||||
|
else return 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
proc/prison_break()
|
||||||
|
switch(prison_break)
|
||||||
|
if (0)
|
||||||
|
if(!prison_shuttle_at_station || prison_shuttle_moving_to_prison) return
|
||||||
|
|
||||||
|
prison_shuttle_moving_to_prison = 1
|
||||||
|
prison_shuttle_at_station = prison_shuttle_at_station
|
||||||
|
|
||||||
|
if (!prison_shuttle_moving_to_prison || !prison_shuttle_moving_to_station)
|
||||||
|
prison_shuttle_time = world.timeofday + PRISON_MOVETIME
|
||||||
|
spawn(0)
|
||||||
|
prison_process()
|
||||||
|
prison_break = 1
|
||||||
|
if(1)
|
||||||
|
prison_break = 0
|
||||||
|
*/
|
||||||
|
|
||||||
|
proc/post_signal(var/command)
|
||||||
|
var/datum/radio_frequency/frequency = radio_controller.return_frequency(1311)
|
||||||
|
if(!frequency) return
|
||||||
|
var/datum/signal/status_signal = new
|
||||||
|
status_signal.source = src
|
||||||
|
status_signal.transmission_method = 1
|
||||||
|
status_signal.data["command"] = command
|
||||||
|
frequency.post_signal(src, status_signal)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
proc/prison_process()
|
||||||
|
while(prison_shuttle_time - world.timeofday > 0)
|
||||||
|
var/ticksleft = prison_shuttle_time - world.timeofday
|
||||||
|
|
||||||
|
if(ticksleft > 1e5)
|
||||||
|
prison_shuttle_time = world.timeofday + 10 // midnight rollover
|
||||||
|
|
||||||
|
prison_shuttle_timeleft = (ticksleft / 10)
|
||||||
|
sleep(5)
|
||||||
|
prison_shuttle_moving_to_station = 0
|
||||||
|
prison_shuttle_moving_to_prison = 0
|
||||||
|
|
||||||
|
switch(prison_shuttle_at_station)
|
||||||
|
|
||||||
|
if(0)
|
||||||
|
prison_shuttle_at_station = 1
|
||||||
|
if (prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return
|
||||||
|
|
||||||
|
if (!prison_can_move())
|
||||||
|
usr << "\red The prison shuttle is unable to leave."
|
||||||
|
return
|
||||||
|
|
||||||
|
var/area/start_location = locate(/area/shuttle/prison/prison)
|
||||||
|
var/area/end_location = locate(/area/shuttle/prison/station)
|
||||||
|
|
||||||
|
var/list/dstturfs = list()
|
||||||
|
var/throwy = world.maxy
|
||||||
|
|
||||||
|
for(var/turf/T in end_location)
|
||||||
|
dstturfs += T
|
||||||
|
if(T.y < throwy)
|
||||||
|
throwy = T.y
|
||||||
|
// hey you, get out of the way!
|
||||||
|
for(var/turf/T in dstturfs)
|
||||||
|
// find the turf to move things to
|
||||||
|
var/turf/D = locate(T.x, throwy - 1, 1)
|
||||||
|
//var/turf/E = get_step(D, SOUTH)
|
||||||
|
for(var/atom/movable/AM as mob|obj in T)
|
||||||
|
AM.Move(D)
|
||||||
|
if(istype(T, /turf/simulated))
|
||||||
|
del(T)
|
||||||
|
start_location.move_contents_to(end_location)
|
||||||
|
|
||||||
|
if(1)
|
||||||
|
prison_shuttle_at_station = 0
|
||||||
|
if (prison_shuttle_moving_to_station || prison_shuttle_moving_to_prison) return
|
||||||
|
|
||||||
|
if (!prison_can_move())
|
||||||
|
usr << "\red The prison shuttle is unable to leave."
|
||||||
|
return
|
||||||
|
|
||||||
|
var/area/start_location = locate(/area/shuttle/prison/station)
|
||||||
|
var/area/end_location = locate(/area/shuttle/prison/prison)
|
||||||
|
|
||||||
|
var/list/dstturfs = list()
|
||||||
|
var/throwy = world.maxy
|
||||||
|
|
||||||
|
for(var/turf/T in end_location)
|
||||||
|
dstturfs += T
|
||||||
|
if(T.y < throwy)
|
||||||
|
throwy = T.y
|
||||||
|
|
||||||
|
// hey you, get out of the way!
|
||||||
|
for(var/turf/T in dstturfs)
|
||||||
|
// find the turf to move things to
|
||||||
|
var/turf/D = locate(T.x, throwy - 1, 1)
|
||||||
|
//var/turf/E = get_step(D, SOUTH)
|
||||||
|
for(var/atom/movable/AM as mob|obj in T)
|
||||||
|
AM.Move(D)
|
||||||
|
if(istype(T, /turf/simulated))
|
||||||
|
del(T)
|
||||||
|
start_location.move_contents_to(end_location)
|
||||||
|
return
|
||||||
211
code/WorkInProgress/computer3/computers/robot.dm
Normal file
@@ -0,0 +1,211 @@
|
|||||||
|
/obj/machinery/computer3/robotics
|
||||||
|
default_prog = /datum/file/program/borg_control
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio)
|
||||||
|
icon_state = "frame-rnd"
|
||||||
|
|
||||||
|
/datum/file/program/borg_control
|
||||||
|
name = "Cyborg Control"
|
||||||
|
desc = "Used to remotely lockdown or detonate linked Cyborgs."
|
||||||
|
active_state = "robot"
|
||||||
|
var/id = 0.0
|
||||||
|
var/temp = null
|
||||||
|
var/status = 0
|
||||||
|
var/timeleft = 60
|
||||||
|
var/stop = 0.0
|
||||||
|
var/screen = 0 // 0 - Main Menu, 1 - Cyborg Status, 2 - Kill 'em All! -- In text
|
||||||
|
req_access = list(access_robotics)
|
||||||
|
|
||||||
|
proc/start_sequence()
|
||||||
|
do
|
||||||
|
if(src.stop)
|
||||||
|
src.stop = 0
|
||||||
|
return
|
||||||
|
src.timeleft--
|
||||||
|
sleep(10)
|
||||||
|
while(src.timeleft)
|
||||||
|
|
||||||
|
for(var/mob/living/silicon/robot/R in mob_list)
|
||||||
|
if(!R.scrambledcodes)
|
||||||
|
R.self_destruct()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
interact()
|
||||||
|
if(!interactable() || computer.z > 6)
|
||||||
|
return
|
||||||
|
var/dat
|
||||||
|
if (src.temp)
|
||||||
|
dat = "<TT>[src.temp]</TT><BR><BR><A href='?src=\ref[src];temp=1'>Clear Screen</A>"
|
||||||
|
else
|
||||||
|
if(screen == 0)
|
||||||
|
//dat += "<h3>Cyborg Control Console</h3><BR>"
|
||||||
|
dat += "<A href='?src=\ref[src];screen=1'>1. Cyborg Status</A><BR>"
|
||||||
|
dat += "<A href='?src=\ref[src];screen=2'>2. Emergency Full Destruct</A><BR>"
|
||||||
|
if(screen == 1)
|
||||||
|
for(var/mob/living/silicon/robot/R in mob_list)
|
||||||
|
if(istype(usr, /mob/living/silicon/ai))
|
||||||
|
if (R.connected_ai != usr)
|
||||||
|
continue
|
||||||
|
if(istype(usr, /mob/living/silicon/robot))
|
||||||
|
if (R != usr)
|
||||||
|
continue
|
||||||
|
if(R.scrambledcodes)
|
||||||
|
continue
|
||||||
|
|
||||||
|
dat += "[R.name] |"
|
||||||
|
if(R.stat)
|
||||||
|
dat += " Not Responding |"
|
||||||
|
else if (!R.canmove)
|
||||||
|
dat += " Locked Down |"
|
||||||
|
else
|
||||||
|
dat += " Operating Normally |"
|
||||||
|
if (!R.canmove)
|
||||||
|
else if(R.cell)
|
||||||
|
dat += " Battery Installed ([R.cell.charge]/[R.cell.maxcharge]) |"
|
||||||
|
else
|
||||||
|
dat += " No Cell Installed |"
|
||||||
|
if(R.module)
|
||||||
|
dat += " Module Installed ([R.module.name]) |"
|
||||||
|
else
|
||||||
|
dat += " No Module Installed |"
|
||||||
|
if(R.connected_ai)
|
||||||
|
dat += " Slaved to [R.connected_ai.name] |"
|
||||||
|
else
|
||||||
|
dat += " Independent from AI |"
|
||||||
|
if (istype(usr, /mob/living/silicon))
|
||||||
|
if(issilicon(usr) && is_special_character(usr) && !R.emagged)
|
||||||
|
dat += "<A href='?src=\ref[src];magbot=\ref[R]'>(<i>Hack</i>)</A> "
|
||||||
|
dat += "<A href='?src=\ref[src];stopbot=\ref[R]'>(<i>[R.canmove ? "Lockdown" : "Release"]</i>)</A> "
|
||||||
|
dat += "<A href='?src=\ref[src];killbot=\ref[R]'>(<i>Destroy</i>)</A>"
|
||||||
|
dat += "<BR>"
|
||||||
|
dat += "<A href='?src=\ref[src];screen=0'>(Return to Main Menu)</A><BR>"
|
||||||
|
if(screen == 2)
|
||||||
|
if(!src.status)
|
||||||
|
dat += {"<BR><B>Emergency Robot Self-Destruct</B><HR>\nStatus: Off<BR>
|
||||||
|
\n<BR>
|
||||||
|
\nCountdown: [src.timeleft]/60 <A href='?src=\ref[src];reset=1'>\[Reset\]</A><BR>
|
||||||
|
\n<BR>
|
||||||
|
\n<A href='?src=\ref[src];killall'>Start Sequence</A><BR>
|
||||||
|
\n<BR>
|
||||||
|
\n<A href='?src=\ref[usr];close'>Close</A>"}
|
||||||
|
else
|
||||||
|
dat = {"<B>Emergency Robot Self-Destruct</B><HR>\nStatus: Activated<BR>
|
||||||
|
\n<BR>
|
||||||
|
\nCountdown: [src.timeleft]/60 \[Reset\]<BR>
|
||||||
|
\n<BR>\n<A href='?src=\ref[src];stop=1'>Stop Sequence</A><BR>
|
||||||
|
\n<BR>
|
||||||
|
\n<A href='?src=\ref[usr];mach_close=computer'>Close</A>"}
|
||||||
|
dat += "<A href='?src=\ref[src];screen=0'>(Return to Main Menu)</A><BR>"
|
||||||
|
|
||||||
|
popup.set_content(dat)
|
||||||
|
popup.open()
|
||||||
|
return
|
||||||
|
|
||||||
|
Topic(var/href, var/list/href_list)
|
||||||
|
if(!interactable() || ..(href,href_list))
|
||||||
|
return
|
||||||
|
|
||||||
|
if ("killall" in href_list)
|
||||||
|
src.temp = {"Destroy Robots?<BR>
|
||||||
|
<BR><B><A href='?src=\ref[src];do_killall'>\[Swipe ID to initiate destruction sequence\]</A></B><BR>
|
||||||
|
<A href='?src=\ref[src];temp=1'>Cancel</A>"}
|
||||||
|
|
||||||
|
if ("do_killall" in href_list)
|
||||||
|
var/obj/item/weapon/card/id/I = usr.get_active_hand()
|
||||||
|
if (istype(I, /obj/item/device/pda))
|
||||||
|
var/obj/item/device/pda/pda = I
|
||||||
|
I = pda.id
|
||||||
|
if (istype(I))
|
||||||
|
if(src.check_access(I))
|
||||||
|
if (!status)
|
||||||
|
message_admins("\blue [key_name_admin(usr)] has initiated the global cyborg killswitch!")
|
||||||
|
log_game("\blue [key_name(usr)] has initiated the global cyborg killswitch!")
|
||||||
|
src.status = 1
|
||||||
|
src.start_sequence()
|
||||||
|
src.temp = null
|
||||||
|
|
||||||
|
else
|
||||||
|
usr << "\red Access Denied."
|
||||||
|
|
||||||
|
if ("stop" in href_list)
|
||||||
|
src.temp = {"
|
||||||
|
Stop Robot Destruction Sequence?<BR>
|
||||||
|
<BR><A href='?src=\ref[src];stop2=1'>Yes</A><BR>
|
||||||
|
<A href='?src=\ref[src];temp=1'>No</A>"}
|
||||||
|
|
||||||
|
if ("stop2" in href_list)
|
||||||
|
src.stop = 1
|
||||||
|
src.temp = null
|
||||||
|
src.status = 0
|
||||||
|
|
||||||
|
if ("reset" in href_list)
|
||||||
|
src.timeleft = 60
|
||||||
|
|
||||||
|
if ("temp" in href_list)
|
||||||
|
src.temp = null
|
||||||
|
if ("screen" in href_list)
|
||||||
|
switch(href_list["screen"])
|
||||||
|
if("0")
|
||||||
|
screen = 0
|
||||||
|
if("1")
|
||||||
|
screen = 1
|
||||||
|
if("2")
|
||||||
|
screen = 2
|
||||||
|
if ("killbot" in href_list)
|
||||||
|
if(computer.allowed(usr))
|
||||||
|
var/mob/living/silicon/robot/R = locate(href_list["killbot"])
|
||||||
|
if(R)
|
||||||
|
var/choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort")
|
||||||
|
if(choice == "Confirm")
|
||||||
|
if(R && istype(R))
|
||||||
|
if(R.mind && R.mind.special_role && R.emagged)
|
||||||
|
R << "Extreme danger. Termination codes detected. Scrambling security codes and automatic AI unlink triggered."
|
||||||
|
R.ResetSecurityCodes()
|
||||||
|
|
||||||
|
else
|
||||||
|
message_admins("\blue [key_name_admin(usr)] detonated [R.name]!")
|
||||||
|
log_game("\blue [key_name_admin(usr)] detonated [R.name]!")
|
||||||
|
R.self_destruct()
|
||||||
|
else
|
||||||
|
usr << "\red Access Denied."
|
||||||
|
|
||||||
|
if ("stopbot" in href_list)
|
||||||
|
if(computer.allowed(usr))
|
||||||
|
var/mob/living/silicon/robot/R = locate(href_list["stopbot"])
|
||||||
|
if(R && istype(R)) // Extra sancheck because of input var references
|
||||||
|
var/choice = input("Are you certain you wish to [R.canmove ? "lock down" : "release"] [R.name]?") in list("Confirm", "Abort")
|
||||||
|
if(choice == "Confirm")
|
||||||
|
if(R && istype(R))
|
||||||
|
message_admins("\blue [key_name_admin(usr)] [R.canmove ? "locked down" : "released"] [R.name]!")
|
||||||
|
log_game("[key_name(usr)] [R.canmove ? "locked down" : "released"] [R.name]!")
|
||||||
|
R.canmove = !R.canmove
|
||||||
|
if (R.lockcharge)
|
||||||
|
// R.cell.charge = R.lockcharge
|
||||||
|
R.lockcharge = !R.lockcharge
|
||||||
|
R << "Your lockdown has been lifted!"
|
||||||
|
else
|
||||||
|
R.lockcharge = !R.lockcharge
|
||||||
|
// R.cell.charge = 0
|
||||||
|
R << "You have been locked down!"
|
||||||
|
|
||||||
|
else
|
||||||
|
usr << "\red Access Denied."
|
||||||
|
|
||||||
|
if ("magbot" in href_list)
|
||||||
|
if(computer.allowed(usr))
|
||||||
|
var/mob/living/silicon/robot/R = locate(href_list["magbot"])
|
||||||
|
if(R)
|
||||||
|
var/choice = input("Are you certain you wish to hack [R.name]?") in list("Confirm", "Abort")
|
||||||
|
if(choice == "Confirm")
|
||||||
|
if(R && istype(R))
|
||||||
|
// message_admins("\blue [key_name_admin(usr)] emagged [R.name] using robotic console!")
|
||||||
|
log_game("[key_name(usr)] emagged [R.name] using robotic console!")
|
||||||
|
R.emagged = 1
|
||||||
|
if(R.mind.special_role)
|
||||||
|
R.verbs += /mob/living/silicon/robot/proc/ResetSecurityCodes
|
||||||
|
|
||||||
|
interact()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1274
code/WorkInProgress/computer3/computers/scanconsole.dm
Normal file
611
code/WorkInProgress/computer3/computers/security.dm
Normal file
@@ -0,0 +1,611 @@
|
|||||||
|
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
|
||||||
|
/obj/machinery/computer3/secure_data
|
||||||
|
default_prog = /datum/file/program/secure_data
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/cardslot,/obj/item/part/computer/networking/radio)
|
||||||
|
icon_state = "frame-sec"
|
||||||
|
|
||||||
|
/obj/machinery/computer3/laptop/secure_data
|
||||||
|
default_prog = /datum/file/program/secure_data
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd/big,/obj/item/part/computer/cardslot,/obj/item/part/computer/networking/radio)
|
||||||
|
icon_state = "laptop"
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/program/secure_data
|
||||||
|
name = "Security Records"
|
||||||
|
desc = "Used to view and edit personnel's security records"
|
||||||
|
active_state = "security"
|
||||||
|
image = 'icons/ntos/records.png'
|
||||||
|
|
||||||
|
req_one_access = list(access_security, access_forensics_lockers)
|
||||||
|
|
||||||
|
var/obj/item/weapon/card/id/scan = null
|
||||||
|
var/authenticated = null
|
||||||
|
var/rank = null
|
||||||
|
var/screen = null
|
||||||
|
var/datum/data/record/active1 = null
|
||||||
|
var/datum/data/record/active2 = null
|
||||||
|
var/a_id = null
|
||||||
|
var/temp = null
|
||||||
|
var/printing = null
|
||||||
|
var/can_change_id = 0
|
||||||
|
var/list/Perp
|
||||||
|
var/tempname = null
|
||||||
|
//Sorting Variables
|
||||||
|
var/sortBy = "name"
|
||||||
|
var/order = 1 // -1 = Descending - 1 = Ascending
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
proc/authenticate()
|
||||||
|
if(access_security in scan.access || access_forensics_lockers in scan.access )
|
||||||
|
return 1
|
||||||
|
if(istype(usr,/mob/living/silicon/ai))
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
interact()
|
||||||
|
if(!computer.cardslot)
|
||||||
|
computer.Crash(MISSING_PERIPHERAL)
|
||||||
|
return
|
||||||
|
usr.set_machine(src)
|
||||||
|
scan = computer.cardslot.reader
|
||||||
|
if(!interactable())
|
||||||
|
return
|
||||||
|
return
|
||||||
|
if (computer.z > 6)
|
||||||
|
usr << "\red <b>Unable to establish a connection</b>: \black You're too far away from the station!"
|
||||||
|
return
|
||||||
|
var/dat
|
||||||
|
|
||||||
|
if (temp)
|
||||||
|
dat = text("<TT>[]</TT><BR><BR><A href='?src=\ref[];choice=Clear Screen'>Clear Screen</A>", temp, src)
|
||||||
|
else
|
||||||
|
dat = text("Confirm Identity: <A href='?src=\ref[];choice=Confirm Identity'>[]</A><HR>", src, (scan ? text("[]", scan.name) : "----------"))
|
||||||
|
if (authenticated)
|
||||||
|
switch(screen)
|
||||||
|
if(1.0)
|
||||||
|
dat += {"
|
||||||
|
<p style='text-align:center;'>"}
|
||||||
|
dat += text("<A href='?src=\ref[];choice=Search Records'>Search Records</A><BR>", src)
|
||||||
|
dat += text("<A href='?src=\ref[];choice=New Record (General)'>New Record</A><BR>", src)
|
||||||
|
dat += {"
|
||||||
|
</p>
|
||||||
|
<table style="text-align:center;" cellspacing="0" width="100%">
|
||||||
|
<tr>
|
||||||
|
<th>Records:</th>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<table style="text-align:center;" border="1" cellspacing="0" width="100%">
|
||||||
|
<tr>
|
||||||
|
<th><A href='?src=\ref[src];choice=Sorting;sort=name'>Name</A></th>
|
||||||
|
<th><A href='?src=\ref[src];choice=Sorting;sort=id'>ID</A></th>
|
||||||
|
<th><A href='?src=\ref[src];choice=Sorting;sort=rank'>Rank</A></th>
|
||||||
|
<th><A href='?src=\ref[src];choice=Sorting;sort=fingerprint'>Fingerprints</A></th>
|
||||||
|
<th>Criminal Status</th>
|
||||||
|
</tr>"}
|
||||||
|
if(!isnull(data_core.general))
|
||||||
|
for(var/datum/data/record/R in sortRecord(data_core.general, sortBy, order))
|
||||||
|
var/crimstat = ""
|
||||||
|
for(var/datum/data/record/E in data_core.security)
|
||||||
|
if ((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"]))
|
||||||
|
crimstat = E.fields["criminal"]
|
||||||
|
var/background
|
||||||
|
switch(crimstat)
|
||||||
|
if("*Arrest*")
|
||||||
|
background = "'background-color:#DC143C;'"
|
||||||
|
if("Incarcerated")
|
||||||
|
background = "'background-color:#CD853F;'"
|
||||||
|
if("Parolled")
|
||||||
|
background = "'background-color:#CD853F;'"
|
||||||
|
if("Released")
|
||||||
|
background = "'background-color:#3BB9FF;'"
|
||||||
|
if("None")
|
||||||
|
background = "'background-color:#00FF7F;'"
|
||||||
|
if("")
|
||||||
|
background = "'background-color:#00FF00;'"
|
||||||
|
crimstat = "No Record."
|
||||||
|
dat += text("<tr style=[]><td><A href='?src=\ref[];choice=Browse Record;d_rec=\ref[]'>[]</a></td>", background, src, R, R.fields["name"])
|
||||||
|
dat += text("<td>[]</td>", R.fields["id"])
|
||||||
|
dat += text("<td>[]</td>", R.fields["rank"])
|
||||||
|
dat += text("<td>[]</td>", R.fields["fingerprint"])
|
||||||
|
dat += text("<td>[]</td></tr>", crimstat)
|
||||||
|
dat += "</table><hr width='75%' />"
|
||||||
|
dat += text("<A href='?src=\ref[];choice=Record Maintenance'>Record Maintenance</A><br><br>", src)
|
||||||
|
dat += text("<A href='?src=\ref[];choice=Log Out'>{Log Out}</A>",src)
|
||||||
|
if(2.0)
|
||||||
|
dat += "<B>Records Maintenance</B><HR>"
|
||||||
|
dat += "<BR><A href='?src=\ref[src];choice=Delete All Records'>Delete All Records</A><BR><BR><A href='?src=\ref[src];choice=Return'>Back</A>"
|
||||||
|
if(3.0)
|
||||||
|
dat += "<CENTER><B>Security Record</B></CENTER><BR>"
|
||||||
|
if ((istype(active1, /datum/data/record) && data_core.general.Find(active1)))
|
||||||
|
var/icon/front = new(active1.fields["photo"], dir = SOUTH)
|
||||||
|
var/icon/side = new(active1.fields["photo"], dir = WEST)
|
||||||
|
usr << browse_rsc(front, "front.png")
|
||||||
|
usr << browse_rsc(side, "side.png")
|
||||||
|
dat += text("<table><tr><td> \
|
||||||
|
Name: <A href='?src=\ref[src];choice=Edit Field;field=name'>[active1.fields["name"]]</A><BR> \
|
||||||
|
ID: <A href='?src=\ref[src];choice=Edit Field;field=id'>[active1.fields["id"]]</A><BR>\n \
|
||||||
|
Sex: <A href='?src=\ref[src];choice=Edit Field;field=sex'>[active1.fields["sex"]]</A><BR>\n \
|
||||||
|
Age: <A href='?src=\ref[src];choice=Edit Field;field=age'>[active1.fields["age"]]</A><BR>\n \
|
||||||
|
Rank: <A href='?src=\ref[src];choice=Edit Field;field=rank'>[active1.fields["rank"]]</A><BR>\n \
|
||||||
|
Fingerprint: <A href='?src=\ref[src];choice=Edit Field;field=fingerprint'>[active1.fields["fingerprint"]]</A><BR>\n \
|
||||||
|
Physical Status: [active1.fields["p_stat"]]<BR>\n \
|
||||||
|
Mental Status: [active1.fields["m_stat"]]<BR></td> \
|
||||||
|
<td align = center valign = top>Photo:<br><img src=front.png height=80 width=80 border=4> \
|
||||||
|
<img src=side.png height=80 width=80 border=4></td></tr></table>")
|
||||||
|
else
|
||||||
|
dat += "<B>General Record Lost!</B><BR>"
|
||||||
|
if ((istype(active2, /datum/data/record) && data_core.security.Find(active2)))
|
||||||
|
dat += text("<BR>\n<CENTER><B>Security Data</B></CENTER><BR>\nCriminal Status: <A href='?src=\ref[];choice=Edit Field;field=criminal'>[]</A><BR>\n<BR>\nMinor Crimes: <A href='?src=\ref[];choice=Edit Field;field=mi_crim'>[]</A><BR>\nDetails: <A href='?src=\ref[];choice=Edit Field;field=mi_crim_d'>[]</A><BR>\n<BR>\nMajor Crimes: <A href='?src=\ref[];choice=Edit Field;field=ma_crim'>[]</A><BR>\nDetails: <A href='?src=\ref[];choice=Edit Field;field=ma_crim_d'>[]</A><BR>\n<BR>\nImportant Notes:<BR>\n\t<A href='?src=\ref[];choice=Edit Field;field=notes'>[]</A><BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>", src, active2.fields["criminal"], src, active2.fields["mi_crim"], src, active2.fields["mi_crim_d"], src, active2.fields["ma_crim"], src, active2.fields["ma_crim_d"], src, decode(active2.fields["notes"]))
|
||||||
|
var/counter = 1
|
||||||
|
while(active2.fields[text("com_[]", counter)])
|
||||||
|
dat += text("[]<BR><A href='?src=\ref[];choice=Delete Entry;del_c=[]'>Delete Entry</A><BR><BR>", active2.fields[text("com_[]", counter)], src, counter)
|
||||||
|
counter++
|
||||||
|
dat += text("<A href='?src=\ref[];choice=Add Entry'>Add Entry</A><BR><BR>", src)
|
||||||
|
dat += text("<A href='?src=\ref[];choice=Delete Record (Security)'>Delete Record (Security Only)</A><BR><BR>", src)
|
||||||
|
else
|
||||||
|
dat += "<B>Security Record Lost!</B><BR>"
|
||||||
|
dat += text("<A href='?src=\ref[];choice=New Record (Security)'>New Security Record</A><BR><BR>", src)
|
||||||
|
dat += text("\n<A href='?src=\ref[];choice=Delete Record (ALL)'>Delete Record (ALL)</A><BR><BR>\n<A href='?src=\ref[];choice=Print Record'>Print Record</A><BR>\n<A href='?src=\ref[];choice=Return'>Back</A><BR>", src, src, src)
|
||||||
|
if(4.0)
|
||||||
|
if(!Perp.len)
|
||||||
|
dat += text("ERROR. String could not be located.<br><br><A href='?src=\ref[];choice=Return'>Back</A>", src)
|
||||||
|
else
|
||||||
|
dat += {"
|
||||||
|
<table style="text-align:center;" cellspacing="0" width="100%">
|
||||||
|
<tr> "}
|
||||||
|
dat += text("<th>Search Results for '[]':</th>", tempname)
|
||||||
|
dat += {"
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<table style="text-align:center;" border="1" cellspacing="0" width="100%">
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>ID</th>
|
||||||
|
<th>Rank</th>
|
||||||
|
<th>Fingerprints</th>
|
||||||
|
<th>Criminal Status</th>
|
||||||
|
</tr> "}
|
||||||
|
for(var/i=1, i<=Perp.len, i += 2)
|
||||||
|
var/crimstat = ""
|
||||||
|
var/datum/data/record/R = Perp[i]
|
||||||
|
if(istype(Perp[i+1],/datum/data/record/))
|
||||||
|
var/datum/data/record/E = Perp[i+1]
|
||||||
|
crimstat = E.fields["criminal"]
|
||||||
|
var/background
|
||||||
|
switch(crimstat)
|
||||||
|
if("*Arrest*")
|
||||||
|
background = "'background-color:#DC143C;'"
|
||||||
|
if("Incarcerated")
|
||||||
|
background = "'background-color:#CD853F;'"
|
||||||
|
if("Parolled")
|
||||||
|
background = "'background-color:#CD853F;'"
|
||||||
|
if("Released")
|
||||||
|
background = "'background-color:#3BB9FF;'"
|
||||||
|
if("None")
|
||||||
|
background = "'background-color:#00FF7F;'"
|
||||||
|
if("")
|
||||||
|
background = "'background-color:#FFFFFF;'"
|
||||||
|
crimstat = "No Record."
|
||||||
|
dat += text("<tr style=[]><td><A href='?src=\ref[];choice=Browse Record;d_rec=\ref[]'>[]</a></td>", background, src, R, R.fields["name"])
|
||||||
|
dat += text("<td>[]</td>", R.fields["id"])
|
||||||
|
dat += text("<td>[]</td>", R.fields["rank"])
|
||||||
|
dat += text("<td>[]</td>", R.fields["fingerprint"])
|
||||||
|
dat += text("<td>[]</td></tr>", crimstat)
|
||||||
|
dat += "</table><hr width='75%' />"
|
||||||
|
dat += text("<br><A href='?src=\ref[];choice=Return'>Return to index.</A>", src)
|
||||||
|
else
|
||||||
|
else
|
||||||
|
dat += text("<A href='?src=\ref[];choice=Log In'>{Log In}</A>", src)
|
||||||
|
popup.width = 600
|
||||||
|
popup.height = 400
|
||||||
|
popup.set_content(dat)
|
||||||
|
popup.set_title_image(usr.browse_rsc_icon(computer.icon, computer.icon_state))
|
||||||
|
popup.open()
|
||||||
|
return
|
||||||
|
|
||||||
|
/*Revised /N
|
||||||
|
I can't be bothered to look more of the actual code outside of switch but that probably needs revising too.
|
||||||
|
What a mess.*/
|
||||||
|
Topic(href, href_list)
|
||||||
|
if(!interactable() || !computer.cardslot || ..(href,href_list))
|
||||||
|
return
|
||||||
|
if (!( data_core.general.Find(active1) ))
|
||||||
|
active1 = null
|
||||||
|
if (!( data_core.security.Find(active2) ))
|
||||||
|
active2 = null
|
||||||
|
switch(href_list["choice"])
|
||||||
|
// SORTING!
|
||||||
|
if("Sorting")
|
||||||
|
// Reverse the order if clicked twice
|
||||||
|
if(sortBy == href_list["sort"])
|
||||||
|
if(order == 1)
|
||||||
|
order = -1
|
||||||
|
else
|
||||||
|
order = 1
|
||||||
|
else
|
||||||
|
// New sorting order!
|
||||||
|
sortBy = href_list["sort"]
|
||||||
|
order = initial(order)
|
||||||
|
//BASIC FUNCTIONS
|
||||||
|
if("Clear Screen")
|
||||||
|
temp = null
|
||||||
|
|
||||||
|
if ("Return")
|
||||||
|
screen = 1
|
||||||
|
active1 = null
|
||||||
|
active2 = null
|
||||||
|
|
||||||
|
if("Confirm Identity")
|
||||||
|
if (scan)
|
||||||
|
if(istype(usr,/mob/living/carbon/human) && !usr.get_active_hand())
|
||||||
|
computer.cardslot.remove(scan)
|
||||||
|
else
|
||||||
|
scan.loc = get_turf(src)
|
||||||
|
scan = null
|
||||||
|
else
|
||||||
|
var/obj/item/I = usr.get_active_hand()
|
||||||
|
if (istype(I, /obj/item/weapon/card/id))
|
||||||
|
computer.cardslot.insert(I)
|
||||||
|
scan = I
|
||||||
|
|
||||||
|
if("Log Out")
|
||||||
|
authenticated = null
|
||||||
|
screen = null
|
||||||
|
active1 = null
|
||||||
|
active2 = null
|
||||||
|
|
||||||
|
if("Log In")
|
||||||
|
if (istype(usr, /mob/living/silicon/ai))
|
||||||
|
src.active1 = null
|
||||||
|
src.active2 = null
|
||||||
|
src.authenticated = usr.name
|
||||||
|
src.rank = "AI"
|
||||||
|
src.screen = 1
|
||||||
|
else if (istype(usr, /mob/living/silicon/robot))
|
||||||
|
src.active1 = null
|
||||||
|
src.active2 = null
|
||||||
|
src.authenticated = usr.name
|
||||||
|
var/mob/living/silicon/robot/R = usr
|
||||||
|
src.rank = "[R.modtype] [R.braintype]"
|
||||||
|
src.screen = 1
|
||||||
|
else if (istype(scan, /obj/item/weapon/card/id))
|
||||||
|
active1 = null
|
||||||
|
active2 = null
|
||||||
|
if(authenticate())
|
||||||
|
authenticated = scan.registered_name
|
||||||
|
rank = scan.assignment
|
||||||
|
screen = 1
|
||||||
|
//RECORD FUNCTIONS
|
||||||
|
if("Search Records")
|
||||||
|
var/t1 = input("Search String: (Partial Name or ID or Fingerprints or Rank)", "Secure. records", null, null) as text
|
||||||
|
world << "input [t1]"
|
||||||
|
if ((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || !interactable()))
|
||||||
|
return
|
||||||
|
Perp = new/list()
|
||||||
|
t1 = lowertext(t1)
|
||||||
|
var/list/components = text2list(t1, " ")
|
||||||
|
if(components.len > 5)
|
||||||
|
return //Lets not let them search too greedily.
|
||||||
|
for(var/datum/data/record/R in data_core.general)
|
||||||
|
var/temptext = R.fields["name"] + " " + R.fields["id"] + " " + R.fields["fingerprint"] + " " + R.fields["rank"]
|
||||||
|
for(var/i = 1, i<=components.len, i++)
|
||||||
|
if(findtext(temptext,components[i]))
|
||||||
|
var/prelist = new/list(2)
|
||||||
|
prelist[1] = R
|
||||||
|
Perp += prelist
|
||||||
|
for(var/i = 1, i<=Perp.len, i+=2)
|
||||||
|
for(var/datum/data/record/E in data_core.security)
|
||||||
|
var/datum/data/record/R = Perp[i]
|
||||||
|
if ((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"]))
|
||||||
|
Perp[i+1] = E
|
||||||
|
tempname = t1
|
||||||
|
screen = 4
|
||||||
|
|
||||||
|
if("Record Maintenance")
|
||||||
|
screen = 2
|
||||||
|
active1 = null
|
||||||
|
active2 = null
|
||||||
|
|
||||||
|
if ("Browse Record")
|
||||||
|
var/datum/data/record/R = locate(href_list["d_rec"])
|
||||||
|
var/S = locate(href_list["d_rec"])
|
||||||
|
if (!( data_core.general.Find(R) ))
|
||||||
|
temp = "Record Not Found!"
|
||||||
|
else
|
||||||
|
for(var/datum/data/record/E in data_core.security)
|
||||||
|
if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
|
||||||
|
S = E
|
||||||
|
active1 = R
|
||||||
|
active2 = S
|
||||||
|
screen = 3
|
||||||
|
|
||||||
|
/* if ("Search Fingerprints")
|
||||||
|
var/t1 = input("Search String: (Fingerprint)", "Secure. records", null, null) as text
|
||||||
|
if ((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || (!interactable()) && (!istype(usr, /mob/living/silicon))))
|
||||||
|
return
|
||||||
|
active1 = null
|
||||||
|
active2 = null
|
||||||
|
t1 = lowertext(t1)
|
||||||
|
for(var/datum/data/record/R in data_core.general)
|
||||||
|
if (lowertext(R.fields["fingerprint"]) == t1)
|
||||||
|
active1 = R
|
||||||
|
if (!( active1 ))
|
||||||
|
temp = text("Could not locate record [].", t1)
|
||||||
|
else
|
||||||
|
for(var/datum/data/record/E in data_core.security)
|
||||||
|
if ((E.fields["name"] == active1.fields["name"] || E.fields["id"] == active1.fields["id"]))
|
||||||
|
active2 = E
|
||||||
|
screen = 3 */
|
||||||
|
|
||||||
|
if ("Print Record")
|
||||||
|
if (!( printing ))
|
||||||
|
printing = 1
|
||||||
|
var/datum/data/record/record1 = null
|
||||||
|
var/datum/data/record/record2 = null
|
||||||
|
if ((istype(active1, /datum/data/record) && data_core.general.Find(active1)))
|
||||||
|
record1 = active1
|
||||||
|
if ((istype(active2, /datum/data/record) && data_core.security.Find(active2)))
|
||||||
|
record2 = active2
|
||||||
|
sleep(50)
|
||||||
|
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( computer.loc )
|
||||||
|
P.info = "<CENTER><B>Security Record</B></CENTER><BR>"
|
||||||
|
if (record1)
|
||||||
|
P.info += text("Name: [] ID: []<BR>\nSex: []<BR>\nAge: []<BR>\nFingerprint: []<BR>\nPhysical Status: []<BR>\nMental Status: []<BR>", record1.fields["name"], record1.fields["id"], record1.fields["sex"], record1.fields["age"], record1.fields["fingerprint"], record1.fields["p_stat"], record1.fields["m_stat"])
|
||||||
|
P.name = text("Security Record ([])", record1.fields["name"])
|
||||||
|
else
|
||||||
|
P.info += "<B>General Record Lost!</B><BR>"
|
||||||
|
P.name = "Security Record"
|
||||||
|
if (record2)
|
||||||
|
P.info += text("<BR>\n<CENTER><B>Security Data</B></CENTER><BR>\nCriminal Status: []<BR>\n<BR>\nMinor Crimes: []<BR>\nDetails: []<BR>\n<BR>\nMajor Crimes: []<BR>\nDetails: []<BR>\n<BR>\nImportant Notes:<BR>\n\t[]<BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>", record2.fields["criminal"], record2.fields["mi_crim"], record2.fields["mi_crim_d"], record2.fields["ma_crim"], record2.fields["ma_crim_d"], decode(record2.fields["notes"]))
|
||||||
|
var/counter = 1
|
||||||
|
while(record2.fields[text("com_[]", counter)])
|
||||||
|
P.info += text("[]<BR>", record2.fields[text("com_[]", counter)])
|
||||||
|
counter++
|
||||||
|
else
|
||||||
|
P.info += "<B>Security Record Lost!</B><BR>"
|
||||||
|
P.info += "</TT>"
|
||||||
|
printing = null
|
||||||
|
computer.updateUsrDialog()
|
||||||
|
//RECORD DELETE
|
||||||
|
if ("Delete All Records")
|
||||||
|
temp = ""
|
||||||
|
temp += "Are you sure you wish to delete all Security records?<br>"
|
||||||
|
temp += "<a href='?src=\ref[src];choice=Purge All Records'>Yes</a><br>"
|
||||||
|
temp += "<a href='?src=\ref[src];choice=Clear Screen'>No</a>"
|
||||||
|
|
||||||
|
if ("Purge All Records")
|
||||||
|
for(var/datum/data/record/R in data_core.security)
|
||||||
|
del(R)
|
||||||
|
temp = "All Security records deleted."
|
||||||
|
|
||||||
|
if ("Add Entry")
|
||||||
|
if (!( istype(active2, /datum/data/record) ))
|
||||||
|
return
|
||||||
|
var/a2 = active2
|
||||||
|
var/t1 = copytext(sanitize(input("Add Comment:", "Secure. records", null, null) as message),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2))
|
||||||
|
return
|
||||||
|
var/counter = 1
|
||||||
|
while(active2.fields[text("com_[]", counter)])
|
||||||
|
counter++
|
||||||
|
active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year]<BR>[t1]")
|
||||||
|
|
||||||
|
if ("Delete Record (ALL)")
|
||||||
|
if (active1)
|
||||||
|
temp = "<h5>Are you sure you wish to delete the record (ALL)?</h5>"
|
||||||
|
temp += "<a href='?src=\ref[src];choice=Delete Record (ALL) Execute'>Yes</a><br>"
|
||||||
|
temp += "<a href='?src=\ref[src];choice=Clear Screen'>No</a>"
|
||||||
|
|
||||||
|
if ("Delete Record (Security)")
|
||||||
|
if (active2)
|
||||||
|
temp = "<h5>Are you sure you wish to delete the record (Security Portion Only)?</h5>"
|
||||||
|
temp += "<a href='?src=\ref[src];choice=Delete Record (Security) Execute'>Yes</a><br>"
|
||||||
|
temp += "<a href='?src=\ref[src];choice=Clear Screen'>No</a>"
|
||||||
|
|
||||||
|
if ("Delete Entry")
|
||||||
|
if ((istype(active2, /datum/data/record) && active2.fields[text("com_[]", href_list["del_c"])]))
|
||||||
|
active2.fields[text("com_[]", href_list["del_c"])] = "<B>Deleted</B>"
|
||||||
|
//RECORD CREATE
|
||||||
|
if ("New Record (Security)")
|
||||||
|
if ((istype(active1, /datum/data/record) && !( istype(active2, /datum/data/record) )))
|
||||||
|
var/datum/data/record/R = new /datum/data/record()
|
||||||
|
R.fields["name"] = active1.fields["name"]
|
||||||
|
R.fields["id"] = active1.fields["id"]
|
||||||
|
R.name = text("Security Record #[]", R.fields["id"])
|
||||||
|
R.fields["criminal"] = "None"
|
||||||
|
R.fields["mi_crim"] = "None"
|
||||||
|
R.fields["mi_crim_d"] = "No minor crime convictions."
|
||||||
|
R.fields["ma_crim"] = "None"
|
||||||
|
R.fields["ma_crim_d"] = "No major crime convictions."
|
||||||
|
R.fields["notes"] = "No notes."
|
||||||
|
data_core.security += R
|
||||||
|
active2 = R
|
||||||
|
screen = 3
|
||||||
|
|
||||||
|
if ("New Record (General)")
|
||||||
|
var/datum/data/record/G = new /datum/data/record()
|
||||||
|
G.fields["name"] = "New Record"
|
||||||
|
G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6))
|
||||||
|
G.fields["rank"] = "Unassigned"
|
||||||
|
G.fields["real_rank"] = "Unassigned"
|
||||||
|
G.fields["sex"] = "Male"
|
||||||
|
G.fields["age"] = "Unknown"
|
||||||
|
G.fields["fingerprint"] = "Unknown"
|
||||||
|
G.fields["p_stat"] = "Active"
|
||||||
|
G.fields["m_stat"] = "Stable"
|
||||||
|
G.fields["species"] = "Human"
|
||||||
|
data_core.general += G
|
||||||
|
active1 = G
|
||||||
|
active2 = null
|
||||||
|
|
||||||
|
//FIELD FUNCTIONS
|
||||||
|
if ("Edit Field")
|
||||||
|
var/a1 = active1
|
||||||
|
var/a2 = active2
|
||||||
|
switch(href_list["field"])
|
||||||
|
if("name")
|
||||||
|
if (istype(active1, /datum/data/record))
|
||||||
|
var/t1 = input("Please input name:", "Secure. records", active1.fields["name"], null) as text
|
||||||
|
if ((!( t1 ) || !length(trim(t1)) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon)))) || active1 != a1)
|
||||||
|
return
|
||||||
|
active1.fields["name"] = t1
|
||||||
|
if("id")
|
||||||
|
if (istype(active2, /datum/data/record))
|
||||||
|
var/t1 = copytext(sanitize(input("Please input id:", "Secure. records", active1.fields["id"], null) as text),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active1 != a1))
|
||||||
|
return
|
||||||
|
active1.fields["id"] = t1
|
||||||
|
if("fingerprint")
|
||||||
|
if (istype(active1, /datum/data/record))
|
||||||
|
var/t1 = copytext(sanitize(input("Please input fingerprint hash:", "Secure. records", active1.fields["fingerprint"], null) as text),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active1 != a1))
|
||||||
|
return
|
||||||
|
active1.fields["fingerprint"] = t1
|
||||||
|
if("sex")
|
||||||
|
if (istype(active1, /datum/data/record))
|
||||||
|
if (active1.fields["sex"] == "Male")
|
||||||
|
active1.fields["sex"] = "Female"
|
||||||
|
else
|
||||||
|
active1.fields["sex"] = "Male"
|
||||||
|
if("age")
|
||||||
|
if (istype(active1, /datum/data/record))
|
||||||
|
var/t1 = input("Please input age:", "Secure. records", active1.fields["age"], null) as num
|
||||||
|
if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active1 != a1))
|
||||||
|
return
|
||||||
|
active1.fields["age"] = t1
|
||||||
|
if("mi_crim")
|
||||||
|
if (istype(active2, /datum/data/record))
|
||||||
|
var/t1 = copytext(sanitize(input("Please input minor disabilities list:", "Secure. records", active2.fields["mi_crim"], null) as text),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2))
|
||||||
|
return
|
||||||
|
active2.fields["mi_crim"] = t1
|
||||||
|
if("mi_crim_d")
|
||||||
|
if (istype(active2, /datum/data/record))
|
||||||
|
var/t1 = copytext(sanitize(input("Please summarize minor dis.:", "Secure. records", active2.fields["mi_crim_d"], null) as message),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2))
|
||||||
|
return
|
||||||
|
active2.fields["mi_crim_d"] = t1
|
||||||
|
if("ma_crim")
|
||||||
|
if (istype(active2, /datum/data/record))
|
||||||
|
var/t1 = copytext(sanitize(input("Please input major diabilities list:", "Secure. records", active2.fields["ma_crim"], null) as text),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2))
|
||||||
|
return
|
||||||
|
active2.fields["ma_crim"] = t1
|
||||||
|
if("ma_crim_d")
|
||||||
|
if (istype(active2, /datum/data/record))
|
||||||
|
var/t1 = copytext(sanitize(input("Please summarize major dis.:", "Secure. records", active2.fields["ma_crim_d"], null) as message),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2))
|
||||||
|
return
|
||||||
|
active2.fields["ma_crim_d"] = t1
|
||||||
|
if("notes")
|
||||||
|
if (istype(active2, /datum/data/record))
|
||||||
|
var/t1 = copytext(html_encode(input("Please summarize notes:", "Secure. records", html_decode(active2.fields["notes"]), null) as message),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2))
|
||||||
|
return
|
||||||
|
active2.fields["notes"] = t1
|
||||||
|
if("criminal")
|
||||||
|
if (istype(active2, /datum/data/record))
|
||||||
|
temp = "<h5>Criminal Status:</h5>"
|
||||||
|
temp += "<ul>"
|
||||||
|
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=none'>None</a></li>"
|
||||||
|
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=arrest'>*Arrest*</a></li>"
|
||||||
|
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=incarcerated'>Incarcerated</a></li>"
|
||||||
|
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=parolled'>Parolled</a></li>"
|
||||||
|
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=released'>Released</a></li>"
|
||||||
|
temp += "</ul>"
|
||||||
|
if("rank")
|
||||||
|
var/list/L = list( "Head of Personnel", "Captain", "AI" )
|
||||||
|
//This was so silly before the change. Now it actually works without beating your head against the keyboard. /N
|
||||||
|
if ((istype(active1, /datum/data/record) && L.Find(rank)))
|
||||||
|
temp = "<h5>Rank:</h5>"
|
||||||
|
temp += "<ul>"
|
||||||
|
for(var/rank in joblist)
|
||||||
|
temp += "<li><a href='?src=\ref[src];choice=Change Rank;rank=[rank]'>[rank]</a></li>"
|
||||||
|
temp += "</ul>"
|
||||||
|
else
|
||||||
|
alert(usr, "You do not have the required rank to do this!")
|
||||||
|
if("species")
|
||||||
|
if (istype(active1, /datum/data/record))
|
||||||
|
var/t1 = copytext(sanitize(input("Please enter race:", "General records", active1.fields["species"], null) as message),1,MAX_MESSAGE_LEN)
|
||||||
|
if ((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active1 != a1))
|
||||||
|
return
|
||||||
|
active1.fields["species"] = t1
|
||||||
|
|
||||||
|
//TEMPORARY MENU FUNCTIONS
|
||||||
|
else//To properly clear as per clear screen.
|
||||||
|
temp=null
|
||||||
|
switch(href_list["choice"])
|
||||||
|
if ("Change Rank")
|
||||||
|
if (active1)
|
||||||
|
active1.fields["rank"] = href_list["rank"]
|
||||||
|
if(href_list["rank"] in joblist)
|
||||||
|
active1.fields["real_rank"] = href_list["real_rank"]
|
||||||
|
|
||||||
|
if ("Change Criminal Status")
|
||||||
|
if (active2)
|
||||||
|
for(var/mob/living/carbon/human/H in player_list)
|
||||||
|
H.hud_updateflag |= 1 << WANTED_HUD
|
||||||
|
switch(href_list["criminal2"])
|
||||||
|
if("none")
|
||||||
|
active2.fields["criminal"] = "None"
|
||||||
|
if("arrest")
|
||||||
|
active2.fields["criminal"] = "*Arrest*"
|
||||||
|
if("incarcerated")
|
||||||
|
active2.fields["criminal"] = "Incarcerated"
|
||||||
|
if("parolled")
|
||||||
|
active2.fields["criminal"] = "Parolled"
|
||||||
|
if("released")
|
||||||
|
active2.fields["criminal"] = "Released"
|
||||||
|
|
||||||
|
if ("Delete Record (Security) Execute")
|
||||||
|
if (active2)
|
||||||
|
del(active2)
|
||||||
|
|
||||||
|
if ("Delete Record (ALL) Execute")
|
||||||
|
if (active1)
|
||||||
|
for(var/datum/data/record/R in data_core.medical)
|
||||||
|
if ((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"]))
|
||||||
|
del(R)
|
||||||
|
else
|
||||||
|
del(active1)
|
||||||
|
if (active2)
|
||||||
|
del(active2)
|
||||||
|
else
|
||||||
|
temp = "This function does not appear to be working at the moment. Our apologies."
|
||||||
|
|
||||||
|
//computer.updateUsrDialog()
|
||||||
|
interact()
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/computer3/secure_data/emp_act(severity)
|
||||||
|
if(stat & (BROKEN|NOPOWER))
|
||||||
|
..(severity)
|
||||||
|
return
|
||||||
|
|
||||||
|
for(var/datum/data/record/R in data_core.security)
|
||||||
|
if(prob(10/severity))
|
||||||
|
switch(rand(1,6))
|
||||||
|
if(1)
|
||||||
|
R.fields["name"] = "[pick(pick(first_names_male), pick(first_names_female))] [pick(last_names)]"
|
||||||
|
if(2)
|
||||||
|
R.fields["sex"] = pick("Male", "Female")
|
||||||
|
if(3)
|
||||||
|
R.fields["age"] = rand(5, 85)
|
||||||
|
if(4)
|
||||||
|
R.fields["criminal"] = pick("None", "*Arrest*", "Incarcerated", "Parolled", "Released")
|
||||||
|
if(5)
|
||||||
|
R.fields["p_stat"] = pick("*Unconcious*", "Active", "Physically Unfit")
|
||||||
|
if(6)
|
||||||
|
R.fields["m_stat"] = pick("*Insane*", "*Unstable*", "*Watch*", "Stable")
|
||||||
|
continue
|
||||||
|
|
||||||
|
else if(prob(1))
|
||||||
|
del(R)
|
||||||
|
continue
|
||||||
|
|
||||||
|
..(severity)
|
||||||
|
|
||||||
|
/obj/machinery/computer3/secure_data/detective_computer
|
||||||
|
icon = 'icons/obj/computer.dmi'
|
||||||
|
icon_state = "messyfiles"
|
||||||
75
code/WorkInProgress/computer3/computers/shuttle.dm
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
This may not migrate to C3. It's basically a machine in the guise of a computer;
|
||||||
|
there is nothing interactive about it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/obj/machinery/computer3/shuttle
|
||||||
|
name = "Shuttle"
|
||||||
|
desc = "For shuttle control."
|
||||||
|
icon_state = "shuttle"
|
||||||
|
var/auth_need = 3.0
|
||||||
|
var/list/authorized = list( )
|
||||||
|
|
||||||
|
|
||||||
|
attackby(var/obj/item/card/W as obj, var/mob/user as mob)
|
||||||
|
if(stat & (BROKEN|NOPOWER)) return
|
||||||
|
if ((!( istype(W, /obj/item/card) ) || !( ticker ) || emergency_shuttle.location != 1 || !( user ))) return
|
||||||
|
if (istype(W, /obj/item/card/id)||istype(W, /obj/item/device/pda))
|
||||||
|
if (istype(W, /obj/item/device/pda))
|
||||||
|
var/obj/item/device/pda/pda = W
|
||||||
|
W = pda.id
|
||||||
|
if (!W:access) //no access
|
||||||
|
user << "The access level of [W:registered_name]\'s card is not high enough. "
|
||||||
|
return
|
||||||
|
|
||||||
|
var/list/cardaccess = W:access
|
||||||
|
if(!istype(cardaccess, /list) || !cardaccess.len) //no access
|
||||||
|
user << "The access level of [W:registered_name]\'s card is not high enough. "
|
||||||
|
return
|
||||||
|
|
||||||
|
if(!(access_heads in W:access)) //doesn't have this access
|
||||||
|
user << "The access level of [W:registered_name]\'s card is not high enough. "
|
||||||
|
return 0
|
||||||
|
|
||||||
|
var/choice = alert(user, text("Would you like to (un)authorize a shortened launch time? [] authorization\s are still needed. Use abort to cancel all authorizations.", src.auth_need - src.authorized.len), "Shuttle Launch", "Authorize", "Repeal", "Abort")
|
||||||
|
if(emergency_shuttle.location != 1 && user.get_active_hand() != W)
|
||||||
|
return 0
|
||||||
|
switch(choice)
|
||||||
|
if("Authorize")
|
||||||
|
src.authorized -= W:registered_name
|
||||||
|
src.authorized += W:registered_name
|
||||||
|
if (src.auth_need - src.authorized.len > 0)
|
||||||
|
message_admins("[key_name_admin(user)] has authorized early shuttle launch")
|
||||||
|
log_game("[user.ckey] has authorized early shuttle launch")
|
||||||
|
world << text("\blue <B>Alert: [] authorizations needed until shuttle is launched early</B>", src.auth_need - src.authorized.len)
|
||||||
|
else
|
||||||
|
message_admins("[key_name_admin(user)] has launched the shuttle")
|
||||||
|
log_game("[user.ckey] has launched the shuttle early")
|
||||||
|
world << "\blue <B>Alert: Shuttle launch time shortened to 10 seconds!</B>"
|
||||||
|
emergency_shuttle.online = 1
|
||||||
|
emergency_shuttle.settimeleft(10)
|
||||||
|
//src.authorized = null
|
||||||
|
del(src.authorized)
|
||||||
|
src.authorized = list( )
|
||||||
|
|
||||||
|
if("Repeal")
|
||||||
|
src.authorized -= W:registered_name
|
||||||
|
world << text("\blue <B>Alert: [] authorizations needed until shuttle is launched early</B>", src.auth_need - src.authorized.len)
|
||||||
|
|
||||||
|
if("Abort")
|
||||||
|
world << "\blue <B>All authorizations to shorting time for shuttle launch have been revoked!</B>"
|
||||||
|
src.authorized.len = 0
|
||||||
|
src.authorized = list( )
|
||||||
|
|
||||||
|
else if (istype(W, /obj/item/card/emag) && !emagged)
|
||||||
|
var/choice = alert(user, "Would you like to launch the shuttle?","Shuttle control", "Launch", "Cancel")
|
||||||
|
|
||||||
|
if(!emagged && emergency_shuttle.location == 1 && user.get_active_hand() == W)
|
||||||
|
switch(choice)
|
||||||
|
if("Launch")
|
||||||
|
world << "\blue <B>Alert: Shuttle launch time shortened to 10 seconds!</B>"
|
||||||
|
emergency_shuttle.settimeleft( 10 )
|
||||||
|
emagged = 1
|
||||||
|
if("Cancel")
|
||||||
|
return
|
||||||
|
return
|
||||||
246
code/WorkInProgress/computer3/computers/specops_shuttle.dm
Normal file
@@ -0,0 +1,246 @@
|
|||||||
|
//Config stuff
|
||||||
|
#define SPECOPS_MOVETIME 600 //Time to station is milliseconds. 60 seconds, enough time for everyone to be on the shuttle before it leaves.
|
||||||
|
#define SPECOPS_STATION_AREATYPE "/area/shuttle/specops/station" //Type of the spec ops shuttle area for station
|
||||||
|
#define SPECOPS_DOCK_AREATYPE "/area/shuttle/specops/centcom" //Type of the spec ops shuttle area for dock
|
||||||
|
|
||||||
|
var/specops_shuttle_moving_to_station = 0
|
||||||
|
var/specops_shuttle_moving_to_centcom = 0
|
||||||
|
var/specops_shuttle_at_station = 0
|
||||||
|
var/specops_shuttle_can_send = 1
|
||||||
|
var/specops_shuttle_time = 0
|
||||||
|
var/specops_shuttle_timeleft = 0
|
||||||
|
|
||||||
|
/obj/machinery/computer3/specops_shuttle
|
||||||
|
name = "Spec. Ops. Shuttle Console"
|
||||||
|
icon = 'icons/obj/computer.dmi'
|
||||||
|
icon_state = "shuttle"
|
||||||
|
req_access = list(access_cent_specops)
|
||||||
|
var/temp = null
|
||||||
|
var/hacked = 0
|
||||||
|
var/allowedtocall = 0
|
||||||
|
|
||||||
|
/proc/specops_process()
|
||||||
|
var/area/centcom/control/cent_com = locate()//To find announcer. This area should exist for this proc to work.
|
||||||
|
var/area/centcom/specops/special_ops = locate()//Where is the specops area located?
|
||||||
|
var/mob/living/silicon/decoy/announcer = locate() in cent_com//We need a fake AI to announce some stuff below. Otherwise it will be wonky.
|
||||||
|
|
||||||
|
var/message_tracker[] = list(0,1,2,3,5,10,30,45)//Create a a list with potential time values.
|
||||||
|
var/message = "THE SPECIAL OPERATIONS SHUTTLE IS PREPARING FOR LAUNCH"//Initial message shown.
|
||||||
|
if(announcer)
|
||||||
|
announcer.say(message)
|
||||||
|
message = "ARMORED SQUAD TAKE YOUR POSITION ON GRAVITY LAUNCH PAD"
|
||||||
|
announcer.say(message)
|
||||||
|
|
||||||
|
while(specops_shuttle_time - world.timeofday > 0)
|
||||||
|
var/ticksleft = specops_shuttle_time - world.timeofday
|
||||||
|
|
||||||
|
if(ticksleft > 1e5)
|
||||||
|
specops_shuttle_time = world.timeofday + 10 // midnight rollover
|
||||||
|
specops_shuttle_timeleft = (ticksleft / 10)
|
||||||
|
|
||||||
|
//All this does is announce the time before launch.
|
||||||
|
if(announcer)
|
||||||
|
var/rounded_time_left = round(specops_shuttle_timeleft)//Round time so that it will report only once, not in fractions.
|
||||||
|
if(rounded_time_left in message_tracker)//If that time is in the list for message announce.
|
||||||
|
message = "ALERT: [rounded_time_left] SECOND[(rounded_time_left!=1)?"S":""] REMAIN"
|
||||||
|
if(rounded_time_left==0)
|
||||||
|
message = "ALERT: TAKEOFF"
|
||||||
|
announcer.say(message)
|
||||||
|
message_tracker -= rounded_time_left//Remove the number from the list so it won't be called again next cycle.
|
||||||
|
//Should call all the numbers but lag could mean some issues. Oh well. Not much I can do about that.
|
||||||
|
|
||||||
|
sleep(5)
|
||||||
|
|
||||||
|
specops_shuttle_moving_to_station = 0
|
||||||
|
specops_shuttle_moving_to_centcom = 0
|
||||||
|
|
||||||
|
specops_shuttle_at_station = 1
|
||||||
|
if (specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return
|
||||||
|
|
||||||
|
if (!specops_can_move())
|
||||||
|
usr << "\red The Special Operations shuttle is unable to leave."
|
||||||
|
return
|
||||||
|
|
||||||
|
//Begin Marauder launchpad.
|
||||||
|
spawn(0)//So it parallel processes it.
|
||||||
|
for(var/obj/machinery/door/poddoor/M in special_ops)
|
||||||
|
switch(M.id)
|
||||||
|
if("ASSAULT0")
|
||||||
|
spawn(10)//1 second delay between each.
|
||||||
|
M.open()
|
||||||
|
if("ASSAULT1")
|
||||||
|
spawn(20)
|
||||||
|
M.open()
|
||||||
|
if("ASSAULT2")
|
||||||
|
spawn(30)
|
||||||
|
M.open()
|
||||||
|
if("ASSAULT3")
|
||||||
|
spawn(40)
|
||||||
|
M.open()
|
||||||
|
|
||||||
|
sleep(10)
|
||||||
|
|
||||||
|
var/spawn_marauder[] = new()
|
||||||
|
for(var/obj/effect/landmark/L in landmarks_list)
|
||||||
|
if(L.name == "Marauder Entry")
|
||||||
|
spawn_marauder.Add(L)
|
||||||
|
for(var/obj/effect/landmark/L in landmarks_list)
|
||||||
|
if(L.name == "Marauder Exit")
|
||||||
|
var/obj/effect/portal/P = new(L.loc)
|
||||||
|
P.invisibility = 101//So it is not seen by anyone.
|
||||||
|
P.failchance = 0//So it has no fail chance when teleporting.
|
||||||
|
P.target = pick(spawn_marauder)//Where the marauder will arrive.
|
||||||
|
spawn_marauder.Remove(P.target)
|
||||||
|
|
||||||
|
sleep(10)
|
||||||
|
|
||||||
|
for(var/obj/machinery/mass_driver/M in special_ops)
|
||||||
|
switch(M.id)
|
||||||
|
if("ASSAULT0")
|
||||||
|
spawn(10)
|
||||||
|
M.drive()
|
||||||
|
if("ASSAULT1")
|
||||||
|
spawn(20)
|
||||||
|
M.drive()
|
||||||
|
if("ASSAULT2")
|
||||||
|
spawn(30)
|
||||||
|
M.drive()
|
||||||
|
if("ASSAULT3")
|
||||||
|
spawn(40)
|
||||||
|
M.drive()
|
||||||
|
|
||||||
|
sleep(50)//Doors remain open for 5 seconds.
|
||||||
|
|
||||||
|
for(var/obj/machinery/door/poddoor/M in special_ops)
|
||||||
|
switch(M.id)//Doors close at the same time.
|
||||||
|
if("ASSAULT0")
|
||||||
|
spawn(0)
|
||||||
|
M.close()
|
||||||
|
if("ASSAULT1")
|
||||||
|
spawn(0)
|
||||||
|
M.close()
|
||||||
|
if("ASSAULT2")
|
||||||
|
spawn(0)
|
||||||
|
M.close()
|
||||||
|
if("ASSAULT3")
|
||||||
|
spawn(0)
|
||||||
|
M.close()
|
||||||
|
special_ops.readyreset()//Reset firealarm after the team launched.
|
||||||
|
//End Marauder launchpad.
|
||||||
|
|
||||||
|
var/area/start_location = locate(/area/shuttle/specops/centcom)
|
||||||
|
var/area/end_location = locate(/area/shuttle/specops/station)
|
||||||
|
|
||||||
|
var/list/dstturfs = list()
|
||||||
|
var/throwy = world.maxy
|
||||||
|
|
||||||
|
for(var/turf/T in end_location)
|
||||||
|
dstturfs += T
|
||||||
|
if(T.y < throwy)
|
||||||
|
throwy = T.y
|
||||||
|
|
||||||
|
// hey you, get out of the way!
|
||||||
|
for(var/turf/T in dstturfs)
|
||||||
|
// find the turf to move things to
|
||||||
|
var/turf/D = locate(T.x, throwy - 1, 1)
|
||||||
|
//var/turf/E = get_step(D, SOUTH)
|
||||||
|
for(var/atom/movable/AM as mob|obj in T)
|
||||||
|
AM.Move(D)
|
||||||
|
if(istype(T, /turf/simulated))
|
||||||
|
del(T)
|
||||||
|
|
||||||
|
start_location.move_contents_to(end_location)
|
||||||
|
|
||||||
|
for(var/turf/T in get_area_turfs(end_location) )
|
||||||
|
var/mob/M = locate(/mob) in T
|
||||||
|
M << "\red You have arrived to [station_name]. Commence operation!"
|
||||||
|
|
||||||
|
/proc/specops_can_move()
|
||||||
|
if(specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return 0
|
||||||
|
else return 1
|
||||||
|
|
||||||
|
/obj/machinery/computer3/specops_shuttle/attackby(I as obj, user as mob)
|
||||||
|
return attack_hand(user)
|
||||||
|
|
||||||
|
/obj/machinery/computer3/specops_shuttle/attack_ai(var/mob/user as mob)
|
||||||
|
return attack_hand(user)
|
||||||
|
|
||||||
|
/obj/machinery/computer3/specops_shuttle/attack_paw(var/mob/user as mob)
|
||||||
|
return attack_hand(user)
|
||||||
|
|
||||||
|
/obj/machinery/computer3/specops_shuttle/attackby(I as obj, user as mob)
|
||||||
|
if(istype(I,/obj/item/card/emag))
|
||||||
|
user << "\blue The electronic systems in this console are far too advanced for your primitive hacking peripherals."
|
||||||
|
else
|
||||||
|
return attack_hand(user)
|
||||||
|
|
||||||
|
/obj/machinery/computer3/specops_shuttle/attack_hand(var/mob/user as mob)
|
||||||
|
if(!allowed(user))
|
||||||
|
user << "\red Access Denied."
|
||||||
|
return
|
||||||
|
|
||||||
|
if (sent_strike_team == 0)
|
||||||
|
usr << "\red The strike team has not yet deployed."
|
||||||
|
return
|
||||||
|
|
||||||
|
if(..())
|
||||||
|
return
|
||||||
|
|
||||||
|
user.set_machine(src)
|
||||||
|
var/dat
|
||||||
|
if (temp)
|
||||||
|
dat = temp
|
||||||
|
else
|
||||||
|
dat += {"
|
||||||
|
<b>Location:</b> [specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom ? "Departing for [station_name] in ([specops_shuttle_timeleft] seconds.)":specops_shuttle_at_station ? "Station":"Dock"]<BR>
|
||||||
|
[specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom ? "\n*The Special Ops. shuttle is already leaving.*<BR>\n<BR>":specops_shuttle_at_station ? "\n<A href='?src=\ref[src];sendtodock=1'>Shuttle Offline</A><BR>\n<BR>":"\n<A href='?src=\ref[src];sendtostation=1'>Depart to [station_name]</A><BR>\n<BR>"]
|
||||||
|
\n<A href='?src=\ref[user];mach_close=computer'>Close</A>"}
|
||||||
|
|
||||||
|
//user << browse(dat, "window=computer;size=575x450")
|
||||||
|
//onclose(user, "computer")
|
||||||
|
var/datum/browser/popup = new(user, "computer", "Special Operations Shuttle", 575, 450)
|
||||||
|
popup.set_content(dat)
|
||||||
|
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||||
|
popup.open()
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/computer3/specops_shuttle/Topic(href, href_list)
|
||||||
|
if(..())
|
||||||
|
return
|
||||||
|
|
||||||
|
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||||
|
usr.set_machine(src)
|
||||||
|
|
||||||
|
if (href_list["sendtodock"])
|
||||||
|
if(!specops_shuttle_at_station|| specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return
|
||||||
|
|
||||||
|
usr << "\blue Central Command will not allow the Special Operations shuttle to return."
|
||||||
|
return
|
||||||
|
|
||||||
|
else if (href_list["sendtostation"])
|
||||||
|
if(specops_shuttle_at_station || specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return
|
||||||
|
|
||||||
|
if (!specops_can_move())
|
||||||
|
usr << "\red The Special Operations shuttle is unable to leave."
|
||||||
|
return
|
||||||
|
|
||||||
|
usr << "\blue The Special Operations shuttle will arrive on [station_name] in [(SPECOPS_MOVETIME/10)] seconds."
|
||||||
|
|
||||||
|
temp += "Shuttle departing.<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
||||||
|
updateUsrDialog()
|
||||||
|
|
||||||
|
var/area/centcom/specops/special_ops = locate()
|
||||||
|
if(special_ops)
|
||||||
|
special_ops.readyalert()//Trigger alarm for the spec ops area.
|
||||||
|
specops_shuttle_moving_to_station = 1
|
||||||
|
|
||||||
|
specops_shuttle_time = world.timeofday + SPECOPS_MOVETIME
|
||||||
|
spawn(0)
|
||||||
|
specops_process()
|
||||||
|
|
||||||
|
else if (href_list["mainmenu"])
|
||||||
|
temp = null
|
||||||
|
|
||||||
|
add_fingerprint(usr)
|
||||||
|
updateUsrDialog()
|
||||||
|
return
|
||||||
97
code/WorkInProgress/computer3/computers/station_alert.dm
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
/obj/machinery/computer3/station_alert
|
||||||
|
default_prog = /datum/file/program/station_alert
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio)
|
||||||
|
icon_state = "frame-eng"
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/program/station_alert
|
||||||
|
name = "Station Alert Console"
|
||||||
|
desc = "Used to access the station's automated alert system."
|
||||||
|
active_state = "alert:0"
|
||||||
|
var/alarms = list("Fire"=list(), "Atmosphere"=list(), "Power"=list())
|
||||||
|
|
||||||
|
interact(mob/user)
|
||||||
|
usr.set_machine(src)
|
||||||
|
if(!interactable())
|
||||||
|
return
|
||||||
|
var/dat = "<HEAD><TITLE>Current Station Alerts</TITLE><META HTTP-EQUIV='Refresh' CONTENT='10'></HEAD><BODY>\n"
|
||||||
|
dat += "<A HREF='?src=\ref[user];mach_close=alerts'>Close</A><br><br>"
|
||||||
|
for (var/cat in src.alarms)
|
||||||
|
dat += text("<B>[]</B><BR>\n", cat)
|
||||||
|
var/list/L = src.alarms[cat]
|
||||||
|
if (L.len)
|
||||||
|
for (var/alarm in L)
|
||||||
|
var/list/alm = L[alarm]
|
||||||
|
var/area/A = alm[1]
|
||||||
|
var/list/sources = alm[3]
|
||||||
|
dat += "<NOBR>"
|
||||||
|
dat += "• "
|
||||||
|
dat += "[A.name]"
|
||||||
|
if (sources.len > 1)
|
||||||
|
dat += text(" - [] sources", sources.len)
|
||||||
|
dat += "</NOBR><BR>\n"
|
||||||
|
else
|
||||||
|
dat += "-- All Systems Nominal<BR>\n"
|
||||||
|
dat += "<BR>\n"
|
||||||
|
//user << browse(dat, "window=alerts")
|
||||||
|
//onclose(user, "alerts")
|
||||||
|
popup.set_content(dat)
|
||||||
|
popup.set_title_image(usr.browse_rsc_icon(computer.icon, computer.icon_state))
|
||||||
|
popup.open()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
Topic(href, href_list)
|
||||||
|
if(..())
|
||||||
|
return
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
proc/triggerAlarm(var/class, area/A, var/O, var/alarmsource)
|
||||||
|
var/list/L = src.alarms[class]
|
||||||
|
for (var/I in L)
|
||||||
|
if (I == A.name)
|
||||||
|
var/list/alarm = L[I]
|
||||||
|
var/list/sources = alarm[3]
|
||||||
|
if (!(alarmsource in sources))
|
||||||
|
sources += alarmsource
|
||||||
|
return 1
|
||||||
|
var/obj/machinery/camera/C = null
|
||||||
|
var/list/CL = null
|
||||||
|
if (O && istype(O, /list))
|
||||||
|
CL = O
|
||||||
|
if (CL.len == 1)
|
||||||
|
C = CL[1]
|
||||||
|
else if (O && istype(O, /obj/machinery/camera))
|
||||||
|
C = O
|
||||||
|
L[A.name] = list(A, (C) ? C : O, list(alarmsource))
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
proc/cancelAlarm(var/class, area/A as area, obj/origin)
|
||||||
|
var/list/L = src.alarms[class]
|
||||||
|
var/cleared = 0
|
||||||
|
for (var/I in L)
|
||||||
|
if (I == A.name)
|
||||||
|
var/list/alarm = L[I]
|
||||||
|
var/list/srcs = alarm[3]
|
||||||
|
if (origin in srcs)
|
||||||
|
srcs -= origin
|
||||||
|
if (srcs.len == 0)
|
||||||
|
cleared = 1
|
||||||
|
L -= I
|
||||||
|
return !cleared
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
process()
|
||||||
|
var/active_alarms = 0
|
||||||
|
for (var/cat in src.alarms)
|
||||||
|
var/list/L = src.alarms[cat]
|
||||||
|
if(L.len) active_alarms = 1
|
||||||
|
if(active_alarms)
|
||||||
|
active_state = "alert:2"
|
||||||
|
else
|
||||||
|
active_state = "alert:0"
|
||||||
|
..()
|
||||||
|
return
|
||||||
103
code/WorkInProgress/computer3/computers/syndicate_shuttle.dm
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
#define SYNDICATE_SHUTTLE_MOVE_TIME 240
|
||||||
|
#define SYNDICATE_SHUTTLE_COOLDOWN 200
|
||||||
|
|
||||||
|
/obj/machinery/computer3/syndicate_station
|
||||||
|
name = "syndicate shuttle terminal"
|
||||||
|
icon = 'icons/obj/computer.dmi'
|
||||||
|
icon_state = "syndishuttle"
|
||||||
|
req_access = list(access_syndicate)
|
||||||
|
var/area/curr_location
|
||||||
|
var/moving = 0
|
||||||
|
var/lastMove = 0
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/computer3/syndicate_station/New()
|
||||||
|
curr_location= locate(/area/syndicate_station/start)
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/computer3/syndicate_station/proc/syndicate_move_to(area/destination as area)
|
||||||
|
if(moving) return
|
||||||
|
if(lastMove + SYNDICATE_SHUTTLE_COOLDOWN > world.time) return
|
||||||
|
var/area/dest_location = locate(destination)
|
||||||
|
if(curr_location == dest_location) return
|
||||||
|
|
||||||
|
moving = 1
|
||||||
|
lastMove = world.time
|
||||||
|
|
||||||
|
if(curr_location.z != dest_location.z)
|
||||||
|
var/area/transit_location = locate(/area/syndicate_station/transit)
|
||||||
|
curr_location.move_contents_to(transit_location)
|
||||||
|
curr_location = transit_location
|
||||||
|
sleep(SYNDICATE_SHUTTLE_MOVE_TIME)
|
||||||
|
|
||||||
|
curr_location.move_contents_to(dest_location)
|
||||||
|
curr_location = dest_location
|
||||||
|
moving = 0
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/computer3/syndicate_station/attackby(obj/item/I as obj, mob/user as mob)
|
||||||
|
return attack_hand(user)
|
||||||
|
|
||||||
|
/obj/machinery/computer3/syndicate_station/attack_ai(mob/user as mob)
|
||||||
|
return attack_hand(user)
|
||||||
|
|
||||||
|
/obj/machinery/computer3/syndicate_station/attack_paw(mob/user as mob)
|
||||||
|
return attack_hand(user)
|
||||||
|
|
||||||
|
/obj/machinery/computer3/syndicate_station/attack_hand(mob/user as mob)
|
||||||
|
if(!allowed(user))
|
||||||
|
user << "\red Access Denied"
|
||||||
|
return
|
||||||
|
|
||||||
|
user.set_machine(src)
|
||||||
|
|
||||||
|
var/dat = {"Location: [curr_location]<br>
|
||||||
|
Ready to move[max(lastMove + SYNDICATE_SHUTTLE_COOLDOWN - world.time, 0) ? " in [max(round((lastMove + SYNDICATE_SHUTTLE_COOLDOWN - world.time) * 0.1), 0)] seconds" : ": now"]<br>
|
||||||
|
<a href='?src=\ref[src];syndicate=1'>Syndicate Space</a><br>
|
||||||
|
<a href='?src=\ref[src];station_nw=1'>North West of SS13</a> |
|
||||||
|
<a href='?src=\ref[src];station_n=1'>North of SS13</a> |
|
||||||
|
<a href='?src=\ref[src];station_ne=1'>North East of SS13</a><br>
|
||||||
|
<a href='?src=\ref[src];station_sw=1'>South West of SS13</a> |
|
||||||
|
<a href='?src=\ref[src];station_s=1'>South of SS13</a> |
|
||||||
|
<a href='?src=\ref[src];station_se=1'>South East of SS13</a><br>
|
||||||
|
<a href='?src=\ref[src];mining=1'>North East of the Mining Asteroid</a><br>
|
||||||
|
<a href='?src=\ref[user];mach_close=computer'>Close</a>"}
|
||||||
|
|
||||||
|
user << browse(dat, "window=computer;size=575x450")
|
||||||
|
onclose(user, "computer")
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/computer3/syndicate_station/Topic(href, href_list)
|
||||||
|
if(!isliving(usr)) return
|
||||||
|
var/mob/living/user = usr
|
||||||
|
|
||||||
|
if(in_range(src, user) || istype(user, /mob/living/silicon))
|
||||||
|
user.set_machine(src)
|
||||||
|
|
||||||
|
if(href_list["syndicate"])
|
||||||
|
syndicate_move_to(/area/syndicate_station/start)
|
||||||
|
else if(href_list["station_nw"])
|
||||||
|
syndicate_move_to(/area/syndicate_station/northwest)
|
||||||
|
else if(href_list["station_n"])
|
||||||
|
syndicate_move_to(/area/syndicate_station/north)
|
||||||
|
else if(href_list["station_ne"])
|
||||||
|
syndicate_move_to(/area/syndicate_station/northeast)
|
||||||
|
else if(href_list["station_sw"])
|
||||||
|
syndicate_move_to(/area/syndicate_station/southwest)
|
||||||
|
else if(href_list["station_s"])
|
||||||
|
syndicate_move_to(/area/syndicate_station/south)
|
||||||
|
else if(href_list["station_se"])
|
||||||
|
syndicate_move_to(/area/syndicate_station/southeast)
|
||||||
|
// else if(href_list["commssat"])
|
||||||
|
// syndicate_move_to(/area/syndicate_station/commssat)
|
||||||
|
else if(href_list["mining"])
|
||||||
|
syndicate_move_to(/area/syndicate_station/mining)
|
||||||
|
|
||||||
|
add_fingerprint(usr)
|
||||||
|
updateUsrDialog()
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/computer3/syndicate_station/bullet_act(var/obj/item/projectile/Proj)
|
||||||
|
visible_message("[Proj] ricochets off [src]!") //let's not let them fuck themselves in the rear
|
||||||
@@ -0,0 +1,259 @@
|
|||||||
|
//Config stuff
|
||||||
|
#define SYNDICATE_ELITE_MOVETIME 600 //Time to station is deciseconds. 60 seconds, enough time for everyone to be on the shuttle before it leaves.
|
||||||
|
#define SYNDICATE_ELITE_STATION_AREATYPE "/area/shuttle/syndicate_elite/station" //Type of the spec ops shuttle area for station
|
||||||
|
#define SYNDICATE_ELITE_DOCK_AREATYPE "/area/shuttle/syndicate_elite/mothership" //Type of the spec ops shuttle area for dock
|
||||||
|
|
||||||
|
var/syndicate_elite_shuttle_moving_to_station = 0
|
||||||
|
var/syndicate_elite_shuttle_moving_to_mothership = 0
|
||||||
|
var/syndicate_elite_shuttle_at_station = 0
|
||||||
|
var/syndicate_elite_shuttle_can_send = 1
|
||||||
|
var/syndicate_elite_shuttle_time = 0
|
||||||
|
var/syndicate_elite_shuttle_timeleft = 0
|
||||||
|
|
||||||
|
/obj/machinery/computer3/syndicate_elite_shuttle
|
||||||
|
name = "Elite Syndicate Squad Shuttle Console"
|
||||||
|
icon = 'icons/obj/computer.dmi'
|
||||||
|
icon_state = "syndishuttle"
|
||||||
|
req_access = list(access_cent_specops)
|
||||||
|
var/temp = null
|
||||||
|
var/hacked = 0
|
||||||
|
var/allowedtocall = 0
|
||||||
|
|
||||||
|
/proc/syndicate_elite_process()
|
||||||
|
var/area/syndicate_mothership/control/syndicate_ship = locate()//To find announcer. This area should exist for this proc to work.
|
||||||
|
var/area/syndicate_mothership/elite_squad/elite_squad = locate()//Where is the specops area located?
|
||||||
|
var/mob/living/silicon/decoy/announcer = locate() in syndicate_ship//We need a fake AI to announce some stuff below. Otherwise it will be wonky.
|
||||||
|
|
||||||
|
var/message_tracker[] = list(0,1,2,3,5,10,30,45)//Create a a list with potential time values.
|
||||||
|
var/message = "THE SYNDICATE ELITE SHUTTLE IS PREPARING FOR LAUNCH"//Initial message shown.
|
||||||
|
if(announcer)
|
||||||
|
announcer.say(message)
|
||||||
|
// message = "ARMORED SQUAD TAKE YOUR POSITION ON GRAVITY LAUNCH PAD"
|
||||||
|
// announcer.say(message)
|
||||||
|
|
||||||
|
while(syndicate_elite_shuttle_time - world.timeofday > 0)
|
||||||
|
var/ticksleft = syndicate_elite_shuttle_time - world.timeofday
|
||||||
|
|
||||||
|
if(ticksleft > 1e5)
|
||||||
|
syndicate_elite_shuttle_time = world.timeofday // midnight rollover
|
||||||
|
syndicate_elite_shuttle_timeleft = (ticksleft / 10)
|
||||||
|
|
||||||
|
//All this does is announce the time before launch.
|
||||||
|
if(announcer)
|
||||||
|
var/rounded_time_left = round(syndicate_elite_shuttle_timeleft)//Round time so that it will report only once, not in fractions.
|
||||||
|
if(rounded_time_left in message_tracker)//If that time is in the list for message announce.
|
||||||
|
message = "ALERT: [rounded_time_left] SECOND[(rounded_time_left!=1)?"S":""] REMAIN"
|
||||||
|
if(rounded_time_left==0)
|
||||||
|
message = "ALERT: TAKEOFF"
|
||||||
|
announcer.say(message)
|
||||||
|
message_tracker -= rounded_time_left//Remove the number from the list so it won't be called again next cycle.
|
||||||
|
//Should call all the numbers but lag could mean some issues. Oh well. Not much I can do about that.
|
||||||
|
|
||||||
|
sleep(5)
|
||||||
|
|
||||||
|
syndicate_elite_shuttle_moving_to_station = 0
|
||||||
|
syndicate_elite_shuttle_moving_to_mothership = 0
|
||||||
|
|
||||||
|
syndicate_elite_shuttle_at_station = 1
|
||||||
|
if (syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return
|
||||||
|
|
||||||
|
if (!syndicate_elite_can_move())
|
||||||
|
usr << "\red The Syndicate Elite shuttle is unable to leave."
|
||||||
|
return
|
||||||
|
|
||||||
|
sleep(600)
|
||||||
|
/*
|
||||||
|
//Begin Marauder launchpad.
|
||||||
|
spawn(0)//So it parallel processes it.
|
||||||
|
for(var/obj/machinery/door/poddoor/M in elite_squad)
|
||||||
|
switch(M.id)
|
||||||
|
if("ASSAULT0")
|
||||||
|
spawn(10)//1 second delay between each.
|
||||||
|
M.open()
|
||||||
|
if("ASSAULT1")
|
||||||
|
spawn(20)
|
||||||
|
M.open()
|
||||||
|
if("ASSAULT2")
|
||||||
|
spawn(30)
|
||||||
|
M.open()
|
||||||
|
if("ASSAULT3")
|
||||||
|
spawn(40)
|
||||||
|
M.open()
|
||||||
|
|
||||||
|
sleep(10)
|
||||||
|
|
||||||
|
var/spawn_marauder[] = new()
|
||||||
|
for(var/obj/effect/landmark/L in landmarks_list)
|
||||||
|
if(L.name == "Marauder Entry")
|
||||||
|
spawn_marauder.Add(L)
|
||||||
|
for(var/obj/effect/landmark/L in landmarks_list)
|
||||||
|
if(L.name == "Marauder Exit")
|
||||||
|
var/obj/effect/portal/P = new(L.loc)
|
||||||
|
P.invisibility = 101//So it is not seen by anyone.
|
||||||
|
P.failchance = 0//So it has no fail chance when teleporting.
|
||||||
|
P.target = pick(spawn_marauder)//Where the marauder will arrive.
|
||||||
|
spawn_marauder.Remove(P.target)
|
||||||
|
|
||||||
|
sleep(10)
|
||||||
|
|
||||||
|
for(var/obj/machinery/mass_driver/M in elite_squad)
|
||||||
|
switch(M.id)
|
||||||
|
if("ASSAULT0")
|
||||||
|
spawn(10)
|
||||||
|
M.drive()
|
||||||
|
if("ASSAULT1")
|
||||||
|
spawn(20)
|
||||||
|
M.drive()
|
||||||
|
if("ASSAULT2")
|
||||||
|
spawn(30)
|
||||||
|
M.drive()
|
||||||
|
if("ASSAULT3")
|
||||||
|
spawn(40)
|
||||||
|
M.drive()
|
||||||
|
|
||||||
|
sleep(50)//Doors remain open for 5 seconds.
|
||||||
|
|
||||||
|
for(var/obj/machinery/door/poddoor/M in elite_squad)
|
||||||
|
switch(M.id)//Doors close at the same time.
|
||||||
|
if("ASSAULT0")
|
||||||
|
spawn(0)
|
||||||
|
M.close()
|
||||||
|
if("ASSAULT1")
|
||||||
|
spawn(0)
|
||||||
|
M.close()
|
||||||
|
if("ASSAULT2")
|
||||||
|
spawn(0)
|
||||||
|
M.close()
|
||||||
|
if("ASSAULT3")
|
||||||
|
spawn(0)
|
||||||
|
M.close()
|
||||||
|
*/
|
||||||
|
elite_squad.readyreset()//Reset firealarm after the team launched.
|
||||||
|
//End Marauder launchpad.
|
||||||
|
/*
|
||||||
|
var/obj/explosionmarker = locate("Syndicate Breach Area")
|
||||||
|
if(explosionmarker)
|
||||||
|
var/turf/simulated/T = explosionmarker.loc
|
||||||
|
if(T)
|
||||||
|
explosion(T,4,6,8,10,0)
|
||||||
|
|
||||||
|
sleep(40)
|
||||||
|
// proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1)
|
||||||
|
|
||||||
|
*/
|
||||||
|
var/area/start_location = locate(/area/shuttle/syndicate_elite/mothership)
|
||||||
|
var/area/end_location = locate(/area/shuttle/syndicate_elite/station)
|
||||||
|
|
||||||
|
var/list/dstturfs = list()
|
||||||
|
var/throwy = world.maxy
|
||||||
|
|
||||||
|
for(var/turf/T in end_location)
|
||||||
|
dstturfs = T
|
||||||
|
if(T.y < throwy)
|
||||||
|
throwy = T.y
|
||||||
|
|
||||||
|
// hey you, get out of the way!
|
||||||
|
for(var/turf/T in dstturfs)
|
||||||
|
// find the turf to move things to
|
||||||
|
var/turf/D = locate(T.x, throwy - 1, 1)
|
||||||
|
//var/turf/E = get_step(D, SOUTH)
|
||||||
|
for(var/atom/movable/AM as mob|obj in T)
|
||||||
|
AM.Move(D)
|
||||||
|
if(istype(T, /turf/simulated))
|
||||||
|
del(T)
|
||||||
|
|
||||||
|
start_location.move_contents_to(end_location)
|
||||||
|
|
||||||
|
for(var/turf/T in get_area_turfs(end_location) )
|
||||||
|
var/mob/M = locate(/mob) in T
|
||||||
|
M << "\red You have arrived to [station_name]. Commence operation!"
|
||||||
|
|
||||||
|
/proc/syndicate_elite_can_move()
|
||||||
|
if(syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return 0
|
||||||
|
else return 1
|
||||||
|
|
||||||
|
/obj/machinery/computer3/syndicate_elite_shuttle/attackby(I as obj, user as mob)
|
||||||
|
return attack_hand(user)
|
||||||
|
|
||||||
|
/obj/machinery/computer3/syndicate_elite_shuttle/attack_ai(var/mob/user as mob)
|
||||||
|
return attack_hand(user)
|
||||||
|
|
||||||
|
/obj/machinery/computer3/syndicate_elite_shuttle/attack_paw(var/mob/user as mob)
|
||||||
|
return attack_hand(user)
|
||||||
|
|
||||||
|
/obj/machinery/computer3/syndicate_elite_shuttle/attackby(I as obj, user as mob)
|
||||||
|
if(istype(I,/obj/item/card/emag))
|
||||||
|
user << "\blue The electronic systems in this console are far too advanced for your primitive hacking peripherals."
|
||||||
|
else
|
||||||
|
return attack_hand(user)
|
||||||
|
|
||||||
|
/obj/machinery/computer3/syndicate_elite_shuttle/attack_hand(var/mob/user as mob)
|
||||||
|
if(!allowed(user))
|
||||||
|
user << "\red Access Denied."
|
||||||
|
return
|
||||||
|
|
||||||
|
// if (sent_syndicate_strike_team == 0)
|
||||||
|
// usr << "\red The strike team has not yet deployed."
|
||||||
|
// return
|
||||||
|
|
||||||
|
if(..())
|
||||||
|
return
|
||||||
|
|
||||||
|
user.set_machine(src)
|
||||||
|
var/dat
|
||||||
|
if (temp)
|
||||||
|
dat = temp
|
||||||
|
else
|
||||||
|
dat = {"<b>Location:</b> [syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership ? "Departing for [station_name] in ([syndicate_elite_shuttle_timeleft] seconds.)":syndicate_elite_shuttle_at_station ? "Station":"Dock"]<BR>
|
||||||
|
[syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership ? "\n*The Syndicate Elite shuttle is already leaving.*<BR>\n<BR>":syndicate_elite_shuttle_at_station ? "\n<A href='?src=\ref[src];sendtodock=1'>Shuttle Offline</A><BR>\n<BR>":"\n<A href='?src=\ref[src];sendtostation=1'>Depart to [station_name]</A><BR>\n<BR>"]
|
||||||
|
\n<A href='?src=\ref[user];mach_close=computer'>Close</A>"}
|
||||||
|
|
||||||
|
//user << browse(dat, "window=computer;size=575x450")
|
||||||
|
//onclose(user, "computer")
|
||||||
|
var/datum/browser/popup = new(user, "computer", "Special Operations Shuttle", 575, 450)
|
||||||
|
popup.set_content(dat)
|
||||||
|
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||||
|
popup.open()
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/computer3/syndicate_elite_shuttle/Topic(href, href_list)
|
||||||
|
if(..())
|
||||||
|
return
|
||||||
|
|
||||||
|
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||||
|
usr.set_machine(src)
|
||||||
|
|
||||||
|
if (href_list["sendtodock"])
|
||||||
|
if(!syndicate_elite_shuttle_at_station|| syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return
|
||||||
|
|
||||||
|
usr << "\blue The Syndicate will not allow the Elite Squad shuttle to return."
|
||||||
|
return
|
||||||
|
|
||||||
|
else if (href_list["sendtostation"])
|
||||||
|
if(syndicate_elite_shuttle_at_station || syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return
|
||||||
|
|
||||||
|
if (!specops_can_move())
|
||||||
|
usr << "\red The Syndicate Elite shuttle is unable to leave."
|
||||||
|
return
|
||||||
|
|
||||||
|
usr << "\blue The Syndicate Elite shuttle will arrive on [station_name] in [(SYNDICATE_ELITE_MOVETIME/10)] seconds."
|
||||||
|
|
||||||
|
temp = "Shuttle departing.<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
|
||||||
|
updateUsrDialog()
|
||||||
|
|
||||||
|
var/area/syndicate_mothership/elite_squad/elite_squad = locate()
|
||||||
|
if(elite_squad)
|
||||||
|
elite_squad.readyalert()//Trigger alarm for the spec ops area.
|
||||||
|
syndicate_elite_shuttle_moving_to_station = 1
|
||||||
|
|
||||||
|
syndicate_elite_shuttle_time = world.timeofday + SYNDICATE_ELITE_MOVETIME
|
||||||
|
spawn(0)
|
||||||
|
syndicate_elite_process()
|
||||||
|
|
||||||
|
|
||||||
|
else if (href_list["mainmenu"])
|
||||||
|
temp = null
|
||||||
|
|
||||||
|
add_fingerprint(usr)
|
||||||
|
updateUsrDialog()
|
||||||
|
return
|
||||||
34
code/WorkInProgress/computer3/computers/welcome.dm
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
/obj/machinery/computer3/laptop/vended
|
||||||
|
default_prog = /datum/file/program/welcome
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/program/welcome
|
||||||
|
name = "Welcome Screen"
|
||||||
|
desc = "First time boot splash screen"
|
||||||
|
active_state = "osod"
|
||||||
|
image = 'icons/ntos/program.png'
|
||||||
|
|
||||||
|
|
||||||
|
interact()
|
||||||
|
usr.set_machine(src)
|
||||||
|
if(!interactable())
|
||||||
|
return
|
||||||
|
var/dat = ""
|
||||||
|
dat += "<center><span style='font-size:24pt'><b>Welcome to NTOS</b></span></center>"
|
||||||
|
dat += "<center><span style='font-size:8pt'>Thank you for choosing NTOS, your gateway to the future of mobile computing technology, sponsored by Nanotrasen (R)</span></center><br>"
|
||||||
|
dat += "<span style='font-size:12pt'><b>Getting started with NTOS:</b></span><br>"
|
||||||
|
dat += "To leave a current program, click the X button in the top right corner of the window. This will return you to the NTOS desktop. \
|
||||||
|
From the desktop, you can open the hard drive, usually located in the top left corner to access all the programs installed on your computer. \
|
||||||
|
When you rented your laptop, you were supplied with programs that your Nanotrasen Issued ID has given you access to use. \
|
||||||
|
In the event of a serious error, the right click menu will give you the ability to reset your computer. To open and close your laptop, alt-click your device.\
|
||||||
|
If you have any questions or technical issues, please contact your local computer technical experts at your local Central Command."
|
||||||
|
popup.set_content(dat)
|
||||||
|
popup.set_title_image(usr.browse_rsc_icon(computer.icon, computer.icon_state))
|
||||||
|
popup.open()
|
||||||
|
return
|
||||||
|
|
||||||
|
Topic(href, href_list)
|
||||||
|
if(!interactable() || ..(href,href_list))
|
||||||
|
return
|
||||||
|
interact()
|
||||||
|
return
|
||||||
166
code/WorkInProgress/computer3/file.dm
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
// I am deciding that for sayustation's purposes directories are right out,
|
||||||
|
// we can't even get backpacks to work right with recursion, and that
|
||||||
|
// actually fucking matters. Metadata too, that can be added if ever needed.
|
||||||
|
|
||||||
|
/*
|
||||||
|
Files are datums that can be stored in digital storage devices
|
||||||
|
*/
|
||||||
|
|
||||||
|
/datum/file
|
||||||
|
var/name = "File"
|
||||||
|
var/extension = "dat"
|
||||||
|
var/volume = 10 // in KB
|
||||||
|
var/image = 'icons/ntos/file.png' // determines the icon to use, found in icons/ntos
|
||||||
|
var/obj/machinery/computer3/computer // the parent computer, if fixed
|
||||||
|
var/obj/item/part/computer/storage/device // the device that is containing this file
|
||||||
|
|
||||||
|
var/drm = 0 // Copy protection, called by copy() and move()
|
||||||
|
var/readonly = 0 // Edit protection, called by edit(), which is just a failcheck proc
|
||||||
|
|
||||||
|
proc/execute(var/datum/file/source)
|
||||||
|
return
|
||||||
|
|
||||||
|
//
|
||||||
|
// Copy file to device.
|
||||||
|
// If you overwrite this function, use the return value to make sure it succeeded
|
||||||
|
//
|
||||||
|
proc/copy(var/obj/item/part/computer/storage/dest)
|
||||||
|
if(!computer || computer.crit_fail) return null
|
||||||
|
if(drm)
|
||||||
|
if(!computer.emagged)
|
||||||
|
return null
|
||||||
|
var/datum/file/F = new type()
|
||||||
|
if(!dest.addfile(F))
|
||||||
|
return null // todo: arf here even though the player can't do a damn thing due to concurrency
|
||||||
|
return F
|
||||||
|
|
||||||
|
//
|
||||||
|
// Move file to device
|
||||||
|
// Returns null on failure even though the existing file doesn't go away
|
||||||
|
//
|
||||||
|
proc/move(var/obj/item/part/computer/storage/dest)
|
||||||
|
if(!computer || computer.crit_fail) return null
|
||||||
|
if(drm)
|
||||||
|
if(!computer.emagged)
|
||||||
|
return null
|
||||||
|
var/obj/item/part/computer/storage/current = device
|
||||||
|
if(!dest.addfile(src))
|
||||||
|
return null
|
||||||
|
current.removefile(src)
|
||||||
|
return src
|
||||||
|
|
||||||
|
//
|
||||||
|
// Determines if the file is editable. This does not use the DRM flag,
|
||||||
|
// but instead the readonly flag.
|
||||||
|
//
|
||||||
|
|
||||||
|
proc/edit()
|
||||||
|
if(!computer || computer.crit_fail)
|
||||||
|
return 0
|
||||||
|
if(readonly && !computer.emagged)
|
||||||
|
return 0 //
|
||||||
|
return 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
Centcom root authorization certificate
|
||||||
|
|
||||||
|
Non-destructive, officially sanctioned.
|
||||||
|
Has the same effect on computers as an emag.
|
||||||
|
*/
|
||||||
|
/datum/file/centcom_auth
|
||||||
|
name = "Centcom Root Access Token"
|
||||||
|
extension = "auth"
|
||||||
|
volume = 100
|
||||||
|
copy()
|
||||||
|
return null
|
||||||
|
|
||||||
|
/*
|
||||||
|
A file that contains information
|
||||||
|
*/
|
||||||
|
|
||||||
|
/datum/file/data
|
||||||
|
|
||||||
|
var/content = "content goes here"
|
||||||
|
var/file_increment = 1
|
||||||
|
var/binary = 0 // determines if the file can't be opened by editor
|
||||||
|
|
||||||
|
// Set the content to a specific amount, increase filesize appropriately.
|
||||||
|
proc/set_content(var/text)
|
||||||
|
content = text
|
||||||
|
if(file_increment > 1)
|
||||||
|
volume = round(file_increment * length(text))
|
||||||
|
|
||||||
|
copy(var/obj/O)
|
||||||
|
var/datum/file/data/D = ..(O)
|
||||||
|
if(D)
|
||||||
|
D.content = content
|
||||||
|
D.readonly = readonly
|
||||||
|
|
||||||
|
New()
|
||||||
|
if(content)
|
||||||
|
if(file_increment > 1)
|
||||||
|
volume = round(file_increment * length(content))
|
||||||
|
|
||||||
|
/*
|
||||||
|
A generic file that contains text
|
||||||
|
*/
|
||||||
|
|
||||||
|
/datum/file/data/text
|
||||||
|
name = "Text File"
|
||||||
|
extension = "txt"
|
||||||
|
image = 'icons/ntos/file.png'
|
||||||
|
content = ""
|
||||||
|
file_increment = 0.002 // 0.002 kilobytes per character (1024 characters per KB)
|
||||||
|
|
||||||
|
/datum/file/data/text/ClownProphecy
|
||||||
|
name = "Clown Prophecy"
|
||||||
|
content = "HONKhHONKeHONKlHONKpHONKHONmKHONKeHONKHONKpHONKlHONKeHONKaHONKsHONKe"
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
A file that contains research
|
||||||
|
*/
|
||||||
|
|
||||||
|
/datum/file/data/research
|
||||||
|
name = "Untitled Research"
|
||||||
|
binary = 1
|
||||||
|
content = "Untitled Tier X Research"
|
||||||
|
var/datum/tech/stored // the actual tech contents
|
||||||
|
volume = 1440
|
||||||
|
|
||||||
|
/*
|
||||||
|
A file that contains genetic information
|
||||||
|
*/
|
||||||
|
|
||||||
|
/datum/file/data/genome
|
||||||
|
name = "Genetic Buffer"
|
||||||
|
binary = 1
|
||||||
|
var/real_name = "Poop"
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/data/genome/SE
|
||||||
|
name = "Structural Enzymes"
|
||||||
|
var/mutantrace = null
|
||||||
|
|
||||||
|
/datum/file/data/genome/UE
|
||||||
|
name = "Unique Enzymes"
|
||||||
|
|
||||||
|
/*
|
||||||
|
the way genome computers now work, a subtype is the wrong way to do this;
|
||||||
|
it will no longer be picked up. You can change this later if you need to.
|
||||||
|
for now put it on a disk
|
||||||
|
|
||||||
|
/datum/file/data/genome/UE/GodEmperorOfMankind
|
||||||
|
name = "G.E.M.K."
|
||||||
|
content = "066000033000000000AF00330660FF4DB002690"
|
||||||
|
label = "God Emperor of Mankind"
|
||||||
|
*/
|
||||||
|
/datum/file/data/genome/UI
|
||||||
|
name = "Unique Identifier"
|
||||||
|
|
||||||
|
/datum/file/data/genome/UI/UE
|
||||||
|
name = "Unique Identifier + Unique Enzymes"
|
||||||
|
|
||||||
|
/datum/file/data/genome/cloning
|
||||||
|
name = "Cloning Data"
|
||||||
|
var/datum/data/record/record
|
||||||
137
code/WorkInProgress/computer3/laptop.dm
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
/*
|
||||||
|
Computer3 portable computer.
|
||||||
|
|
||||||
|
Battery powered only; it does not use the APC network at all.
|
||||||
|
|
||||||
|
When picked up, becomes an inert item. This item can be put in a recharger,
|
||||||
|
or set down and re-opened into the original machine. While closed, the computer
|
||||||
|
has the MAINT stat flag. If you want to ignore this, you will have to bitmask it out.
|
||||||
|
|
||||||
|
The unused(?) alt+click will toggle laptops open and closed. If we find a better
|
||||||
|
answer for this in the future, by all means use it. I just don't want it limited
|
||||||
|
to the verb, which is SIGNIFICANTLY less accessible than shutting a laptop.
|
||||||
|
Ctrl-click would work for closing the machine, since it's anchored, but not for
|
||||||
|
opening it back up again. And obviously, I don't want to override shift-click.
|
||||||
|
There's no double-click because that's used in regular click events. Alt-click is the
|
||||||
|
only obvious one left.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/obj/item/device/laptop
|
||||||
|
name = "Laptop Computer"
|
||||||
|
desc = "A clamshell portable computer. It is closed."
|
||||||
|
icon = 'icons/obj/computer3.dmi'
|
||||||
|
icon_state = "laptop-closed"
|
||||||
|
item_state = "laptop-inhand"
|
||||||
|
pixel_x = 2
|
||||||
|
pixel_y = -3
|
||||||
|
w_class = 3
|
||||||
|
|
||||||
|
var/obj/machinery/computer3/laptop/stored_computer = null
|
||||||
|
|
||||||
|
verb/open_computer()
|
||||||
|
set name = "open laptop"
|
||||||
|
set category = "Object"
|
||||||
|
set src in view(1)
|
||||||
|
|
||||||
|
if(!istype(loc,/turf))
|
||||||
|
usr << "[src] is too bulky! You'll have to set it down."
|
||||||
|
return
|
||||||
|
|
||||||
|
if(!stored_computer)
|
||||||
|
if(contents.len)
|
||||||
|
for(var/obj/O in contents)
|
||||||
|
O.loc = loc
|
||||||
|
usr << "\The [src] crumbles to pieces."
|
||||||
|
spawn(5)
|
||||||
|
del src
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
stored_computer.loc = loc
|
||||||
|
stored_computer.stat &= ~MAINT
|
||||||
|
stored_computer.update_icon()
|
||||||
|
loc = null
|
||||||
|
usr << "You open \the [src]."
|
||||||
|
|
||||||
|
spawn(5)
|
||||||
|
del src
|
||||||
|
|
||||||
|
AltClick()
|
||||||
|
open_computer()
|
||||||
|
|
||||||
|
/obj/machinery/computer3/laptop
|
||||||
|
name = "Laptop Computer"
|
||||||
|
desc = "A clamshell portable computer. It is open."
|
||||||
|
|
||||||
|
icon_state = "laptop"
|
||||||
|
density = 0
|
||||||
|
pixel_x = 2
|
||||||
|
pixel_y = -3
|
||||||
|
show_keyboard = 0
|
||||||
|
|
||||||
|
var/obj/item/device/laptop/portable = null
|
||||||
|
|
||||||
|
New(var/L, var/built = 0)
|
||||||
|
if(!built && !battery)
|
||||||
|
battery = new /obj/item/weapon/cell(src)
|
||||||
|
..(L,built)
|
||||||
|
|
||||||
|
verb/close_computer()
|
||||||
|
set name = "close laptop"
|
||||||
|
set category = "Object"
|
||||||
|
set src in view(1)
|
||||||
|
|
||||||
|
if(istype(loc,/obj/item/device/laptop))
|
||||||
|
testing("Close closed computer")
|
||||||
|
return
|
||||||
|
if(!istype(loc,/turf))
|
||||||
|
testing("Odd computer location: [loc] - close laptop")
|
||||||
|
return
|
||||||
|
|
||||||
|
if(stat&BROKEN)
|
||||||
|
usr << "\The [src] is broken! You can't quite get it closed."
|
||||||
|
return
|
||||||
|
|
||||||
|
if(!portable)
|
||||||
|
portable=new
|
||||||
|
portable.stored_computer = src
|
||||||
|
|
||||||
|
portable.loc = loc
|
||||||
|
loc = portable
|
||||||
|
stat |= MAINT
|
||||||
|
usr << "You close \the [src]."
|
||||||
|
|
||||||
|
auto_use_power()
|
||||||
|
if(stat&MAINT)
|
||||||
|
return
|
||||||
|
if(use_power && istype(battery) && battery.charge > 0)
|
||||||
|
if(use_power == 1)
|
||||||
|
battery.use(idle_power_usage)
|
||||||
|
else
|
||||||
|
battery.use(active_power_usage)
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
use_power(var/amount, var/chan = -1)
|
||||||
|
if(battery && battery.charge > 0)
|
||||||
|
battery.use(amount)
|
||||||
|
|
||||||
|
power_change()
|
||||||
|
if( !battery || battery.charge <= 0 )
|
||||||
|
stat |= NOPOWER
|
||||||
|
else
|
||||||
|
stat &= ~NOPOWER
|
||||||
|
|
||||||
|
Del()
|
||||||
|
if(istype(loc,/obj/item/device/laptop))
|
||||||
|
var/obj/O = loc
|
||||||
|
spawn(5)
|
||||||
|
if(O)
|
||||||
|
del O
|
||||||
|
..()
|
||||||
|
|
||||||
|
|
||||||
|
AltClick()
|
||||||
|
close_computer()
|
||||||
|
|
||||||
398
code/WorkInProgress/computer3/lapvend.dm
Normal file
@@ -0,0 +1,398 @@
|
|||||||
|
/obj/machinery/lapvend
|
||||||
|
name = "Laptop Vendor"
|
||||||
|
desc = "A generic vending machine."
|
||||||
|
icon = 'icons/obj/vending.dmi'
|
||||||
|
icon_state = "robotics"
|
||||||
|
layer = 2.9
|
||||||
|
anchored = 1
|
||||||
|
density = 1
|
||||||
|
var/datum/browser/popup = null
|
||||||
|
var/obj/machinery/computer3/laptop/vended/newlap = null
|
||||||
|
var/obj/item/device/laptop/relap = null
|
||||||
|
var/vendmode = 0
|
||||||
|
|
||||||
|
|
||||||
|
var/cardreader = 0
|
||||||
|
var/floppy = 0
|
||||||
|
var/radionet = 0
|
||||||
|
var/camera = 0
|
||||||
|
var/network = 0
|
||||||
|
var/power = 0
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/lapvend/New()
|
||||||
|
..()
|
||||||
|
spawn(4)
|
||||||
|
power_change()
|
||||||
|
return
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/lapvend/blob_act()
|
||||||
|
if (prob(50))
|
||||||
|
spawn(0)
|
||||||
|
del(src)
|
||||||
|
return
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/lapvend/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||||
|
if(vendmode == 1)
|
||||||
|
if(istype(W, /obj/item/weapon/card))
|
||||||
|
var/obj/item/weapon/card/I = W
|
||||||
|
scan_card(I)
|
||||||
|
vendmode = 0
|
||||||
|
if(vendmode == 3)
|
||||||
|
if(istype(W,/obj/item/weapon/card))
|
||||||
|
var/obj/item/weapon/card/I = W
|
||||||
|
reimburse(I)
|
||||||
|
vendmode = 0
|
||||||
|
if(vendmode == 0)
|
||||||
|
if(istype(W, /obj/item/device/laptop))
|
||||||
|
var/obj/item/device/laptop/L = W
|
||||||
|
relap = L
|
||||||
|
calc_reimburse(L)
|
||||||
|
usr.drop_item()
|
||||||
|
L.loc = src
|
||||||
|
vendmode = 3
|
||||||
|
usr << "<span class='notice'>You slot your [L.name] into \The [src.name]</span>"
|
||||||
|
else
|
||||||
|
..()
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/lapvend/attack_hand(mob/user as mob)
|
||||||
|
user.set_machine(src)
|
||||||
|
var/vendorname = (src.name) //import the machine's name
|
||||||
|
var/dat = "<TT><center><b>[vendorname]</b></center><hr /><br>" //display the name, and added a horizontal rule
|
||||||
|
if(vendmode == 0)
|
||||||
|
dat += "<center><b>Please choose your laptop customization options</b></center><br>"
|
||||||
|
dat += "<center>Your comptuer will automatically be loaded with any programs you can use after the transaction is complete."
|
||||||
|
dat += "<center><b>Some programs will require additional components to be installed!</center></b><hr /><br>"
|
||||||
|
dat += "<center><b>HDD (Required)</b> : Added</center><br>"
|
||||||
|
dat += "<center><b>Card Reader</b> : <A href='?src=\ref[src];choice=single_add'>Single (50)</a> | <A href='?src=\ref[src];choice=dual_add'>Dual (125)</a><br>"
|
||||||
|
dat += "<center><b>Floppy Drive</b>: <A href='?src=\ref[src];choice=floppy_add'>Add (50)</a><br>"
|
||||||
|
dat += "<center><b>Radio Network card</b> <A href='?src=\ref[src];choice=radio_add'>Add (50)</a><br>"
|
||||||
|
dat += "<center><b>Camera Card</b> <A href='?src=\ref[src];choice=camnet_add'>Add (100)</a><br>"
|
||||||
|
dat += "<center><b> Network card</b> <A href='?src=\ref[src];choice=area_add'>Area (75)</a> <A href='?src=\ref[src];choice=prox_add'>Adjacent (50)</a><A href='?src=\ref[src];choice=cable_add'>Powernet (25)</a><br>"
|
||||||
|
dat += "<hr /><center> Power source upgrade</center> <A href='?src=\ref[src];choice=high_add'>Extended (175)</a> <A href='?src=\ref[src];choice=super_add'>Unreal (250)</a>"
|
||||||
|
|
||||||
|
if(vendmode == 0 || vendmode == 1)
|
||||||
|
dat += "<hr /><br><center>Cart</center><br>"
|
||||||
|
dat += "<b>Total: [total()]</b><br>"
|
||||||
|
if(cardreader == 1)
|
||||||
|
dat += "<A href='?src=\ref[src];choice=single_rem'>Card Reader: (single) (50)</a><br>"
|
||||||
|
else if (cardreader == 2)
|
||||||
|
dat += "<A href='?src=\ref[src];choice=dual_rem'>Card Reader: (double) (125)</a><br>"
|
||||||
|
else
|
||||||
|
dat += "Card Reader: None<br>"
|
||||||
|
if(floppy == 0)
|
||||||
|
dat += "Floppy Drive: None<br>"
|
||||||
|
else
|
||||||
|
dat += "<A href='?src=\ref[src];choice=floppy_rem'>Floppy Drive: Added (50)</a><br>"
|
||||||
|
if(radionet == 1)
|
||||||
|
dat += "<A href='?src=\ref[src];choice=radio_rem'>Radio Card: Added (50)</a><br>"
|
||||||
|
else
|
||||||
|
dat += "Radio Card: None<br>"
|
||||||
|
if(camera == 1)
|
||||||
|
dat += "<A href='?src=\ref[src];choice=camnet_rem'>Camera Card: Added (100)</a><br>"
|
||||||
|
else
|
||||||
|
dat += "Camera Card: None<br>"
|
||||||
|
if(network == 1)
|
||||||
|
dat += "<A href='?src=\ref[src];choice=area_rem'>Network card: Area (75)</a><br>"
|
||||||
|
else if(network == 2)
|
||||||
|
dat += "<A href='?src=\ref[src];choice=prox_rem'>Network card: Adjacent (50)</a><br>"
|
||||||
|
else if(network == 3)
|
||||||
|
dat += "<A href='?src=\ref[src];choice=cable_rem'>Network card: Powernet (25)</a><br>"
|
||||||
|
else
|
||||||
|
dat += "Network card: None"
|
||||||
|
if (power == 0)
|
||||||
|
dat += "Power source: Regular"
|
||||||
|
else if (power == 1)
|
||||||
|
dat += "<A href='?src=\ref[src];choice=high_rem'>Power source: Extended (175)</a><br>"
|
||||||
|
else
|
||||||
|
dat += "<A href='?src=\ref[src];choice=super_rem'>Power source: Unreal (250)</a><br>"
|
||||||
|
|
||||||
|
if(vendmode == 0)
|
||||||
|
dat += "<br><A href='?src=\ref[src];choice=vend'>Vend Laptop</a>"
|
||||||
|
|
||||||
|
if(vendmode == 1)
|
||||||
|
dat += "Please swipe your card and enter your PIN to complete the transaction"
|
||||||
|
|
||||||
|
if(vendmode == 3)
|
||||||
|
dat += "Please swipe your card and enter your PIN to be finish returning your computer<br>"
|
||||||
|
dat += "<a href='?src=\ref[src];choice=cancel'>Cancel</a>"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
popup = new(user, "lapvend", name, 450, 500)
|
||||||
|
popup.set_content(dat)
|
||||||
|
popup.open()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/lapvend/Topic(href, href_list)
|
||||||
|
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
|
||||||
|
usr.set_machine(src)
|
||||||
|
switch(href_list["choice"])
|
||||||
|
if("single_add")
|
||||||
|
cardreader = 1
|
||||||
|
if ("dual_add")
|
||||||
|
cardreader = 2
|
||||||
|
if ("floppy_add")
|
||||||
|
floppy = 1
|
||||||
|
if ("radio_add")
|
||||||
|
radionet = 1
|
||||||
|
if ("camnet_add")
|
||||||
|
camera = 1
|
||||||
|
if ("area_add")
|
||||||
|
network = 1
|
||||||
|
if ("prox_add")
|
||||||
|
network = 2
|
||||||
|
if ("cable_add")
|
||||||
|
network = 3
|
||||||
|
if ("high_add")
|
||||||
|
power = 1
|
||||||
|
if ("super_add")
|
||||||
|
power = 2
|
||||||
|
|
||||||
|
if ("single_rem" || "dual_rem")
|
||||||
|
cardreader = 0
|
||||||
|
if ("floppy_rem")
|
||||||
|
floppy = 0
|
||||||
|
if ("radio_rem")
|
||||||
|
radionet = 0
|
||||||
|
if ("camnet_rem")
|
||||||
|
camera = 0
|
||||||
|
if ("area_rem" || "prox_rem" || "cable_rem")
|
||||||
|
network = 0
|
||||||
|
if ("high_rem" || "super_rem")
|
||||||
|
power = 0
|
||||||
|
|
||||||
|
if("vend")
|
||||||
|
vendmode = 1
|
||||||
|
|
||||||
|
if("cancel")
|
||||||
|
relap.loc = src.loc
|
||||||
|
relap = null
|
||||||
|
vendmode = 0
|
||||||
|
|
||||||
|
src.updateUsrDialog()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/lapvend/proc/vend()
|
||||||
|
if(cardreader > 0)
|
||||||
|
if(cardreader == 1)
|
||||||
|
newlap.spawn_parts += (/obj/item/part/computer/cardslot)
|
||||||
|
else
|
||||||
|
newlap.spawn_parts += (/obj/item/part/computer/cardslot/dual)
|
||||||
|
if(floppy == 1)
|
||||||
|
newlap.spawn_parts += (/obj/item/part/computer/storage/removable)
|
||||||
|
if(radionet == 1)
|
||||||
|
newlap.spawn_parts += (/obj/item/part/computer/networking/radio)
|
||||||
|
if(camera == 1)
|
||||||
|
newlap.spawn_parts += (/obj/item/part/computer/networking/cameras)
|
||||||
|
if (network == 1)
|
||||||
|
newlap.spawn_parts += (/obj/item/part/computer/networking/area)
|
||||||
|
if (network == 2)
|
||||||
|
newlap.spawn_parts += (/obj/item/part/computer/networking/prox)
|
||||||
|
if (network == 3)
|
||||||
|
newlap.spawn_parts += (/obj/item/part/computer/networking/cable)
|
||||||
|
if (power == 1)
|
||||||
|
del(newlap.battery)
|
||||||
|
newlap.battery = new /obj/item/weapon/cell/high(newlap)
|
||||||
|
if (power == 2)
|
||||||
|
del(newlap.battery)
|
||||||
|
newlap.battery = new /obj/item/weapon/cell/super(newlap)
|
||||||
|
|
||||||
|
newlap.spawn_parts()
|
||||||
|
|
||||||
|
/obj/machinery/lapvend/proc/scan_card(var/obj/item/weapon/card/I)
|
||||||
|
if (istype(I, /obj/item/weapon/card/id))
|
||||||
|
var/obj/item/weapon/card/id/C = I
|
||||||
|
visible_message("<span class='info'>[usr] swipes a card through [src].</span>")
|
||||||
|
if(vendor_account)
|
||||||
|
var/attempt_pin = input("Enter pin code", "Vendor transaction") as num
|
||||||
|
var/datum/money_account/D = attempt_account_access(C.associated_account_number, attempt_pin, 2)
|
||||||
|
if(D)
|
||||||
|
var/transaction_amount = total()
|
||||||
|
if(transaction_amount <= D.money)
|
||||||
|
|
||||||
|
//transfer the money
|
||||||
|
D.money -= transaction_amount
|
||||||
|
vendor_account.money += transaction_amount
|
||||||
|
|
||||||
|
//Transaction logs
|
||||||
|
var/datum/transaction/T = new()
|
||||||
|
T.target_name = "[vendor_account.owner_name] (via [src.name])"
|
||||||
|
T.purpose = "Purchase of Laptop"
|
||||||
|
if(transaction_amount > 0)
|
||||||
|
T.amount = "([transaction_amount])"
|
||||||
|
else
|
||||||
|
T.amount = "[transaction_amount]"
|
||||||
|
T.source_terminal = src.name
|
||||||
|
T.date = current_date_string
|
||||||
|
T.time = worldtime2text()
|
||||||
|
D.transaction_log.Add(T)
|
||||||
|
//
|
||||||
|
T = new()
|
||||||
|
T.target_name = D.owner_name
|
||||||
|
T.purpose = "Purchase of Laptop"
|
||||||
|
T.amount = "[transaction_amount]"
|
||||||
|
T.source_terminal = src.name
|
||||||
|
T.date = current_date_string
|
||||||
|
T.time = worldtime2text()
|
||||||
|
vendor_account.transaction_log.Add(T)
|
||||||
|
|
||||||
|
newlap = new /obj/machinery/computer3/laptop/vended(src.loc)
|
||||||
|
|
||||||
|
choose_progs(C)
|
||||||
|
vend()
|
||||||
|
popup.close()
|
||||||
|
newlap.close_computer()
|
||||||
|
newlap = null
|
||||||
|
cardreader = 0
|
||||||
|
floppy = 0
|
||||||
|
radionet = 0
|
||||||
|
camera = 0
|
||||||
|
network = 0
|
||||||
|
power = 0
|
||||||
|
else
|
||||||
|
usr << "\icon[src]<span class='warning'>You don't have that much money!</span>"
|
||||||
|
else
|
||||||
|
usr << "\icon[src]<span class='warning'>Unable to access account. Check security settings and try again.</span>"
|
||||||
|
else
|
||||||
|
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call CentComm Support.</span>"
|
||||||
|
|
||||||
|
/obj/machinery/lapvend/proc/total()
|
||||||
|
var/total = 0
|
||||||
|
|
||||||
|
if(cardreader == 1)
|
||||||
|
total += 50
|
||||||
|
if(cardreader == 2)
|
||||||
|
total += 125
|
||||||
|
if(floppy == 1)
|
||||||
|
total += 50
|
||||||
|
if(radionet == 1)
|
||||||
|
total += 50
|
||||||
|
if(camera == 1)
|
||||||
|
total += 100
|
||||||
|
if(network == 1)
|
||||||
|
total += 75
|
||||||
|
if(network == 2)
|
||||||
|
total += 50
|
||||||
|
if(network == 3)
|
||||||
|
total += 25
|
||||||
|
if(power == 1)
|
||||||
|
total += 175
|
||||||
|
if(power == 2)
|
||||||
|
total += 250
|
||||||
|
|
||||||
|
return total
|
||||||
|
|
||||||
|
/obj/machinery/lapvend/proc/choose_progs(var/obj/item/weapon/card/id/C)
|
||||||
|
if(access_security in C.access)
|
||||||
|
newlap.spawn_files += (/datum/file/program/secure_data)
|
||||||
|
newlap.spawn_files += (/datum/file/camnet_key)
|
||||||
|
newlap.spawn_files += (/datum/file/program/security)
|
||||||
|
if(access_armory in C.access)
|
||||||
|
newlap.spawn_files += (/datum/file/program/prisoner)
|
||||||
|
if(access_atmospherics in C.access)
|
||||||
|
newlap.spawn_files += (/datum/file/program/atmos_alert)
|
||||||
|
if(access_change_ids in C.access)
|
||||||
|
newlap.spawn_files += (/datum/file/program/card_comp)
|
||||||
|
if(access_heads in C.access)
|
||||||
|
newlap.spawn_files += (/datum/file/program/communications)
|
||||||
|
if(access_medical in C.access)
|
||||||
|
newlap.spawn_files += (/datum/file/program/crew)
|
||||||
|
newlap.spawn_files += (/datum/file/program/med_data)
|
||||||
|
if(access_engine in C.access)
|
||||||
|
newlap.spawn_files += (/datum/file/program/powermon)
|
||||||
|
if(access_research in C.access)
|
||||||
|
newlap.spawn_files += (/datum/file/camnet_key/research)
|
||||||
|
newlap.spawn_files += (/datum/file/camnet_key/bombrange)
|
||||||
|
newlap.spawn_files += (/datum/file/camnet_key/xeno)
|
||||||
|
if(access_rd in C.access)
|
||||||
|
newlap.spawn_files += (/datum/file/program/borg_control)
|
||||||
|
if(access_cent_specops in C.access)
|
||||||
|
newlap.spawn_files += (/datum/file/camnet_key/creed)
|
||||||
|
newlap.spawn_files += (/datum/file/program/arcade)
|
||||||
|
newlap.spawn_files += (/datum/file/camnet_key/entertainment)
|
||||||
|
newlap.update_spawn_files()
|
||||||
|
|
||||||
|
/obj/machinery/lapvend/proc/calc_reimburse(var/obj/item/device/laptop/L)
|
||||||
|
if(istype(L.stored_computer.cardslot,/obj/item/part/computer/cardslot))
|
||||||
|
cardreader = 1
|
||||||
|
if(istype(L.stored_computer.cardslot,/obj/item/part/computer/cardslot/dual))
|
||||||
|
cardreader = 2
|
||||||
|
if(istype(L.stored_computer.floppy,/obj/item/part/computer/storage/removable))
|
||||||
|
floppy = 1
|
||||||
|
if(istype(L.stored_computer.radio,/obj/item/part/computer/networking/radio))
|
||||||
|
radionet = 1
|
||||||
|
if(istype(L.stored_computer.camnet,/obj/item/part/computer/networking/cameras))
|
||||||
|
camera = 1
|
||||||
|
if(istype(L.stored_computer.net,/obj/item/part/computer/networking/area))
|
||||||
|
network = 1
|
||||||
|
if(istype(L.stored_computer.net,/obj/item/part/computer/networking/prox))
|
||||||
|
network = 2
|
||||||
|
if(istype(L.stored_computer.net,/obj/item/part/computer/networking/cable))
|
||||||
|
network = 3
|
||||||
|
if(istype(L.stored_computer.battery, /obj/item/weapon/cell/high))
|
||||||
|
power = 1
|
||||||
|
if(istype(L.stored_computer.battery, /obj/item/weapon/cell/super))
|
||||||
|
power = 2
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/lapvend/proc/reimburse(var/obj/item/weapon/card/I)
|
||||||
|
if (istype(I, /obj/item/weapon/card/id))
|
||||||
|
var/obj/item/weapon/card/id/C = I
|
||||||
|
visible_message("<span class='info'>[usr] swipes a card through [src].</span>")
|
||||||
|
if(vendor_account)
|
||||||
|
var/attempt_pin = input("Enter pin code", "Vendor transaction") as num
|
||||||
|
var/datum/money_account/D = attempt_account_access(C.associated_account_number, attempt_pin, 2)
|
||||||
|
if(D)
|
||||||
|
var/transaction_amount = total()
|
||||||
|
|
||||||
|
//transfer the money
|
||||||
|
D.money += transaction_amount
|
||||||
|
vendor_account.money -= transaction_amount
|
||||||
|
|
||||||
|
//Transaction logs
|
||||||
|
var/datum/transaction/T = new()
|
||||||
|
T.target_name = "[vendor_account.owner_name] (via [src.name])"
|
||||||
|
T.purpose = "Return purchase of Laptop"
|
||||||
|
if(transaction_amount > 0)
|
||||||
|
T.amount = "([transaction_amount])"
|
||||||
|
else
|
||||||
|
T.amount = "[transaction_amount]"
|
||||||
|
T.source_terminal = src.name
|
||||||
|
T.date = current_date_string
|
||||||
|
T.time = worldtime2text()
|
||||||
|
D.transaction_log.Add(T)
|
||||||
|
//
|
||||||
|
T = new()
|
||||||
|
T.target_name = D.owner_name
|
||||||
|
T.purpose = "Return purchase of Laptop"
|
||||||
|
T.amount = "[transaction_amount]"
|
||||||
|
T.source_terminal = src.name
|
||||||
|
T.date = current_date_string
|
||||||
|
T.time = worldtime2text()
|
||||||
|
vendor_account.transaction_log.Add(T)
|
||||||
|
|
||||||
|
del(relap)
|
||||||
|
|
||||||
|
vendmode = 0
|
||||||
|
cardreader = 0
|
||||||
|
floppy = 0
|
||||||
|
radionet = 0
|
||||||
|
camera = 0
|
||||||
|
network = 0
|
||||||
|
power = 0
|
||||||
|
|
||||||
|
else
|
||||||
|
usr << "\icon[src]<span class='warning'>Unable to access account. Check security settings and try again.</span>"
|
||||||
|
else
|
||||||
|
usr << "\icon[src]<span class='warning'>Unable to access vendor account. Please record the machine ID and call CentComm Support.</span>"
|
||||||
236
code/WorkInProgress/computer3/networking.dm
Normal file
@@ -0,0 +1,236 @@
|
|||||||
|
/obj/item/part/computer/networking
|
||||||
|
name = "Computer networking component"
|
||||||
|
|
||||||
|
/*
|
||||||
|
This is the public-facing proc used by NETUP.
|
||||||
|
It does additional checking before and after calling get_machines()
|
||||||
|
|
||||||
|
*/
|
||||||
|
proc/connect_to(var/typekey,var/atom/previous)
|
||||||
|
if(!computer || computer.stat)
|
||||||
|
return null
|
||||||
|
|
||||||
|
if(istype(previous,typekey) && verify_machine(previous))
|
||||||
|
return previous
|
||||||
|
|
||||||
|
var/result = get_machines(typekey)
|
||||||
|
|
||||||
|
if(!result)
|
||||||
|
return null
|
||||||
|
|
||||||
|
if(islist(result))
|
||||||
|
var/list/R = result
|
||||||
|
if(R.len == 0)
|
||||||
|
return null
|
||||||
|
else if(R.len == 1)
|
||||||
|
return R[1]
|
||||||
|
else
|
||||||
|
var/list/atomlist = computer.format_atomlist(R)
|
||||||
|
result = input("Select:","Multiple destination machines located",atomlist[1]) as null|anything in atomlist
|
||||||
|
return atomlist[result]
|
||||||
|
|
||||||
|
if(isobj(result))
|
||||||
|
return result
|
||||||
|
|
||||||
|
return null // ?
|
||||||
|
|
||||||
|
/*
|
||||||
|
This one is used to determine the candidate machines.
|
||||||
|
It may return an object, a list of objects, or null.
|
||||||
|
|
||||||
|
Overwite this on any networking component.
|
||||||
|
*/
|
||||||
|
proc/get_machines(var/typekey)
|
||||||
|
return list()
|
||||||
|
|
||||||
|
/*
|
||||||
|
This is used to verify that an existing machine is within the network.
|
||||||
|
Calling NETUP() with an object argument will run this check, and if
|
||||||
|
the object is still accessible, it will be used. Otherwise, another
|
||||||
|
search will be run.
|
||||||
|
|
||||||
|
Overwrite this on any networking component.
|
||||||
|
*/
|
||||||
|
proc/verify_machine(var/obj/previous)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
/*
|
||||||
|
Provides radio/signaler functionality, and also
|
||||||
|
network-connects to anything on the same z-level
|
||||||
|
which is tuned to the same frequency.
|
||||||
|
*/
|
||||||
|
/obj/item/part/computer/networking/radio
|
||||||
|
name = "Wireless networking component"
|
||||||
|
desc = "Radio module for computers"
|
||||||
|
|
||||||
|
var/datum/radio_frequency/radio_connection = null
|
||||||
|
var/frequency = 1459
|
||||||
|
var/filter = null
|
||||||
|
var/range = null
|
||||||
|
var/subspace = 0
|
||||||
|
|
||||||
|
init()
|
||||||
|
..()
|
||||||
|
spawn(5)
|
||||||
|
radio_connection = radio_controller.add_object(src, src.frequency, src.filter)
|
||||||
|
|
||||||
|
proc/set_frequency(new_frequency)
|
||||||
|
if(radio_controller)
|
||||||
|
radio_controller.remove_object(src, frequency)
|
||||||
|
frequency = new_frequency
|
||||||
|
radio_connection = radio_controller.add_object(src, frequency, filter)
|
||||||
|
else
|
||||||
|
frequency = new_frequency
|
||||||
|
spawn(rand(5,10))
|
||||||
|
set_frequency(new_frequency)
|
||||||
|
|
||||||
|
receive_signal(var/datum/signal/signal)
|
||||||
|
if(!signal || !computer || (computer.stat&~MAINT)) // closed laptops use maint, allow it
|
||||||
|
return
|
||||||
|
if(computer.program)
|
||||||
|
computer.program.receive_signal(signal)
|
||||||
|
|
||||||
|
proc/post_signal(var/datum/signal/signal)
|
||||||
|
if(!computer || (computer.stat&~MAINT) || !computer.program) return
|
||||||
|
if(!radio_connection) return
|
||||||
|
|
||||||
|
radio_connection.post_signal(src,signal,filter,range)
|
||||||
|
|
||||||
|
get_machines(var/typekey)
|
||||||
|
if(!radio_connection || !radio_connection.frequency)
|
||||||
|
return list()
|
||||||
|
var/list/result = list()
|
||||||
|
var/turf/T = get_turf(loc)
|
||||||
|
var/z_level = T.z
|
||||||
|
for(var/obj/O in radio_connection.devices)
|
||||||
|
if(istype(O,typekey))
|
||||||
|
T = get_turf(O)
|
||||||
|
if(istype(O) && (subspace || (O.z == z_level))) // radio does not work across z-levels
|
||||||
|
result |= O
|
||||||
|
return result
|
||||||
|
|
||||||
|
verify_machine(var/obj/previous)
|
||||||
|
if(!previous) return 0
|
||||||
|
if(subspace)
|
||||||
|
return ( radio_connection && (previous in radio_connection.devices) )
|
||||||
|
else
|
||||||
|
var/turf/T = get_turf(loc)
|
||||||
|
var/turf/O = get_turf(previous)
|
||||||
|
if(!T || !O)
|
||||||
|
return 0
|
||||||
|
return ( radio_connection && (previous in radio_connection.devices) && (T.z == O.z))
|
||||||
|
|
||||||
|
/*
|
||||||
|
Subspace networking: Communicates off-station. Allows centcom communications.
|
||||||
|
*/
|
||||||
|
/obj/item/part/computer/networking/radio/subspace
|
||||||
|
name = "subspace networking terminal"
|
||||||
|
desc = "Communicates long distances and through spatial anomalies."
|
||||||
|
subspace = 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
APC (/area) networking
|
||||||
|
*/
|
||||||
|
|
||||||
|
/obj/item/part/computer/networking/area
|
||||||
|
name = "short-wave networking terminal"
|
||||||
|
desc = "Connects to nearby computers through the area power network"
|
||||||
|
|
||||||
|
get_machines(var/typekey)
|
||||||
|
var/area/A = get_area(loc)
|
||||||
|
if(!istype(A) || A == /area)
|
||||||
|
return list()
|
||||||
|
if(typekey == null)
|
||||||
|
typekey = /obj/machinery
|
||||||
|
var/list/machines = list()
|
||||||
|
for(var/area/area in A.related)
|
||||||
|
for(var/obj/O in area.contents)
|
||||||
|
if(istype(O,typekey))
|
||||||
|
machines |= O
|
||||||
|
return machines
|
||||||
|
verify_machine(var/obj/previous)
|
||||||
|
if(!previous) return 0
|
||||||
|
var/area/A = get_area(src)
|
||||||
|
if( A && A == get_area(previous) )
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
/*
|
||||||
|
Proximity networking: Connects to machines or computers adjacent to this device
|
||||||
|
*/
|
||||||
|
/obj/item/part/computer/networking/prox
|
||||||
|
name = "proximity networking terminal"
|
||||||
|
desc = "Connects a computer to adjacent machines"
|
||||||
|
|
||||||
|
get_machines(var/typekey)
|
||||||
|
var/turf/T = get_turf(loc)
|
||||||
|
if(!istype(T))
|
||||||
|
return list()
|
||||||
|
if(typekey == null)
|
||||||
|
typekey = /obj/machinery
|
||||||
|
var/list/machines = list()
|
||||||
|
for(var/d in cardinal)
|
||||||
|
var/turf/T2 = get_step(T,d)
|
||||||
|
for(var/obj/O in T2)
|
||||||
|
if(istype(O,typekey))
|
||||||
|
machines += O
|
||||||
|
return machines
|
||||||
|
|
||||||
|
verify_machine(var/obj/previous)
|
||||||
|
if(!previous)
|
||||||
|
return 0
|
||||||
|
if(get_dist(get_turf(previous),get_turf(loc)) == 1)
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
/*
|
||||||
|
Cable networking: Not currently used
|
||||||
|
*/
|
||||||
|
|
||||||
|
/obj/item/part/computer/networking/cable
|
||||||
|
name = "cable networking terminal"
|
||||||
|
desc = "Connects to other machines on the same cable network."
|
||||||
|
|
||||||
|
get_machines(var/typekey)
|
||||||
|
// if(istype(computer,/obj/machinery/computer/laptop)) // laptops move, this could get breaky
|
||||||
|
// return list()
|
||||||
|
var/turf/T = get_turf(loc)
|
||||||
|
var/datum/powernet/P = null
|
||||||
|
for(var/obj/structure/cable/C in T)
|
||||||
|
if(C.d1 == 0)
|
||||||
|
P = C.powernet
|
||||||
|
break
|
||||||
|
if(!P)
|
||||||
|
return list()
|
||||||
|
if(!typekey)
|
||||||
|
typekey = /obj/machinery
|
||||||
|
else if(typekey == /datum/powernet)
|
||||||
|
return list(P)
|
||||||
|
var/list/candidates = list()
|
||||||
|
for(var/atom/A in P.nodes)
|
||||||
|
if(istype(A,typekey))
|
||||||
|
candidates += A
|
||||||
|
else if(istype(A,/obj/machinery/power/terminal))
|
||||||
|
var/obj/machinery/power/terminal/PT = A
|
||||||
|
if(istype(PT.master,typekey))
|
||||||
|
candidates += PT.master
|
||||||
|
return candidates
|
||||||
|
|
||||||
|
verify_machine(var/obj/previous)
|
||||||
|
if(!previous)
|
||||||
|
return 0
|
||||||
|
var/turf/T = get_turf(loc)
|
||||||
|
var/datum/powernet/P = null
|
||||||
|
for(var/obj/structure/cable/C in T)
|
||||||
|
if(C.d1 == 0)
|
||||||
|
P = C.powernet
|
||||||
|
break
|
||||||
|
if(istype(previous,/datum/powernet))
|
||||||
|
if(previous == P)
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
T = get_turf(previous.loc)
|
||||||
|
for(var/obj/structure/cable/C in T)
|
||||||
|
if(C.d1 == 0 && (C.powernet == P))
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
404
code/WorkInProgress/computer3/program.dm
Normal file
@@ -0,0 +1,404 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
Programs are a file that can be executed
|
||||||
|
*/
|
||||||
|
|
||||||
|
/datum/file/program
|
||||||
|
name = "Untitled"
|
||||||
|
extension = "prog"
|
||||||
|
image = 'icons/ntos/program.png'
|
||||||
|
var/desc = "An unidentifiable program."
|
||||||
|
|
||||||
|
var/image/overlay = null // Icon to be put on top of the computer frame.
|
||||||
|
|
||||||
|
var/active_state = "generic" // the icon_state that the computer goes to when the program is active
|
||||||
|
|
||||||
|
drm = 0 // prevents a program from being copied
|
||||||
|
var/refresh = 0 // if true, computer does screen updates during process().
|
||||||
|
var/error = 0 // set by background programs so an error pops up when used
|
||||||
|
|
||||||
|
var/human_controls = 0 // if true, non-human animals cannot interact with this program (monkeys, xenos, etc)
|
||||||
|
var/ai_allowed = 1 // if true, silicon mobs (AI/cyborg) are allowed to use this program.
|
||||||
|
|
||||||
|
var/datum/browser/popup = null
|
||||||
|
|
||||||
|
// ID access: Note that computer3 does not normally check your ID.
|
||||||
|
// By default this is only really used for inserted cards.
|
||||||
|
var/list/req_access = list() // requires all of these UNLESS below succeeds
|
||||||
|
var/list/req_one_access = list() // requires one of these
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/program/New()
|
||||||
|
..()
|
||||||
|
if(!active_state)
|
||||||
|
active_state = "generic"
|
||||||
|
overlay = image('icons/obj/computer3.dmi',icon_state = active_state)
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/program/proc/decode(text)
|
||||||
|
//adds line breaks
|
||||||
|
text = replacetext(text, "\n","<BR>")
|
||||||
|
return text
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/program/execute(var/datum/file/source)
|
||||||
|
if(computer && !computer.stat)
|
||||||
|
computer.program = src
|
||||||
|
computer.req_access = req_access
|
||||||
|
computer.req_one_access = req_one_access
|
||||||
|
update_icon()
|
||||||
|
computer.update_icon()
|
||||||
|
if(usr)
|
||||||
|
usr << browse(null, "window=\ref[computer]")
|
||||||
|
computer.attack_hand(usr)
|
||||||
|
|
||||||
|
..()
|
||||||
|
|
||||||
|
/*
|
||||||
|
Standard Topic() for links
|
||||||
|
*/
|
||||||
|
|
||||||
|
/datum/file/program/Topic(href, href_list)
|
||||||
|
return
|
||||||
|
|
||||||
|
/*
|
||||||
|
The computer object will transfer all empty-hand calls to the program (this includes AIs, Cyborgs, and Monkies)
|
||||||
|
*/
|
||||||
|
/datum/file/program/proc/interact()
|
||||||
|
return
|
||||||
|
|
||||||
|
/*
|
||||||
|
Standard receive_signal()
|
||||||
|
*/
|
||||||
|
|
||||||
|
/datum/file/program/proc/receive_signal(var/datum/signal/signal)
|
||||||
|
return
|
||||||
|
/*
|
||||||
|
The computer object will transfer all attackby() calls to the program
|
||||||
|
If the item is a valid interactable object, return 1. Else, return 0.
|
||||||
|
This helps identify what to use to actually hit the computer with, and
|
||||||
|
what can be used to interact with it.
|
||||||
|
|
||||||
|
Screwdrivers will, by default, never call program/attackby(). That's used
|
||||||
|
for deconstruction instead.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/program/proc/attackby(O as obj, user as mob)
|
||||||
|
return
|
||||||
|
|
||||||
|
/*
|
||||||
|
Try not to overwrite this proc, I'd prefer we stayed
|
||||||
|
with interact() as the main proc
|
||||||
|
*/
|
||||||
|
/datum/file/program/proc/attack_hand(mob/user as mob)
|
||||||
|
usr = user
|
||||||
|
interact()
|
||||||
|
|
||||||
|
/*
|
||||||
|
Called when the computer is rebooted or the program exits/restarts.
|
||||||
|
Be sure not to save any work. Do NOT start the program again.
|
||||||
|
If it is the os, the computer will run it again automatically.
|
||||||
|
|
||||||
|
Also, we are deleting the browser window on the chance that this is happening
|
||||||
|
when the computer is damaged or disassembled, causing us to lose our computer.
|
||||||
|
The popup window's title is a reference to the computer, making it unique, so
|
||||||
|
it could introduce bugs in that case.
|
||||||
|
*/
|
||||||
|
/datum/file/program/proc/Reset()
|
||||||
|
error = 0
|
||||||
|
update_icon()
|
||||||
|
if(popup)
|
||||||
|
popup.close()
|
||||||
|
del popup
|
||||||
|
return
|
||||||
|
|
||||||
|
/*
|
||||||
|
The computer object will transfer process() calls to the program.
|
||||||
|
*/
|
||||||
|
/datum/file/program/proc/process()
|
||||||
|
if(refresh && computer && !computer.stat)
|
||||||
|
computer.updateDialog()
|
||||||
|
update_icon()
|
||||||
|
|
||||||
|
/datum/file/program/proc/update_icon()
|
||||||
|
return
|
||||||
|
|
||||||
|
/datum/file/program/proc/check_access(obj/item/I)
|
||||||
|
if( (!istype(req_access) || !req_access.len) && (!istype(req_one_access) || !req_one_access.len) ) //no requirements
|
||||||
|
return 1
|
||||||
|
|
||||||
|
if(!I)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
var/list/iAccess = I.GetAccess()
|
||||||
|
if(!iAccess || !iAccess.len)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
var/list/temp = req_one_access & iAccess
|
||||||
|
if(temp.len) // a required access in item access list
|
||||||
|
return 1
|
||||||
|
temp = req_access - iAccess
|
||||||
|
if(temp.len) // a required access not in item access list
|
||||||
|
return 0
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Because this does sanity checks I have added the code to make a popup here.
|
||||||
|
It also does sanity checks there that should prevent some edge case madness.
|
||||||
|
*/
|
||||||
|
/datum/file/program/proc/interactable(var/mob/user = usr)
|
||||||
|
if(computer && computer.interactable(user))
|
||||||
|
if(!popup)
|
||||||
|
popup = new(user, "\ref[computer]", name, nref=src)
|
||||||
|
popup.set_title_image(usr.browse_rsc_icon(overlay.icon, overlay.icon_state))
|
||||||
|
popup.set_title_buttons(topic_link(src,"quit","<img src=\ref['icons/ntos/tb_close.png']>"))
|
||||||
|
if(popup.user != user)
|
||||||
|
popup.user = user
|
||||||
|
popup.set_title_image(usr.browse_rsc_icon(overlay.icon, overlay.icon_state))
|
||||||
|
popup.set_title(name)
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/program/proc/fake_link(var/text)
|
||||||
|
return "<span class='linkOff'>[text]</span>"
|
||||||
|
|
||||||
|
/*
|
||||||
|
Meant for text (not icons) -
|
||||||
|
lists all installed drives and their files
|
||||||
|
|
||||||
|
I am NOT adding a computer sanity check here,
|
||||||
|
because why the flying fuck would you get to this
|
||||||
|
proc before having run it at least once?
|
||||||
|
If you cause runtimes with this function
|
||||||
|
may the shame of all ages come upon you.
|
||||||
|
*/
|
||||||
|
/datum/file/program/proc/list_all_files_by_drive(var/typekey,var/linkop = "runfile")
|
||||||
|
var/dat = ""
|
||||||
|
if(!typekey) typekey = /datum/file
|
||||||
|
if(computer.hdd)
|
||||||
|
dat += "<h3>[computer.hdd]</h3>"
|
||||||
|
for(var/datum/file/F in computer.hdd.files)
|
||||||
|
if(istype(F,typekey))
|
||||||
|
dat += topic_link(src,"[linkop]=\ref[F]",F.name) + "<br>"
|
||||||
|
if(computer.hdd.files.len == 0)
|
||||||
|
dat += "<i>No files</i><br>"
|
||||||
|
dat += "<br>"
|
||||||
|
|
||||||
|
if(computer.floppy)
|
||||||
|
if(!computer.floppy.inserted)
|
||||||
|
dat += "<h3>[computer.floppy] - <span class='linkOff'>Eject</span></h3><br><br>"
|
||||||
|
else
|
||||||
|
dat += "<h3>[computer.floppy] - [topic_link(src,"eject_disk","Eject")]</h3>"
|
||||||
|
for(var/datum/file/F in computer.floppy.inserted.files)
|
||||||
|
dat += topic_link(src,"[linkop]=\ref[F]",F.name) + "<br>"
|
||||||
|
if(computer.floppy.inserted.files.len == 0)
|
||||||
|
dat += "<i>No files</i><br>"
|
||||||
|
dat += "<br>"
|
||||||
|
|
||||||
|
if(computer.cardslot && istype(computer.cardslot.reader,/obj/item/weapon/card/data))
|
||||||
|
dat += "<h3>[computer.cardslot.reader] - [topic_link(src,"eject_card=reader","Eject")]</h3>"
|
||||||
|
var/obj/item/weapon/card/data/D = computer.cardslot.reader
|
||||||
|
for(var/datum/file/F in D.files)
|
||||||
|
dat += topic_link(src,"[linkop]=\ref[F]",F.name) + "<br>"
|
||||||
|
if(D.files.len == 0)
|
||||||
|
dat += "<i>No files</i><br>"
|
||||||
|
return dat
|
||||||
|
|
||||||
|
// You don't NEED to use this version of topic() for this, you can do it yourself if you prefer
|
||||||
|
// If you do, do the interactable() check first, please, I don't want to repeat it here. It's not hard.
|
||||||
|
/datum/file/program/Topic(var/href,var/list/href_list)
|
||||||
|
if(!computer)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
//
|
||||||
|
// usage: eject_disk
|
||||||
|
// only functions if there is a removable drive
|
||||||
|
//
|
||||||
|
if("eject_disk" in href_list)
|
||||||
|
if(computer.floppy)
|
||||||
|
computer.floppy.eject_disk()
|
||||||
|
return 1
|
||||||
|
//
|
||||||
|
// usage: eject_card | eject_card=reader | eject_card=writer
|
||||||
|
// only functions if there is a cardslot
|
||||||
|
//
|
||||||
|
if("eject_card" in href_list)
|
||||||
|
if(computer.cardslot)
|
||||||
|
if(computer.cardslot.dualslot && href_list["eject_card"] == "writer")
|
||||||
|
computer.cardslot.remove(computer.cardslot.writer)
|
||||||
|
else
|
||||||
|
computer.cardslot.remove(computer.cardslot.reader)
|
||||||
|
return 1
|
||||||
|
//
|
||||||
|
// usage: runfile=\ref[file]
|
||||||
|
// executes the file
|
||||||
|
//
|
||||||
|
if("runfile" in href_list)
|
||||||
|
var/datum/file/F = locate(href_list["runfile"])
|
||||||
|
if(F && F.computer == computer)
|
||||||
|
F.execute(src)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
if("close" in href_list)
|
||||||
|
usr.unset_machine()
|
||||||
|
popup.close()
|
||||||
|
return 1
|
||||||
|
//
|
||||||
|
// usage: quit
|
||||||
|
// unloads the program, returning control to the OS
|
||||||
|
//
|
||||||
|
if("quit" in href_list)
|
||||||
|
computer.program = null
|
||||||
|
usr << browse(null,"window=\ref[computer]") // ntos will need to resize the window
|
||||||
|
computer.update_icon()
|
||||||
|
computer.updateDialog()
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
/datum/file/program/RD
|
||||||
|
name = "R&D Manager"
|
||||||
|
image = 'icons/ntos/research.png'
|
||||||
|
desc = "A software suit for generic research and development machinery interaction. Comes pre-packaged with extensive cryptographic databanks for secure connections with external devices."
|
||||||
|
active_state = "rdcomp"
|
||||||
|
volume = 11000
|
||||||
|
|
||||||
|
/datum/file/program/RDserv
|
||||||
|
name = "R&D Server"
|
||||||
|
image = 'icons/ntos/server.png'
|
||||||
|
active_state = "rdcomp"
|
||||||
|
volume = 9000
|
||||||
|
|
||||||
|
/datum/file/program/SuitSensors
|
||||||
|
name = "Crew Monitoring"
|
||||||
|
image = 'icons/ntos/monitoring.png'
|
||||||
|
active_state = "crew"
|
||||||
|
volume = 3400
|
||||||
|
|
||||||
|
/datum/file/program/Genetics
|
||||||
|
name = "Genetics Suite"
|
||||||
|
image = 'icons/ntos/genetics.png'
|
||||||
|
desc = "A sophisticated software suite containing read-only genetics hardware specifications and a highly compressed genome databank."
|
||||||
|
active_state = "dna"
|
||||||
|
volume = 8000
|
||||||
|
|
||||||
|
/datum/file/program/Cloning
|
||||||
|
name = "Cloning Platform"
|
||||||
|
image = 'icons/ntos/cloning.png'
|
||||||
|
desc = "A software platform for accessing external cloning apparatus."
|
||||||
|
active_state = "dna"
|
||||||
|
volume = 7000
|
||||||
|
|
||||||
|
/datum/file/program/TCOMmonitor
|
||||||
|
name = "TComm Monitor"
|
||||||
|
image = 'icons/ntos/tcomms.png'
|
||||||
|
active_state = "comm_monitor"
|
||||||
|
volume = 5500
|
||||||
|
|
||||||
|
/datum/file/program/TCOMlogs
|
||||||
|
name = "TComm Log View"
|
||||||
|
image = 'icons/ntos/tcomms.png'
|
||||||
|
active_state = "comm_logs"
|
||||||
|
volume = 5230
|
||||||
|
|
||||||
|
/datum/file/program/TCOMtraffic
|
||||||
|
name = "TComm Traffic"
|
||||||
|
image = 'icons/ntos/tcomms.png'
|
||||||
|
active_state = "generic"
|
||||||
|
volume = 8080
|
||||||
|
|
||||||
|
/datum/file/program/securitycam
|
||||||
|
name = "Sec-Cam Viewport"
|
||||||
|
image = 'icons/ntos/camera.png'
|
||||||
|
drm = 1
|
||||||
|
active_state = "cameras"
|
||||||
|
volume = 2190
|
||||||
|
|
||||||
|
/datum/file/program/securityrecords
|
||||||
|
name = "Security Records"
|
||||||
|
image = 'icons/ntos/records.png'
|
||||||
|
drm = 1
|
||||||
|
active_state = "security"
|
||||||
|
volume = 2520
|
||||||
|
|
||||||
|
/datum/file/program/medicalrecords
|
||||||
|
name = "Medical Records"
|
||||||
|
image = 'icons/ntos/medical.png'
|
||||||
|
drm = 1
|
||||||
|
active_state = "medcomp"
|
||||||
|
volume = 5000
|
||||||
|
|
||||||
|
/datum/file/program/SMSmonitor
|
||||||
|
name = "Messaging Monitor"
|
||||||
|
image = 'icons/ntos/pda.png'
|
||||||
|
active_state = "comm_monitor"
|
||||||
|
volume = 3070
|
||||||
|
|
||||||
|
/datum/file/program/OperationMonitor
|
||||||
|
name = "OR Monitor"
|
||||||
|
image = 'icons/ntos/operating.png'
|
||||||
|
active_state = "operating"
|
||||||
|
volume = 4750
|
||||||
|
|
||||||
|
/datum/file/program/PodLaunch
|
||||||
|
name = "Pod Launch"
|
||||||
|
active_state = "computer_generic"
|
||||||
|
volume = 520
|
||||||
|
|
||||||
|
/datum/file/program/powermon
|
||||||
|
name = "Power Grid"
|
||||||
|
image = 'icons/ntos/power.png'
|
||||||
|
active_state = "power"
|
||||||
|
volume = 7200
|
||||||
|
|
||||||
|
/datum/file/program/prisoner
|
||||||
|
name = "Prisoner Control"
|
||||||
|
image = 'icons/ntos/prison.png'
|
||||||
|
drm = 1
|
||||||
|
active_state = "power"
|
||||||
|
volume = 5000
|
||||||
|
|
||||||
|
/datum/file/program/borg_control
|
||||||
|
name = "Cyborg Maint"
|
||||||
|
image = 'icons/ntos/borgcontrol.png'
|
||||||
|
active_state = "robot"
|
||||||
|
volume = 9050
|
||||||
|
|
||||||
|
/datum/file/program/AIupload
|
||||||
|
name = "AI Upload"
|
||||||
|
image = 'icons/ntos/aiupload.png'
|
||||||
|
active_state = "command"
|
||||||
|
volume = 5000
|
||||||
|
|
||||||
|
/datum/file/program/Cyborgupload
|
||||||
|
name = "Cyborg Upload"
|
||||||
|
image = 'icons/ntos/borgupload.png'
|
||||||
|
active_state = "command"
|
||||||
|
volume = 5000
|
||||||
|
|
||||||
|
/datum/file/program/Exosuit
|
||||||
|
name = "Exosuit Monitor"
|
||||||
|
image = 'icons/ntos/exocontrol.png'
|
||||||
|
active_state = "mecha"
|
||||||
|
volume = 7000
|
||||||
|
|
||||||
|
/datum/file/program/EmergencyShuttle
|
||||||
|
name = "Shuttle Console"
|
||||||
|
active_state = "shuttle"
|
||||||
|
volume = 10000
|
||||||
|
|
||||||
|
/datum/file/program/Stationalert
|
||||||
|
name = "Alert Monitor"
|
||||||
|
image = 'icons/ntos/alerts.png'
|
||||||
|
active_state = "computer_generic"
|
||||||
|
volume = 10150
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
44
code/WorkInProgress/computer3/program_disks.dm
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
|
||||||
|
|
||||||
|
/obj/item/weapon/disk/file/arcade
|
||||||
|
name = "Arcade game grab pack"
|
||||||
|
desc = "A program install disk."
|
||||||
|
icon = 'icons/obj/stock_parts.dmi'
|
||||||
|
icon_state = "datadisk_arcade"
|
||||||
|
spawn_files = list(/datum/file/program/arcade,/datum/file/program/arcade,/datum/file/program/arcade,/datum/file/program/arcade)
|
||||||
|
|
||||||
|
/*/obj/item/weapon/disk/file/aifixer
|
||||||
|
name = "AI System Integrity Restorer"
|
||||||
|
desc = "A program install disk."
|
||||||
|
icon = 'icons/obj/stock_parts.dmi'
|
||||||
|
icon_state = "datadisk_arcade"
|
||||||
|
spawn_files = list(/datum/file/program/aifixer)*/
|
||||||
|
|
||||||
|
/obj/item/weapon/disk/file/atmos_alert
|
||||||
|
name = "Atmospheric Alert Notifier"
|
||||||
|
desc = "A program install disk."
|
||||||
|
icon = 'icons/obj/stock_parts.dmi'
|
||||||
|
icon_state = "datadisk_arcade"
|
||||||
|
spawn_files = list(/datum/file/program/atmos_alert)
|
||||||
|
|
||||||
|
/obj/item/weapon/disk/file/cameras
|
||||||
|
name = "Camera Viewer"
|
||||||
|
desc = "A program install disk."
|
||||||
|
icon = 'icons/obj/stock_parts.dmi'
|
||||||
|
icon_state = "datadisk_arcade"
|
||||||
|
spawn_files = list(/datum/file/program/security)
|
||||||
|
|
||||||
|
/obj/item/weapon/disk/file/card
|
||||||
|
name = "ID Card Modifier"
|
||||||
|
desc = "A program install disk."
|
||||||
|
icon = 'icons/obj/stock_parts.dmi'
|
||||||
|
icon_state = "datadisk_arcade"
|
||||||
|
spawn_files = list(/datum/file/program/card_comp)
|
||||||
|
/*
|
||||||
|
/obj/item/weapon/disk/file/genetics
|
||||||
|
name = "Genetics & Cloning"
|
||||||
|
desc = "A program install disk."
|
||||||
|
icon = 'icons/obj/stock_parts.dmi'
|
||||||
|
icon_state = "datadisk_arcade"
|
||||||
|
spawn_files = list(/datum/file/program/cloning,/datum/file/program/dnascanner)
|
||||||
|
*/
|
||||||
32
code/WorkInProgress/computer3/server.dm
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
Todo:
|
||||||
|
I can probably get away with a global list on servers that contains database sort of stuff
|
||||||
|
(replacing the datacore probably)
|
||||||
|
with the justification that they loadbalance and duplicate data across each other. As long as
|
||||||
|
one server-type computer exists, the station will still have access to datacore-type info.
|
||||||
|
|
||||||
|
I can doubtless use this for station alerts as well, which is good, because I was sort of
|
||||||
|
wondering how the hell I was going to port that.
|
||||||
|
|
||||||
|
Also todo: Server computers should maybe generate heat the way the R&D server does?
|
||||||
|
At least the rack computer probably should.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/obj/machinery/computer3/server
|
||||||
|
name = "server"
|
||||||
|
icon = 'icons/obj/computer3.dmi'
|
||||||
|
icon_state = "serverframe"
|
||||||
|
show_keyboard = 0
|
||||||
|
|
||||||
|
/obj/machinery/computer3/server/rack
|
||||||
|
name = "server rack"
|
||||||
|
icon_state = "rackframe"
|
||||||
|
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio/subspace)
|
||||||
|
|
||||||
|
update_icon()
|
||||||
|
//overlays.Cut()
|
||||||
|
return
|
||||||
|
|
||||||
|
attack_hand() // Racks have no screen, only AI can use them
|
||||||
|
return
|
||||||
184
code/WorkInProgress/computer3/storage.dm
Normal file
@@ -0,0 +1,184 @@
|
|||||||
|
/*
|
||||||
|
Computer devices that can store programs, files, etc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/obj/item/part/computer/storage
|
||||||
|
name = "Storage Device"
|
||||||
|
desc = "A device used for storing and retrieving digital information."
|
||||||
|
|
||||||
|
// storage capacity, kb
|
||||||
|
var/volume = 0
|
||||||
|
var/max_volume = 64 // should be enough for anyone
|
||||||
|
|
||||||
|
var/driveletter = null // drive letter according to the computer
|
||||||
|
|
||||||
|
var/list/files = list() // a list of files in the memory (ALL files)
|
||||||
|
var/removeable = 0 // determinse if the storage device is a removable hard drive (ie floppy)
|
||||||
|
|
||||||
|
|
||||||
|
var/writeprotect = 0 // determines if the drive forbids writing.
|
||||||
|
// note that write-protect is hardware and does not respect emagging.
|
||||||
|
|
||||||
|
var/list/spawnfiles = list()// For mappers, special drives, and data disks
|
||||||
|
|
||||||
|
New()
|
||||||
|
..()
|
||||||
|
if(islist(spawnfiles))
|
||||||
|
if(removeable && spawnfiles.len)
|
||||||
|
var/obj/item/part/computer/storage/removable/R = src
|
||||||
|
R.inserted = new(src)
|
||||||
|
if(writeprotect)
|
||||||
|
R.inserted.writeprotect = 1
|
||||||
|
for(var/typekey in spawnfiles)
|
||||||
|
addfile(new typekey(),1)
|
||||||
|
|
||||||
|
// Add a file to the hard drive, returns 0 if failed
|
||||||
|
// forced is used when spawning files on a write-protect drive
|
||||||
|
proc/addfile(var/datum/file/F,var/forced = 0)
|
||||||
|
if(!F || crit_fail || (F in files))
|
||||||
|
return 1
|
||||||
|
if(writeprotect && !forced)
|
||||||
|
return 0
|
||||||
|
if(volume + F.volume > max_volume)
|
||||||
|
if(!forced)
|
||||||
|
return 0
|
||||||
|
max_volume = volume + F.volume
|
||||||
|
|
||||||
|
files.Add(F)
|
||||||
|
volume += F.volume
|
||||||
|
F.computer = computer
|
||||||
|
F.device = src
|
||||||
|
return 1
|
||||||
|
proc/removefile(var/datum/file/F,var/forced = 0)
|
||||||
|
if(!F || !(F in files))
|
||||||
|
return 1
|
||||||
|
if(writeprotect && !forced)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
files -= F
|
||||||
|
volume -= F.volume
|
||||||
|
if(F.device == src)
|
||||||
|
F.device = null
|
||||||
|
F.computer = null
|
||||||
|
return 1
|
||||||
|
|
||||||
|
init(var/obj/machinery/computer/target)
|
||||||
|
computer = target
|
||||||
|
for(var/datum/file/F in files)
|
||||||
|
F.computer = computer
|
||||||
|
|
||||||
|
/*
|
||||||
|
Standard hard drives for computers. Used in computer construction
|
||||||
|
*/
|
||||||
|
|
||||||
|
/obj/item/part/computer/storage/hdd
|
||||||
|
name = "Hard Drive"
|
||||||
|
max_volume = 25000
|
||||||
|
icon_state = "hdd1"
|
||||||
|
|
||||||
|
|
||||||
|
/obj/item/part/computer/storage/hdd/big
|
||||||
|
name = "Big Hard Drive"
|
||||||
|
max_volume = 50000
|
||||||
|
icon_state = "hdd2"
|
||||||
|
|
||||||
|
/obj/item/part/computer/storage/hdd/gigantic
|
||||||
|
name = "Gigantic Hard Drive"
|
||||||
|
max_volume = 75000
|
||||||
|
icon_state = "hdd3"
|
||||||
|
|
||||||
|
/*
|
||||||
|
Removeable hard drives for portable storage
|
||||||
|
*/
|
||||||
|
|
||||||
|
/obj/item/part/computer/storage/removable
|
||||||
|
name = "Disk Drive"
|
||||||
|
max_volume = 3000
|
||||||
|
removeable = 1
|
||||||
|
|
||||||
|
attackby_types = list(/obj/item/weapon/disk/file, /obj/item/weapon/pen)
|
||||||
|
var/obj/item/weapon/disk/file/inserted = null
|
||||||
|
|
||||||
|
proc/eject_disk(var/forced = 0)
|
||||||
|
if(!forced)
|
||||||
|
return
|
||||||
|
files = list()
|
||||||
|
inserted.loc = computer.loc
|
||||||
|
if(usr)
|
||||||
|
if(!usr.get_active_hand())
|
||||||
|
usr.put_in_active_hand(inserted)
|
||||||
|
else if(forced && !usr.get_inactive_hand())
|
||||||
|
usr.put_in_inactive_hand(inserted)
|
||||||
|
for(var/datum/file/F in inserted.files)
|
||||||
|
F.computer = null
|
||||||
|
inserted = null
|
||||||
|
|
||||||
|
|
||||||
|
attackby(obj/O as obj, mob/user as mob)
|
||||||
|
if(inserted && istype(O,/obj/item/weapon/pen))
|
||||||
|
usr << "You use [O] to carefully pry [inserted] out of [src]."
|
||||||
|
eject_disk(forced = 1)
|
||||||
|
return
|
||||||
|
|
||||||
|
if(istype(O,/obj/item/weapon/disk/file))
|
||||||
|
if(inserted)
|
||||||
|
usr << "There's already a disk in [src]!"
|
||||||
|
return
|
||||||
|
|
||||||
|
usr << "You insert [O] into [src]."
|
||||||
|
usr.drop_item()
|
||||||
|
O.loc = src
|
||||||
|
inserted = O
|
||||||
|
writeprotect = inserted.writeprotect
|
||||||
|
|
||||||
|
files = inserted.files
|
||||||
|
for(var/datum/file/F in inserted.files)
|
||||||
|
F.computer = computer
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
..()
|
||||||
|
|
||||||
|
addfile(var/datum/file/F)
|
||||||
|
if(!F || !inserted)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
if(F in inserted.files)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
if(inserted.volume + F.volume > inserted.max_volume)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
inserted.files.Add(F)
|
||||||
|
F.computer = computer
|
||||||
|
F.device = inserted
|
||||||
|
return 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
Removable hard drive presents...
|
||||||
|
removeable disk!
|
||||||
|
*/
|
||||||
|
|
||||||
|
/obj/item/weapon/disk/file
|
||||||
|
//parent_type = /obj/item/part/computer/storage // todon't: do this
|
||||||
|
name = "Data Disk"
|
||||||
|
desc = "A device that can be inserted and removed into computers easily as a form of portable data storage. This one stores 1 Megabyte"
|
||||||
|
var/list/files
|
||||||
|
var/list/spawn_files = list()
|
||||||
|
var/writeprotect = 0
|
||||||
|
var/volume = 0
|
||||||
|
var/max_volume = 1028
|
||||||
|
|
||||||
|
|
||||||
|
New()
|
||||||
|
..()
|
||||||
|
icon_state = "datadisk[rand(0,6)]"
|
||||||
|
src.pixel_x = rand(-5, 5)
|
||||||
|
src.pixel_y = rand(-5, 5)
|
||||||
|
files = list()
|
||||||
|
if(istype(spawn_files))
|
||||||
|
for(var/typekey in spawn_files)
|
||||||
|
var/datum/file/F = new typekey()
|
||||||
|
F.device = src
|
||||||
|
files += F
|
||||||
|
volume += F.volume
|
||||||
86
code/WorkInProgress/computer3/test_machines.dm
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
|
||||||
|
/obj/machinery/computer3/testing
|
||||||
|
spawn_files = list(/datum/file/program/aifixer,/datum/file/program/arcade,/datum/file/program/atmos_alert,
|
||||||
|
/datum/file/program/security,/datum/file/program/card_comp,
|
||||||
|
/datum/file/program/borg_control,/datum/file/program/holodeck, /datum/file/program/communications,
|
||||||
|
/datum/file/program/crew,/datum/file/program/op_monitor, /datum/file/program/powermon,
|
||||||
|
|
||||||
|
/datum/file/camnet_key,/datum/file/camnet_key/mining,/datum/file/camnet_key/entertainment,/datum/file/camnet_key/research,
|
||||||
|
/datum/file/camnet_key/bombrange,/datum/file/camnet_key/xeno,/datum/file/camnet_key/singulo,/datum/file/camnet_key/prison)
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd/big,/obj/item/part/computer/storage/removable,/obj/item/part/computer/ai_holder,
|
||||||
|
/obj/item/part/computer/networking/radio/subspace,/obj/item/part/computer/networking/cameras,
|
||||||
|
/obj/item/part/computer/cardslot/dual,/obj/item/part/computer/networking/area)
|
||||||
|
New(var/L,var/built=0)
|
||||||
|
if(!built && !battery)
|
||||||
|
battery = new /obj/item/weapon/cell(src)
|
||||||
|
..(L,built)
|
||||||
|
|
||||||
|
/obj/machinery/computer3/laptop/testing
|
||||||
|
spawn_files = list(/datum/file/program/aifixer,/datum/file/program/arcade,/datum/file/program/atmos_alert,
|
||||||
|
/datum/file/program/security,/datum/file/program/card_comp,
|
||||||
|
/datum/file/program/borg_control,/datum/file/program/holodeck, /datum/file/program/communications,
|
||||||
|
/datum/file/program/crew,/datum/file/program/op_monitor, /datum/file/program/powermon,
|
||||||
|
|
||||||
|
/datum/file/camnet_key,/datum/file/camnet_key/mining,/datum/file/camnet_key/entertainment,/datum/file/camnet_key/research,
|
||||||
|
/datum/file/camnet_key/bombrange,/datum/file/camnet_key/xeno,/datum/file/camnet_key/singulo,/datum/file/camnet_key/prison)
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd/big,/obj/item/part/computer/storage/removable,/obj/item/part/computer/ai_holder,
|
||||||
|
/obj/item/part/computer/networking/radio/subspace,/obj/item/part/computer/networking/cameras,
|
||||||
|
/obj/item/part/computer/cardslot/dual,/obj/item/part/computer/networking/area)
|
||||||
|
New(var/L,var/built=0)
|
||||||
|
if(!built && !battery)
|
||||||
|
battery = new /obj/item/weapon/cell/super(src)
|
||||||
|
..(L,built)
|
||||||
|
|
||||||
|
/obj/machinery/computer3/wall_comp/testing
|
||||||
|
spawn_files = list(/datum/file/program/aifixer,/datum/file/program/arcade,/datum/file/program/atmos_alert,
|
||||||
|
/datum/file/program/security,/datum/file/program/card_comp,
|
||||||
|
/datum/file/program/borg_control,/datum/file/program/holodeck, /datum/file/program/communications,
|
||||||
|
/datum/file/program/crew,/datum/file/program/op_monitor, /datum/file/program/powermon,
|
||||||
|
|
||||||
|
/datum/file/camnet_key,/datum/file/camnet_key/mining,/datum/file/camnet_key/entertainment,/datum/file/camnet_key/research,
|
||||||
|
/datum/file/camnet_key/bombrange,/datum/file/camnet_key/xeno,/datum/file/camnet_key/singulo,/datum/file/camnet_key/prison)
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd/big,/obj/item/part/computer/storage/removable,/obj/item/part/computer/ai_holder,
|
||||||
|
/obj/item/part/computer/networking/radio/subspace,/obj/item/part/computer/networking/cameras,
|
||||||
|
/obj/item/part/computer/cardslot/dual,/obj/item/part/computer/networking/area)
|
||||||
|
New(var/L,var/built=0)
|
||||||
|
if(!built && !battery)
|
||||||
|
battery = new /obj/item/weapon/cell(src)
|
||||||
|
..(L,built)
|
||||||
|
|
||||||
|
/obj/machinery/computer3/server/testing
|
||||||
|
spawn_files = list(/datum/file/program/aifixer,/datum/file/program/arcade,/datum/file/program/atmos_alert,
|
||||||
|
/datum/file/program/security,/datum/file/program/card_comp,
|
||||||
|
/datum/file/program/borg_control,/datum/file/program/holodeck, /datum/file/program/communications,
|
||||||
|
/datum/file/program/crew,/datum/file/program/op_monitor, /datum/file/program/powermon,
|
||||||
|
|
||||||
|
/datum/file/camnet_key,/datum/file/camnet_key/mining,/datum/file/camnet_key/entertainment,/datum/file/camnet_key/research,
|
||||||
|
/datum/file/camnet_key/bombrange,/datum/file/camnet_key/xeno,/datum/file/camnet_key/singulo,/datum/file/camnet_key/prison)
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd/big,/obj/item/part/computer/storage/removable,/obj/item/part/computer/ai_holder,
|
||||||
|
/obj/item/part/computer/networking/radio/subspace,/obj/item/part/computer/networking/cameras,
|
||||||
|
/obj/item/part/computer/cardslot/dual,/obj/item/part/computer/networking/area)
|
||||||
|
New(var/L,var/built=0)
|
||||||
|
if(!built && !battery)
|
||||||
|
battery = new /obj/item/weapon/cell(src)
|
||||||
|
..(L,built)
|
||||||
|
|
||||||
|
/obj/machinery/computer3/server/rack/testing
|
||||||
|
spawn_files = list(/datum/file/program/aifixer,/datum/file/program/arcade,/datum/file/program/atmos_alert,
|
||||||
|
/datum/file/program/security,/datum/file/program/card_comp,
|
||||||
|
/datum/file/program/borg_control,/datum/file/program/holodeck, /datum/file/program/communications,
|
||||||
|
/datum/file/program/crew,/datum/file/program/op_monitor, /datum/file/program/powermon,
|
||||||
|
|
||||||
|
/datum/file/camnet_key,/datum/file/camnet_key/mining,/datum/file/camnet_key/entertainment,/datum/file/camnet_key/research,
|
||||||
|
/datum/file/camnet_key/bombrange,/datum/file/camnet_key/xeno,/datum/file/camnet_key/singulo,/datum/file/camnet_key/prison)
|
||||||
|
spawn_parts = list(/obj/item/part/computer/storage/hdd/big,/obj/item/part/computer/storage/removable,/obj/item/part/computer/ai_holder,
|
||||||
|
/obj/item/part/computer/networking/radio/subspace,/obj/item/part/computer/networking/cameras,
|
||||||
|
/obj/item/part/computer/cardslot/dual,/obj/item/part/computer/networking/area)
|
||||||
|
New(var/L,var/built=0)
|
||||||
|
if(!built && !battery)
|
||||||
|
battery = new /obj/item/weapon/cell(src)
|
||||||
|
..(L,built)
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/box/testing_disks
|
||||||
|
New()
|
||||||
|
..()
|
||||||
|
for(var/typekey in typesof(/obj/item/weapon/disk/file) - /obj/item/weapon/disk/file)
|
||||||
|
new typekey(src)
|
||||||
29
code/WorkInProgress/computer3/upload/lawfile.dm
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
Computer3 law changes:
|
||||||
|
|
||||||
|
* Laws are a file type
|
||||||
|
* Connecting to the AI requires a network connection
|
||||||
|
* Connecting to a borg requires a radio or network.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/datum/file/ai_law
|
||||||
|
var/list/hacklaws = null
|
||||||
|
var/zerolaw = null
|
||||||
|
var/list/corelaws = null
|
||||||
|
var/list/auxlaws = null
|
||||||
|
|
||||||
|
var/configurable = 0
|
||||||
|
|
||||||
|
// override this when you need to be able to alter the parameters of the lawset
|
||||||
|
proc/configure()
|
||||||
|
return
|
||||||
|
|
||||||
|
execute(var/datum/file/program/source)
|
||||||
|
if(istype(usr,/mob/living/silicon))
|
||||||
|
return
|
||||||
|
if(istype(source,/datum/file/program/ntos))
|
||||||
|
if(configurable)
|
||||||
|
configure()
|
||||||
|
return
|
||||||
|
if(istype(source,/datum/file/program/upload/ai))
|
||||||
13
code/WorkInProgress/computer3/upload/programs.dm
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
/*
|
||||||
|
Note that as with existing ai upload, this is not an interactive program.
|
||||||
|
That means that the work is done in execute() rather than interact()
|
||||||
|
*/
|
||||||
|
|
||||||
|
/datum/file/program/upload/ai
|
||||||
|
execute(var/datum/file/program/source)
|
||||||
|
if(!interactable() || istype(usr,/mob/living/silicon))
|
||||||
|
return 0
|
||||||
|
if(!computer.net)
|
||||||
|
usr << "An indecipherable set of code flicks across the screen. Nothing else happens."
|
||||||
|
return
|
||||||
|
var/list/results = computer.net.get_machines
|
||||||
@@ -1378,3 +1378,8 @@ var/list/WALLITEMS = list(
|
|||||||
|
|
||||||
/proc/format_text(text)
|
/proc/format_text(text)
|
||||||
return replacetext(replacetext(text,"\proper ",""),"\improper ","")
|
return replacetext(replacetext(text,"\proper ",""),"\improper ","")
|
||||||
|
|
||||||
|
/proc/topic_link(var/datum/D, var/arglist, var/content)
|
||||||
|
if(istype(arglist,/list))
|
||||||
|
arglist = list2params(arglist)
|
||||||
|
return "<a href='?src=\ref[D];[arglist]'>[content]</a>"
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
var/body_elements
|
var/body_elements
|
||||||
var/head_content = ""
|
var/head_content = ""
|
||||||
var/content = ""
|
var/content = ""
|
||||||
|
var/title_buttons = ""
|
||||||
|
|
||||||
|
|
||||||
/datum/browser/New(nuser, nwindow_id, ntitle = 0, nwidth = 0, nheight = 0, var/atom/nref = null)
|
/datum/browser/New(nuser, nwindow_id, ntitle = 0, nwidth = 0, nheight = 0, var/atom/nref = null)
|
||||||
@@ -29,9 +30,15 @@
|
|||||||
ref = nref
|
ref = nref
|
||||||
add_stylesheet("common", 'html/browser/common.css') // this CSS sheet is common to all UIs
|
add_stylesheet("common", 'html/browser/common.css') // this CSS sheet is common to all UIs
|
||||||
|
|
||||||
|
/datum/browser/proc/set_title(ntitle)
|
||||||
|
title = format_text(ntitle)
|
||||||
|
|
||||||
/datum/browser/proc/add_head_content(nhead_content)
|
/datum/browser/proc/add_head_content(nhead_content)
|
||||||
head_content = nhead_content
|
head_content = nhead_content
|
||||||
|
|
||||||
|
/datum/browser/proc/set_title_buttons(ntitle_buttons)
|
||||||
|
title_buttons = ntitle_buttons
|
||||||
|
|
||||||
/datum/browser/proc/set_window_options(nwindow_options)
|
/datum/browser/proc/set_window_options(nwindow_options)
|
||||||
window_options = nwindow_options
|
window_options = nwindow_options
|
||||||
|
|
||||||
@@ -75,7 +82,7 @@
|
|||||||
</head>
|
</head>
|
||||||
<body scroll=auto>
|
<body scroll=auto>
|
||||||
<div class='uiWrapper'>
|
<div class='uiWrapper'>
|
||||||
[title ? "<div class='uiTitleWrapper'><div [title_attributes]><tt>[title]</tt></div></div>" : ""]
|
[title ? "<div class='uiTitleWrapper'><div [title_attributes]><tt>[title]</tt></div><div class='uiTitleButtons'>[title_buttons]</div></div>" : ""]
|
||||||
<div class='uiContent'>
|
<div class='uiContent'>
|
||||||
"}
|
"}
|
||||||
|
|
||||||
@@ -137,7 +144,7 @@
|
|||||||
// Otherwise, the user mob's machine var will be reset directly.
|
// Otherwise, the user mob's machine var will be reset directly.
|
||||||
//
|
//
|
||||||
/proc/onclose(mob/user, windowid, var/atom/ref=null)
|
/proc/onclose(mob/user, windowid, var/atom/ref=null)
|
||||||
if(!user.client) return
|
if(!user || !user.client) return
|
||||||
var/param = "null"
|
var/param = "null"
|
||||||
if(ref)
|
if(ref)
|
||||||
param = "\ref[ref]"
|
param = "\ref[ref]"
|
||||||
@@ -159,11 +166,10 @@
|
|||||||
//world << "windowclose: [atomref]"
|
//world << "windowclose: [atomref]"
|
||||||
if(atomref!="null") // if passed a real atomref
|
if(atomref!="null") // if passed a real atomref
|
||||||
var/hsrc = locate(atomref) // find the reffed atom
|
var/hsrc = locate(atomref) // find the reffed atom
|
||||||
var/href = "close=1"
|
|
||||||
if(hsrc)
|
if(hsrc)
|
||||||
//world << "[src] Topic [href] [hsrc]"
|
//world << "[src] Topic [href] [hsrc]"
|
||||||
usr = src.mob
|
usr = src.mob
|
||||||
src.Topic(href, params2list(href), hsrc) // this will direct to the atom's
|
src.Topic("close=1", list("close"="1"), hsrc) // this will direct to the atom's
|
||||||
return // Topic() proc via client.Topic()
|
return // Topic() proc via client.Topic()
|
||||||
|
|
||||||
// no atomref specified (or not found)
|
// no atomref specified (or not found)
|
||||||
|
|||||||
@@ -8,12 +8,12 @@ obj/machinery/recharger
|
|||||||
use_power = 1
|
use_power = 1
|
||||||
idle_power_usage = 4
|
idle_power_usage = 4
|
||||||
active_power_usage = 250
|
active_power_usage = 250
|
||||||
var/obj/item/weapon/charging = null
|
var/obj/item/charging = null
|
||||||
|
|
||||||
obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
|
obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
|
||||||
if(istype(user,/mob/living/silicon))
|
if(istype(user,/mob/living/silicon))
|
||||||
return
|
return
|
||||||
if(istype(G, /obj/item/weapon/gun/energy) || istype(G, /obj/item/weapon/melee/baton))
|
if(istype(G, /obj/item/weapon/gun/energy) || istype(G, /obj/item/weapon/melee/baton) || istype(G,/obj/item/device/laptop))
|
||||||
if(charging)
|
if(charging)
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -31,6 +31,11 @@ obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
|
|||||||
return
|
return
|
||||||
if (istype(G, /obj/item/weapon/gun/energy/staff))
|
if (istype(G, /obj/item/weapon/gun/energy/staff))
|
||||||
return
|
return
|
||||||
|
if(istype(G, /obj/item/device/laptop))
|
||||||
|
var/obj/item/device/laptop/L = G
|
||||||
|
if(!L.stored_computer.battery)
|
||||||
|
user << "There's no battery in it!"
|
||||||
|
return
|
||||||
user.drop_item()
|
user.drop_item()
|
||||||
G.loc = src
|
G.loc = src
|
||||||
charging = G
|
charging = G
|
||||||
@@ -79,6 +84,16 @@ obj/machinery/recharger/process()
|
|||||||
use_power(150)
|
use_power(150)
|
||||||
else
|
else
|
||||||
icon_state = "recharger2"
|
icon_state = "recharger2"
|
||||||
|
return
|
||||||
|
if(istype(charging, /obj/item/device/laptop))
|
||||||
|
var/obj/item/device/laptop/L = charging
|
||||||
|
if(L.stored_computer.battery.charge < L.stored_computer.battery.maxcharge)
|
||||||
|
L.stored_computer.battery.give(100)
|
||||||
|
icon_state = "recharger1"
|
||||||
|
use_power(250)
|
||||||
|
else
|
||||||
|
icon_state = "recharger2"
|
||||||
|
return
|
||||||
|
|
||||||
obj/machinery/recharger/emp_act(severity)
|
obj/machinery/recharger/emp_act(severity)
|
||||||
if(stat & (NOPOWER|BROKEN) || !anchored)
|
if(stat & (NOPOWER|BROKEN) || !anchored)
|
||||||
|
|||||||
@@ -18,10 +18,10 @@
|
|||||||
#define MAX_DEEP_COUNT 300
|
#define MAX_DEEP_COUNT 300
|
||||||
#define ITERATE_BEFORE_FAIL 200
|
#define ITERATE_BEFORE_FAIL 200
|
||||||
|
|
||||||
#define RESOURCE_HIGH_MAX 8
|
#define RESOURCE_HIGH_MAX 3
|
||||||
#define RESOURCE_HIGH_MIN 5
|
#define RESOURCE_HIGH_MIN 0
|
||||||
#define RESOURCE_MID_MAX 4
|
#define RESOURCE_MID_MAX 2
|
||||||
#define RESOURCE_MID_MIN 2
|
#define RESOURCE_MID_MIN 1
|
||||||
#define RESOURCE_LOW_MAX 1
|
#define RESOURCE_LOW_MAX 1
|
||||||
#define RESOURCE_LOW_MIN 0
|
#define RESOURCE_LOW_MIN 0
|
||||||
|
|
||||||
@@ -52,10 +52,6 @@ Deep minerals:
|
|||||||
var/random_variance_chance = 25
|
var/random_variance_chance = 25
|
||||||
var/random_element = 0.5
|
var/random_element = 0.5
|
||||||
|
|
||||||
//Called by the drilling rigs each process().
|
|
||||||
/datum/ore_distribution/proc/get_ore(var/x,var/y)
|
|
||||||
return "Nope."
|
|
||||||
|
|
||||||
/datum/ore_distribution/proc/map_is_sane()
|
/datum/ore_distribution/proc/map_is_sane()
|
||||||
if(!map) return 0
|
if(!map) return 0
|
||||||
|
|
||||||
@@ -79,12 +75,13 @@ Deep minerals:
|
|||||||
//Halfassed diamond-square algorithm with some fuckery since it's a single dimension array.
|
//Halfassed diamond-square algorithm with some fuckery since it's a single dimension array.
|
||||||
/datum/ore_distribution/proc/populate_distribution_map()
|
/datum/ore_distribution/proc/populate_distribution_map()
|
||||||
|
|
||||||
//Seed beginning values.
|
//Announce it!
|
||||||
|
world << "<b><font color='red'>Generating resource distribution map.</b></font>"
|
||||||
|
|
||||||
|
//Seed beginning values.
|
||||||
var/x = 1
|
var/x = 1
|
||||||
var/y = 1
|
var/y = 1
|
||||||
var/size = real_size-1
|
var/size = real_size-1
|
||||||
|
|
||||||
map[MAP_TOP_LEFT] = (range/3)+rand(range/5)
|
map[MAP_TOP_LEFT] = (range/3)+rand(range/5)
|
||||||
map[MAP_TOP_RIGHT] = (range/3)+rand(range/5)
|
map[MAP_TOP_RIGHT] = (range/3)+rand(range/5)
|
||||||
map[MAP_BOTTOM_LEFT] = (range/3)+rand(range/5)
|
map[MAP_BOTTOM_LEFT] = (range/3)+rand(range/5)
|
||||||
@@ -131,11 +128,16 @@ Deep minerals:
|
|||||||
|
|
||||||
/datum/ore_distribution/proc/apply_to_asteroid()
|
/datum/ore_distribution/proc/apply_to_asteroid()
|
||||||
|
|
||||||
var/origin_x = 13
|
// THESE VALUES DETERMINE THE AREA THAT THE DISTRIBUTION MAP IS APPLIED TO.
|
||||||
var/origin_y = 32
|
// IF YOU DO NOT RUN OFFICIAL BAYCODE ASTEROID MAP YOU NEED TO CHANGE THEM.
|
||||||
var/limit_x = 217
|
// ORIGIN IS THE BOTTOM LEFT CORNER OF THE SQUARE CONTAINING ALL ASTEROID
|
||||||
var/limit_y = 223
|
// TILES YOU WISH TO APPLY THE DISTRIBUTION MAP TO.
|
||||||
var/asteroid_z = 5
|
|
||||||
|
var/origin_x = 13 //We start here...
|
||||||
|
var/origin_y = 32 //...and here...
|
||||||
|
var/limit_x = 217 //...and iterate until here...
|
||||||
|
var/limit_y = 223 //...and here...
|
||||||
|
var/asteroid_z = 5 //...on this Z-level.
|
||||||
|
|
||||||
var/tx = origin_x
|
var/tx = origin_x
|
||||||
var/ty = origin_y
|
var/ty = origin_y
|
||||||
@@ -155,18 +157,9 @@ Deep minerals:
|
|||||||
|
|
||||||
target_turf = locate(tx+j, ty+i, asteroid_z)
|
target_turf = locate(tx+j, ty+i, asteroid_z)
|
||||||
|
|
||||||
if(target_turf.has_resources)
|
if(target_turf && target_turf.has_resources)
|
||||||
|
|
||||||
var/printcolor
|
|
||||||
if(map[MAP_CELL] > (range*0.60))
|
|
||||||
printcolor = "#FF0000"
|
|
||||||
else if(map[MAP_CELL] > (range*0.40))
|
|
||||||
printcolor = "#00FF00"
|
|
||||||
else
|
|
||||||
printcolor = "#0000FF"
|
|
||||||
target_turf.color = "#[printcolor]"
|
|
||||||
target_turf.resources = list()
|
target_turf.resources = list()
|
||||||
|
|
||||||
target_turf.resources["silicates"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX)
|
target_turf.resources["silicates"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX)
|
||||||
target_turf.resources["carbonaceous rock"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX)
|
target_turf.resources["carbonaceous rock"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX)
|
||||||
|
|
||||||
@@ -202,24 +195,8 @@ Deep minerals:
|
|||||||
tx = origin_x
|
tx = origin_x
|
||||||
ty += chunk_size
|
ty += chunk_size
|
||||||
|
|
||||||
/datum/ore_distribution/proc/print_map()
|
world << "<b><font color='red'>Resource map generation complete.</font></b>"
|
||||||
world << "---"
|
return
|
||||||
var/string = ""
|
|
||||||
for(var/y = 1, y <= real_size, y++)
|
|
||||||
for(var/x = 1, x <= real_size, x++)
|
|
||||||
|
|
||||||
var/printcolor
|
|
||||||
if(map[MAP_CELL] > (range*0.60))
|
|
||||||
printcolor = "#FF0000"
|
|
||||||
else if(map[MAP_CELL] > (range*0.40))
|
|
||||||
printcolor = "#00FF00"
|
|
||||||
else
|
|
||||||
printcolor = "#0000FF"
|
|
||||||
string += "<font color='[printcolor]'>#</font>"
|
|
||||||
|
|
||||||
world << string
|
|
||||||
string = ""
|
|
||||||
world << "---"
|
|
||||||
|
|
||||||
#undef MAP_CELL
|
#undef MAP_CELL
|
||||||
#undef MAP_CENTRE
|
#undef MAP_CENTRE
|
||||||
@@ -245,4 +222,4 @@ Deep minerals:
|
|||||||
#undef RESOURCE_MID_MAX
|
#undef RESOURCE_MID_MAX
|
||||||
#undef RESOURCE_MID_MIN
|
#undef RESOURCE_MID_MIN
|
||||||
#undef RESOURCE_LOW_MAX
|
#undef RESOURCE_LOW_MAX
|
||||||
#undef RESOURCE_LOW_MIN
|
#undef RESOURCE_LOW_MIN
|
||||||
|
|||||||
@@ -34,6 +34,22 @@
|
|||||||
for(var/mob/living/M in contents)
|
for(var/mob/living/M in contents)
|
||||||
M.show_message(message,m_type)
|
M.show_message(message,m_type)
|
||||||
|
|
||||||
|
//Mob procs and vars for scooping up
|
||||||
|
/mob/living/var/holder_type
|
||||||
|
|
||||||
|
/mob/living/proc/get_scooped(var/mob/living/carbon/grabber)
|
||||||
|
if(!holder_type)
|
||||||
|
return
|
||||||
|
var/obj/item/weapon/holder/H = new holder_type(loc)
|
||||||
|
src.loc = H
|
||||||
|
H.name = loc.name
|
||||||
|
H.attack_hand(grabber)
|
||||||
|
|
||||||
|
grabber << "You scoop up [src]."
|
||||||
|
src << "[grabber] scoops you up."
|
||||||
|
grabber.status_flags |= PASSEMOTES
|
||||||
|
return
|
||||||
|
|
||||||
//Mob specific holders.
|
//Mob specific holders.
|
||||||
|
|
||||||
/obj/item/weapon/holder/diona
|
/obj/item/weapon/holder/diona
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
var/ready_evolve = 0
|
var/ready_evolve = 0
|
||||||
universal_understand = 0 // Dionaea do not need to speak to people
|
universal_understand = 0 // Dionaea do not need to speak to people
|
||||||
universal_speak = 0 // before becoming an adult. Use *chirp.
|
universal_speak = 0 // before becoming an adult. Use *chirp.
|
||||||
|
holder_type = /obj/item/weapon/holder/diona
|
||||||
|
|
||||||
/mob/living/carbon/monkey/diona/attack_hand(mob/living/carbon/human/M as mob)
|
/mob/living/carbon/monkey/diona/attack_hand(mob/living/carbon/human/M as mob)
|
||||||
|
|
||||||
@@ -24,14 +25,7 @@
|
|||||||
src.verbs -= /mob/living/carbon/monkey/diona/proc/merge
|
src.verbs -= /mob/living/carbon/monkey/diona/proc/merge
|
||||||
src.loc = M
|
src.loc = M
|
||||||
else
|
else
|
||||||
var/obj/item/weapon/holder/diona/D = new(loc)
|
get_scooped(M)
|
||||||
src.loc = D
|
|
||||||
D.name = loc.name
|
|
||||||
D.attack_hand(M)
|
|
||||||
M << "You scoop up [src]."
|
|
||||||
src << "[M] scoops you up."
|
|
||||||
M.status_flags |= PASSEMOTES
|
|
||||||
return
|
|
||||||
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
|||||||
@@ -25,8 +25,7 @@
|
|||||||
//Used for self-mailing.
|
//Used for self-mailing.
|
||||||
var/mail_destination = ""
|
var/mail_destination = ""
|
||||||
|
|
||||||
//Used for pulling.
|
holder_type = /obj/item/weapon/holder/drone
|
||||||
|
|
||||||
/mob/living/silicon/robot/drone/New()
|
/mob/living/silicon/robot/drone/New()
|
||||||
|
|
||||||
..()
|
..()
|
||||||
@@ -60,7 +59,6 @@
|
|||||||
|
|
||||||
//Some tidying-up.
|
//Some tidying-up.
|
||||||
flavor_text = "It's a tiny little repair drone. The casing is stamped with an NT logo and the subscript: 'NanoTrasen Recursive Repair Systems: Fixing Tomorrow's Problem, Today!'"
|
flavor_text = "It's a tiny little repair drone. The casing is stamped with an NT logo and the subscript: 'NanoTrasen Recursive Repair Systems: Fixing Tomorrow's Problem, Today!'"
|
||||||
updatename()
|
|
||||||
updateicon()
|
updateicon()
|
||||||
|
|
||||||
//Redefining some robot procs...
|
//Redefining some robot procs...
|
||||||
@@ -104,15 +102,8 @@
|
|||||||
if(copytext(message,1,2) == "*")
|
if(copytext(message,1,2) == "*")
|
||||||
return emote(copytext(message,2))
|
return emote(copytext(message,2))
|
||||||
else if(length(message) >= 2)
|
else if(length(message) >= 2)
|
||||||
if(copytext(message, 1 ,3) == ":b" || copytext(message, 1 ,3) == ":B")
|
|
||||||
|
|
||||||
if(!is_component_functioning("comms"))
|
if(copytext(message, 1 ,3) == ":d" || copytext(message, 1 ,3) == ":D")
|
||||||
src << "\red Your binary communications component isn't functional."
|
|
||||||
return
|
|
||||||
|
|
||||||
robot_talk(trim(copytext(message,3)))
|
|
||||||
|
|
||||||
else if(copytext(message, 1 ,3) == ":d" || copytext(message, 1 ,3) == ":D")
|
|
||||||
|
|
||||||
if(!is_component_functioning("radio"))
|
if(!is_component_functioning("radio"))
|
||||||
src << "\red Your radio transmitter isn't functional."
|
src << "\red Your radio transmitter isn't functional."
|
||||||
@@ -329,8 +320,8 @@
|
|||||||
full_law_reset()
|
full_law_reset()
|
||||||
src << "<br><b>You are a maintenance drone, a tiny-brained robotic repair machine</b>."
|
src << "<br><b>You are a maintenance drone, a tiny-brained robotic repair machine</b>."
|
||||||
src << "You have no individual will, no personality, and no drives or urges other than your laws."
|
src << "You have no individual will, no personality, and no drives or urges other than your laws."
|
||||||
src << "Use <b>:b</b> to talk to your fellow synthetics, <b>:d</b> to talk to other drones, and <b>say</b> to speak silently to your nearby fellows."
|
src << "Use <b>:d</b> to talk to other drones and <b>say</b> to speak silently to your nearby fellows."
|
||||||
src << "Remember, you are <b>lawed against interference with the crew</b>."
|
src << "Remember, you are <b>lawed against interference with the crew</b>. Also remember, <b>you DO NOT take orders from the AI.</b>"
|
||||||
src << "<b>Don't invade their worksites, don't steal their resources, don't tell them about the changeling in the toilets.</b>"
|
src << "<b>Don't invade their worksites, don't steal their resources, don't tell them about the changeling in the toilets.</b>"
|
||||||
src << "<b>If a crewmember has noticed you, <i>you are probably breaking your third law</i></b>."
|
src << "<b>If a crewmember has noticed you, <i>you are probably breaking your third law</i></b>."
|
||||||
|
|
||||||
|
|||||||
@@ -47,12 +47,5 @@
|
|||||||
/mob/living/silicon/robot/drone/attack_hand(mob/living/carbon/human/M as mob)
|
/mob/living/silicon/robot/drone/attack_hand(mob/living/carbon/human/M as mob)
|
||||||
|
|
||||||
if(M.a_intent == "help")
|
if(M.a_intent == "help")
|
||||||
var/obj/item/weapon/holder/drone/D = new(loc)
|
get_scooped(M)
|
||||||
src.loc = D
|
|
||||||
D.attack_hand(M)
|
|
||||||
M << "You scoop up [src]."
|
|
||||||
src << "[M] scoops you up."
|
|
||||||
M.status_flags |= PASSEMOTES
|
|
||||||
return
|
|
||||||
|
|
||||||
..()
|
..()
|
||||||
@@ -318,8 +318,8 @@
|
|||||||
src.modules += new /obj/item/weapon/matter_decompiler(src)
|
src.modules += new /obj/item/weapon/matter_decompiler(src)
|
||||||
src.modules += new /obj/item/weapon/reagent_containers/spray/cleaner/drone(src)
|
src.modules += new /obj/item/weapon/reagent_containers/spray/cleaner/drone(src)
|
||||||
|
|
||||||
src.emag = new /obj/item/weapon/card/emag(src)
|
src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
|
||||||
src.emag.name = "Cryptographic Sequencer"
|
src.emag.name = "Plasma Cutter"
|
||||||
|
|
||||||
for(var/T in stacktypes)
|
for(var/T in stacktypes)
|
||||||
var/obj/item/stack/sheet/W = new T(src)
|
var/obj/item/stack/sheet/W = new T(src)
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
min_oxy = 16 //Require atleast 16kPA oxygen
|
min_oxy = 16 //Require atleast 16kPA oxygen
|
||||||
minbodytemp = 223 //Below -50 Degrees Celcius
|
minbodytemp = 223 //Below -50 Degrees Celcius
|
||||||
maxbodytemp = 323 //Above 50 Degrees Celcius
|
maxbodytemp = 323 //Above 50 Degrees Celcius
|
||||||
|
holder_type = /obj/item/weapon/holder/cat
|
||||||
|
|
||||||
/mob/living/simple_animal/cat/Life()
|
/mob/living/simple_animal/cat/Life()
|
||||||
//MICE!
|
//MICE!
|
||||||
@@ -63,18 +64,11 @@
|
|||||||
|
|
||||||
/mob/living/simple_animal/cat/MouseDrop(atom/over_object)
|
/mob/living/simple_animal/cat/MouseDrop(atom/over_object)
|
||||||
|
|
||||||
var/mob/living/carbon/human/H = over_object
|
var/mob/living/carbon/H = over_object
|
||||||
if(!istype(H)) return ..()
|
if(!istype(H)) return ..()
|
||||||
|
|
||||||
//This REALLY needs to be moved to a general mob proc somewhere.
|
|
||||||
if(H.a_intent == "help")
|
if(H.a_intent == "help")
|
||||||
var/obj/item/weapon/holder/cat/C = new(loc)
|
get_scooped(H)
|
||||||
src.loc = C
|
|
||||||
C.name = loc.name
|
|
||||||
C.attack_hand(H)
|
|
||||||
H << "You scoop up [src]."
|
|
||||||
src << "[H] scoops you up."
|
|
||||||
H.status_flags |= PASSEMOTES
|
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
return ..()
|
return ..()
|
||||||
|
|||||||
@@ -61,7 +61,10 @@
|
|||||||
usr << browse("", "window=[name]") //Closes the dialog
|
usr << browse("", "window=[name]") //Closes the dialog
|
||||||
P = src[page]
|
P = src[page]
|
||||||
P.attackby(W, user)
|
P.attackby(W, user)
|
||||||
|
|
||||||
|
|
||||||
update_icon()
|
update_icon()
|
||||||
|
attack_self(usr) //Update the browsed page.
|
||||||
add_fingerprint(usr)
|
add_fingerprint(usr)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -797,3 +797,13 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse
|
|||||||
#define WAIT_LAUNCH 1
|
#define WAIT_LAUNCH 1
|
||||||
#define WAIT_ARRIVE 2
|
#define WAIT_ARRIVE 2
|
||||||
#define WAIT_FINISH 3
|
#define WAIT_FINISH 3
|
||||||
|
|
||||||
|
|
||||||
|
//computer3 error codes, move lower in the file when it passes dev -Sayu
|
||||||
|
#define PROG_CRASH 1 // Generic crash
|
||||||
|
#define MISSING_PERIPHERAL 2 // Missing hardware
|
||||||
|
#define BUSTED_ASS_COMPUTER 4 // Self-perpetuating error. BAC will continue to crash forever.
|
||||||
|
#define MISSING_PROGRAM 8 // Some files try to automatically launch a program. This is that failing.
|
||||||
|
#define FILE_DRM 16 // Some files want to not be copied/moved. This is them complaining that you tried.
|
||||||
|
#define NETWORK_FAILURE 32
|
||||||
|
|
||||||
|
|||||||
@@ -126,6 +126,7 @@ h4
|
|||||||
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
padding-top:32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.uiTitle
|
.uiTitle
|
||||||
@@ -138,6 +139,25 @@ h4
|
|||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.uiTitleWrapper
|
||||||
|
{
|
||||||
|
position:fixed;
|
||||||
|
top:0px;
|
||||||
|
left:0px;
|
||||||
|
right:0px;
|
||||||
|
z-index: 10
|
||||||
|
}
|
||||||
|
|
||||||
|
.uiTitleButtons
|
||||||
|
{
|
||||||
|
position:fixed;
|
||||||
|
top:0px;
|
||||||
|
right:0px;
|
||||||
|
height:32px;
|
||||||
|
z-index:11;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.uiTitle.icon
|
.uiTitle.icon
|
||||||
{
|
{
|
||||||
padding: 6px 8px 6px 42px;
|
padding: 6px 8px 6px 42px;
|
||||||
|
|||||||
BIN
icons/NTOS/airestore.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
icons/NTOS/aiupload.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
icons/NTOS/alerts.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
icons/NTOS/borgcontrol.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
icons/NTOS/borgupload.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
icons/NTOS/camera.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
icons/NTOS/cardcomp.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
icons/NTOS/cloning.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
icons/NTOS/comms.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
icons/NTOS/copyfile.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
icons/NTOS/deletefile.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
icons/NTOS/drive.png
Normal file
|
After Width: | Height: | Size: 259 B |
BIN
icons/NTOS/exocontrol.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
icons/NTOS/file.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
icons/NTOS/folder.png
Normal file
|
After Width: | Height: | Size: 259 B |
BIN
icons/NTOS/foldermeta.png
Normal file
|
After Width: | Height: | Size: 350 B |
BIN
icons/NTOS/genetics.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
icons/NTOS/medical.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
icons/NTOS/monitoring.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
icons/NTOS/movefile.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
icons/NTOS/ntos.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
icons/NTOS/operating.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
icons/NTOS/pda.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
icons/NTOS/power.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
icons/NTOS/prison.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
icons/NTOS/program.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
icons/NTOS/records.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
icons/NTOS/research.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
icons/NTOS/server.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
icons/NTOS/tb_close.png
Normal file
|
After Width: | Height: | Size: 453 B |
BIN
icons/NTOS/tcomms.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
BIN
icons/obj/computer3.dmi
Normal file
|
After Width: | Height: | Size: 37 KiB |
@@ -527,12 +527,12 @@
|
|||||||
"akg" = (/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/security/brig)
|
"akg" = (/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/security/brig)
|
||||||
"akh" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/door/airlock/security{name = "Security Pods"; req_access_txt = "1"},/turf/simulated/floor/plating,/area/security/brig)
|
"akh" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/door/airlock/security{name = "Security Pods"; req_access_txt = "1"},/turf/simulated/floor/plating,/area/security/brig)
|
||||||
"aki" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
|
"aki" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
|
||||||
"akj" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_3_berth"; pixel_x = 25; pixel_y = 25; tag_door = "escape_pod_3_berth_hatch"},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
|
"akj" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_3"; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; req_one_access_txt = "0"; tag_door = "escape_pod_3_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station)
|
||||||
"akk" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_3_berth_hatch"; locked = 1; name = "Escape Pod"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/security/main)
|
"akk" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_3_hatch"; locked = 1; name = "Escape Pod Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station)
|
||||||
"akl" = (/turf/simulated/floor/plating,/area/security/main)
|
"akl" = (/turf/simulated/floor/plating,/area/security/main)
|
||||||
"akm" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_3_hatch"; locked = 1; name = "Escape Pod Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station)
|
"akm" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_3_berth_hatch"; locked = 1; name = "Escape Pod"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/security/main)
|
||||||
"akn" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station)
|
"akn" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station)
|
||||||
"ako" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_3"; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; req_one_access_txt = "0"; tag_door = "escape_pod_3_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station)
|
"ako" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_3_berth"; pixel_x = 25; pixel_y = 25; tag_door = "escape_pod_3_berth_hatch"},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
|
||||||
"akp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
|
"akp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
|
||||||
"akq" = (/obj/structure/stool/bed/roller,/turf/simulated/floor{icon_state = "white"},/area/security/brig)
|
"akq" = (/obj/structure/stool/bed/roller,/turf/simulated/floor{icon_state = "white"},/area/security/brig)
|
||||||
"akr" = (/obj/structure/stool/bed,/turf/simulated/floor{icon_state = "white"},/area/security/brig)
|
"akr" = (/obj/structure/stool/bed,/turf/simulated/floor{icon_state = "white"},/area/security/brig)
|
||||||
@@ -791,7 +791,7 @@
|
|||||||
"apk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/camera{c_tag = "Brig Evidence Storage"; dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
|
"apk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/camera{c_tag = "Brig Evidence Storage"; dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
|
||||||
"apl" = (/obj/structure/rack,/obj/item/weapon/storage/box/seccarts{pixel_x = 3; pixel_y = 2},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden)
|
"apl" = (/obj/structure/rack,/obj/item/weapon/storage/box/seccarts{pixel_x = 3; pixel_y = 2},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden)
|
||||||
"apm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table,/obj/item/weapon/folder/red,/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/security/main)
|
"apm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table,/obj/item/weapon/folder/red,/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/security/main)
|
||||||
"apn" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/segment,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor{icon_state = "redfull"; dir = 9},/area/security/main)
|
"apn" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/segment,/obj/machinery/recharger{pixel_y = 0},/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor{icon_state = "redfull"; dir = 9},/area/security/main)
|
||||||
"apo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/security/hos)
|
"apo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/security/hos)
|
||||||
"app" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/security/hos)
|
"app" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/security/hos)
|
||||||
"apq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/stool,/turf/simulated/floor{icon_state = "redfull"; dir = 9},/area/security/main)
|
"apq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/stool,/turf/simulated/floor{icon_state = "redfull"; dir = 9},/area/security/main)
|
||||||
@@ -980,9 +980,9 @@
|
|||||||
"asR" = (/turf/simulated/floor/engine{name = "Holodeck Projector Floor"},/area/holodeck/alphadeck)
|
"asR" = (/turf/simulated/floor/engine{name = "Holodeck Projector Floor"},/area/holodeck/alphadeck)
|
||||||
"asS" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/entry)
|
"asS" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/entry)
|
||||||
"asT" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/escape_pod1/station)
|
"asT" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/escape_pod1/station)
|
||||||
"asU" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_1"; pixel_x = -25; pixel_y = 0; req_access_txt = "0"; req_one_access_txt = "0"; tag_door = "escape_pod_1_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station)
|
"asU" = (/obj/machinery/lapvend,/turf/simulated/floor{icon_state = "dark"},/area/hallway/secondary/exit)
|
||||||
"asV" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/escape_pod2/station)
|
"asV" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/escape_pod2/station)
|
||||||
"asW" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_2"; pixel_x = -25; pixel_y = 0; req_access_txt = "0"; req_one_access_txt = "0"; tag_door = "escape_pod_2_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station)
|
"asW" = (/obj/structure/table/woodentable,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor/wood,/area/library)
|
||||||
"asX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor,/area/hallway/primary/port)
|
"asX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor,/area/hallway/primary/port)
|
||||||
"asY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/primary/port)
|
"asY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/primary/port)
|
||||||
"asZ" = (/obj/structure/table,/obj/item/device/t_scanner,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
|
"asZ" = (/obj/structure/table,/obj/item/device/t_scanner,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
|
||||||
@@ -1064,10 +1064,10 @@
|
|||||||
"aux" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/closet/secure_closet/hydroponics,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics)
|
"aux" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/closet/secure_closet/hydroponics,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics)
|
||||||
"auy" = (/obj/structure/closet/secure_closet/freezer/meat,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen)
|
"auy" = (/obj/structure/closet/secure_closet/freezer/meat,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen)
|
||||||
"auz" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/escape_pod1/station)
|
"auz" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/escape_pod1/station)
|
||||||
"auA" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_1_hatch"; locked = 1; name = "Escape Pod Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station)
|
"auA" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor,/area/storage/primary)
|
||||||
"auB" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/escape_pod1/station)
|
"auB" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/escape_pod1/station)
|
||||||
"auC" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/escape_pod2/station)
|
"auC" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/escape_pod2/station)
|
||||||
"auD" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_2_hatch"; locked = 1; name = "Escape Pod Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station)
|
"auD" = (/obj/structure/table/woodentable,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor/plating,/area/security/vacantoffice)
|
||||||
"auE" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/escape_pod2/station)
|
"auE" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/escape_pod2/station)
|
||||||
"auF" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "arrivals_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = 25; req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
|
"auF" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "arrivals_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = 25; req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
|
||||||
"auG" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
|
"auG" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
|
||||||
@@ -1147,7 +1147,7 @@
|
|||||||
"awc" = (/obj/machinery/computer/HolodeckControl,/turf/simulated/floor,/area/crew_quarters/fitness)
|
"awc" = (/obj/machinery/computer/HolodeckControl,/turf/simulated/floor,/area/crew_quarters/fitness)
|
||||||
"awd" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/crew_quarters/fitness)
|
"awd" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/crew_quarters/fitness)
|
||||||
"awe" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
|
"awe" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
|
||||||
"awf" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_1_berth_hatch"; locked = 1; name = "Escape Pod"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
|
"awf" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor,/area/hallway/secondary/exit)
|
||||||
"awg" = (/obj/structure/sign/pods,/turf/simulated/wall,/area/hallway/secondary/entry)
|
"awg" = (/obj/structure/sign/pods,/turf/simulated/wall,/area/hallway/secondary/entry)
|
||||||
"awh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
|
"awh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
|
||||||
"awi" = (/obj/machinery/light/small{dir = 4},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32},/obj/structure/table/woodentable,/obj/item/ashtray/bronze{pixel_x = -1; pixel_y = 1},/obj/item/weapon/deck,/turf/simulated/floor/carpet,/area/crew_quarters/bar)
|
"awi" = (/obj/machinery/light/small{dir = 4},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32},/obj/structure/table/woodentable,/obj/item/ashtray/bronze{pixel_x = -1; pixel_y = 1},/obj/item/weapon/deck,/turf/simulated/floor/carpet,/area/crew_quarters/bar)
|
||||||
@@ -1194,7 +1194,7 @@
|
|||||||
"awX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
|
"awX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
|
||||||
"awY" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry)
|
"awY" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry)
|
||||||
"awZ" = (/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/light{dir = 1},/obj/machinery/camera/xray{c_tag = "Arrivals Escape Pods"},/turf/simulated/floor,/area/hallway/secondary/entry)
|
"awZ" = (/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/light{dir = 1},/obj/machinery/camera/xray{c_tag = "Arrivals Escape Pods"},/turf/simulated/floor,/area/hallway/secondary/entry)
|
||||||
"axa" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_2_berth_hatch"; locked = 1; name = "Escape Pod"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
|
"axa" = (/obj/structure/lattice,/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "escape_dock_south_airlock"; name = "exterior access button"; pixel_x = 5; pixel_y = -25; req_access_txt = "0"; req_one_access_txt = "13"},/turf/space,/area)
|
||||||
"axb" = (/turf/simulated/floor{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry)
|
"axb" = (/turf/simulated/floor{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry)
|
||||||
"axc" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry)
|
"axc" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry)
|
||||||
"axd" = (/obj/machinery/camera{c_tag = "Central Hallway North-West"; dir = 2},/turf/simulated/floor,/area/hallway/primary/central)
|
"axd" = (/obj/machinery/camera{c_tag = "Central Hallway North-West"; dir = 2},/turf/simulated/floor,/area/hallway/primary/central)
|
||||||
@@ -1401,7 +1401,7 @@
|
|||||||
"aAW" = (/obj/machinery/computer/secure_data/detective_computer,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/nuke_storage)
|
"aAW" = (/obj/machinery/computer/secure_data/detective_computer,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/nuke_storage)
|
||||||
"aAX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/glass{name = "Gateway Access"},/turf/simulated/floor,/area/gateway)
|
"aAX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/glass{name = "Gateway Access"},/turf/simulated/floor,/area/gateway)
|
||||||
"aAY" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/rag,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "bar"; name = "Bar Shutters"; opacity = 0},/obj/structure/noticeboard{pixel_x = -30; pixel_y = 0},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
|
"aAY" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/rag,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "bar"; name = "Bar Shutters"; opacity = 0},/obj/structure/noticeboard{pixel_x = -30; pixel_y = 0},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
|
||||||
"aAZ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor,/area/gateway)
|
"aAZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/library)
|
||||||
"aBa" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva)
|
"aBa" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva)
|
||||||
"aBb" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/atmos,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva)
|
"aBb" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/atmos,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva)
|
||||||
"aBc" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (NORTHWEST)"; icon_state = "intact-f"; dir = 9},/turf/simulated/floor/plating,/area/maintenance/port)
|
"aBc" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (NORTHWEST)"; icon_state = "intact-f"; dir = 9},/turf/simulated/floor/plating,/area/maintenance/port)
|
||||||
@@ -1468,9 +1468,9 @@
|
|||||||
"aCl" = (/obj/machinery/nuclearbomb{r_code = "LOLNO"},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/nuke_storage)
|
"aCl" = (/obj/machinery/nuclearbomb{r_code = "LOLNO"},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/nuke_storage)
|
||||||
"aCm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "vault"; dir = 10},/area/security/nuke_storage)
|
"aCm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "vault"; dir = 10},/area/security/nuke_storage)
|
||||||
"aCn" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor{icon_state = "vault"; dir = 4},/area/security/nuke_storage)
|
"aCn" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor{icon_state = "vault"; dir = 4},/area/security/nuke_storage)
|
||||||
"aCo" = (/obj/structure/table,/obj/item/weapon/storage/fancy/cigarettes{pixel_y = 2},/turf/simulated/floor,/area/gateway)
|
"aCo" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor,/area/gateway)
|
||||||
"aCp" = (/obj/machinery/light{dir = 4},/obj/structure/closet/l3closet/scientist,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor,/area/gateway)
|
"aCp" = (/obj/structure/table,/obj/item/weapon/storage/fancy/cigarettes{pixel_y = 2},/turf/simulated/floor,/area/gateway)
|
||||||
"aCq" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/gateway)
|
"aCq" = (/obj/machinery/light{dir = 4},/obj/structure/closet/l3closet/scientist,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor,/area/gateway)
|
||||||
"aCr" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "dark"},/area/gateway)
|
"aCr" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "dark"},/area/gateway)
|
||||||
"aCs" = (/obj/structure/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
|
"aCs" = (/obj/structure/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
|
||||||
"aCt" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hardsuits"; req_access_txt = "0"; req_one_access_txt = "11;24"},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
|
"aCt" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hardsuits"; req_access_txt = "0"; req_one_access_txt = "11;24"},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
|
||||||
@@ -1539,9 +1539,9 @@
|
|||||||
"aDE" = (/obj/machinery/washing_machine,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/locker)
|
"aDE" = (/obj/machinery/washing_machine,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/locker)
|
||||||
"aDF" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/library)
|
"aDF" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/library)
|
||||||
"aDG" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/light{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor,/area/hallway/primary/central)
|
"aDG" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/light{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor,/area/hallway/primary/central)
|
||||||
"aDH" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep/cryo)
|
"aDH" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/gateway)
|
||||||
"aDI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/gateway)
|
"aDI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/gateway)
|
||||||
"aDJ" = (/obj/machinery/alarm{pixel_y = 23},/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep/cryo)
|
"aDJ" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
|
||||||
"aDK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/cigbutt,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/port)
|
"aDK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/cigbutt,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/port)
|
||||||
"aDL" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
|
"aDL" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
|
||||||
"aDM" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/table/reinforced,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva)
|
"aDM" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/table/reinforced,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva)
|
||||||
@@ -1604,7 +1604,7 @@
|
|||||||
"aER" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
|
"aER" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
|
||||||
"aES" = (/obj/structure/table,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
|
"aES" = (/obj/structure/table,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
|
||||||
"aET" = (/obj/effect/landmark/start{name = "Assistant"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor,/area/storage/primary)
|
"aET" = (/obj/effect/landmark/start{name = "Assistant"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor,/area/storage/primary)
|
||||||
"aEU" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/security/vacantoffice)
|
"aEU" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_outer"; locked = 1; name = "Escape Airlock"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
||||||
"aEV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plating,/area/security/vacantoffice)
|
"aEV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plating,/area/security/vacantoffice)
|
||||||
"aEW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/simulated/floor/plating,/area/security/vacantoffice)
|
"aEW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/simulated/floor/plating,/area/security/vacantoffice)
|
||||||
"aEX" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/security/vacantoffice)
|
"aEX" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/security/vacantoffice)
|
||||||
@@ -1626,7 +1626,7 @@
|
|||||||
"aFn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/table/reinforced,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/weapon/cable_coil{pixel_x = 3; pixel_y = -7},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva)
|
"aFn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/table/reinforced,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/weapon/cable_coil{pixel_x = 3; pixel_y = -7},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva)
|
||||||
"aFo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
|
"aFo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
|
||||||
"aFp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/storage/emergency2)
|
"aFp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/storage/emergency2)
|
||||||
"aFq" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/device/modkit/tajaran,/obj/item/device/modkit/tajaran,/obj/item/device/modkit/tajaran,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva)
|
"aFq" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep/cryo)
|
||||||
"aFr" = (/obj/machinery/light_switch{pixel_y = 28},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/wood,/area/bridge/meeting_room)
|
"aFr" = (/obj/machinery/light_switch{pixel_y = 28},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/wood,/area/bridge/meeting_room)
|
||||||
"aFs" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor,/area/hallway/primary/fore)
|
"aFs" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor,/area/hallway/primary/fore)
|
||||||
"aFt" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/fore)
|
"aFt" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/fore)
|
||||||
@@ -1790,11 +1790,11 @@
|
|||||||
"aIv" = (/obj/machinery/light_switch{pixel_x = 27},/obj/structure/flora/pottedplant{tag = "icon-plant-21"; icon_state = "plant-21"},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep/bedrooms)
|
"aIv" = (/obj/machinery/light_switch{pixel_x = 27},/obj/structure/flora/pottedplant{tag = "icon-plant-21"; icon_state = "plant-21"},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep/bedrooms)
|
||||||
"aIw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/crew_quarters/sleep)
|
"aIw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/crew_quarters/sleep)
|
||||||
"aIx" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
|
"aIx" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
|
||||||
"aIy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep/cryo)
|
"aIy" = (/obj/machinery/alarm{pixel_y = 23},/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep/cryo)
|
||||||
"aIz" = (/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep/cryo)
|
"aIz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep/cryo)
|
||||||
"aIA" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/wall,/area/crew_quarters/sleep/bedrooms)
|
"aIA" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/wall,/area/crew_quarters/sleep/bedrooms)
|
||||||
"aIB" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/structure/window/reinforced,/obj/machinery/light_switch{pixel_x = -24},/turf/simulated/floor{icon_state = "dark"},/area/gateway)
|
"aIB" = (/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep/cryo)
|
||||||
"aIC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "dark"},/area/gateway)
|
"aIC" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/structure/window/reinforced,/obj/machinery/light_switch{pixel_x = -24},/turf/simulated/floor{icon_state = "dark"},/area/gateway)
|
||||||
"aID" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep/bedrooms)
|
"aID" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep/bedrooms)
|
||||||
"aIE" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva)
|
"aIE" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva)
|
||||||
"aIF" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva)
|
"aIF" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva)
|
||||||
@@ -1959,9 +1959,9 @@
|
|||||||
"aLI" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/hallway/primary/port)
|
"aLI" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/hallway/primary/port)
|
||||||
"aLJ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
|
"aLJ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
|
||||||
"aLK" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor,/area/hallway/primary/port)
|
"aLK" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor,/area/hallway/primary/port)
|
||||||
"aLL" = (/obj/machinery/camera{c_tag = "Gateway"; dir = 4; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/vending/coffee,/turf/simulated/floor,/area/gateway)
|
"aLL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "dark"},/area/gateway)
|
||||||
"aLM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
|
"aLM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
|
||||||
"aLN" = (/turf/simulated/floor,/area/gateway)
|
"aLN" = (/obj/machinery/camera{c_tag = "Gateway"; dir = 4; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/vending/coffee,/turf/simulated/floor,/area/gateway)
|
||||||
"aLO" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/hallway/primary/port)
|
"aLO" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/hallway/primary/port)
|
||||||
"aLP" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor,/area/hallway/primary/central)
|
"aLP" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor,/area/hallway/primary/central)
|
||||||
"aLQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "escapecorner"},/area/crew_quarters/fitness)
|
"aLQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "escapecorner"},/area/crew_quarters/fitness)
|
||||||
@@ -2072,7 +2072,7 @@
|
|||||||
"aNR" = (/mob/living/simple_animal/cow{name = "Betsy"},/turf/simulated/floor/grass,/area/hydroponics)
|
"aNR" = (/mob/living/simple_animal/cow{name = "Betsy"},/turf/simulated/floor/grass,/area/hydroponics)
|
||||||
"aNS" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/grass,/area/hydroponics)
|
"aNS" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/grass,/area/hydroponics)
|
||||||
"aNT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hydroponics)
|
"aNT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hydroponics)
|
||||||
"aNU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/sign/biohazard{pixel_x = 32},/obj/structure/closet/wardrobe/xenos,/turf/simulated/floor,/area/gateway)
|
"aNU" = (/turf/simulated/floor,/area/gateway)
|
||||||
"aNV" = (/obj/machinery/bookbinder{pixel_y = 0},/turf/simulated/floor/wood,/area/library)
|
"aNV" = (/obj/machinery/bookbinder{pixel_y = 0},/turf/simulated/floor/wood,/area/library)
|
||||||
"aNW" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/library)
|
"aNW" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/library)
|
||||||
"aNX" = (/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/library)
|
"aNX" = (/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/library)
|
||||||
@@ -2109,7 +2109,7 @@
|
|||||||
"aOC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/crew_quarters/sleep/cryo)
|
"aOC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/crew_quarters/sleep/cryo)
|
||||||
"aOD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
|
"aOD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
|
||||||
"aOE" = (/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep/cryo)
|
"aOE" = (/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep/cryo)
|
||||||
"aOF" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/closet/wardrobe/black,/turf/simulated/floor,/area/gateway)
|
"aOF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/sign/biohazard{pixel_x = 32},/obj/structure/closet/wardrobe/xenos,/turf/simulated/floor,/area/gateway)
|
||||||
"aOG" = (/obj/machinery/cryopod,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep/cryo)
|
"aOG" = (/obj/machinery/cryopod,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep/cryo)
|
||||||
"aOH" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=QM"; location = "CHW"},/turf/simulated/floor,/area/hallway/primary/central)
|
"aOH" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=QM"; location = "CHW"},/turf/simulated/floor,/area/hallway/primary/central)
|
||||||
"aOI" = (/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central)
|
"aOI" = (/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central)
|
||||||
@@ -2227,7 +2227,7 @@
|
|||||||
"aQQ" = (/obj/machinery/door/morgue{dir = 2; name = "Confession Booth"},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main)
|
"aQQ" = (/obj/machinery/door/morgue{dir = 2; name = "Confession Booth"},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main)
|
||||||
"aQR" = (/obj/machinery/light/small,/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1480; name = "Confessional Intercom"; pixel_x = 25},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main)
|
"aQR" = (/obj/machinery/light/small,/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1480; name = "Confessional Intercom"; pixel_x = 25},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main)
|
||||||
"aQS" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
|
"aQS" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
|
||||||
"aQT" = (/obj/machinery/computer/arcade,/turf/simulated/floor{icon_state = "dark"},/area/hallway/secondary/exit)
|
"aQT" = (/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "escape_dock_south_sensor"; pixel_x = 0; pixel_y = 25},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
||||||
"aQU" = (/obj/structure/closet/emcloset,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit)
|
"aQU" = (/obj/structure/closet/emcloset,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit)
|
||||||
"aQV" = (/obj/structure/closet/emcloset,/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/hallway/secondary/exit)
|
"aQV" = (/obj/structure/closet/emcloset,/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/hallway/secondary/exit)
|
||||||
"aQW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
"aQW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
||||||
@@ -2242,7 +2242,7 @@
|
|||||||
"aRf" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
|
"aRf" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
|
||||||
"aRg" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/beach/water{tag = "icon-seadeep"; icon_state = "seadeep"},/area/crew_quarters/fitness)
|
"aRg" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/beach/water{tag = "icon-seadeep"; icon_state = "seadeep"},/area/crew_quarters/fitness)
|
||||||
"aRh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
|
"aRh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
|
||||||
"aRi" = (/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/vending/cola,/turf/simulated/floor,/area/gateway)
|
"aRi" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/device/modkit/tajaran,/obj/item/device/modkit/tajaran,/obj/item/device/modkit/tajaran,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva)
|
||||||
"aRj" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/crew_quarters/locker)
|
"aRj" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/crew_quarters/locker)
|
||||||
"aRk" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/crew_quarters/locker)
|
"aRk" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/crew_quarters/locker)
|
||||||
"aRl" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor,/area/crew_quarters/locker)
|
"aRl" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor,/area/crew_quarters/locker)
|
||||||
@@ -2254,11 +2254,11 @@
|
|||||||
"aRr" = (/obj/machinery/vending/cigarette,/turf/simulated/floor,/area/crew_quarters/locker)
|
"aRr" = (/obj/machinery/vending/cigarette,/turf/simulated/floor,/area/crew_quarters/locker)
|
||||||
"aRs" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/crew_quarters/locker)
|
"aRs" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/crew_quarters/locker)
|
||||||
"aRt" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor,/area/crew_quarters/locker)
|
"aRt" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor,/area/crew_quarters/locker)
|
||||||
"aRu" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/table,/obj/item/weapon/deck,/turf/simulated/floor,/area/gateway)
|
"aRu" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/closet/wardrobe/black,/turf/simulated/floor,/area/gateway)
|
||||||
"aRv" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/table,/obj/item/weapon/cable_coil/random,/obj/item/weapon/cable_coil/random,/turf/simulated/floor,/area/storage/art)
|
"aRv" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/table,/obj/item/weapon/cable_coil/random,/obj/item/weapon/cable_coil/random,/turf/simulated/floor,/area/storage/art)
|
||||||
"aRw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/storage/art)
|
"aRw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/storage/art)
|
||||||
"aRx" = (/obj/machinery/vending/cola,/turf/simulated/floor{icon_state = "neutral"; dir = 5},/area/crew_quarters/fitness)
|
"aRx" = (/obj/machinery/vending/cola,/turf/simulated/floor{icon_state = "neutral"; dir = 5},/area/crew_quarters/fitness)
|
||||||
"aRy" = (/obj/machinery/gateway,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/effect/landmark{name = "JoinLateGateway"},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/gateway)
|
"aRy" = (/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/vending/cola,/turf/simulated/floor,/area/gateway)
|
||||||
"aRz" = (/obj/machinery/door/airlock{name = "Port Emergency Storage"; req_access_txt = "0"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/storage/emergency2)
|
"aRz" = (/obj/machinery/door/airlock{name = "Port Emergency Storage"; req_access_txt = "0"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/storage/emergency2)
|
||||||
"aRA" = (/obj/machinery/camera{c_tag = "Vault"; dir = 4; network = list("SS13")},/obj/structure/closet/crate{name = "Gold Crate"},/obj/item/stack/sheet/mineral/gold{pixel_x = -1; pixel_y = 5},/obj/item/stack/sheet/mineral/gold{pixel_y = 2},/obj/item/stack/sheet/mineral/gold{pixel_x = 1; pixel_y = -2},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30},/obj/item/weapon/storage/belt/champion,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "vault"; dir = 1},/area/security/nuke_storage)
|
"aRA" = (/obj/machinery/camera{c_tag = "Vault"; dir = 4; network = list("SS13")},/obj/structure/closet/crate{name = "Gold Crate"},/obj/item/stack/sheet/mineral/gold{pixel_x = -1; pixel_y = 5},/obj/item/stack/sheet/mineral/gold{pixel_y = 2},/obj/item/stack/sheet/mineral/gold{pixel_x = 1; pixel_y = -2},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30},/obj/item/weapon/storage/belt/champion,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "vault"; dir = 1},/area/security/nuke_storage)
|
||||||
"aRB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/storage/tools)
|
"aRB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/storage/tools)
|
||||||
@@ -2449,10 +2449,10 @@
|
|||||||
"aVe" = (/obj/structure/stool{pixel_y = 8},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/crew_quarters/sleep)
|
"aVe" = (/obj/structure/stool{pixel_y = 8},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/crew_quarters/sleep)
|
||||||
"aVf" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main)
|
"aVf" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main)
|
||||||
"aVg" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "escape"},/area/hallway/secondary/exit)
|
"aVg" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "escape"},/area/hallway/secondary/exit)
|
||||||
"aVh" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_north_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = "0"; req_one_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (EAST)"; icon_state = "intact-f"; dir = 4},/turf/simulated/floor,/area/hallway/secondary/exit)
|
"aVh" = (/obj/machinery/light/small{dir = 1},/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "escape_dock_south_airlock"; master_tag = "escape_dock"; pixel_y = -30; req_one_access_txt = "13"; tag_airpump = "escape_dock_south_pump"; tag_chamber_sensor = "escape_dock_south_sensor"; tag_exterior_door = "escape_dock_south_outer"; tag_interior_door = "escape_dock_south_inner"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "escape_dock_south_pump"},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
||||||
"aVi" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor,/area/hallway/secondary/exit)
|
"aVi" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (EAST)"; icon_state = "intact-f"; dir = 4},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_inner"; locked = 1; name = "Escape Airlock"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
||||||
"aVj" = (/obj/machinery/light/small,/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "escape_dock_north_airlock"; master_tag = "escape_dock"; pixel_y = 30; req_one_access_txt = "13"; tag_airpump = "escape_dock_north_pump"; tag_chamber_sensor = "escape_dock_north_sensor"; tag_exterior_door = "escape_dock_north_outer"; tag_interior_door = "escape_dock_north_inner"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "escape_dock_north_pump"},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
"aVj" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (EAST)"; icon_state = "intact-f"; dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_south_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = -25; req_access_txt = "0"; req_one_access_txt = "13"},/turf/simulated/floor,/area/hallway/secondary/exit)
|
||||||
"aVk" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_north_inner"; locked = 1; name = "Escape Airlock"; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (EAST)"; icon_state = "intact-f"; dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
"aVk" = (/obj/machinery/atmospherics/pipe/manifold/hidden{tag = "icon-manifold-f (WEST)"; icon_state = "manifold-f"; dir = 8},/turf/simulated/floor,/area/hallway/secondary/exit)
|
||||||
"aVl" = (/turf/space,/area/shuttle/transport1/station)
|
"aVl" = (/turf/space,/area/shuttle/transport1/station)
|
||||||
"aVm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
|
"aVm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
|
||||||
"aVn" = (/obj/machinery/door/airlock/maintenance{name = "Chapel Maintenance"; req_access_txt = "0"; req_one_access_txt = "12;22"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/chapel/main)
|
"aVn" = (/obj/machinery/door/airlock/maintenance{name = "Chapel Maintenance"; req_access_txt = "0"; req_one_access_txt = "12;22"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/chapel/main)
|
||||||
@@ -2504,7 +2504,7 @@
|
|||||||
"aWh" = (/obj/machinery/processor,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
|
"aWh" = (/obj/machinery/processor,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
|
||||||
"aWi" = (/obj/effect/landmark/start{name = "Botanist"},/turf/simulated/floor,/area/hydroponics)
|
"aWi" = (/obj/effect/landmark/start{name = "Botanist"},/turf/simulated/floor,/area/hydroponics)
|
||||||
"aWj" = (/obj/structure/table,/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
|
"aWj" = (/obj/structure/table,/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
|
||||||
"aWk" = (/obj/machinery/gateway{dir = 6},/obj/effect/landmark{name = "JoinLateGateway"},/turf/simulated/floor{icon_state = "vault"; dir = 1},/area/gateway)
|
"aWk" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/table,/obj/item/weapon/deck,/turf/simulated/floor,/area/gateway)
|
||||||
"aWl" = (/obj/structure/table/woodentable,/obj/item/weapon/paper,/turf/simulated/floor/wood,/area/library)
|
"aWl" = (/obj/structure/table/woodentable,/obj/item/weapon/paper,/turf/simulated/floor/wood,/area/library)
|
||||||
"aWm" = (/obj/structure/stool/bed/chair/comfy/black{dir = 8},/turf/simulated/floor/wood,/area/library)
|
"aWm" = (/obj/structure/stool/bed/chair/comfy/black{dir = 8},/turf/simulated/floor/wood,/area/library)
|
||||||
"aWn" = (/obj/structure/table/woodentable,/obj/item/device/camera_film,/obj/item/device/camera_film,/turf/simulated/floor/wood,/area/library)
|
"aWn" = (/obj/structure/table/woodentable,/obj/item/device/camera_film,/obj/item/device/camera_film,/turf/simulated/floor/wood,/area/library)
|
||||||
@@ -2514,7 +2514,7 @@
|
|||||||
"aWr" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "neutral"; dir = 4},/area/crew_quarters/sleep)
|
"aWr" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "neutral"; dir = 4},/area/crew_quarters/sleep)
|
||||||
"aWs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/gateway)
|
"aWs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/gateway)
|
||||||
"aWt" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
|
"aWt" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
|
||||||
"aWu" = (/obj/machinery/gateway{dir = 10},/obj/effect/landmark{name = "JoinLateGateway"},/turf/simulated/floor{icon_state = "vault"; dir = 4},/area/gateway)
|
"aWu" = (/obj/machinery/gateway,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/effect/landmark{name = "JoinLateGateway"},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/gateway)
|
||||||
"aWv" = (/obj/structure/table/reinforced,/obj/machinery/light{dir = 1},/obj/machinery/faxmachine{anchored = 0; department = "Internal Affairs"},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
|
"aWv" = (/obj/structure/table/reinforced,/obj/machinery/light{dir = 1},/obj/machinery/faxmachine{anchored = 0; department = "Internal Affairs"},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
|
||||||
"aWw" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/hand_labeler,/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
|
"aWw" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/hand_labeler,/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
|
||||||
"aWx" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor,/area/gateway)
|
"aWx" = (/obj/structure/stool,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor,/area/gateway)
|
||||||
@@ -2710,7 +2710,7 @@
|
|||||||
"baf" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor{icon_state = "delivery"},/area/crew_quarters/locker)
|
"baf" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor{icon_state = "delivery"},/area/crew_quarters/locker)
|
||||||
"bag" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor{icon_state = "delivery"},/area/crew_quarters/locker)
|
"bag" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor{icon_state = "delivery"},/area/crew_quarters/locker)
|
||||||
"bah" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/crew_quarters/locker)
|
"bah" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/crew_quarters/locker)
|
||||||
"bai" = (/obj/machinery/computer/shuttle_control/emergency,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
|
"bai" = (/obj/machinery/gateway{dir = 6},/obj/effect/landmark{name = "JoinLateGateway"},/turf/simulated/floor{icon_state = "vault"; dir = 1},/area/gateway)
|
||||||
"baj" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
|
"baj" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
|
||||||
"bak" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/storage/primary)
|
"bak" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/storage/primary)
|
||||||
"bal" = (/turf/simulated/wall,/area/quartermaster/storage)
|
"bal" = (/turf/simulated/wall,/area/quartermaster/storage)
|
||||||
@@ -2893,13 +2893,13 @@
|
|||||||
"bdG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
|
"bdG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
|
||||||
"bdH" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_x = -2; pixel_y = -28},/turf/simulated/floor{dir = 10; icon_state = "neutral"},/area/crew_quarters/fitness)
|
"bdH" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_x = -2; pixel_y = -28},/turf/simulated/floor{dir = 10; icon_state = "neutral"},/area/crew_quarters/fitness)
|
||||||
"bdI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
|
"bdI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
|
||||||
"bdJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/library)
|
"bdJ" = (/obj/machinery/gateway{dir = 10},/obj/effect/landmark{name = "JoinLateGateway"},/turf/simulated/floor{icon_state = "vault"; dir = 4},/area/gateway)
|
||||||
"bdK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
|
"bdK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
|
||||||
"bdL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
|
"bdL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
|
||||||
"bdM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_chapel_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
|
"bdM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_chapel_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
|
||||||
"bdN" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Bar"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/crew_quarters/bar)
|
"bdN" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Bar"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/crew_quarters/bar)
|
||||||
"bdO" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor,/area/hallway/secondary/exit)
|
"bdO" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor,/area/hallway/secondary/exit)
|
||||||
"bdP" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_north_outer"; locked = 1; name = "Escape Airlock"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
"bdP" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor/plating,/area/security/vacantoffice)
|
||||||
"bdQ" = (/turf/space,/area/shuttle/specops/station)
|
"bdQ" = (/turf/space,/area/shuttle/specops/station)
|
||||||
"bdR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
|
"bdR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
|
||||||
"bdS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry)
|
"bdS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry)
|
||||||
@@ -2932,7 +2932,7 @@
|
|||||||
"bet" = (/turf/simulated/wall,/area/turret_protected/ai)
|
"bet" = (/turf/simulated/wall,/area/turret_protected/ai)
|
||||||
"beu" = (/obj/structure/closet,/obj/item/weapon/storage/backpack,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
|
"beu" = (/obj/structure/closet,/obj/item/weapon/storage/backpack,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
|
||||||
"bev" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
|
"bev" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
|
||||||
"bew" = (/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "escape_dock_north_sensor"; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
"bew" = (/obj/machinery/door/airlock/maintenance{name = "Teleporter Maintenance"; req_access_txt = "17"},/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/teleporter)
|
||||||
"bex" = (/obj/machinery/vending/coffee,/turf/simulated/floor/wood,/area/crew_quarters/captain)
|
"bex" = (/obj/machinery/vending/coffee,/turf/simulated/floor/wood,/area/crew_quarters/captain)
|
||||||
"bey" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
|
"bey" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
|
||||||
"bez" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/fpmaint2)
|
"bez" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/fpmaint2)
|
||||||
@@ -3009,7 +3009,7 @@
|
|||||||
"bfS" = (/obj/machinery/newscaster{pixel_y = -32},/turf/simulated/floor{dir = 2; icon_state = "escape"},/area/hallway/secondary/exit)
|
"bfS" = (/obj/machinery/newscaster{pixel_y = -32},/turf/simulated/floor{dir = 2; icon_state = "escape"},/area/hallway/secondary/exit)
|
||||||
"bfT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 2; icon_state = "escape"},/area/hallway/secondary/exit)
|
"bfT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 2; icon_state = "escape"},/area/hallway/secondary/exit)
|
||||||
"bfU" = (/obj/machinery/light,/turf/simulated/floor{dir = 2; icon_state = "escape"},/area/hallway/secondary/exit)
|
"bfU" = (/obj/machinery/light,/turf/simulated/floor{dir = 2; icon_state = "escape"},/area/hallway/secondary/exit)
|
||||||
"bfV" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor,/area/hallway/secondary/exit)
|
"bfV" = (/obj/machinery/light/small,/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "escape_dock_north_airlock"; master_tag = "escape_dock"; pixel_y = 30; req_one_access_txt = "13"; tag_airpump = "escape_dock_north_pump"; tag_chamber_sensor = "escape_dock_north_sensor"; tag_exterior_door = "escape_dock_north_outer"; tag_interior_door = "escape_dock_north_inner"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "escape_dock_north_pump"},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
||||||
"bfW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
"bfW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
||||||
"bfX" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor,/area/hallway/secondary/entry)
|
"bfX" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor,/area/hallway/secondary/entry)
|
||||||
"bfY" = (/obj/machinery/conveyor{dir = 5; id = "garbage"},/turf/simulated/floor/plating,/area/maintenance/disposal)
|
"bfY" = (/obj/machinery/conveyor{dir = 5; id = "garbage"},/turf/simulated/floor/plating,/area/maintenance/disposal)
|
||||||
@@ -3032,7 +3032,7 @@
|
|||||||
"bgp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
|
"bgp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
|
||||||
"bgq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
|
"bgq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
|
||||||
"bgr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/crew_quarters/fitness)
|
"bgr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/crew_quarters/fitness)
|
||||||
"bgs" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_1_berth"; pixel_x = -25; pixel_y = 30; tag_door = "escape_pod_1_berth_hatch"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry)
|
"bgs" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_north_inner"; locked = 1; name = "Escape Airlock"; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (EAST)"; icon_state = "intact-f"; dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
||||||
"bgt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/aft)
|
"bgt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/aft)
|
||||||
"bgu" = (/obj/structure/sign/electricshock{pixel_y = -32},/turf/space,/area)
|
"bgu" = (/obj/structure/sign/electricshock{pixel_y = -32},/turf/space,/area)
|
||||||
"bgv" = (/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor/carpet,/area/engine/break_room)
|
"bgv" = (/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor/carpet,/area/engine/break_room)
|
||||||
@@ -3176,7 +3176,7 @@
|
|||||||
"bjd" = (/turf/simulated/floor/engine/vacuum,/area/rnd/mixing)
|
"bjd" = (/turf/simulated/floor/engine/vacuum,/area/rnd/mixing)
|
||||||
"bje" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/closet/hydrant{pixel_x = -32},/turf/simulated/floor/plating,/area/storage/emergency)
|
"bje" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/closet/hydrant{pixel_x = -32},/turf/simulated/floor/plating,/area/storage/emergency)
|
||||||
"bjf" = (/turf/simulated/wall/r_wall,/area/rnd/mixing)
|
"bjf" = (/turf/simulated/wall/r_wall,/area/rnd/mixing)
|
||||||
"bjg" = (/obj/structure/lattice,/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "escape_dock_north_airlock"; name = "exterior access button"; pixel_x = 5; pixel_y = 25; req_access_txt = "0"; req_one_access_txt = "13"},/turf/space,/area)
|
"bjg" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_north_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = "0"; req_one_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (EAST)"; icon_state = "intact-f"; dir = 4},/turf/simulated/floor,/area/hallway/secondary/exit)
|
||||||
"bjh" = (/obj/machinery/camera{c_tag = "Arrivals Auxiliary Docking"; dir = 8; network = list("SS13")},/turf/simulated/floor,/area/hallway/secondary/entry)
|
"bjh" = (/obj/machinery/camera{c_tag = "Arrivals Auxiliary Docking"; dir = 8; network = list("SS13")},/turf/simulated/floor,/area/hallway/secondary/entry)
|
||||||
"bji" = (/obj/machinery/conveyor{dir = 1; id = "garbage"},/obj/structure/sign/vacuum{pixel_x = -32},/turf/simulated/floor/plating,/area/maintenance/disposal)
|
"bji" = (/obj/machinery/conveyor{dir = 1; id = "garbage"},/obj/structure/sign/vacuum{pixel_x = -32},/turf/simulated/floor/plating,/area/maintenance/disposal)
|
||||||
"bjj" = (/obj/machinery/door_control{id = "Disposal Exit"; name = "Disposal Vent Control"; pixel_x = -25; pixel_y = 4; req_access_txt = "12"},/obj/machinery/driver_button{id = "trash"; pixel_x = -26; pixel_y = -6},/turf/simulated/floor/plating,/area/maintenance/disposal)
|
"bjj" = (/obj/machinery/door_control{id = "Disposal Exit"; name = "Disposal Vent Control"; pixel_x = -25; pixel_y = 4; req_access_txt = "12"},/obj/machinery/driver_button{id = "trash"; pixel_x = -26; pixel_y = -6},/turf/simulated/floor/plating,/area/maintenance/disposal)
|
||||||
@@ -4025,7 +4025,7 @@
|
|||||||
"bzu" = (/turf/simulated/floor{dir = 4; icon_state = "loadingarea"},/area/hallway/primary/central)
|
"bzu" = (/turf/simulated/floor{dir = 4; icon_state = "loadingarea"},/area/hallway/primary/central)
|
||||||
"bzv" = (/obj/structure/filingcabinet/chestdrawer,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/crew_quarters/heads)
|
"bzv" = (/obj/structure/filingcabinet/chestdrawer,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/crew_quarters/heads)
|
||||||
"bzw" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Head of Personnel's Desk"; departmentType = 5; name = "Head of Personnel RC"; pixel_y = -30},/obj/machinery/camera{c_tag = "Head of Personnel's Office"; dir = 1},/turf/simulated/floor,/area/crew_quarters/heads)
|
"bzw" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Head of Personnel's Desk"; departmentType = 5; name = "Head of Personnel RC"; pixel_y = -30},/obj/machinery/camera{c_tag = "Head of Personnel's Office"; dir = 1},/turf/simulated/floor,/area/crew_quarters/heads)
|
||||||
"bzx" = (/obj/structure/table,/obj/item/device/eftpos{eftpos_name = "HoP EFTPOS scanner"},/turf/simulated/floor,/area/crew_quarters/heads)
|
"bzx" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor,/area/hallway/secondary/exit)
|
||||||
"bzy" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/wood,/area/medical/psych)
|
"bzy" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/wood,/area/medical/psych)
|
||||||
"bzz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/wall/r_wall,/area/turret_protected/ai_server_room)
|
"bzz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/wall/r_wall,/area/turret_protected/ai_server_room)
|
||||||
"bzA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/crew_quarters/sleep/engi)
|
"bzA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/crew_quarters/sleep/engi)
|
||||||
@@ -5056,7 +5056,7 @@
|
|||||||
"bTl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
|
"bTl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
|
||||||
"bTm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/lattice,/turf/space,/area)
|
"bTm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/lattice,/turf/space,/area)
|
||||||
"bTn" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/mineral/phoron,/obj/item/stack/sheet/mineral/phoron,/obj/item/stack/sheet/mineral/phoron,/obj/item/stack/sheet/mineral/phoron,/obj/item/stack/sheet/mineral/phoron,/obj/item/stack/sheet/mineral/phoron,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
|
"bTn" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/mineral/phoron,/obj/item/stack/sheet/mineral/phoron,/obj/item/stack/sheet/mineral/phoron,/obj/item/stack/sheet/mineral/phoron,/obj/item/stack/sheet/mineral/phoron,/obj/item/stack/sheet/mineral/phoron,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
|
||||||
"bTo" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
|
"bTo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/bridge/meeting_room)
|
||||||
"bTp" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Bridge"; departmentType = 5; name = "Bridge RC"; pixel_y = -30},/turf/simulated/floor/wood,/area/bridge/meeting_room)
|
"bTp" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Bridge"; departmentType = 5; name = "Bridge RC"; pixel_y = -30},/turf/simulated/floor/wood,/area/bridge/meeting_room)
|
||||||
"bTq" = (/turf/simulated/wall/r_wall,/area/hallway/primary/starboard)
|
"bTq" = (/turf/simulated/wall/r_wall,/area/hallway/primary/starboard)
|
||||||
"bTr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "heads_meeting"; name = "Meeting Room Window Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/bridge/meeting_room)
|
"bTr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "heads_meeting"; name = "Meeting Room Window Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/bridge/meeting_room)
|
||||||
@@ -5471,9 +5471,9 @@
|
|||||||
"cbk" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/atmos)
|
"cbk" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/atmos)
|
||||||
"cbl" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
|
"cbl" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
|
||||||
"cbm" = (/obj/machinery/atmospherics/binary/pump{dir = 2; icon_state = "intact_off"; name = "Gas pump"; on = 0},/turf/simulated/floor,/area/atmos)
|
"cbm" = (/obj/machinery/atmospherics/binary/pump{dir = 2; icon_state = "intact_off"; name = "Gas pump"; on = 0},/turf/simulated/floor,/area/atmos)
|
||||||
"cbn" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_2_berth"; pixel_x = -25; pixel_y = 30; tag_door = "escape_pod_2_berth_hatch"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry)
|
"cbn" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_north_outer"; locked = 1; name = "Escape Airlock"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
||||||
"cbo" = (/obj/structure/stool/bed/chair{dir = 8},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod5/station)
|
"cbo" = (/obj/structure/stool/bed/chair{dir = 8},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod5/station)
|
||||||
"cbp" = (/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry)
|
"cbp" = (/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "escape_dock_north_sensor"; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
||||||
"cbq" = (/obj/machinery/atmospherics/binary/pump{dir = 1; icon_state = "intact_off"; name = "Gas pump"; on = 0},/turf/simulated/floor,/area/atmos)
|
"cbq" = (/obj/machinery/atmospherics/binary/pump{dir = 1; icon_state = "intact_off"; name = "Gas pump"; on = 0},/turf/simulated/floor,/area/atmos)
|
||||||
"cbr" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor,/area/atmos)
|
"cbr" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor,/area/atmos)
|
||||||
"cbs" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor,/area/atmos)
|
"cbs" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor,/area/atmos)
|
||||||
@@ -6162,7 +6162,7 @@
|
|||||||
"coz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
|
"coz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
|
||||||
"coA" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
|
"coA" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
|
||||||
"coB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
|
"coB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
|
||||||
"coC" = (/obj/structure/table/reinforced,/turf/simulated/floor,/area/hallway/primary/aft)
|
"coC" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor/plating,/area/security/vacantoffice)
|
||||||
"coD" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/obj/item/weapon/folder/yellow,/turf/simulated/floor,/area/hallway/primary/aft)
|
"coD" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/obj/item/weapon/folder/yellow,/turf/simulated/floor,/area/hallway/primary/aft)
|
||||||
"coE" = (/obj/structure/table/reinforced,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/hallway/primary/aft)
|
"coE" = (/obj/structure/table/reinforced,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/hallway/primary/aft)
|
||||||
"coF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
|
"coF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
|
||||||
@@ -6817,7 +6817,7 @@
|
|||||||
"cBe" = (/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor2"},/area/centcom/evac)
|
"cBe" = (/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor2"},/area/centcom/evac)
|
||||||
"cBf" = (/obj/structure/stool,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
|
"cBf" = (/obj/structure/stool,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
|
||||||
"cBg" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 30; pixel_y = 0; req_access_txt = "0"},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
|
"cBg" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 30; pixel_y = 0; req_access_txt = "0"},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
|
||||||
"cBh" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/embedded_controller/radio/docking_port_multi{child_names_txt = "Airlock One;Airlock Two"; child_tags_txt = "escape_dock_north_airlock;escape_dock_south_airlock"; frequency = 1380; id_tag = "escape_dock"; pixel_x = 0; pixel_y = -25; req_one_access_txt = "13"},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/hallway/secondary/exit)
|
"cBh" = (/obj/structure/lattice,/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "escape_dock_north_airlock"; name = "exterior access button"; pixel_x = 5; pixel_y = 25; req_access_txt = "0"; req_one_access_txt = "13"},/turf/space,/area)
|
||||||
"cBi" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
|
"cBi" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
|
||||||
"cBj" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 0},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
|
"cBj" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 0},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
|
||||||
"cBk" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
|
"cBk" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
|
||||||
@@ -7525,7 +7525,7 @@
|
|||||||
"cOK" = (/turf/unsimulated/beach/sand{tag = "icon-seashallow"; icon_state = "seashallow"},/area/centcom/ferry)
|
"cOK" = (/turf/unsimulated/beach/sand{tag = "icon-seashallow"; icon_state = "seashallow"},/area/centcom/ferry)
|
||||||
"cOL" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "engine_sensor"; output = 63},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_room)
|
"cOL" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "engine_sensor"; output = 63},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_room)
|
||||||
"cOM" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
|
"cOM" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
|
||||||
"cON" = (/obj/structure/lattice,/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "escape_dock_south_airlock"; name = "exterior access button"; pixel_x = 5; pixel_y = -25; req_access_txt = "0"; req_one_access_txt = "13"},/turf/space,/area)
|
"cON" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_2_hatch"; locked = 1; name = "Escape Pod Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station)
|
||||||
"cOO" = (/turf/unsimulated/beach/sand{tag = "icon-beachcorner"; icon_state = "beachcorner"},/area/centcom/ferry)
|
"cOO" = (/turf/unsimulated/beach/sand{tag = "icon-beachcorner"; icon_state = "beachcorner"},/area/centcom/ferry)
|
||||||
"cOP" = (/turf/unsimulated/beach/sand{tag = "icon-beach (SOUTHEAST)"; icon_state = "beach"; dir = 6},/area/centcom/ferry)
|
"cOP" = (/turf/unsimulated/beach/sand{tag = "icon-beach (SOUTHEAST)"; icon_state = "beach"; dir = 6},/area/centcom/ferry)
|
||||||
"cOQ" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"; dir = 4},/turf/space,/area/shuttle/specops/centcom)
|
"cOQ" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"; dir = 4},/turf/space,/area/shuttle/specops/centcom)
|
||||||
@@ -7600,7 +7600,7 @@
|
|||||||
"cQh" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/evac)
|
"cQh" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/evac)
|
||||||
"cQi" = (/obj/machinery/sleeper{icon_state = "sleeper_0-r"; orient = "RIGHT"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
|
"cQi" = (/obj/machinery/sleeper{icon_state = "sleeper_0-r"; orient = "RIGHT"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
|
||||||
"cQj" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/shuttle/escape/centcom)
|
"cQj" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/shuttle/escape/centcom)
|
||||||
"cQk" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (EAST)"; icon_state = "intact-f"; dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_south_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = -25; req_access_txt = "0"; req_one_access_txt = "13"},/turf/simulated/floor,/area/hallway/secondary/exit)
|
"cQk" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_1_hatch"; locked = 1; name = "Escape Pod Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station)
|
||||||
"cQl" = (/turf/unsimulated/floor{dir = 10; icon_state = "whitegreen"},/area/centcom/holding)
|
"cQl" = (/turf/unsimulated/floor{dir = 10; icon_state = "whitegreen"},/area/centcom/holding)
|
||||||
"cQm" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/transport1/centcom)
|
"cQm" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/transport1/centcom)
|
||||||
"cQn" = (/turf/simulated/shuttle/wall{icon_state = "swall13"; dir = 2},/area/shuttle/transport1/centcom)
|
"cQn" = (/turf/simulated/shuttle/wall{icon_state = "swall13"; dir = 2},/area/shuttle/transport1/centcom)
|
||||||
@@ -7825,7 +7825,7 @@
|
|||||||
"cUy" = (/turf/simulated/shuttle/wall{dir = 8; icon_state = "swall_floor_f6"},/area/supply/dock)
|
"cUy" = (/turf/simulated/shuttle/wall{dir = 8; icon_state = "swall_floor_f6"},/area/supply/dock)
|
||||||
"cUz" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
|
"cUz" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
|
||||||
"cUA" = (/obj/machinery/door/airlock/glass{name = "Arrivals Processing"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
|
"cUA" = (/obj/machinery/door/airlock/glass{name = "Arrivals Processing"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
|
||||||
"cUB" = (/obj/machinery/atmospherics/pipe/manifold/hidden{tag = "icon-manifold-f (WEST)"; icon_state = "manifold-f"; dir = 8},/turf/simulated/floor,/area/hallway/secondary/exit)
|
"cUB" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_2_berth_hatch"; locked = 1; name = "Escape Pod"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
|
||||||
"cUC" = (/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/wizard_station)
|
"cUC" = (/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/wizard_station)
|
||||||
"cUD" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/evac)
|
"cUD" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/evac)
|
||||||
"cUE" = (/turf/unsimulated/floor{dir = 4; icon_state = "carpetside"},/area/wizard_station)
|
"cUE" = (/turf/unsimulated/floor{dir = 4; icon_state = "carpetside"},/area/wizard_station)
|
||||||
@@ -8147,7 +8147,7 @@
|
|||||||
"daI" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
|
"daI" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/turf/space,/area/turret_protected/tcomsat)
|
||||||
"daJ" = (/obj/machinery/computer/crew,/obj/machinery/status_display{pixel_y = 30},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
|
"daJ" = (/obj/machinery/computer/crew,/obj/machinery/status_display{pixel_y = 30},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
|
||||||
"daK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/chamber)
|
"daK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/tcommsat/chamber)
|
||||||
"daL" = (/obj/machinery/light/small{dir = 1},/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "escape_dock_south_airlock"; master_tag = "escape_dock"; pixel_y = -30; req_one_access_txt = "13"; tag_airpump = "escape_dock_south_pump"; tag_chamber_sensor = "escape_dock_south_sensor"; tag_exterior_door = "escape_dock_south_outer"; tag_interior_door = "escape_dock_south_inner"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "escape_dock_south_pump"},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
"daL" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_1_berth_hatch"; locked = 1; name = "Escape Pod"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
|
||||||
"daM" = (/turf/simulated/shuttle/wall{dir = 1; icon_state = "wall_space"},/area/shuttle/escape/centcom)
|
"daM" = (/turf/simulated/shuttle/wall{dir = 1; icon_state = "wall_space"},/area/shuttle/escape/centcom)
|
||||||
"daN" = (/obj/machinery/computer/security,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
|
"daN" = (/obj/machinery/computer/security,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
|
||||||
"daO" = (/obj/machinery/door/airlock/maintenance_hatch{name = "Telecoms Server Access"; req_access_txt = "61"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcommsat/chamber)
|
"daO" = (/obj/machinery/door/airlock/maintenance_hatch{name = "Telecoms Server Access"; req_access_txt = "61"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/tcommsat/chamber)
|
||||||
@@ -8868,30 +8868,36 @@
|
|||||||
"doB" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/structure/table/reinforced,/obj/item/weapon/wrench,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 9},/area/mine/explored)
|
"doB" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/structure/table/reinforced,/obj/item/weapon/wrench,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 9},/area/mine/explored)
|
||||||
"doC" = (/obj/machinery/mining/drill,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored)
|
"doC" = (/obj/machinery/mining/drill,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored)
|
||||||
"doD" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 5},/area/mine/explored)
|
"doD" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 5},/area/mine/explored)
|
||||||
"doE" = (/obj/machinery/door/airlock/maintenance{name = "Teleporter Maintenance"; req_access_txt = "17"},/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/teleporter)
|
"doE" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_2_berth"; pixel_x = -25; pixel_y = 30; tag_door = "escape_pod_2_berth_hatch"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry)
|
||||||
"doF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall/r_wall,/area/bridge/meeting_room)
|
"doF" = (/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry)
|
||||||
"doG" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (EAST)"; icon_state = "intact-f"; dir = 4},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_inner"; locked = 1; name = "Escape Airlock"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
"doG" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_1_berth"; pixel_x = -25; pixel_y = 30; tag_door = "escape_pod_1_berth_hatch"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry)
|
||||||
"doH" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_outer"; locked = 1; name = "Escape Airlock"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
"doH" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_1"; pixel_x = -25; pixel_y = 0; req_access_txt = "0"; req_one_access_txt = "0"; tag_door = "escape_pod_1_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station)
|
||||||
"doI" = (/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "escape_dock_south_sensor"; pixel_x = 0; pixel_y = 25},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
"doI" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_2"; pixel_x = -25; pixel_y = 0; req_access_txt = "0"; req_one_access_txt = "0"; tag_door = "escape_pod_2_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station)
|
||||||
"doJ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/hallway/secondary/exit)
|
"doJ" = (/obj/machinery/lapvend,/turf/simulated/floor,/area/storage/primary)
|
||||||
"doK" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_5"; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; req_one_access_txt = "0"; tag_door = "escape_pod_5_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod5/station)
|
"doK" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_5"; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; req_one_access_txt = "0"; tag_door = "escape_pod_5_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod5/station)
|
||||||
"doL" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/wall,/area/hallway/secondary/exit)
|
"doL" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_5_hatch"; locked = 1; name = "Escape Pod Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod5/station)
|
||||||
"doM" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/storage/emergency)
|
"doM" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_5_berth_hatch"; locked = 1; name = "Escape Pod"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/aft)
|
||||||
"doN" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/extinguisher,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_shuttle"; pixel_x = 8; pixel_y = 25; req_access_txt = "0"; req_one_access_txt = "13"; tag_door = "escape_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
|
"doN" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_5_berth"; pixel_x = -25; pixel_y = 25; tag_door = "escape_pod_5_berth_hatch"},/turf/simulated/floor/plating,/area/maintenance/aft)
|
||||||
"doO" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "centcom_dock_airlock"; locked = 1; name = "Arrivals Airlock"; req_access_txt = "13"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/evac)
|
"doO" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/medbreak)
|
||||||
"doP" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
|
"doP" = (/obj/structure/table,/obj/item/device/eftpos{eftpos_name = "HoP EFTPOS scanner"},/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor,/area/crew_quarters/heads)
|
||||||
"doQ" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "centcom_dock"; name = "docking port controller"; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; req_one_access_txt = "13"; tag_door = "centcom_dock_airlock"},/turf/unsimulated/floor{dir = 6; icon_state = "warning"},/area/centcom/evac)
|
"doQ" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/storage/emergency)
|
||||||
"doR" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_5_hatch"; locked = 1; name = "Escape Pod Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod5/station)
|
"doR" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/wall,/area/hallway/secondary/exit)
|
||||||
"doS" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_5_berth_hatch"; locked = 1; name = "Escape Pod"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/aft)
|
"doS" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/embedded_controller/radio/docking_port_multi{child_names_txt = "Airlock One;Airlock Two"; child_tags_txt = "escape_dock_north_airlock;escape_dock_south_airlock"; frequency = 1380; id_tag = "escape_dock"; pixel_x = 0; pixel_y = -25; req_one_access_txt = "13"},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/hallway/secondary/exit)
|
||||||
"doT" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_5_berth"; pixel_x = -25; pixel_y = 25; tag_door = "escape_pod_5_berth_hatch"},/turf/simulated/floor/plating,/area/maintenance/aft)
|
"doT" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/hallway/secondary/exit)
|
||||||
"doU" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_1_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock"; req_access_txt = "13"},/turf/unsimulated/floor,/area/centcom/evac)
|
"doU" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor,/area/hallway/primary/aft)
|
||||||
"doV" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_2_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock"; req_access_txt = "13"},/turf/unsimulated/floor,/area/centcom/evac)
|
"doV" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_1_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock"; req_access_txt = "13"},/turf/unsimulated/floor,/area/centcom/evac)
|
||||||
"doW" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_1_recovery"; pixel_x = 25; pixel_y = 30; req_access_txt = "0"; req_one_access_txt = "13"; tag_door = "escape_pod_1_recovery_hatch"},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor2"},/area/centcom/evac)
|
"doW" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_2_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock"; req_access_txt = "13"},/turf/unsimulated/floor,/area/centcom/evac)
|
||||||
"doX" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_2_recovery"; pixel_x = -25; pixel_y = 30; req_access_txt = "0"; req_one_access_txt = "13"; tag_door = "escape_pod_2_recovery_hatch"},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor2"},/area/centcom/evac)
|
"doX" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_1_recovery"; pixel_x = 25; pixel_y = 30; req_access_txt = "0"; req_one_access_txt = "13"; tag_door = "escape_pod_1_recovery_hatch"},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor2"},/area/centcom/evac)
|
||||||
"doY" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_5_recovery"; pixel_x = -25; pixel_y = 25; req_access_txt = "0"; req_one_access_txt = "13"; tag_door = "escape_pod_5_recovery_hatch"},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor2"},/area/centcom/evac)
|
"doY" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_2_recovery"; pixel_x = -25; pixel_y = 30; req_access_txt = "0"; req_one_access_txt = "13"; tag_door = "escape_pod_2_recovery_hatch"},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor2"},/area/centcom/evac)
|
||||||
"doZ" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_5_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock"; req_access_txt = "13"},/turf/unsimulated/floor,/area/centcom/evac)
|
"doZ" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_3_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock"; req_access_txt = "13"},/turf/unsimulated/floor,/area/centcom/evac)
|
||||||
"dpa" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_3_recovery"; pixel_x = 25; pixel_y = -25; req_access_txt = "0"; req_one_access_txt = "13"; tag_door = "escape_pod_3_recovery_hatch"},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor2"},/area/centcom/evac)
|
"dpa" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_3_recovery"; pixel_x = 25; pixel_y = -25; req_access_txt = "0"; req_one_access_txt = "13"; tag_door = "escape_pod_3_recovery_hatch"},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor2"},/area/centcom/evac)
|
||||||
"dpb" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_3_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock"; req_access_txt = "13"},/turf/unsimulated/floor,/area/centcom/evac)
|
"dpb" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_5_recovery"; pixel_x = -25; pixel_y = 25; req_access_txt = "0"; req_one_access_txt = "13"; tag_door = "escape_pod_5_recovery_hatch"},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor2"},/area/centcom/evac)
|
||||||
|
"dpc" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_5_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock"; req_access_txt = "13"},/turf/unsimulated/floor,/area/centcom/evac)
|
||||||
|
"dpd" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
|
||||||
|
"dpe" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "centcom_dock_airlock"; locked = 1; name = "Arrivals Airlock"; req_access_txt = "13"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/evac)
|
||||||
|
"dpf" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "centcom_dock"; name = "docking port controller"; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; req_one_access_txt = "13"; tag_door = "centcom_dock_airlock"},/turf/unsimulated/floor{dir = 6; icon_state = "warning"},/area/centcom/evac)
|
||||||
|
"dpg" = (/obj/machinery/computer/shuttle_control/emergency,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
|
||||||
|
"dph" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/extinguisher,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_shuttle"; pixel_x = 8; pixel_y = 25; req_access_txt = "0"; req_one_access_txt = "13"; tag_door = "escape_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
|
||||||
"dqT" = (/turf/simulated/mineral,/area/mine/unexplored)
|
"dqT" = (/turf/simulated/mineral,/area/mine/unexplored)
|
||||||
"dqU" = (/turf/space,/area/syndicate_station/mining)
|
"dqU" = (/turf/space,/area/syndicate_station/mining)
|
||||||
"dqV" = (/obj/structure/transit_tube{icon_state = "D-SE"},/obj/structure/lattice,/turf/space,/area)
|
"dqV" = (/obj/structure/transit_tube{icon_state = "D-SE"},/obj/structure/lattice,/turf/space,/area)
|
||||||
@@ -10709,7 +10715,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
|||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcaaaaaaaaaaaaaaaaaaaaaaaaaaiaiqantansaaPaitanqaivaniahYaixaiyangahDanBaiBahGaiCanAagDaiDanzanvanyanuaiIagHaiJaiKaiLacfaceaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcaaaaaaaaaaaaaaaaaaaaaaaaaaiaiqantansaaPaitanqaivaniahYaixaiyangahDanBaiBahGaiCanAagDaiDanzanvanyanuaiIagHaiJaiKaiLacfaceaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcaaaaaaaaaaaaaeFaeFaeFaeFagXaiManPanOaeFaiPanMaiRaniahYaenaiSanGaiUanFaiWaenaiXanEaeUaiZakBanCaceajbajcajdajeajfajgajhaceaceacfacfacfacfacfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajiaaaaaaaaaajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcaaaaaaaaaaaaaeFaeFaeFaeFagXaiManPanOaeFaiPanMaiRaniahYaenaiSanGaiUanFaiWaenaiXanEaeUaiZakBanCaceajbajcajdajeajfajgajhaceaceacfacfacfacfacfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajiaaaaaaaaaajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcaaaaaaaafaaaaeFajjajkajlajmajnagbagcaeFajqageajqagdajqaenahbagfajtafTahfaenaeFafYajvajwafXagaaceafZajAajAajBaceakuajhajhaceajDajEajFajFajGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcaaaaaaaafaaaaeFajjajkajlajmajnagbagcaeFajqageajqagdajqaenahbagfajtafTahfaenaeFafYajvajwafXagaaceafZajAajAajBaceakuajhajhaceajDajEajFajFajGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcaaaaaaaafaaaaeFajHajIajJajKajLaeVaeXaffaffafhaflafnaffafsaiwafnaftafhafuaiYaflafxafwafBafzafIafHafRafKakeakfakgakhakiakjakkaklakmaknakoahTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajiaaaaaaajiaaaaaaajiajiajiajiajiajiajiaaaaaaajiaaaaaaajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcaaaaaaaafaaaaeFajHajIajJajKajLaeVaeXaffaffafhaflafnaffafsaiwafnaftafhafuaiYaflafxafwafBafzafIafHafRafKakeakfakgakhakiakoakmaklakkaknakjahTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajiaaaaaaajiaaaaaaajiajiajiajiajiajiajiaaaaaaajiaaaaaaajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcaaaaafaafaeFakqakraksafkaidakvaeOaeLaeNaezaeuaeqajCaeTahzaeoaeSaezaevagTahVaeqaeoaeoaelaeKaeIaiRaeGaeEaeDakNahaajhakPaceaklakQajFajFakRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiaaaajiajiajiajiajiajiajiajiajiaaaajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcaaaaafaafaeFakqakraksafkaidakvaeOaeLaeNaezaeuaeqajCaeTahzaeoaeSaezaevagTahVaeqaeoaeoaelaeKaeIaiRaeGaeEaeDakNahaajhakPaceaklakQajFajFakRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiaaaajiajiajiajiajiajiajiajiajiaaaajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcaaaaaaaafaeFaeFaeFaeFaeFaeFaeFaeFaebakTakUaeFaeFagXakVaecahEakYakZaeeaefagXaeFaeFaeFaedaekalealealfalgaegalialjalealkaceaceacfacfacfacfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiaaaajiajiajiajiajiajiajiajiajiaaaajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcafcaaaaaaaafaeFaeFaeFaeFaeFaeFaeFaeFaebakTakUaeFaeFagXakVaecahEakYakZaeeaefagXaeFaeFaeFaedaekalealealfalgaegalialjalealkaceaceacfacfacfacfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiaaaajiajiajiajiajiajiajiajiajiaaaajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcafcafcafcaaaaaaafcafcafcafcafcafcafcaaaaaaafcafcafcafcaaaaaeaaaaafaafaafaafaeFalmalnadXadYadTadUadPahCaluadKalwadQalyalzadMadLalCadKalDalEadPadNadFalealHalIalJadHalLagraleakPalNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalOalOalOalOalOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPalPalPalQalQaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiaaaajiajiajiajiajiajiajiajiajiaaaajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcafcafcafcaaaaaaafcafcafcafcafcafcafcaaaaaaafcafcafcafcaaaaaeaaaaafaafaafaafaeFalmalnadXadYadTadUadPahCaluadKalwadQalyalzadMadLalCadKalDalEadPadNadFalealHalIalJadHalLagraleakPalNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalOalOalOalOalOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPalPalPalQalQaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiaaaajiajiajiajiajiajiajiajiajiaaaajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
@@ -10726,63 +10732,63 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
|||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqYaqZaqYaaaaaaaaaaaaaaaaaaaaaalPaafaoTaoUaoUaoUaoUaoVaoWaoXaoYaoYaoYaoYaoZaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapxapaagxapxarbarbarcaguarbarbarbareareareakKargarearearhariagharkalNaggalNarmalNalNakJagjagjbbNagjakpalpakOakMakLakLakLamaagjagtamcagqalNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafapvapvapvapvapvaafaoPaafapvapvapvapvapvaafalPaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqYaqZaqYaaaaaaaaaaaaaaaaaaaaaalPaafaoTaoUaoUaoUaoUaoVaoWaoXaoYaoYaoYaoYaoZaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapxapaagxapxarbarbarcaguarbarbarbareareareakKargarearearhariagharkalNaggalNarmalNalNakJagjagjbbNagjakpalpakOakMakLakLakLamaagjagtamcagqalNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafapvapvapvapvapvaafaoPaafapvapvapvapvapvaafalPaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafarwarxarwaaaaaaaaaaaaaaaaaaaaaalPaafapwapwapwapwapwaafaoWaafapwapwapwapwapwaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagapxaryaHDapxarEatVatXaNYaOtatYarbaWvarGarHarIarJarKaNCaMJaFsaNKarOarPaLEaLGaLGaLGaLGaNoaLJaLGaNoaLGaNraNnaLvaKWaNeaMTaNaajhaMNalNasdasealNaaaaafaKEaKzaKzaKDaKzaKzaKjaafaaaaaaaaaalQaaaaaaaaaaafaaaaaaaaaaoPaaaaaaaaaaafaaaaaaaaaalQaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafarwarxarwaaaaaaaaaaaaaaaaaaaaaalPaafapwapwapwapwapwaafaoWaafapwapwapwapwapwaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagapxaryaHDapxarEatVatXaNYaOtatYarbaWvarGarHarIarJarKaNCaMJaFsaNKarOarPaLEaLGaLGaLGaLGaNoaLJaLGaNoaLGaNraNnaLvaKWaNeaMTaNaajhaMNalNasdasealNaaaaafaKEaKzaKzaKDaKzaKzaKjaafaaaaaaaaaalQaaaaaaaaaaafaaaaaaaaaaoPaaaaaaaaaaafaaaaaaaaaalQaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasjaPXaslaaaasmaPYasoaaaaafaspaqYaspaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafaaaaaaaaaaoWaaaaaaaaaaafaaaaaaaaaalQaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafapxapxapxapxaHDapxarEarAatXatWaOWasrarbaWwarIarIarIarJasuaOzaswasxaOXalNaMLaIkaMKaMKaMKaMUaOAaOBaGVaOCaGVaGVaGVaGVaGVaOyarTaMzasPasPasPasPasPasPasPasPaLMasRasRasRasRasRaLMasPaaaaaaaaaalPaafaojaojaojaojaojaafaoPaafaojaojaojaojaojaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasjaPXaslaaaasmaPYasoaaaaafaspaqYaspaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafaaaaaaaaaaoWaaaaaaaaaaafaaaaaaaaaalQaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafapxapxapxapxaHDapxarEarAatXatWaOWasrarbaWwarIarIarIarJasuaOzaswasxaOXalNaMLaIkaMKaMKaMKaMUaOAaOBaGVaOCaGVaGVaGVaGVaGVaOyarTaMzasPasPasPasPasPasPasPasPaLMasRasRasRasRasRaLMasPaaaaaaaaaalPaafaojaojaojaojaojaafaoPaafaojaojaojaojaojaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasSasTasUasTasSasVasWasVasSaafaspbebaOkaaaaaaaaaaaaaaaaaaaaaalPaafaolaolaolaolaolaafaoWaafaolaolaolaolaolaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafapxasZataapxaHDapxauParAatXatWasqauNarbatearIatfatfarJatgaOzapAapEaOYalNaNDaNFaNIaSLaHqaHratoatpaGVaNObkqaDJaNpaDHaRQaSfarTaYEatAaJsavYaRgaKkaQBaRxasPaNgasRasRasRasRasRaLMasPaafaaaaaaalQaafaoMaoNaoNaoNaoNaoOaoPaoQaoRaoRaoRaoRaoSaafalPaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasSasTdoHasTasSasVdoIasVasSaafaspbebaOkaaaaaaaaaaaaaaaaaaaaaalPaafaolaolaolaolaolaafaoWaafaolaolaolaolaolaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafapxasZataapxaHDapxauParAatXatWasqauNarbatearIatfatfarJatgaOzapAapEaOYalNaNDaNFaNIaSLaHqaHratoatpaGVaNObkqaIyaNpaFqaRQaSfarTaYEatAaJsavYaRgaKkaQBaRxasPaNgasRasRasRasRasRaLMasPaafaaaaaaalQaafaoMaoNaoNaoNaoNaoOaoPaoQaoRaoRaoRaoRaoSaafalPaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHasTatIasTatHasVatJasVatHatKatLatMaPLatOatOatPatKatKaafaaaalPaafaoTaoUaoUaoUaoUaoVaoWaoXaoYaoYaoYaoYaoZaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafapxbeuatRatSapbapxarEarAatXatWasqarEarbauaaubaucaucaudaueaOzapAapEapFalNaNDaNFaHyaPqaHqaHrauhauiaGVaPHaPCaIzaOEaIyaOGaOParTaSOauqaJsavYavYaKkaSFaMmaTsaODasRasRasRasRasRaOSasPasPasPaaaalQaaaapvapvapvapvapvaafaoPaafapvapvapvapvapvaaaampaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHasTatIasTatHasVatJasVatHatKatLatMaPLatOatOatPatKatKaafaaaalPaafaoTaoUaoUaoUaoUaoVaoWaoXaoYaoYaoYaoYaoZaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafapxbeuatRatSapbapxarEarAatXatWasqarEarbauaaubaucaucaudaueaOzapAapEapFalNaNDaNFaHyaPqaHqaHrauhauiaGVaPHaPCaIBaOEaIzaOGaOParTaSOauqaJsavYavYaKkaSFaMmaTsaODasRasRasRasRasRaOSasPasPasPaaaalQaaaapvapvapvapvapvaafaoPaafapvapvapvapvapvaaaampaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHauzauAauBatHauCauDauEatHaqYaqYauFauGauHauIauJaKFatKaaaaaaampaaaapwapwapwapwapwaafaoWaafapwapwapwapwapwaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagapxauLapaapxaHDapxarEarAaMQarCasqarBarbaHAauSauTauTaLxaHCaKLaHsaHtaJbaHvaHwaHxaHyaHzaHqaHravdauiaGVaGVaGVaGWaGWaGXaGVaGVarTaJvaJqaJsavYavYaKkaKoaJCaKiaGZasRasRasRasRasRaGUaGSavqavraaaalQaaaaafaaaaafaafaaaaaaaoPaaaaaaaafaaaaaaaafaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHauzcQkauBatHauCcONauEatHaqYaqYauFauGauHauIauJaKFatKaaaaaaampaaaapwapwapwapwapwaafaoWaafapwapwapwapwapwaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagapxauLapaapxaHDapxarEarAaMQarCasqarBarbaHAauSauTauTaLxaHCaKLaHsaHtaJbaHvaHwaHxaHyaHzaHqaHravdauiaGVaGVaGVaGWaGWaGXaGVaGVarTaJvaJqaJsavYavYaKkaKoaJCaKiaGZasRasRasRasRasRaGUaGSavqavraaaalQaaaaafaaaaafaafaaaaaaaoPaaaaaaaafaaaaaaaafaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHavsavtavuatHavsavtavuatHaUlaTiaTaaTaaTaaTaaWtaVtarwaaaaaaalPaaaaafaaaaafaafaaaaaaavAaaaaaaaafaaaaaaaafaaaalPaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaagapxapxapxapxaHDapxarbarbarbarbarbaYnaHIaHHaHGaHGaHGaHGaHKaHJaNqapEaJmalNaIjaIkaIhaIiaHYaIfaHNaHVaNQaLlavPavRavRaTIavRaKSavVavWavhaKPaviaviaKPaLcaKXaLaawbasRasRasRasRasRawbawcawdaweaaaalQalQalPaaaaaaaafaaaaaaaoPaaaaafaafaafaafalPalPalPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHavsavtavuatHavsavtavuatHaUlaTiaTaaTaaTaaTaaWtaVtarwaaaaaaalPaaaaafaaaaafaafaaaaaaavAaaaaaaaafaaaaaaaafaaaalPaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaagapxapxapxapxaHDapxarbarbarbarbarbaYnaHIaHHaHGaHGaHGaHGaHKaHJaNqapEaJmalNaIjaIkaIhaIiaHYaIfaHNaHVaNQaLlavPavRavRaTIavRaKSavVavWavhaKPaviaviaKPaLcaKXaLaawbasRasRasRasRasRawbawcawdaweaaaalQalQalPaaaaaaaafaaaaaaaoPaaaaafaafaafaafalPalPalPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaasSatHawfawgasSatHaxaawgasSatKaZOatKatKatKatKatKaZeaspaaaaaaalPalPalPaaaaaaaafaaaawjawkawjaafaafaafaafalPalPalPaafapxapxapxapxawlawmawmawmawmawmawmawmawnapxapxawoawpawqapxawrawsaNJbTobdwaJfaJfaJfaJfaJfbcGaJfaJpaLDaJfaJfaJeaJeaJlaIYaJaaJnahmaIxaIAaIDaITaIvaHravdaIwawLawLbcxawMawNaVcawLauiawPawQaLQayMayMayMayMaMdaMmaMqawUasRasRasRasRasRawUawVawdaweaaaaaaaaaaafaafaaaaafaaaaaaawWaaaaaaaafaaaaaaaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaasSatHdaLawgasSatHcUBawgasSatKaZOatKatKatKatKatKaZeaspaaaaaaalPalPalPaaaaaaaafaaaawjawkawjaafaafaafaafalPalPalPaafapxapxapxapxawlawmawmawmawmawmawmawmawnapxapxawoawpawqapxawrawsaNJaDJbdwaJfaJfaJfaJfaJfbcGaJfaJpaLDaJfaJfaJeaJeaJlaIYaJaaJnahmaIxaIAaIDaITaIvaHravdaIwawLawLbcxawMawNaVcawLauiawPawQaLQayMayMayMayMaMdaMmaMqawUasRasRasRasRasRawUawVawdaweaaaaaaaaaaafaafaaaaafaaaaaaawWaaaaaaaafaaaaaaaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXawYbgsawYawZawYcbnawYcbpaxcbdSaxbaxbaxbbdUatKbdVaspaaaaafaafaaaaaaaaaaaaaafaaaaxgbdWaKgaafaaaaafaaaaaaaaaaaaaaaapxapaapaaxjapaapaapaapaapaapaapaapaaxkaxlaxmaxnaxnaxnaxnaxnaxnaxoaJBaMMaxraxraxraxraxsaJAaxraMIaxraxsaxraxraxraxraxwaxxaxyaKdaKaaHxaJRaJRaJRaHrauhaJQawLawOawMaxCawMaVeaxEaWraxGaxHaMuaMmaMmaMmaMBaMEaMGaMHaJwasRasRasRasRasRaJxaJyaxNaxOaaaaaaaaaaaaaafaaaaafaaaaxPaxQaxPaaaaafaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXawYdoGawYawZawYdoEawYdoFaxcbdSaxbaxbaxbbdUatKbdVaspaaaaafaafaaaaaaaaaaaaaafaaaaxgbdWaKgaafaaaaafaaaaaaaaaaaaaaaapxapaapaaxjapaapaapaapaapaapaapaapaaxkaxlaxmaxnaxnaxnaxnaxnaxnaxoaJBaMMaxraxraxraxraxsaJAaxraMIaxraxsaxraxraxraxraxwaxxaxyaKdaKaaHxaJRaJRaJRaHrauhaJQawLawOawMaxCawMaVeaxEaWraxGaxHaMuaMmaMmaMmaMBaMEaMGaMHaJwasRasRasRasRasRaJxaJyaxNaxOaaaaaaaaaaaaaafaaaaafaaaaxPaxQaxPaaaaafaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxRaxSaxTaxUaxVaxTaxTaxWaxUaxTaxXaxYaxZaxZbjWatKbdVatLaafaafaaaaaaaaaaaaaaaaafaybaycaydbdBayfaaaaafaaaaaaaaaaaaaaaapxapaapxaygayhayiayiayiayiayiayiayiayjaygaykaylaylaylaylaylaylaylaQnaynaxrayoaypayqayrbdCbbraPaaPdaywayxaypayyaxrayzapEayAalNaQvaNFaNIbdEaHqaHravdbdFayDaxFaxFayEayFayGbeDayIavVbdHbdcbbUbbUbbUbaNbaTaPnbavbdGasRasRasRasRasRbdIasPasPasPaaaaaaaaaaafaafaafaafaaaaySbjYaySaaaaafaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxRaxSaxTaxUaxVaxTaxTaxWaxUaxTaxXaxYaxZaxZbjWatKbdVatLaafaafaaaaaaaaaaaaaaaaafaybaycaydbdBayfaaaaafaaaaaaaaaaaaaaaapxapaapxaygayhayiayiayiayiayiayiayiayjaygaykaylaylaylaylaylaylaylaQnaynaxrayoaypayqayrbdCbbraPaaPdaywayxaypayyaxrayzapEayAalNaQvaNFaNIbdEaHqaHravdbdFayDaxFaxFayEayFayGbeDayIavVbdHbdcbbUbbUbbUbaNbaTaPnbavbdGasRasRasRasRasRbdIasPasPasPaaaaaaaaaaafaafaafaafaaaaySbjYaySaaaaafaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafatHayUayVayUayWaxTaxTayXayUayVayUayYaxSaxVbjZatHbdVatKatKazaatOatOatOatOatPatKazbazcazdazeazbapxapxawoawpawqapxapxapxapaaryaygaaaaafaaaaafaaaaafaaaaafaaaaygaykaylazfazgazhaziazjaylaQnapaaxrazkazkazlazmaznazoaPpaBdazrazsaztaztaxrayzapEazualNaQvaNFaHybdEaHqaHrauhazvbbOazxazyazzazAazBazBazCazBasPbeXbfGbeFbeGbeHbeObeEasPbdLasRasRasRasRasRbdKasPaafaaaaaaaaaaaaaafaafaaaaafazLazMbdMazOazPaafaaaaaaaafaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafatHayUayVayUayWaxTaxTayXayUayVayUayYaxSaxVbjZatHbdVatKatKazaatOatOatOatOatPatKazbazcazdazeazbapxapxawoawpawqapxapxapxapaaryaygaaaaafaaaaafaaaaafaaaaafaaaaygaykaylazfazgazhaziazjaylaQnapaaxrazkazkazlazmaznazoaPpaBdazrazsaztaztaxrayzapEazualNaQvaNFaHybdEaHqaHrauhazvbbOazxazyazzazAazBazBazCazBasPbeXbfGbeFbeGbeHbeObeEasPbdLasRasRasRasRasRbdKasPaafaaaaaaaaaaaaaafaafaaaaafazLazMbdMazOazPaafaaaaaaaafaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafazQasSazRavtazSazTazUazVazWazSavtazXazYasSazZblwatHblyblAblAblAblAblAblAaVtbezaAeazbaAfaAgaAhazbbghapaapaapaapaapaapaapaapaaAjaygaafaAkaAkaAkaAkaAkaAkaAkaafaygaykaylaAlaAmaAnaAoaAlaylaQnaApaxraxraxraxrbkiaAraypaAsaArblqaxraxraxraxrayzapEaAualNaQvaNFaHybdEaHqaHravdaAvazBazBazBazBazBazBaAwaAxaAyazBasPasPasPasPbgobgrasPasPbdKasRasRasRasRasRbdKasPaaaaaaaaaaaeaaaaaaaaaaaaaafaAAaABbdTaADaAAaafaaaaaaaafaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafazQasSazRavtazSazTazUazVazWazSavtazXazYasSazZblwatHblyblAblAblAblAblAblAaVtbezaAeazbaAfaAgaAhazbbghapaapaapaapaapaapaapaapaaAjaygaafaAkaAkaAkaAkaAkaAkaAkaafaygaykaylaAlaAmaAnaAoaAlaylaQnaApaxraxraxraxrbkiaAraypaAsaArblqaxraxraxraxrayzapEaAualNaQvaNFaHybdEaHqaHravdaAvazBazBazBazBazBazBaAwaAxaAyazBasPasPasPasPbgobgrasPasPbdKasRasRasRasRasRbdKasPaaaaaaaaaaaeaaaaaaaaaaaaaafaAAaABbdTaADaAAaafaaaaaaaafaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxRayVaAEaAFaAFaAFaAFaAGayVaxRaAHasSaAIblNaAKaAKaAKaAKaAKaAKaAKaAKaZebfxbfzazbbckaANaAOazbaAPaAQaAPaAPaAPaAPaAPaAPaAPaAPaARaaaaAkaASaATaAUbbTaAWaAkaaaaygaykaylaAlaWuaRyaWkaAlaylaQnapxaxraBaaBbazlblEaBdazoazpaBdblGazsaBfaBfaxrayzapEayAalNbdZaIkaIhbdEbejbelavdaAvaHraBiaAxaBjaBjazBaAwaBkaAyazBaBlaBmaBnaBobhDaULaBqaafbfBbfdbfdbfdbfdbfdbfgaafaaaaaaaaaaaaaaaaaaaaaaaaaafaAAaBuaBvaBwaAAaafaaaaaaaBqaBqaBqaBqaBqbhqbhCaBqaBqaBqaBqaBqaBqaBqbgHaBFaBFaBFaBGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxRayVaAEaAFaAFaAFaAFaAGayVaxRaAHasSaAIblNaAKaAKaAKaAKaAKaAKaAKaAKaZebfxbfzazbbckaANaAOazbaAPaAQaAPaAPaAPaAPaAPaAPaAPaAPaARaaaaAkaASaATaAUbbTaAWaAkaaaaygaykaylaAlbdJaWubaiaAlaylaQnapxaxraBaaBbazlblEaBdazoazpaBdblGazsaBfaBfaxrayzapEayAalNbdZaIkaIhbdEbejbelavdaAvaHraBiaAxaBjaBjazBaAwaBkaAyazBaBlaBmaBnaBobhDaULaBqaafbfBbfdbfdbfdbfdbfdbfgaafaaaaaaaaaaaaaaaaaaaaaaaaaafaAAaBuaBvaBwaAAaafaaaaaaaBqaBqaBqaBqaBqbhqbhCaBqaBqaBqaBqaBqaBqaBqbgHaBFaBFaBFaBGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaBHaBIaBJaBIaBIaDRaDSaBIaBIaBJaBMaBNasSbeAbfbaQlaQjaSQaBSaBTaBUaBVaAKaZeaPOatKazbazbaBXaBYaARaBZaCaaCbaCcaCdaCeaCfaCgaXEaCiaARaafaAkaQmaCkaClaCmaCnaAkaafaygaykaylaIBaAlaICaAlaCraylaQnaCsaxrayoaypaCtaCuaAraCvaAsaAraCwaCxaypaCyaxrayzapEayAalNaQvaIAaIDaQxaIvaHraCAaCBaHraCCaAxaAxaAxazCaCDaCEaCFazBaCGaCHaCIaCJaYFaULaBqaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaAAaZbaCMaCNaAAaBqaCOaCPaBqaQSaQDaQDaQDaQDaQDaQDaQFaRdaRdaRdaRdaRfaRdaRdaRdaRhaDaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaBHaBIaBJaBIaBIaDRaDSaBIaBIaBJaBMaBNasSbeAbfbaQlaQjaSQaBSaBTaBUaBVaAKaZeaPOatKazbazbaBXaBYaARaBZaCaaCbaCcaCdaCeaCfaCgaXEaCiaARaafaAkaQmaCkaClaCmaCnaAkaafaygaykaylaICaAlaLLaAlaCraylaQnaCsaxrayoaypaCtaCuaAraCvaAsaAraCwaCxaypaCyaxrayzapEayAalNaQvaIAaIDaQxaIvaHraCAaCBaHraCCaAxaAxaAxazCaCDaCEaCFazBaCGaCHaCIaCJaYFaULaBqaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaAAaZbaCMaCNaAAaBqaCOaCPaBqaQSaQDaQDaQDaQDaQDaQDaQFaRdaRdaRdaRdaRfaRdaRdaRdaRhaDaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBHaBMaBIaDbaDcaDcaDdaDeaDfaDgaDhaDcaDcaDiaDjayUayWaZuaAKaRqaDmaDnaDoaDnaDpaDqbfCaDsaqYaZnaDuaDvaAcaDwaDxaDyaDzaDzaDzaDAaDzaDzaDBaCaaARaaaaAkaRAaRTaRVaCmaSaaAkaaaaygaykaylaLLaLNaDIaLNaNUaylaQnaDLaxraxraxraxraDMaAraypaDNaBdaDOaTuaypaDQaVHaVzaVAaVpaVwaKJaVGaShaShaShaSEaScaVdbfFaTnbabaSPaSPaSPaUgaSPaTFaTTaTUaTVaUkaUGaVQaULaBqaBqaBqaBqaBqaBqaBqaBqaBqaCOaCPaBqaBqaBqaCOaEjaEkaBqaBqaAAaAAaElaEmaAAaEnaVqaVoaVoaVsaEsaEsaEsaEsaEsaWyaVraEuaEuaEuaEuaUNaEuaEyaEyaVnaEyaEyaEyaEyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBHaBMaBIaDbaDcaDcaDdaDeaDfaDgaDhaDcaDcaDiaDjayUayWaZuaAKaRqaDmaDnaDoaDnaDpaDqbfCaDsaqYaZnaDuaDvaAcaDwaDxaDyaDzaDzaDzaDAaDzaDzaDBdoJaARaaaaAkaRAaRTaRVaCmaSaaAkaaaaygaykaylaLNaNUaDIaNUaOFaylaQnaDLaxraxraxraxraDMaAraypaDNaBdaDOaTuaypaDQaVHaVzaVAaVpaVwaKJaVGaShaShaShaSEaScaVdbfFaTnbabaSPaSPaSPaUgaSPaTFaTTaTUaTVaUkaUGaVQaULaBqaBqaBqaBqaBqaBqaBqaBqaBqaCOaCPaBqaBqaBqaCOaEjaEkaBqaBqaAAaAAaElaEmaAAaEnaVqaVoaVoaVsaEsaEsaEsaEsaEsaWyaVraEuaEuaEuaEuaUNaEuaEyaEyaVnaEyaEyaEyaEyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDiaEBaECaEDaDcaEEaDcaEEaDcaEEaDcaEEaDcaEFaEGazSayWaEHaAKaVuaEJaEKaELaEMaENaAKbirbjoaAcaEQaAcaERaqYaAPaESaDBaDzaDzaDzaDzaDzaDzaETaWjaWgaVJaVIaWMaWNaWKaWLaWJaAkaafaygaWIaWpaRiaWxaWqaWsaOFaWpaZdaZcaxraFmaypazlaFnaBdazoaFoaAraCwaVvaypaFqaVHaWTaFsaFtaXcbdZagjagjagjagjaVEaVFaWSaVxaVybazaVxaXfaVxaXeaVxaXgaXhaFGaFHaFIaBoaXjaXmaXXaXVaXVaXCaYcaXYaXYaXYaXYaXYbaCaXYaXYaYwaYgaYeaXnaYHaYGaYxaWOaWPaWQaWQaWQaWRaEsaEsaGeaEsaGfaGgaGhaEsaEuaWUaEuaGjaXlaXkaGmaGnaGoaIbasHaGraGsaGtaGuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDiaEBaECaEDaDcaEEaDcaEEaDcaEEaDcaEEaDcaEFaEGazSayWaEHaAKaVuaEJaEKaELaEMaENaAKbirbjoaAcaEQaAcaERaqYaAPaESaDBaDzaDzaDzaDzaDzaDzaETaWjaWgaVJaVIaWMaWNaWKaWLaWJaAkaafaygaWIaWpaRyaWxaWqaWsaRuaWpaZdaZcaxraFmaypazlaFnaBdazoaFoaAraCwaVvaypaRiaVHaWTaFsaFtaXcbdZagjagjagjagjaVEaVFaWSaVxaVybazaVxaXfaVxaXeaVxaXgaXhaFGaFHaFIaBoaXjaXmaXXaXVaXVaXCaYcaXYaXYaXYaXYaXYbaCaXYaXYaYwaYgaYeaXnaYHaYGaYxaWOaWPaWQaWQaWQaWRaEsaEsaGeaEsaGfaGgaGhaEsaEuaWUaEuaGjaXlaXkaGmaGnaGoaIbasHaGraGsaGtaGuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXoaDcaDcaBJaDcaEEaDcaEEaGxaEEaDcaEEaDcaEFaEGazSayWaGyaAKaYQaYRaYKaYPaYKaQlaQlaYJaYNaYOaYLaYMaYLaYLbakbajaGKaGLaGLaGLaGMaGLaGLaGNaGOaARaaaaZXaAkayJbjVayJaAkaAkaaaaygavOaylaRuaZIaZiaZqaZDaZEaZhbglaxraHbaypaCxaCuaAraypaAsaAraCwaZgaypaHdawGaYhaHfaHgaUnaYfalNalNalNalNalNaHjaYbazBaHlaAxazBaHmazBaHnazBaHobcvbcwbcNbczbdNbcXaYUbdlbdmbbvbdAbbwbbvbbvbbxbbzbbybbAbbybbFbbybbybbibcubcbbawbawbbEbaSbawbaxbawbaWaYIaHOaHPaHQaHRaHSaHTaEsaHUbaXaEuaHWaHXaYiaHZaGnaIaaIbasHaIcaEyaEyaEyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXoaDcaDcaBJaDcaEEaDcaEEaGxaEEaDcaEEaDcaEFaEGazSayWaGyaAKaYQaYRaYKaYPaYKaQlaQlaYJaYNaYOaYLaYMaYLaYLbakbajaGKaGLaGLaGLaGMaGLaGLaGNaGOaARaaaaZXaAkayJbjVayJaAkaAkaaaaygavOaylaWkaZIaZiaZqaZDaZEaZhbglaxraHbaypaCxaCuaAraypaAsaAraCwaZgaypaHdawGaYhaHfaHgaUnaYfalNalNalNalNalNaHjaYbazBaHlaAxazBaHmazBaHnazBaHobcvbcwbcNbczbdNbcXaYUbdlbdmbbvbdAbbwbbvbbvbbxbbzbbybbAbbybbFbbybbybbibcubcbbawbawbbEbaSbawbaxbawbaWaYIaHOaHPaHQaHRaHSaHTaEsaHUbaXaEuaHWaHXaYiaHZaGnaIaaIbasHaIcaEyaEyaEyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDiaIdaECaEDaDcaEEaDcaEEaDcaEEaDcaEEaDcaEFaEGazSaIeawzawyawxawuawuawuawzawCawDawzawAaImaInawBauKauKaAPaGOaIpaCaaIqaGOaGOaIraIsaItaIuaARaaaawaaaaavMavNavMaaaaafaaaaygavOaylaCoaAZavZaCqaCpaylavLawhaxraIEaypazlaIFaIGazoaIHaIIaIJaIKaILaIMawGaBsaIOaIPavKaBKaISaaaaaaaUnaIUaIVaBLazBaIXaAxaAxaAxaCEaAxaAxaAxauOaBoaKyaBoaBoavJaBoaJcaBoaJdavHavGaJgaJhaJiaJjaJkavFaJjavEaJjaJjaJjaJjavDaJjaJjavCaJjaJjaJjaJjasIayRayvaAzaAiaBraBpazHbdJazIavpavlavmavnazFayNayPazDazEasHaIbaJDaJEaJFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDiaIdaECaEDaDcaEEaDcaEEaDcaEEaDcaEEaDcaEFaEGazSaIeawzawyawxawuawuawuawzawCawDawzawAaImaInawBauKauKaAPaGOaIpaCaaIqauAaGOaIraIsaItaIuaARaaaawaaaaavMavNavMaaaaafaaaaygavOaylaCpaCoavZaDHaCqaylavLawhaxraIEaypazlaIFaIGazoaIHaIIaIJaIKaILaIMawGaBsaIOaIPavKaBKaISaaaaaaaUnaIUaIVaBLazBaIXaAxaAxaAxaCEaAxaAxaAxauOaBoaKyaBoaBoavJaBoaJcaBoaJdavHavGaJgaJhaJiaJjaJkavFaJjavEaJjaJjaJjaJjavDaJjaJjavCaJjaJjaJjaJjasIayRayvaAzaAiaBraBpazHaAZazIavpavlavmavnazFayNayPazDazEasHaIbaJDaJEaJFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJHaJIaBIaDbaDcaDcaDcaJJaDcaDcaJKaDcaDcaDiaJLaJMayWaxTaJNaJOaJOaJOaJOaJOaJOaJOaJPasDatKatKavkatKatKaAPaJSaJTaJUaJVaJVaJVaJVaJWaJXaJYaARaJZavaaKbaKcavbaKeaKbaKbaKfaygavcaylaylavzaAXazJayLawGaUnavyaxraxraxraxraKlaKmaCxaCxaKnayHawGawGaxraxraIOaIOaIOaIOaKpaKqaKraKsaUnaKtaIVaKuazBazBazBazBazBazBazBazBazBauOaKwaKvaKxaIZauMavIaKBaKCaJdauyauWauXaKGaKHaJjaKIauVaKKawtaKKaKMaKNaKOauQaKQaKRauxaKTauUaKVaJjauwauvaKYaJraKZavxaJuaysaEsaLbauuaLdavfauoaveaunaEuaEyaLhasHaIbaLiaLjaLkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJHaJIaBIaDbaDcaDcaDcaJJaDcaDcaJKaDcaDcaDiaJLaJMayWaxTaJNaJOaJOaJOaJOaJOaJOaJOaJPasDatKatKavkatKatKaAPaJSaJTaJUaJVaJVaJVaJVaJWaJXaJYaARaJZavaaKbaKcavbaKeaKbaKbaKfaygavcaylaylavzaAXazJayLawGaUnavyaxraxraxraxraKlaKmaCxaCxaKnayHawGawGaxraxraIOaIOaIOaIOaKpaKqaKraKsaUnaKtaIVaKuazBazBazBazBazBazBazBazBazBauOaKwaKvaKxaIZauMavIaKBaKCaJdauyauWauXaKGaKHaJjaKIauVaKKawtaKKaKMaKNaKOauQaKQaKRauxaKTauUaKVaJjauwauvaKYaJrasWavxaJuaysaEsaLbauuaLdavfauoaveaunaEuaEyaLhasHaIbaLiaLjaLkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJHaBIaBJaBIaBIaDRaDSaBIaBIaBJaJIaLmasSaLnaxTawXaLoaLoaLpaLoaLqatHaLraLsasDaLtaLuaACaLwazwaLyaLzaLAaLzaLzaLzaLzaLzaLzaLzaLBaLCazNaAdaLFaLFayTaLHaLFaLFaLFaLIazKaLKaLzaLzaxtaNmaLOaLPaxeaxfaMkaLSaxdaIPaLTaLTaLTaLTaLTaLTaLUaLVaLWaLXaLYaLZaMaaMbaMcaIOaIOaIOaDGaMeaMfaMeaMgaMhaMiaMjaIOaMkawwaBoaMlaxMaOOaMoaMnaMpaxKaMraMsaMtaJdaxLaMvaMwaMwaMxaJjaMyaxJaMAaxBaMAaMAaMCaMDaxDaMDaMFayOayCayQaMDaJjasIarZaHPaHPaCXaDFaHPaHPaEsaMOaMPaEuaytaMRaHZavTaEuaMSaymayeaIbaEyaEyaEyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJHaBIaBJaBIaBIaDRaDSaBIaBIaBJaJIaLmasSaLnaxTawXaLoaLoaLpaLoaLqatHaLraLsasDaLtaLuaACaLwazwaLyaLzaLAaLzaLzaLzaLzaLzaLzaLzaLBaLCazNaAdaLFaLFayTaLHaLFaLFaLFaLIazKaLKaLzaLzaxtaNmaLOaLPaxeaxfaMkaLSaxdaIPaLTaLTaLTaLTaLTaLTaLUaLVaLWaLXaLYaLZaMaaMbaMcaIOaIOaIOaDGaMeaMfaMeaMgaMhaMiaMjaIOaMkawwaBoaMlaxMaOOaMoaMnaMpaxKaMraMsaMtaJdaxLaMvaMwaMwaMxaJjaMyaxJaMAaxBaMAaMAaMCaMDaxDaMDaMFayOayCayQaMDaJjasIarZaHPaHPaCXaDFaHPaHPaEsaMOaMPaEuaytaMRaHZavTaEuaMSaymayeaIbaEyaEyaEyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXayVaMVaAFaAFaAFaAFaMWayVawXaAHasSaAIaMXaMYawvavSaNbaNbaNcatHaNdaLsaxAaNfaLuaxzaNhaNiaNjaNkaNlaLzaLzaLzaLzaLzaLzaLzaxhaxiaxuaLzaLzaLzaxpayuaLzaLzaLzaLzaxvaLzaLzaLzaxtaNmaLuaLPaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaNsaNtaNuaNvaNwaNxaNyaNzaNAaIOaIOaIOaLPaIOaIOaIOaIOaIOaIOaIOaIOaNBbNwaCjaCWaCQaMpaNEaMpaMpawEaNGaMsawiaJdawFawJawSaNLaNMaJjaNNawTaNPawHaNRaNSaJjaNTawIaNTaJjaJjaJjavCaJjaJjasIarZaNVaHPaHPaNWaHPaNXaEsaEuaEuaEuaEuaEuaEuavQaEuaIbaIbasHaIbaNZaOaaEyaaaaafaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXayVaMVaAFaAFaAFaAFaMWayVawXaAHasSaAIaMXaMYawvavSaNbaNbaNcatHaNdaLsaxAaNfaLuaxzaNhaNiaNjaNkaNlaLzaLzaLzaLzaLzaLzaLzaxhaxiaxuaLzaLzaLzaxpayuaLzaLzaLzaLzaxvaLzaLzaLzaxtaNmaLuaLPaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaNsaNtaNuaNvaNwaNxaNyaNzaNAaIOaIOaIOaLPaIOaIOaIOaIOaIOaIOaIOaIOaNBbNwaCjaCWaCQaMpaNEaMpaMpawEaNGaMsawiaJdawFawJawSaNLaNMaJjaNNawTaNPawHaNRaNSaJjaNTawIaNTaJjaJjaJjavCaJjaJjasIarZaNVaHPaHPaNWaHPaNXaEsaEuaEuaEuaEuaEuaEuavQaEuaIbaIbasHaIbaNZaOaaEyaaaaafaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafazQasSaMYavtazSaObaOcaOdaOeazSavtaOfaOgasSayWaxTaMYaOhaOiaNbaNbaNcatHaOjaLsasDaNfaLuasXaLAaLzaLzaLzaChaEzaBPaLzausardaOmaOraALatmarMaOmaOvaOwaOxathatlatkatjatiatcatbatbasYatdaNmaLuaLPaIOaOHaIOaOIaOIaOIaOIaOIaOIaOIaOIaOJaOKaOIaOIaOIaOIaOLaOIaOIaOIaOIaOIaOMaONaOIaOIaOIaOIaOIaOIaOIaIOaIOaIOaBoaAYasOaOQaOQaOQaORasQaNGaMsaBQaJdaJdaJdaJdaJdaOUaJjaOVasKasLasNaNPaNPaJjaOZasMaPbaPcaPbaPbasJaPeaJjasIarZaPfaPfaPgaPhaPiaPiaPjaEsaPkaPlaPmaEyaskaVbasbaIbaIbasHaIbaEyaPsaEyaPtaPtaPtaPuaPvaPwaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafazQasSaMYavtazSaObaOcaOdaOeazSavtaOfaOgasSayWaxTaMYaOhaOiaNbaNbaNcatHaOjaLsasDaNfaLuasXaLAaLzaLzaLzaChaEzaBPaLzausardaOmaOraALatmarMaOmaOvaOwaOxathatlatkatjatiatcatbatbasYatdaNmaLuaLPaIOaOHaIOaOIaOIaOIaOIaOIaOIaOIaOIaOJaOKaOIaOIaOIaOIaOLaOIaOIaOIaOIaOIaOMaONaOIaOIaOIaOIaOIaOIaOIaIOaIOaIOaBoaAYasOaOQaOQaOQaORasQaNGaMsaBQaJdaJdaJdaJdaJdaOUaJjaOVasKasLasNaNPaNPaJjaOZasMaPbaPcaPbaPbasJaPeaJjasIarZaPfaPfaPgaPhaPiaPiaPjaEsaPkaPlaPmaEyaskaVbasbaIbaIbasHaIbaEyaPsaEyaPtaPtaPtaPuaPvaPwaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafatHaxRayVaJMayWaxTaxTayXaJMayVaJMaPxawYaPyaxTaxRaPzaPzaLpaPzaLqatHaPAaLsasDaPBaPBasCatzaPBaPEaPEaPEaPEaPEaPFaPGaPEaPEaPEaPEaPEasEaPIaPJaPIaPKasGaPMaLzaLAaPNasFaPPaPQaLAaLzaPRaPRaUnaIOaIOaIPaPTaKraKraPUaPUaPUaPUaPVawGawRaxqaPZaQaaQaaQbaQcaQaaQdaQeaQfawGaQgaPUaPUaPUaPUaKraKraQhaINaIOaIOaBoaQiashaQkaQkaQkaQkasyassasiaQoavXarFdZFaQsaQtaQuaJdaJdaszaQwasBaQyaQzaJjaQAasAaQCaQCaQCaQCascaQEaJjasaarZaQGaHPaPgaPhaHPaHPaQHaEsavjaQJaQKaEyaQLarpaPraSoaPoasgaIbaQQaQRaEyasfaQTaPtaQUaQVaQWaafaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafatHaxRayVaJMayWaxTaxTayXaJMayVaJMaPxawYaPyaxTaxRaPzaPzaLpaPzaLqatHaPAaLsasDaPBaPBasCatzaPBaPEaPEaPEaPEaPEaPFaPGaPEaPEaPEaPEaPEasEaPIaPJaPIaPKasGaPMaLzaLAaPNasFaPPaPQaLAaLzaPRaPRaUnaIOaIOaIPaPTaKraKraPUaPUaPUaPUaPVawGawRaxqaPZaQaaQaaQbaQcaQaaQdaQeaQfawGaQgaPUaPUaPUaPUaKraKraQhaINaIOaIOaBoaQiashaQkaQkaQkaQkasyassasiaQoavXarFdZFaQsaQtaQuaJdaJdaszaQwasBaQyaQzaJjaQAasAaQCaQCaQCaQCascaQEaJjasaarZaQGaHPaPgaPhaHPaHPaQHaEsavjaQJaQKaEyaQLarpaPraSoaPoasgaIbaQQaQRaEyasfasUaPtaQUaQVaQWaafaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXaQXaxTaQYaPyaxTaxTaQZaQYaxTaQXaPyaxTaxTaxTaRaaRbaRbaRbaRbaRbaRbaRbaRcatUaPBaReaufaFvautaumaRjaRkaRlaRmaRnaRoaRpaukaRraRsaRtaujaRvaRwaxIaPKatwaPMaPMaRzaPMaugaPSaPSaRBaRCaPSaPSaPSaRDaIOaIPaREaaaaaaaaaaaaaaaaaaaaaaPWaRFaRGaRHaRIaRJaRKaRJaRLaRMaRNaROaPWaaaaaaaaaaaaaaaaaaaaaaRPaINaIOauZaRRaRSatDaQoaQoaQoaQoaQoaRUatGaQoaQoaQoaQraMpaRWaRXaRYaRZatxaSbatyaSdaSeaJdaPbatCaSgaSgaSgaSgatTaSiaJjasIarZaSjaSjaPgaPhaSkaSkaSlaEsaEsaSmaEsaEyaLhatZaulaulaulatNaTJaEyaEyaEyaSpaSqaSraSsbeKaSuaafaafaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXaQXaxTaQYaPyaxTaxTaQZaQYaxTaQXaPyaxTaxTaxTaRaaRbaRbaRbaRbaRbaRbaRbaRcatUaPBaReaufaFvautaumaRjaRkaRlaRmaRnaRoaRpaukaRraRsaRtaujaRvaRwaxIaPKatwaPMaPMaRzaPMaugaPSaPSaRBaRCaPSaPSaPSaRDaIOaIPaREaaaaaaaaaaaaaaaaaaaaaaPWaRFaRGaRHaRIaRJaRKaRJaRLaRMaRNaROaPWaaaaaaaaaaaaaaaaaaaaaaRPaINaIOauZaRRaRSatDaQoaQoaQoaQoaQoaRUatGaQoaQoaQoaQraMpaRWaRXaRYaRZatxaSbatyaSdaSeaJdaPbatCaSgaSgaSgaSgatTaSiaJjasIarZaSjaSjaPgaPhaSkaSkaSlaEsaEsaSmaEsaEyaLhatZaulaulaulatNaTJaEyaEyaEyaSpaSqaSraSsbeKaSuaafaafaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaxRaSvaSwaSvaSvaSvaSvaSvaSvaSwaSvaSvaSxaxTaxTaSyaxTavvaSzaxTaSAaSBaSCaSDatuaPBaReattbeRaPEaSHaRnaRnaRnaRnaRnaRoaSIaRnaRnaRnaRtasEaSJaSKauRaPKatwaPMaSMaSNaupatvaPSasnaSRaSSaSTaSUaSVaIOaIOaIPaREaaaaaaaaaaaaaPWaPWaPWaPWaSWaSXaSYaSZavwaTbaTcaTdaTeaTfaTgaPWaPWaPWaPWaaaaaaaaaaaaaRPaINaIOaIOaThaQoatnaTjaTkaQoaTlaTmaCIatqaToaTkaQoaQraMpaTpaRXaTqaTratraTtatsaTvaRXaTwaTxaTyaSgaTzaTAaSgaTBaPbaJjasIarZaQGaHPaPgaPhaHPaHPaHPaTCaTDaHPaTEaEyarDastaSoaSoaSoasgaIbaIbaEyaTKaSsaSsaSsaSsaStaTLaTMaTMaTNaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaxRaSvaSwaSvaSvaSvaSvaSvaSvaSwaSvaSvaSxaxTaxTaSyaxTavvaSzaxTaSAaSBaSCaSDatuaPBaReattbeRaPEaSHaRnaRnaRnaRnaRnaRoaSIaRnaRnaRnaRtasEaSJaSKauRaPKatwaPMaSMaSNaupatvaPSasnaSRaSSaSTaSUaSVaIOaIOaIPaREaaaaaaaaaaaaaPWaPWaPWaPWaSWaSXaSYaSZavwaTbaTcaTdaTeaTfaTgaPWaPWaPWaPWaaaaaaaaaaaaaRPaINaIOaIOaThaQoatnaTjaTkaQoaTlaTmaCIatqaToaTkaQoaQraMpaTpaRXaTqaTratraTtatsaTvaRXaTwaTxaTyaSgaTzaTAaSgaTBaPbaJjasIarZaQGaHPaPgaPhaHPaHPaHPaTCaTDaHPaTEaEyarDastaSoaSoaSoasgaIbaIbaEyaTKaSsaSsaSsaSsaStaTLaTMaTMaTNaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasSasSaTOaTPaTPaTPaTPaTPaTPaTPazYasSatHaTQaTRaTSaTSaTSaFuaTSaTSaTSaBgaTSaBgaPBaReattbeRaPEaTXaRnaRnaTYaTZaUaaUbaTYaRnaRnaRnaUcasEaUdaUeaUfaPKaFkaPMaUhaUiaUjaFpaPSaKhaSUaSUaSSaSUaUmaIOaIOaIPaKqaPVaUnaUoaPWaPWaUpaUqaUraUsaUtaUtaUuaUvaUtaUuaUvaUtaUwaUxaUyaUzaUAaPWaPWaUoaUnaUBaUCaINaIOaIOaBoaUDatnaToaTkaQoaUEaUFaQoaFjaUHaTkaQoaQraMpaUIaRXaUJaFzaFyaUMaFxaUOaRXaUPaUQaURaSgaUSaUTaSgaUUaUVaJjasIarZaUWaUWaPgaPhaUXaHPaHPaUYaHPaUZaVaaEyaIbaTGaTHaSoaTGaFwaQqaVfaEyaVgaSsaSsaSsaViaVhaVkaVjbewbdPaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasSasSaTOaTPaTPaTPaTPaTPaTPaTPazYasSatHaTQaTRaTSaTSaTSaFuaTSaTSaTSaBgaTSaBgaPBaReattbeRaPEaTXaRnaRnaTYaTZaUaaUbaTYaRnaRnaRnaUcasEaUdaUeaUfaPKaFkaPMaUhaUiaUjaFpaPSaKhaSUaSUaSSaSUaUmaIOaIOaIPaKqaPVaUnaUoaPWaPWaUpaUqaUraUsaUtaUtaUuaUvaUtaUuaUvaUtaUwaUxaUyaUzaUAaPWaPWaUoaUnaUBaUCaINaIOaIOaBoaUDatnaToaTkaQoaUEaUFaQoaFjaUHaTkaQoaQraMpaUIaRXaUJaFzaFyaUMaFxaUOaRXaUPaUQaURaSgaUSaUTaSgaUUaUVaJjasIarZaUWaUWaPgaPhaUXaHPaHPaUYaHPaUZaVaaEyaIbaTGaTHaSoaTGaFwaQqaVfaEyaVgaSsaSsaSsbzxbjgbgsbfVcbpcbnaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaafaVmazTaxVaxTaExaEwaEvaEtaEraEXaEWaEVaEUaEPaEIaEAaOqaEqaPEaVBaRnaRnaTYaUaaVCaVDaTYaRnaRnaRnaRtasEaPKaPKaEfaPKaEgaEhaEhaEhaEhaEoaEiaEpaSSaSSaSSaHcaUmaIOaIOaIPaLTaLTaVKaVLaVMaPWaVNaTbaUtaVOaUtaUtaUtaUtaVPaUtaUtaUtaVRaVSaVSaVTaVUaPWaVVaVLaVWaVXaLTaINaIOaIOaThaQoatDaQoaQoaQoaVYaVZaQoaFjaWaaTkaQoaQraMpaWbaRXaWcaWdaWeaWfaFiaUOaWhaJdaPbaURaWiaSgaSgaSgaUUaPbaJjaFharZaEsaEsaFgaPhaWlaWmaHPaWnaWoaKZaFfaFaaymaFdaFeaFcaFdaFbaymaEZaFaaEYaWzaSsaSsbfVaWAaWBaWCaTMaWDaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaafaVmazTaxVaxTaExaEwaEvaEtaEraEXaEWaEVbdPaEPaEIaEAaOqaEqaPEaVBaRnaRnaTYaUaaVCaVDaTYaRnaRnaRnaRtasEaPKaPKaEfaPKaEgaEhaEhaEhaEhaEoaEiaEpaSSaSSaSSaHcaUmaIOaIOaIPaLTaLTaVKaVLaVMaPWaVNaTbaUtaVOaUtaUtaUtaUtaVPaUtaUtaUtaVRaVSaVSaVTaVUaPWaVVaVLaVWaVXaLTaINaIOaIOaThaQoatDaQoaQoaQoaVYaVZaQoaFjaWaaTkaQoaQraMpaWbaRXaWcaWdaWeaWfaFiaUOaWhaJdaPbaURaWiaSgaSgaSgaUUaPbaJjaFharZaEsaEsaFgaPhaWlaWmaHPaWnaWoaKZaFfaFaaymaFdaFeaFcaFdaFbaymaEZaFaaEYaWzaSsaSsawfaWAaWBaWCaTMaWDaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaWEaWFaWGayWaWHaGlaGzaGqaGBaGAaGDaGCaGEaGqaGGaGFaGIaYCaFXaPEaWVaRnaWWaWXaYdaYAaYBaWYaWYaWYaXaaXbaFYaXdaGcaGbaGaaFZaReaReaXiaPBaGdaPSaIoaIlaHFaHEaHBaHpaIRaIOaIOaIOaIOaXpaXqaXraXsaXtaXuaUtaXvaXwaXxaXyaXzaXAaXBaIWaXDaKUaXFaXtaXGaXHaXIaXJaXKaXLaXMaXNaXOaIOaXPaBoaRSatnaXQaTkaQoaXRaXSaQoaFjaToaTkaQoaQraXTaRWaRXaWcaRXaXUaRXaGJaUOaXWaJdaQAaURaSgaSgaSgaSgaUUaQEaJjaYDaGRaXZaYaaQOaQPaPgaPgaPgaPgaPgaPgaFVaEyaIbaTGaTHaSoaTGaTHaIbasHaEyaSnaSsaSsaSsbfVaYkaYlaYmaafbjgaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaWEaWFaWGayWaWHaGlaGzcoCaGBaGAaGDaGCaGEaGqaGGaGFaGIaYCaFXaPEaWVaRnaWWaWXaYdaYAaYBaWYaWYaWYaXaaXbaFYaXdaGcaGbaGaaFZaReaReaXiaPBaGdaPSaIoaIlaHFaHEaHBaHpaIRaIOaIOaIOaIOaXpaXqaXraXsaXtaXuaUtaXvaXwaXxaXyaXzaXAaXBaIWaXDaKUaXFaXtaXGaXHaXIaXJaXKaXLaXMaXNaXOaIOaXPaBoaRSatnaXQaTkaQoaXRaXSaQoaFjaToaTkaQoaQraXTaRWaRXaWcaRXaXUaRXaGJaUOaXWaJdaQAaURaSgaSgaSgaSgaUUaQEaJjaYDaGRaXZaYaaQOaQPaPgaPgaPgaPgaPgaPgaFVaEyaIbaTGaTHaSoaTGaTHaIbasHaEyaSnaSsaSsaSsawfaYkaYlaYmaafcBhaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaOuaQIaNHaMZaYoaBgaYpaYqaYraYraYraYraYsaYtaTSaYuaYvaOlaCSaYyaYyaYyaYzaYyaOsaRnaTWaUKaWZaWZaPDaSGaFOaFPaFEaFDaFJaFFaFAaIgaFCaFBaFLaFKaFMaYSaYSaYSaYTaUnaHhaIOaYVaYWaYXaYYaYZaZaaPWaHkaHiaLRaZfaPWaPWaPWaPWaPWaPWaPWaPWaPWaHeaXwaZkaZlaPWaZaaYZaZmaGTaYWaZoaIOaIOaThaQoaZpaQoaQoaQoaFHaQoaQoaFUaQoaZraZraZraZraZsaZtaKAaRXaRXaRXaZvaZwaZxaJdaZyaZzaSgaZAaZAaZBaZzaZCaJjaFWaBDaZFaZGaPgaPgaPgaPgaZHaPgaPgaPgaFVawKaIbaPoaPraSoaPoaPraIbasHawKaYjaSsaSsaZJbfVaSsaZKaYmaafaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaOuaQIaNHaMZaYoaBgaYpaYqaYraYraYraYraYsaYtaTSaYuaYvaOlaCSaYyaYyaYyaYzaYyaOsaRnaTWaUKaWZaWZaPDaSGaFOaFPaFEaFDaFJaFFaFAaIgaFCaFBaFLaFKaFMaYSaYSaYSaYTaUnaHhaIOaYVaYWaYXaYYaYZaZaaPWaHkaHiaLRaZfaPWaPWaPWaPWaPWaPWaPWaPWaPWaHeaXwaZkaZlaPWaZaaYZaZmaGTaYWaZoaIOaIOaThaQoaZpaQoaQoaQoaFHaQoaQoaFUaQoaZraZraZraZraZsaZtaKAaRXaRXaRXaZvaZwaZxaJdaZyaZzaSgaZAaZAaZBaZzaZCaJjaFWaBDaZFaZGaPgaPgaPgaPgaZHaPgaPgaPgaFVawKaIbaPoaPraSoaPoaPraIbasHawKaYjaSsaSsaZJawfaSsaZKaYmaafaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaZLaZMaWGaAbaZNaBWaZPaZQaZRaZSaZTaYraZUaZVaTSaZWbaEaOlaCSaZYaZZbaaaCLaYybacbadbaeaPEbafbagbahaOnaPEaCRaBtbalbalbalbalaHubalbalbanbaobaobaobapbaobaqaUnbasbatbauawGawGawGbaAaFTbaAbayaFQbaybaAbaBbaBbaBbaBbaBbaBbaBbaBbaBaCVbaDbbubaDaPWaPWaPWawGawGawGaZoaIOaIOaUnbaFbaGaBlbaHaQobaIaQobaJbaKbaLaZrbaMaFRbaOaJdaJdaJdbaPbaQbaQbaQaJdaJdaJdbaRaSgaSgaLeaFNbaUbaVaGwaJjaBEaBDbaYaEsbaZbbabbbaWmbbcbbabbdaWmbbeaEybbfaQMaQNbbgaQMaQNaIbbbhaEyaDkbbjbbkaSsbfVbblbbmaYmaafcONaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaZLaZMaWGaAbaZNaBWaZPaZQaZRaZSaZTaYraZUaZVaTSaZWbaEaOlaCSaZYaZZbaaaCLaYybacbadbaeaPEbafbagbahaOnaPEaCRaBtbalbalbalbalaHubalbalbanbaobaobaobapbaobaqaUnbasbatbauawGawGawGbaAaFTbaAbayaFQbaybaAbaBbaBbaBbaBbaBbaBbaBbaBbaBaCVbaDbbubaDaPWaPWaPWawGawGawGaZoaIOaIOaUnbaFbaGaBlbaHaQobaIaQobaJbaKbaLaZrbaMaFRbaOaJdaJdaJdbaPbaQbaQbaQaJdaJdaJdbaRaSgaSgaLeaFNbaUbaVaGwaJjaBEaBDbaYaEsbaZbbabbbaWmbbcbbabbdaWmbbeaEybbfaQMaQNbbgaQMaQNaIbbbhaEyaDkbbjbbkaSsawfbblbbmaYmaafaxaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlayBaxRbbnayabboaBgbbpbbpbbqaAMbbsbbqbbtbbpaTSaQpaOTaGHaByaBzaBzaBAaBBaBzbbBbadbbCaPEbafbagbbDaGPaPEaBxbfabalbbGbbHbbHazqbbIbalbbJbbKbbLbbMbarbarbaraUnaIOaIOaYVawGbbPbbQbbRbbSaBRaFraFlbbWbaAbaBbbXbbYbbZbcaaBhbccbcdbaBaCVbcebcfbcgbchbcibcjaAVbdsawGbcmbcnbcnaUnbcqbcqaBoaBobcoaThbcobcpaBoaBoaRRaBoaBoaBobcqbcrbcrbcrbcrbcrbcrbcsaAabcqazGbctbctaCKaZFaZFaZFayZbcqaBEaBDbaYaEsaEsaEsaEsaEsarZaEsaEsaEsaEsaEyaBCbcAawKavUawKbcyayKbcqaPtbcBaSsbcCaSsbfVaWAbcDbcEaTMaWDaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlayBaxRbbnayabboaBgbbpbbpauDaAMbbsbbqbbtbbpaTSaQpaOTaGHaByaBzaBzaBAaBBaBzbbBbadbbCaPEbafbagbbDaGPaPEaBxbfabalbbGbbHbbHazqbbIbalbbJbbKbbLbbMbarbarbaraUnaIOaIOaYVawGbbPbbQbbRbbSaBRaFraFlbbWbaAbaBbbXbbYbbZbcaaBhbccbcdbaBaCVbcebcfbcgbchbcibcjaAVbdsawGbcmbcnbcnaUnbcqbcqaBoaBobcoaThbcobcpaBoaBoaRRaBoaBoaBobcqbcrbcrbcrbcrbcrbcrbcsaAabcqazGbctbctaCKaZFaZFaZFayZbcqaBEaBDbaYaEsaEsaEsaEsaEsarZaEsaEsaEsaEsaEyaBCbcAawKavUawKbcyayKbcqaPtbcBaSsbcCaSsawfaWAbcDbcEaTMaWDaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazQasSbcFaAFaWGatHatHatHatHatHatHaIQaJoaBgaTSaTSaTSaTSaTSaTSaTSaTSaTSaHMaHMaOlaCSaZYbcIbcJbcKaYybcLbcMaDEaPEbafbagbcOaOpaPEaBxbfabalbbHbcQbcQbbHbcQbalbbJbcRbcSbcSbcTbcUbcVbarbcWaIOaYVaGpbcYbgCbdabdbbdbbdaaGibddbaAbaBbdebdfbdgbdhbdibdjbdkaGYaHabdnbdobclbdpbdqbdrbclaLgawGaJtbdtaIOaNsbdubdvaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbdxaZFaZFaZFaZFaZFaZFaZFaZFbdyaZFaZFaZFaZFaZFaZFaZFaBDbdzaDPaDTaCYaDUaCYaDVaCYaDXaDWaDYaCYaDZaCYaEaaEbaCYaCYaCYaCYaCYaCYaEcaEdaEebdObcCaSscUBcQkdoGdaLdoIdoHaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazQasSbcFaAFaWGatHatHatHatHatHatHaIQaJoaBgaTSaTSaTSaTSaTSaTSaTSaTSaTSaHMaHMaOlaCSaZYbcIbcJbcKaYybcLbcMaDEaPEbafbagbcOaOpaPEaBxbfabalbbHbcQbcQbbHbcQbalbbJbcRbcSbcSbcTbcUbcVbarbcWaIOaYVaGpbcYbgCbdabdbbdbbdaaGibddbaAbaBbdebdfbdgbdhbdibdjbdkaGYaHabdnbdobclbdpbdqbdrbclaLgawGaJtbdtaIOaNsbdubdvaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbdxaZFaZFaZFaZFaZFaZFaZFaZFbdyaZFaZFaZFaZFaZFaZFaZFaBDbdzaDPaDTaCYaDUaCYaDVaCYaDXaDWaDYaCYaDZaCYaEaaEbaCYaCYaCYaCYaCYaCYaEcaEdaEebdObcCaSsaVkaVjaViaVhaQTaEUaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaaaafbdRazTaDraDlaCTaAJaAJaAJaAJaAJaAJaAtaAqaBOaBeaBcaOlaCSaYyaYybdXbdYaYyaPEaPEaCUaPEbafbeabcOaOoaPEaDKaFSbalbecbedbbHbcQbeebalbbJbefbcSbcSbcSbegbehbarbeiaIOaYVaGkbekbgCbembenbeobepaGibeqbaAbaBberbesbetbetbetaEObevbaBaCVbexbclbclbdpbeybdrbclaLfawGaGQaIOaIOaNsbdubdvaZFaZFaZFaZFaZFaZFaZFbeBaZFaZFaZFaZFaZFaZFbeCaCYaCYaCYaCYaCYaCYaCZaCYaCYaCYaCYaCYaCYaCYaHLaDDaDCaDtaZFaZFaZFaZFaZFaBDaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbeIbdzbeJaSsaSsbcCaSsbfVaStbeLaTMaTMaTNaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaaaafbdRazTaDraDlaCTaAJaAJaAJaAJaAJaAJaAtaAqaBOaBeaBcaOlaCSaYyaYybdXbdYaYyaPEaPEaCUaPEbafbeabcOaOoaPEaDKaFSbalbecbedbbHbcQbeebalbbJbefbcSbcSbcSbegbehbarbeiaIOaYVaGkbekbgCbembenbeobepaGibeqbaAbaBberbesbetbetbetaEObevbaBaCVbexbclbclbdpbeybdrbclaLfawGaGQaIOaIOaNsbdubdvaZFaZFaZFaZFaZFaZFaZFbeBaZFaZFaZFaZFaZFaZFbeCaCYaCYaCYaCYaCYaCYaCZaCYaCYaCYaCYaCYaCYaCYaHLaDDaDCaDtaZFaZFaZFaZFaZFaBDaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbeIbdzbeJaSsaSsbcCaSsawfaStbeLaTMaTMaTNaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaWEaWFbeMaAbbeNbUVbePbePbeQbePbePbePbeRaPBaPBaPBaPBaOlaCSaZYbeSbeTbeUaYybeVbeWbUWaPEaPEaPEaPEbUmaPEcuRbfabalctebbHbcQcsXcsZbalbbJbarbfcbcSbcSbPhbfebarbULaIOaYVbTrbfhbgCbembfibfjbepaGibfkbaAbflbfmbfnbetbfobetbdfbfpbfqaCVbfrbfsbftbfubfubfvbclbfwawGcCTcuScFlcvvcxRdPwdPxdTPdPxcFHdPxcGedTQbTtdTSctbctbctaaZFaZFaZFaZFbfDaZFbfybfOaZFctccByctdbfIbWUcGxbfIbfKdTUdTVdTWaZFaZFaZFaZFaZFbfObfPbfDaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbdzbfQbfRbfSbfTbfUcBhdoJbfWaafaaaaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaWEaWFbeMaAbbeNbUVbePbePbeQbePbePbePbeRaPBaPBaPBaPBaOlaCSaZYbeSbeTbeUaYybeVbeWbUWaPEaPEaPEaPEbUmaPEcuRbfabalctebbHbcQcsXcsZbalbbJbarbfcbcSbcSbPhbfebarbULaIOaYVbTrbfhbgCbembfibfjbepaGibfkbaAbflbfmbfnbetbfobetbdfbfpbfqaCVbfrbfsbftbfubfubfvbclbfwawGcCTcuScFlcvvcxRdPwdPxdTPdPxcFHdPxcGedTQbTtdTSctbctbctaaZFaZFaZFaZFbfDaZFbfybfOaZFctccByctdbfIbWUcGxbfIbfKdTUdTVdTWaZFaZFaZFaZFaZFbfObfPbfDaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbdzbfQbfRbfSbfTbfUdoSdoTbfWaafaaaaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQcpzcpvcqkcqxbfXbePbfYbfZbgabgabgbbgcbgdbgebgebgebgebPBbUubUrbUrbUtbUsbUrbUobUobUpbUobUnbUlbUlbSbbRucqMcrQbUCcrpbUBbUBcrocqYbalcqPbarbgybcSbcSbPhbgzbgAbffaIOaYVbaAbgCbTpbdabdabdabdaaGibgEbaAbaBbgFbgGbWJbgIbgJbgGbgKbaBaCVbURbUQbgNbgObgPbgQbgRbgSawGcrZaHfcrWawGbTqbTqbgUbgUbgUbgUcmTcmTcsUcsVcsrcsscsVcsUcmTcmTcmTckbckbckbckbckbbcqbcqcskbhbbhbbhbbhbbhbbktcslbcqcsYcsncsobhkbhkbhlbhlbhlbhlbhlbhmbhnbhnbhobhnaZFbhnbhobhnbhnbhpbTqcsJcsJbNtbhrbhgdoLaPtaPtaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQcpzcpvcqkcqxbfXbePbfYbfZbgabgabgbbgcbgdbgebgebgebgebPBbUubUrbUrbUtbUsbUrbUobUobUpbUobUnbUlbUlbSbbRucqMcrQbUCcrpbUBbUBcrocqYbalcqPbarbgybcSbcSbPhbgzbgAbffaIOaYVbaAbgCbTpbdabdabdabdaaGibgEbaAbaBbgFbgGbWJbgIbgJbgGbgKbaBaCVbURbUQbgNbgObgPbgQbgRbgSawGcrZaHfcrWawGbTqbTqbgUbgUbgUbgUcmTcmTcsUcsVcsrcsscsVcsUcmTcmTcmTckbckbckbckbckbbcqbcqcskbhbbhbbhbbhbbhbbktcslbcqcsYcsncsobhkbhkbhlbhlbhlbhlbhlbhmbhnbhnbhobhnaZFbhnbhobhnbhnbhpbTqcsJcsJbNtbhrbhgdoRaPtaPtaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaZLaZMbeMaAbbhsbePbhtbePbhubhvbePbePbePaRebhwbhxbhxbTHaYyaZYbhzbcJbhAaYybUabTZbTTbTSbTVbTUbTXbTWbTYbTXbTMbTNbLkbTCbLkbLkcmKcmVclMbTbbhSbcSbcSbTLbhUbhVbffaIObhWbaAbhXbaAbhZbVnbibbSOaGibaAbaAbaBbiebifbigbihbiibijbikbaBaCVbTybimckrbiobipbgQbclbiqawGcnGcoacoNawGcqlcqncqSbTncrDcrGcrMcoOcqUcqVcrAcrBcogcofcpscoYcmTcmIcmWcmUcpMckbcnscpNcndcptbVUcktcktclSbktcggbiSbiScksbiSbiUbiUbhlbiVbiWbiXbhlbiYbiZbiYbhlbhmbhnbhpbNtbSQbTibSQbNtbThbTgbNtbjebTEdoMbhgaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaZLaZMbeMaAbbhsbePbhtbePbhubhvbePbePbePaRebhwbhxbhxbTHaYyaZYbhzbcJbhAaYybUabTZbTTbTSbTVbTUbTXbTWbTYbTXbTMbTNbLkbTCbLkbLkcmKcmVclMbTbbhSbcSbcSbTLbhUbhVbffaIObhWbaAbhXbaAbhZbVnbibbSOaGibaAbaAbaBbiebifbigbihbiibijbikbaBaCVbTybimckrbiobipbgQbclbiqawGcnGcoacoNawGcqlcqncqSbTncrDcrGcrMcoOcqUcqVcrAcrBcogcofcpscoYcmTcmIcmWcmUcpMckbcnscpNcndcptbVUcktcktclSbktcggbiSbiScksbiSbiUbiUbhlbiVbiWbiXbhlbiYbiZbiYbhlbhmbhnbhpbNtbSQbTibSQbNtbThbTgbNtbjebTEdoQbhgaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaachMaMYbbnayabjhbePbjibePbjjbjkbjlbQYbePbjnaReaXibcHbTjaYyaYyaYyaYyaYyaYybTAbjrbjsaRebjtbalbalbalbTzbalbalbalbrnbalbalbalbMVbalblubRFbjzbcSbcSbPhbjAbgAbSwaIObSybaAbjCbaAbaAbaAbaAdoFbTkbaAbTmbTlbjGbjHbbXbjIbbXbjJbjKbTvbTxbTybjNbclbjObjPbgQbjQbjRbaDbSNaIObDbcgQchOcgPcgjchNcjwckLciicjachochocgRcgScjtcjpciHciEciDciCciBciAckcckbcjDcgeclFcgecjvcjucgecgfbktcggbiSbkwcfKcgdbkzbkAbkBbkCbkDbkCbSjbkFbkGbkHbhlbkIbkJbkKbNtbSzbSEbSDbSMbNHbSAbNtbkRbkSbkTbhgaaaaaaaaaaaeaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaachMaMYbbnayabjhbePbjibePbjjbjkbjlbQYbePbjnaReaXibcHbTjaYyaYyaYyaYyaYyaYybTAbjrbjsaRebjtbalbalbalbTzbalbalbalbrnbalbalbalbMVbalblubRFbjzbcSbcSbPhbjAbgAbSwaIObSybaAbjCbaAbaAbaAbaAbTobTkbaAbTmbTlbjGbjHbbXbjIbbXbjJbjKbTvbTxbTybjNbclbjObjPbgQbjQbjRbaDbSNaIObDbcgQchOcgPcgjchNcjwckLciicjachochocgRcgScjtcjpciHciEciDciCciBciAckcckbcjDcgeclFcgecjvcjucgecgfbktcggbiSbkwcfKcgdbkzbkAbkBbkCbkDbkCbSjbkFbkGbkHbhlbkIbkJbkKbNtbSzbSEbSDbSMbNHbSAbNtbkRbkSbkTbhgaaaaaaaaaaaeaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazQasSbcFaAFaZMaTPaTPaTPbkUaTPbkVayWcViaxTbePbkWbkXbkYbkZblablbblcbldbldbldbldbXnbWDbWDbWDbTXbTXbTXbWCblhblhblhblibalbljblkbWEblmblnbloblpblpblrblschfckRcnZbgAbjzbcSbXvbWwbWxbWxbWRbEvbWMbXmbWXbWLbZTbWIbXmbWTbXkbXjbXibTvbTvbTvbTvbWHbTvbTvbTvbTvbWjbWGbWQbWSbWObWPbWKbWNbWsbWFbWVaIObDbbgUdVHdVIdVJcVwcVubgUcVvdUTcjtcjtcjtcjtcjtcjpdVzdVydVBdVAdVDdVCdVuckbdVwdVvcVjcgecjvcjucgedVLbktcggdVNbYedVMbYbbXHbXMbXFbXGbXGbXGbXUbXWbXAbXzbXybXxbXEbXDbXhbXgbXebNHbXcbXbbXfbNtbmPbkSbmsbhgaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazQasSbcFaAFaZMaTPaTPaTPbkUaTPbkVayWcViaxTbePbkWbkXbkYbkZblablbblcbldbldbldbldbXnbWDbWDbWDbTXbTXbTXbWCblhblhblhblibalbljblkbWEblmblnbloblpblpblrblschfckRcnZbgAbjzbcSbXvbWwbWxbWxbWRbEvbWMbXmbWXbWLbZTbWIbXmbWTbXkbXjbXibTvbTvbTvbTvbWHbTvbTvbTvbTvbWjbWGbWQbWSbWObWPbWKbWNbWsbWFbWVaIObDbbgUdVHdVIdVJcVwcVubgUcVvdUTcjtcjtcjtcjtcjtcjpdVzdVydVBdVAdVDdVCdVuckbdVwdVvcVjcgecjvcjucgedVLbktcggdVNbYedVMbYbbXHbXMbXFbXGbXGbXGbXUbXWbXAbXzbXybXxbXEbXDbXhbXgbXebNHbXcbXbbXfbNtbmPbkSbmsbhgaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmQcOncOfcOwcOocOxcOxcOGcUZaxTbePbmSbmTbkZbmUbePbePbePaPBbmVbmWbmXbmYbmXbmXbmXbmYbmXaPBaPBbalbalbalbmZbalblpblpbnablpblpblpblpblpbnbbVobndbcSbWebWdbWdbWdbWabWcbVYbVcbVgbWibWncrRbWfbWfbWhbWgbWqbWpbVsbWrbWobnxbnybnzbnAbnBbnCbnzbnDbnxbPVbTybnFbnGbnFbaDbaDbaDbWAbaDdUZaIObDbcgQchOcgPdVadVbbWBbgUdUSdUTdUXdUYdUVdUWdVndVmdVldVkcmTdVpdUEdVodVfdVedVddVccVhdVidVhdVgdVidVqbUedVrdVsdTXbnYdTYboabobbocbodboebofbofbogbkCbohbhlbWvbojbokbNtbVZbVAbVzbUJbVVbVXbNtbmPbkSborbhgaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmQcOncOfcOwcOocOxcOxcOGcUZaxTbePbmSbmTbkZbmUbePbePbePaPBbmVbmWbmXbmYbmXbmXbmXbmYbmXaPBaPBbalbalbalbmZbalblpblpbnablpblpblpblpblpbnbbVobndbcSbWebWdbWdbWdbWabWcbVYbVcbVgbWibWncrRbWfbWfbWhbWgbWqbWpbVsbWrbWobnxbnybnzbnAbnBbnCbnzbnDbnxbPVbTybnFbnGbnFbaDbaDbaDbWAbaDdUZaIObDbcgQchOcgPdVadVbbWBbgUdUSdUTdUXdUYdUVdUWdVndVmdVldVkcmTdVpdUEdVodVfdVedVddVccVhdVidVhdVgdVidVqbUedVrdVsdTXbnYdTYboabobbocbodboebofbofbogbkCbohbhlbWvbojbokbNtbVZbVAbVzbUJbVVbVXbNtbmPbkSborbhgaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaabmQcNOcLFcInaxSaxSaxSbosaxSaxSbePbotboubovbkZbePaaaaaaaaaaafaafbowbowbowbowbowbowbowaaaaaaboxboybozboAboBblpblpblpblpblpblpblpblpbUNbjzbUOdYAboEboFbarbarbVGbVHbaraUnboHboIbVEaUnboLboMboMbNsboMbVFbUGboMabLboQboRbnzboSbnBboSbnzboTboQbPVbVkboVbfuboWbVybVBbVDbUFbnFbpcaIObDbbgUbWmcqndUQdURdUNbixdUOdUPdUJdUKdULbVWdUGdUFdUIdUHcmTckbdUEdUDdUAckbdUCdUBdUydUxdUzdUzdUvdUwbktcggbiSdUubkxbkxboabpybpzbpAbpBbpCbpCbpDbpEbpFbhlbpGbojbpHbNtbUYbUTbUPbUJbNHbUIbNtbkRbkSbpMbhgaaaaaaaaaaaaaafbpNbpObMebpObMebpObpQaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaabmQcNOcLFcInaxSaxSaxSbosaxSaxSbePbotboubovbkZbePaaaaaaaaaaafaafbowbowbowbowbowbowbowaaaaaaboxboybozboAboBblpblpblpblpblpblpblpblpbUNbjzbUOdYAboEboFbarbarbVGbVHbaraUnboHboIbVEaUnboLboMboMbNsboMbVFbUGboMabLboQboRbnzboSbnBboSbnzboTboQbPVbVkboVbfuboWbVybVBbVDbUFbnFbpcaIObDbbgUbWmcqndUQdURdUNbixdUOdUPdUJdUKdULbVWdUGdUFdUIdUHcmTckbdUEdUDdUAckbdUCdUBdUydUxdUzdUzdUvdUwbktcggbiSdUubkxbkxboabpybpzbpAbpBbpCbpCbpDbpEbpFbhlbpGbojbpHbNtbUYbUTbUPbUJbNHbUIbNtbkRbkSbpMbhgaaaaaaaaaaaaaafbpNbpObMebpObMebpObpQaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacHGaxRcHMcHMbpRaTPbpSazQasSbpTbpSbePbpUbpVbpWbpXbePaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaabpYbpZblpbqabqbbqbbqbbqbbqbbqcbqbbqbbqbbqdbqebqfcGybqhbqibarbqjbPhbqkbqlbtfbffbqnbqoaUnaUnboMbqpbVdbqrbXdbTuboMbTwbVfbVhbqxbqybqzbqybqAbVibVjbTxbVkbqEbfubqFbaDbqGbnFbTIbnFbpcaIOcHTbgUdUjdUkdUhdUidUgbixdUedUfdUcdUddUadUbbZzdUsdUrdUqdUpbPZdUodUnbPZbPZbPZbPZdUmdUlbPZbPZbktdTZbktcggbiSdTXbnYdTYbrabrbbrcbrdbrebrebrebpDbkCbrfbrgbrhbkJbVlbNtbUEbUAbUzbUDbNHbUvbNtbUwbmrbhgbhgaaaaaaaaaaaaaafbrobrpbrqbrrbrrbrsbroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacHGaxRcHMcHMbpRaTPbpSazQasSbpTbpSbePbpUbpVbpWbpXbePaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaabpYbpZblpbqabqbbqbbqbbqbbqbbqcbqbbqbbqbbqdbqebqfcGybqhbqibarbqjbPhbqkbqlbtfbffbqnbqoaUnaUnboMbqpbVdbqrbXdbTuboMbTwbVfbVhbqxbqybqzbqybqAbVibVjbTxbVkbqEbfubqFbaDbqGbnFbTIbnFbpcaIOcHTbgUdUjdUkdUhdUidUgbixdUedUfdUcdUddUadUbbZzdUsdUrdUqdUpbPZdUodUnbPZbPZbPZbPZdUmdUlbPZbPZbktdTZbktcggbiSdTXbnYdTYbrabrbbrcbrdbrebrebrebpDbkCbrfbrgbrhbkJbVlbNtbUEbUAbUzbUDbNHbUvbNtbUwbmrbhgbhgaaaaaaaaaaaaaafbrobrpbrqbrrbrrbrsbroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbrubrvbrwbrxblpblpblpbrybrybrybryboAblpblpblpbnbbqgbqTbrzboZbrCbrDbrEbPhbcSbrFbRgbffbqnbrHbrIbrJbNNbrLbPPbrNbPObNMboMaafbrQbrRbnzbqybrSbqybnzbrTbrUbPVbPWbrWbrXbrYbaDbrZbnFbOlaUnbpcbNybTDbNzbNAbNCbNDbPKbIibixbPMbPQbLDbPRbPubPSbLDbLDbPYbPUbPZbPZbQxbQpbQFbIrbQIbQHbQSbQJbQVbPZbJqbRabQWbQXbRfbRhbRbbRbbPGbsEbkBbsFbrebrebrebsGbkCbsHbrhbsIbsIbPHbrhbNEbNKbNJbNIbNHbNLbNtbmPbsPbhgaaaaaaaaaaaaaaaaafbsQbsRbrqbrrbrqbTGbMeaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbrubrvbrwbrxblpblpblpbrybrybrybryboAblpblpblpbnbbqgbqTbrzboZbrCbrDbrEbPhbcSbrFbRgbffbqnbrHbrIbrJbNNbrLbPPbrNbPObNMboMaafbrQbrRbnzbqybrSbqybnzbrTbrUbPVbPWbrWbrXbrYbaDbrZbnFbOlaUnbpcbNybTDbNzbNAbNCbNDbPKbIibixbPMbPQbLDbPRbPubPSbLDbLDbPYbPUbPZbPZbQxbQpbQFbIrbQIbQHbQSbQJbQVbPZbJqbRabQWbQXbRfbRhbRbbRbbPGbsEbkBbsFbrebrebrebsGbkCbsHbrhbsIbsIbPHbrhbNEbNKbNJbNIbNHbNLbNtbmPbsPbhgaaaaaaaaaaaaaaaaafbsQbsRbrqbrrbrqbTGbMeaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbSKbsUbSKbsVbsWblpblpblpblpblpblpboAblpbsXbalbalbsYbcSbndboCbtabtbbtcbPhbcSbcSbtdaIObqnbtebtfbtgbPrbtibtjbtkbPqbNxboMaafbrUbrUbIgbtobtpbnzbtqbOvbNgbPpbNqbtvbtvbtvbtvbtvbtvdoEawGbLTaHfaHfawGbMcbMmbLUbOIbPfbixbOLbOYbPubPvbPsbPtbOibOhbOgbNUbOybOubOkbOjbOCbOBbOAbOzbOGbOFbOEbODbNubPAbPAboDbPCbPDbPDbPDbtZbHWbkBbubbkCbkCbucbPgbkCbuebkIbOUbugbORbkIbMtbMCbMvbRqbAHbrhbNtbuobhgbhgbupbuqbuqbuqburbkIbrobrrbrqbrrbrrbSibroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbSKbsUbSKbsVbsWblpblpblpblpblpblpboAblpbsXbalbalbsYbcSbndboCbtabtbbtcbPhbcSbcSbtdaIObqnbtebtfbtgbPrbtibtjbtkbPqbNxboMaafbrUbrUbIgbtobtpbnzbtqbOvbNgbPpbNqbtvbtvbtvbtvbtvbtvbewawGbLTaHfaHfawGbMcbMmbLUbOIbPfbixbOLbOYbPubPvbPsbPtbOibOhbOgbNUbOybOubOkbOjbOCbOBbOAbOzbOGbOFbOEbODbNubPAbPAboDbPCbPDbPDbPDbtZbHWbkBbubbkCbkCbucbPgbkCbuebkIbOUbugbORbkIbMtbMCbMvbRqbAHbrhbNtbuobhgbhgbupbuqbuqbuqburbkIbrobrrbrqbrrbrrbSibroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaeaaaaaaaaabowbowbowbowbowbowbowbNvbutbNvbuublpblpblpbrybrybrybryboAblpbuvbuwbalbuxbcSbndboCbuybuzbtcbOxbuBbqfbuCbuDbuEbpcbuFbtgbuGbuHbuIbuJbOmbMfboMbOpbOobNBbOnbuRbrSbuRbOvbOwbuTbuTbNqbuUbuVbuWbuXbuYbuZbMkawGbvcaIOaIOawGbLSbMnbMrbMBbMSbMTbMUbnebMLbMPbMbbMRbNabMZbMsbNbbApbHvbMYbMWbNlbNkbNGbNobNfbNebNibNhbMjbMlbMhbMibiSbvybvzbMgbvBbvBbkBbvCbvDbvEbkBbNVbkCbvGbLubvIbvJbOebvLbvMbOfbvObvPbvQbsIbkJbLVbLQbMubMNbMQbvVbvVbNcbvWbvXbpObMebNdbMebpObvZaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaeaaaaaaaaabowbowbowbowbowbowbowbNvbutbNvbuublpblpblpbrybrybrybryboAblpbuvbuwbalbuxbcSbndboCbuybuzbtcbOxbuBbqfbuCbuDbuEbpcbuFbtgbuGbuHbuIbuJbOmbMfboMbOpbOobNBbOnbuRbrSbuRbOvbOwbuTbuTbNqbuUbuVbuWbuXbuYbuZbMkawGbvcaIOaIOawGbLSbMnbMrbMBbMSbMTbMUbnebMLbMPbMbbMRbNabMZbMsbNbbApbHvbMYbMWbNlbNkbNGbNobNfbNebNibNhbMjbMlbMhbMibiSbvybvzbMgbvBbvBbkBbvCbvDbvEbkBbNVbkCbvGbLubvIbvJbOebvLbvMbOfbvObvPbvQbsIbkJbLVbLQbMubMNbMQbvVbvVbNcbvWbvXbpObMebNdbMebpObvZaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbwabrvbwbbKOblpblpblpblpblpblpblpboAblpbuvbwdbalbwebegbndbncbqfbwgbqfbNFbcSbrFbRdbffaIObpcbuFbtgboMbwibwjbwkbwlbMdboMbwpbwnbHhbzzbNgbNjbNmbNnbwubGIbwwbNqbGCbwybwzbwAbwBbwBbnTbINbambdDaIRbgUbJfbLRbLNbLPbeZbixbLYbLZbLDbLXcbObLWbFNbLDbLAbLzbDcbDcbDcbDcbDcbHfbIIbHfbAqbLJbLGbAqbAqbAqbAqbLybiSbiSbkIbkIbkIbxbbkBbkBbkBbkBbkBbMMbxebxfbxgbxhbxibMobHMbMpbMqbojbojbxnbxobxpbJebJdbKfbKubMpbJgbMpbKEbkIbupbuqburbKLbkIbKMaaaaafaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbwabrvbwbbKOblpblpblpblpblpblpblpboAblpbuvbwdbalbwebegbndbncbqfbwgbqfbNFbcSbrFbRdbffaIObpcbuFbtgboMbwibwjbwkbwlbMdboMbwpbwnbHhbzzbNgbNjbNmbNnbwubGIbwwbNqbGCbwybwzbwAbwBbwBbnTbINbambdDaIRbgUbJfbLRbLNbLPbeZbixbLYbLZbLDbLXcbObLWbFNbLDbLAbLzbDcbDcbDcbDcbDcbHfbIIbHfbAqbLJbLGbAqbAqbAqbAqbLybiSbiSbkIbkIbkIbxbbkBbkBbkBbkBbkBbMMbxebxfbxgbxhbxibMobHMbMpbMqbojbojbxnbxobxpbJebJdbKfbKubMpbJgbMpbKEbkIbupbuqburbKLbkIbKMaaaaafaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbNvbutbNvbxubxvblpblpbxwbSRbSSbSRbSXbSRbSYbTabSTbSUbSVbzmbFnbSWbTcbTdbSVbxFbxGbRgbffaIObxHbxIbxJboMbxKbxLbxMbxNbSdbRzbXwbSfbRUbRJbSubSvbSsbStbSkbSrbSebShbybbycbycbydbyebyfbQEbtvcbPbDNbONbgUbixcbQcciccjcarcawcaWcbabPucbccbebLWcfMbPucdkbWubRSceEceJcfQbDccckccFccEbAqbSCbTsbRebRvbAybAqbwNbRybRBbRwbRxbRpbRpbRibRmbRpbRtbRrbRsbREbRDbRpbRCbQubSPbyPbyQbSLbySbrhbrhbrhbyScglcgkbyVbupburbkIbojbvVbyWcfLcdQceFbzacfDaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbNvbutbNvbxubxvblpblpbxwbSRbSSbSRbSXbSRbSYbTabSTbSUbSVbzmbFnbSWbTcbTdbSVbxFbxGbRgbffaIObxHbxIbxJboMbxKbxLbxMbxNbSdbRzbXwbSfbRUbRJbSubSvbSsbStbSkbSrbSebShbybbycbycbydbyebyfbQEbtvcbPbDNbONbgUbixcbQcciccjcarcawcaWcbabPucbccbebLWcfMbPucdkbWubRSceEceJcfQbDccckccFccEbAqbSCbTsbRebRvbAybAqbwNbRybRBbRwbRxbRpbRpbRibRmbRpbRtbRrbRsbREbRDbRpbRCbQubSPbyPbyQbSLbySbrhbrhbrhbyScglcgkbyVbupburbkIbojbvVbyWcfLcdQceFbzacfDaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowcdabzdcdabzebzfbzgbzgbzgbzgbzgbzhbPLblpbuvbzjbalbzkbOXbZGbwfbzoboEbRZbzqbzrbarbarbffaIObztbzubtgboMbzvbzwbzxbwjbQTboMbRGbRAbRHbOpbQwbzEbQDbuTbQvbzIbzJbNqbzKbzLbzMbzNbyebyfbQEbtvbpcbDNbNwbOHbYPbOMbOJbOKbEpbXtbXrbXsbLDbLDbLDbYBbWzbLDbWybWubXqbXpbXobOSbDcbYubVRbVQbWtbRcbQUbQKbRjbQabYcbrBbYObZMbZNbZObvMbvMbArbvMbAsbvMbOfbQqbQqbQqbQsbQrbQtbAvbAwbAxbRTbAzbAAbABbACbySbAJbUcbAFaafaafbkIbXJbXSbXubXubUZbVebUSbkIaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowcdabzdcdabzebzfbzgbzgbzgbzgbzgbzhbPLblpbuvbzjbalbzkbOXbZGbwfbzoboEbRZbzqbzrbarbarbffaIObztbzubtgboMbzvbzwdoPbwjbQTboMbRGbRAbRHbOpbQwbzEbQDbuTbQvbzIbzJbNqbzKbzLbzMbzNbyebyfbQEbtvbpcbDNbNwbOHbYPbOMbOJbOKbEpbXtbXrbXsbLDbLDbLDbYBbWzbLDbWybWubXqbXpbXobOSbDcbYubVRbVQbWtbRcbQUbQKbRjbQabYcbrBbYObZMbZNbZObvMbvMbArbvMbAsbvMbOfbQqbQqbQqbQsbQrbQtbAvbAwbAxbRTbAzbAAbABbACbySbAJbUcbAFaafaafbkIbXJbXSbXubXubUZbVebUSbkIaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbAKbALbAMbalbalbANbrvbrvbrvbAObalbalbAPbAQbARbalbASbASbASbRKbASbAUbRLbAWbAXbAYbAUbffaIObUHbBaaUnboMawGawGawGawGbQlboMbOpbQObOpbQmbQnbQobQnbuTbuTbuTbuTbNqawGawGawGawGawGbtvbPobtvbpcbVabuDbVbbUqbQkbUUbUybUdbUfbUgbrAbTFbUibUbbUkbVKbVJbVMbVLbVxbVwbVIbVCbQcbVpbVvbVtbVmbPTbQbbQabOQbPEbAqbTRbSJbzCbrhbrhbrhbzCbQjbzCbzCbELbQhbQiblTblTbBUbKjbOqbBWbAwbBXbQZbBZbCabCbbCcbySbAJbUcbCdaaaaaabkIbTPbTQbkIbvWbkIbkIbvWbkIaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbAKbALbAMbalbalbANbrvbrvbrvbAObalbalbAPbAQbARbalbASbASbASbRKbASbAUbRLbAWbAXbAYbAUbffaIObUHbBaaUnboMawGawGawGawGbQlboMbOpbQObOpbQmbQnbQobQnbuTbuTbuTbuTbNqawGawGawGawGawGbtvbPobtvbpcbVabuDbVbbUqbQkbUUbUybUdbUfbUgbrAbTFbUibUbbUkbVKbVJbVMbVLbVxbVwbVIbVCbQcbVpbVvbVtbVmbPTbQbbQabOQbPEbAqbTRbSJbzCbrhbrhbrhbzCbQjbzCbzCbELbQhbQiblTblTbBUbKjbOqbBWbAwbBXbQZbBZbCabCbbCcbySbAJbUcbCdaaaaaabkIbTPbTQbkIbvWbkIbkIbvWbkIaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCgaafaaaaaaaaaaaabASbChbNpbQRbCkbAUbQQbCmbCnbCobAUbffaIObQMbQLbQNbQLbPzbPebPIbPFbPNbPJbQfbQPaXNbCzbTKbCBbCCbCDaIOaIOaMibDbaMjaNsbCubCGbCHaCzbPdbTObpcbDNbSHbymbymbSBbSBbSBbymbymbSmbSxbRXbRYbScbSgbRYbRXbRWbRVbRSbRRbRQbRPbDcbRObRNbRMbRIbOtbOrbAybAgbNrbAqbRkbCTbzCbPbbPcbFUbOWbOZbPabOObELbOPbOTbIZblTblTbQdbOqbBWbDubDvbPXbDxbDybDzbDAbySbAJbTJbyVbyVbyVbyVbyVbkIbkIaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCgaafaaaaaaaaaaaabASbChbNpbQRbCkbAUbQQbCmbCnbCobAUbffaIObQMbQLbQNbQLbPzbPebPIbPFbPNbPJbQfbQPaXNbCzbTKbCBbCCbCDaIOaIOaMibDbaMjaNsbCubCGbCHaCzbPdbTObpcbDNbSHbymbymbSBbSBbSBbymbymbSmbSxbRXbRYbScbSgbRYbRXbRWbRVbRSbRRbRQbRPbDcbRObRNbRMbRIbOtbOrbAybAgbNrbAqbRkbCTbzCbPbbPcbFUbOWbOZbPabOObELbOPbOTbIZblTblTbQdbOqbBWbDubDvbPXbDxbDybDzbDAbySbAJbTJbyVbyVbyVbyVbyVbkIbkIaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabASbDCbDDbDmbDFbDGbDnbDIbDlbDKbAUbffbDLbDiaIOaIOaIObDbaNsbCubCGbDNaIOaIObDdaIOaIObDPbDQbDRaIOaIOaIOaIObDbaIOaNsbCubCGbDSaXNbDYaXNbFrbENbBPbymbEbbBxbBxbBxbEebEdbEgbEfbEibEhbzGbEjbCUbCYbCZbDabDcbDebDfbBObDcbDhbDkbDwbDEbAgbCQbCRbAgbAgbAqbksbCTbzCbEqbEobEybEtbEsbErbEMbELbEBbEzbEmbEmblTbDqbEnbECbEDbEEbEFbDzbDtbAIbBNbySbAJbAZbCfbCebCEbCAbyVaafaafaafaafaafaafaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEPbEQbEQbFgbtybtybjBbjBbjBbjBbEOaafaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabASbDCbDDbDmbDFbDGbDnbDIbDlbDKbAUbffbDLbDiaIOaIOaIObDbaNsbCubCGbDNaIOaIObDdaIOaIObDPbDQbDRaIOaIOaIOaIObDbaIOaNsbCubCGbDSaXNbDYaXNbFrbENbBPbymbEbbBxbBxbBxbEebEdbEgbEfbEibEhbzGbEjbCUbCYbCZbDabDcbDebDfbBObDcbDhbDkbDwbDEbAgbCQbCRbAgbAgbAqbksbCTbzCbEqbEobEybEtbEsbErbEMbELbEBbEzbEmbEmblTbDqbEnbECbEDbEEbEFbDzbDtbAIbBNbySbAJbAZbCfbCebCEbCAbyVaafaafaafaafaafaafaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEPbEQbEQbFgbtybtybjBbjBbjBbjBbEOaafaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaabERbESbBTbESbEUaaaaaaaaabASbASbEVbEWbDmbEWbEXbEYbEZbFdbFbbAUbFcbffbEwbFebuDbFfbFybFAbFhbFibuEaIObFjbEuaZjbEvbFaaIObDSaXNaXNaXNaXNbDWbjvbFobFpbFqbFrbFCbFJbFHbuDbuEaIObymbFmbBxbFlbETbBxbEdbFubFtbFzbFxbFwbFvbFEbFFbFBbFDbFKbFQbFGbDcbDcbHfbHfbHfbAqbEGbExbEAbElbEkbAqbksbCTbzCbFRbFPbFUbFTbFWbFVbFXbELbFYbEzbEmbEmbkIbFIbFZbFLbCPbyHbFObGabDgbDBbDVbySbDZbxAbxAbxAbEIbEHbAFaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbGjbmNbGhbmNbtybjBbjBbjSbmLbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaabERbESbBTbESbEUaaaaaaaaabASbASbEVbEWbDmbEWbEXbEYbEZbFdbFbbAUbFcbffbEwbFebuDbFfbFybFAbFhbFibuEaIObFjbEuaZjbEvbFaaIObDSaXNaXNaXNaXNbDWbjvbFobFpbFqbFrbFCbFJbFHbuDbuEaIObymbFmbBxbFlbETbBxbEdbFubFtbFzbFxbFwbFvbFEbFFbFBbFDbFKbFQbFGbDcbDcbHfbHfbHfbAqbEGbExbEAbElbEkbAqbksbCTbzCbFRbFPbFUbFTbFWbFVbFXbELbFYbEzbEmbEmbkIbFIbFZbFLbCPbyHbFObGabDgbDBbDVbySbDZbxAbxAbxAbEIbEHbAFaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbGjbmNbGhbmNbtybjBbjBbjSbmLbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGpbGqbyjbykbGpbGsbGtbGubASbxBbEWbGwbBbbGybGzbGAbGAbBcbuSbAUbGDbGDbBibGDaUnaUnaUnaUnaUnaUnaUnbGFbGFbGFbGFaUnbBgbBfbBeaUnbGHbGHbGHbBhbAfaUnaUnaUnaUnbAVbAubGKaIUaKtbzYbymbzXbBxbBxbBxbAebAcbApbAobzGbzZbAbbAabvxbzGbzObzPbyzbyAbyCbvwbzTbzUbEcbAgbAgbAgbAtbAybATbAgbAqbksbhQbhQbhQbhQbhQbhQbhQbhQbhQbhQbBRbBQbBqbBqbkIbBnbBdbHqbrhbjfbjfbjfbypbyTbyobjfbjfbjfbjfbjfbgqbgpbHxaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagbxXbmNbmNbtnbjBbjBbjSbjSbBSbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGpbGqbyjbykbGpbGsbGtbGubASbxBbEWbGwbBbbGybGzbGAbGAbBcbuSbAUbGDbGDbBibGDaUnaUnaUnaUnaUnaUnaUnbGFbGFbGFbGFaUnbBgbBfbBeaUnbGHbGHbGHbBhbAfaUnaUnaUnaUnbAVbAubGKaIUaKtbzYbymbzXbBxbBxbBxbAebAcbApbAobzGbzZbAbbAabvxbzGbzObzPbyzbyAbyCbvwbzTbzUbEcbAgbAgbAgbAtbAybATbAgbAqbksbhQbhQbhQbhQbhQbhQbhQbhQbhQbhQbBRbBQbBqbBqbkIbBnbBdbHqbrhbjfbjfbjfbypbyTbyobjfbjfbjfbjfbjfbgqbgpbHxaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagbxXbmNbmNbtnbjBbjBbjSbjSbBSbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBTbHBbHCbHBbBTbHDbyXbyUbyZbyYbHHbEWbHIbHJbAUbHKbHLbBrbHNbAUbHObHObBBbGDaaaaaaaaaaaabGFbBvbHRbvAbHTbHUbHVbCtbBVbHXbBYbCtbHZbCjbCpbClbBGbBDbBKbBJbBMbCvbCwbzlbBobGKbGKbymbBmbBlbBlbBkbymbBCbBybBwbBubBtbBsbBpbCsbCybCqbCrbBHbBIbBEbBFbCNbCObFkbCIbBLbCFbBjbAgbAgbCJbAqbksbhQbzbbzcbCxbzQbCMbAGbADbzsbhQbCLbCKbDpbDpbkIbwxbCVbBWbAHbDjbDMbDObDTbDUbDrbDsbDHbDJbDXbjfbIhbCWbyVbngbngbngbngbngaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabxYbjBbxXbjBbjBbjSbjSbjSbjSbjSbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBTbHBbHCbHBbBTbHDbyXbyUbyZbyYbHHbEWbHIbHJbAUbHKbHLbBrbHNbAUbHObHObBBbGDaaaaaaaaaaaabGFbBvbHRbvAbHTbHUbHVbCtbBVbHXbBYbCtbHZbCjbCpbClbBGbBDbBKbBJbBMbCvbCwbzlbBobGKbGKbymbBmbBlbBlbBkbymbBCbBybBwbBubBtbBsbBpbCsbCybCqbCrbBHbBIbBEbBFbCNbCObFkbCIbBLbCFbBjbAgbAgbCJbAqbksbhQbzbbzcbCxbzQbCMbAGbADbzsbhQbCLbCKbDpbDpbkIbwxbCVbBWbAHbDjbDMbDObDTbDUbDrbDsbDHbDJbDXbjfbIhbCWbyVbngbngbngbngbngaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabxYbjBbxXbjBbjBbjSbjSbjSbjSbjSbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGpbHBbHBbHBbGbbFSbEWbGebFMbFsbEWbEWbJhbJibAUbAUbAUbJRbAUbAUbJvbJlbJDbJnaaabJCbJpbJBbJrbJsbHVbJtbJubJPbJKbJbbJybJxbJwbJbbCSbJobJEbJFbJGbJHbJIbGHbGHbJJbJcbDobJQbJNbJUbJSbJZbJWbJWbJWbIDbICbJabIFbzGbJjbJMbJLbIxbzGbIybIzbEcbIAbIBbIBbIubIvbEcbAqbIwbAqbAqbAqbAqbAqbAqbksbhQbKFbKvbCxbCxbCxbCxbCxbGrbhQbKtbEzbKpbKpblTbKjbKsbKrbKqbKgbKgbKgbKgbKhbIYbIYbKibKobJYbjfbGfbKdbJTbJObJXbJVbJAbJzaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbtybjBbptbpubpubjSbjSbjSbjSbjSbjSbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGpbHBbHBbHBbGbbFSbEWbGebFMbFsbEWbEWbJhbJibAUbAUbAUbJRbAUbAUbJvbJlbJDbJnaaabJCbJpbJBbJrbJsbHVbJtbJubJPbJKbJbbJybJxbJwbJbbCSbJobJEbJFbJGbJHbJIbGHbGHbJJbJcbDobJQbJNbJUbJSbJZbJWbJWbJWbIDbICbJabIFbzGbJjbJMbJLbIxbzGbIybIzbEcbIAdoObIBbIubIvbEcbAqbIwbAqbAqbAqbAqbAqbAqbksbhQbKFbKvbCxbCxbCxbCxbCxbGrbhQbKtbEzbKpbKpblTbKjbKsbKrbKqbKgbKgbKgbKgbKhbIYbIYbKibKobJYbjfbGfbKdbJTbJObJXbJVbJAbJzaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbtybjBbptbpubpubjSbjSbjSbjSbjSbjSbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBTbHCbHCbHCbBTbKKbHEbGObKNbGvbEWbKPbLsbltbLibKVbKVbKZbKWbKVbKDbjwbKQbKYaaabGLbLabLbbLcbLdbHVbLebLfbLgbLhbCtbKHbKGbKRbCtbLlbLmbLnbLobLpbLqbLrbKUboNbKSbKIbGKbPybPybKnbymbFmbBxbFlbETbBxbHcbKcbFtbKmbKlbKkbKebKBbKCbGXbGYbLxbIAbIBbIBbIubKxbEcbKwbKzbKAbmobKybKbbKabkybksbhQbCxbLEbCxbCxbCxbCxbCxbHGbhQbLCbEzbHPbHPblTbLObojbBWbMabIYbIYbLFbLHbLIbLKbIYbLLbLMbLBbLwbLvbHFbLtbLjbKXbKTbJAbKJaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabjBbjBbkQbjSbjSbjSbjSbjSbjSbjSbjSbjSbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBTbHCbHCbHCbBTbKKbHEbGObKNbGvbEWbKPbLsbltbLibKVbKVbKZbKWbKVbKDbjwbKQbKYaaabGLbLabLbbLcbLdbHVbLebLfbLgbLhbCtbKHbKGbKRbCtbLlbLmbLnbLobLpbLqbLrbKUboNbKSbKIbGKbPybPybKnbymbFmbBxbFlbETbBxbHcbKcbFtbKmbKlbKkbKebKBbKCbGXbGYbLxbIAbIBbIBbIubKxbEcbKwbKzbKAbmobKybKbbKabkybksbhQbCxbLEbCxbCxbCxbCxbCxbHGbhQbLCbEzbHPbHPblTbLObojbBWbMabIYbIYbLFbLHbLIbLKbIYbLLbLMbLBbLwbLvbHFbLtbLjbKXbKTbJAbKJaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabjBbjBbkQbjSbjSbjSbjSbjSbjSbjSbjSbjSbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaabGpbMwbMxbMybGpbMzbGtbGubASbASbMAbMAbMAbASbASbGDbJkbJkbGibJkbJkbJkblPbKYaaabGLbMDbMEbMFbMGbMHbMIbMJbMGbMGbMKbGBbGlbGkbGHbGHbGHbGHbGHbGHbMObGHbGHbyKbGGbGmbGKbPycpqasZbymbEbbBxbBxbBxbHdbHcbApbFtbHabGZbHbbBtbGVbGWbGXbGYbGRbGSbGTbGUbGNbEJbEcbGPbGcbGdbmobGgbHgbHebkybksbhQbhQbIpbCxbCxbCxbCxbhQbhQbhQbIobHYbHPbHPblTbHQbojbBWbCXbHAbHybHzbHtbHubHrbHsbHnbHpbGEbGxbGMbGJbGQbngbHlbHkbGobGnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbjBbjSbjSbjSbjSbjSbjSbjXbjSbHmbjSbjSbjSbjSbjSbjBbjBaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaabGpbMwbMxbMybGpbMzbGtbGubASbASbMAbMAbMAbASbASbGDbJkbJkbGibJkbJkbJkblPbKYaaabGLbMDbMEbMFbMGbMHbMIbMJbMGbMGbMKbGBbGlbGkbGHbGHbGHbGHbGHbGHbMObGHbGHbyKbGGbGmbGKbPycpqasZbymbEbbBxbBxbBxbHdbHcbApbFtbHabGZbHbbBtbGVbGWbGXbGYbGRbGSbGTbGUbGNbEJbEcbGPbGcbGdbmobGgbHgbHebkybksbhQbhQbIpbCxbCxbCxbCxbhQbhQbhQbIobHYbHPbHPblTbHQbojbBWbCXbHAbHybHzbHtbHubHrbHsbHnbHpbGEbGxbGMbGJbGQbngbHlbHkbGobGnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbjBbjSbjSbjSbjSbjSbjSbjXbjSbHmbjSbjSbjSbjSbjSbjBbjBaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNObESbNPbESbNQbEKaafaaaaaabASbNRbNSbNTbASaaabGDccpcbybzibJkbJkbJkblPbKYaaabGLbNWbNXbNYbNZbHVbOabObbOcbOdbGFbIabIqbIcbIbbIdbIdbIdbIdbIdbIdbItbIdbIebIebIEbGKbGKbGKbGKbymbymbHwbHwbHwbymbymbHvbHobHjbHibzGbBubCUbInbIlbImbEcbIkbEcbEcbEcbEcbEcbIjbIfbBAbmobHSbIsbCibkybksbhQbIMbIVbIUbIRbIQbITbISbIMblUbIPbIObIZblTblTbJmbojbOVbngbngbjfbjfbjfbjfbIWbjfbIXbIYbIHbjfbIhbCWbyVbngbIKbIJbIGbngaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabjBbulbulbulbulbulbulbILbjSbuPbulbHmbjSbjSbjSbjSbjBaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNObESbNPbESbNQbEKaafaaaaaabASbNRbNSbNTbASaaabGDccpcbybzibJkbJkbJkblPbKYaaabGLbNWbNXbNYbNZbHVbOabObbOcbOdbGFbIabIqbIcbIbbIdbIdbIdbIdbIdbIdbItbIdbIebIebIEbGKbGKbGKbGKbymbymbHwbHwbHwbymbymbHvbHobHjbHibzGbBubCUbInbIlbImbEcbIkbEcbEcbEcbEcbEcbIjbIfbBAbmobHSbIsbCibkybksbhQbIMbIVbIUbIRbIQbITbISbIMblUbIPbIObIZblTblTbJmbojbOVbngbngbjfbjfbjfbjfbIWbjfbIXbIYbIHbjfbIhbCWbyVbngbIKbIJbIGbngaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabjBbulbulbulbulbulbulbILbjSbuPbulbHmbjSbjSbjSbjSbjBaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafcbxbGDbGDbGDbGDbJkblQblPbPiaaabPjbJpbPkbPlbPmbHVbHVbPnblOblMbscbmwblSblRbCtbgXbgXbgXbgXbgXbgXbgXbgXbPwbPxboobonbmAbmybGKbymblCblBblDblDbqOblFblIblHblKblJblYblXbmabmbbmcbmdbmebmfbmgbmibrKbmkbidbmlbmmbmnbmobmpblfblebkybksbhQboUblxbnPbicbicbicblzbqBblUbkIbpdblTblTbQebgnbojbojbQgaafbjcblZblWbjabmvbjabqMbmtbnEbjfblLbnHbrPbngbnwbnjbnjbolaagaagaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabombmNbmNbmNbmNbmNbmNbmNbmMbmLbjSbjSbjSbjSbmObmLbjBaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafcbxbGDbGDbGDbGDbJkblQblPbPiaaabPjbJpbPkbPlbPmbHVbHVbPnblOblMbscbmwblSblRbCtbgXbgXbgXbgXbgXbgXbgXbgXbPwbPxboobonbmAbmybGKbymblCblBblDblDbqOblFblIblHblKblJblYblXbmabmbbmcbmdbmebmfbmgbmibrKbmkbidbmlbmmbmnbmobmpblfblebkybksbhQboUblxbnPbicbicbicblzbqBblUbkIbpdblTblTbQebgnbojbojbQgaafbjcblZblWbjabmvbjabqMbmtbnEbjfblLbnHbrPbngbnwbnjbnjbolaagaagaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabombmNbmNbmNbmNbmNbmNbmNbmMbmLbjSbjSbjSbjSbmObmLbjBaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaBcaCcaCcaDcaEbGDccfbJkbmKbGDaaaaaaaaaaaabGFbQybQzbQAbQBbGFbQCbCtbmIbmHbmJbCtbgXbmEbmGbmFbmCbmBbmDbfNbfNbfNbfNbfNbfNbkjbnZbnXbsCboXbBzboObpkbpjbpibphbpobpnbnIbpmbnIbnJbnubnvbnNbnObnLbnMbnObnSbspbnQbnVbnWbsqbnUbmubmxbmzbslbpbbpabpfbpebplbpgbpqbpgbpsbprbRlbmhbskbRnbojbgnbojbojbRoaafbjcbjdbjdbopboqboKboPboYbpwbjfbgqbgpbUKbngbngbngbngbngaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabjBbpubpubpubpubpubpubpvbjSbptbpubkabjSbjSbjSbjSbjBaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaBcaCcaCcaDcaEbGDccfbJkbmKbGDaaaaaaaaaaaabGFbQybQzbQAbQBbGFbQCbCtbmIbmHbmJbCtbgXbmEbmGbmFbmCbmBbmDbfNbfNbfNbfNbfNbfNbkjbnZbnXbsCboXbBzboObpkbpjbpibphbpobpnbnIbpmbnIbnJbnubnvbnNbnObnLbnMbnObnSbspbnQbnVbnWbsqbnUbmubmxbmzbslbpbbpabpfbpebplbpgbpqbpgbpsbprbRlbmhbskbRnbojbgnbojbojbRoaafbjcbjdbjdbopboqboKboPboYbpwbjfbgqbgpbUKbngbngbngbngbngaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabjBbpubpubpubpubpubpubpvbjSbptbpubkabjSbjSbjSbjSbjBaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkfdoKcbodoRbJkdoSdoTbJkbgtbGDbguaaaaaaaaabGFbGFbGFbGFbGFbGFbGFbCtbhybhibhhbCtbgXbhBbgwbgxbgxbgwbgvbfNbgMbgLbgDbgBbfNbhGbymbymblVbfAbmjbfEbBzbggbgibhHbfJbcPbgfbfLbgTbgVbgWbgYbgjbgkbbVbcZbgkbhfbhjbhEbhIbhabhcbhdbinbilbGKbhYbCTbhNbhNbhJbicbiubisbicbicbiabSlbgmbSnbojbSobgnbojbSpbSqaafbjcbjdbjbbjabiAbjabivbiybjmbjfbgqbgpbjubitbyVaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbjBbjSbjSbjSbjSbjSbjSbjXbjSbkabjSbjSbjSbjSbjSbjBbjBaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkfdoKcbodoLbJkdoMdoNbJkbgtbGDbguaaaaaaaaabGFbGFbGFbGFbGFbGFbGFbCtbhybhibhhbCtbgXbhBbgwbgxbgxbgwbgvbfNbgMbgLbgDbgBbfNbhGbymbymblVbfAbmjbfEbBzbggbgibhHbfJbcPbgfbfLbgTbgVbgWbgYbgjbgkbbVbcZbgkbhfbhjbhEbhIbhabhcbhdbinbilbGKbhYbCTbhNbhNbhJbicbiubisbicbicbiabSlbgmbSnbojbSobgnbojbSpbSqaafbjcbjdbjbbjabiAbjabivbiybjmbjfbgqbgpbjubitbyVaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbjBbjSbjSbjSbjSbjSbjSbjXbjSbkabjSbjSbjSbjSbjSbjBbjBaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccecaCcaCcaDcbtbiLbkebGDbkubGDccgbkvbkEccgccgbjFbjLbjMbgZbjTbjUblvbYpbjqbjxbllbjybgwbjEbjDbiNbiMbiObfNbiQbiPbjpbiRbfNbnnbsabnhbnfbmRbmqbiTbiTbkhbkgbkkbiDbkdbkcbkbbiDbiDbiBbiCbizbwUbhebhFbhebiKbiIbiJbiGbiHbiEbiFbiGbklbGKbksbCTbknbkrbkobkMbkLbkPbkNbhQbhQbrhbiwbrhbrhbrhbhTbxqbhRbrhbjfbjfbjfbjfbjfbkmbjfbjfbjfbjfbjfbgqbgpblgbkpbyVaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabjBbjBbkQbjSbjSbjSbjSbjSbjSbjSbjSbjSbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccecaCcaCcaDcbtbiLbkebGDbkubGDccgbkvbkEccgccgbjFbjLbjMbgZbjTbjUblvbYpbjqbjxbllbjybgwbjEbjDbiNbiMbiObfNbiQbiPbjpbiRbfNbnnbsabnhbnfbmRbmqbiTbiTbkhbkgbkkbiDbkdbkcbkbbiDbiDbiBbiCbizbwUbhebhFbhebiKbiIbiJbiGbiHbiEbiFbiGbklbGKbksbCTbknbkrbkobkMbkLbkPbkNbhQbhQbrhbiwbrhbrhbrhbhTbxqbhRbrhbjfbjfbjfbjfbjfbkmbjfbjfbjfbjfbjfbgqbgpblgbkpbyVaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabjBbjBbkQbjSbjSbjSbjSbjSbjSbjSbjSbjSbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQalQchdalQalQalQalQalQaaaaaaaaaaaaaaaaaaaafaafaaabxWbxTbxTbxTbxVbxTbxTbxRbxSccgbwobwhccgbwJbwKbwHbwIbwDbwGbwtbwvbwSbwObfHbxUbwMbgwbjEbwLbxjbiMbxdbfNbiQbiPbxcbxabfNbxObPybymbvnbvlbwcbvobtLbtXbvebvdbiDbvfbvkbvjbuObiDbuQbvFbvNbwUbhebhFaJzbiKbvrbvsbiGbvtbvubuabiGbvYbGKbvUbCTbhQbhQbhQbhQbhQbvqbhQbhQbwqbwmbvvbxlbxxbrhbiwbxEbvabrhbxybwCbwTbwrbwsbwYbxkbumbwVbumbumbuLbunbAEbyVbyVbyVaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbtybjBbuPbulbulbjSbjSbjSbjSbjSbjSbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQalQchdalQalQalQalQalQaaaaaaaaaaaaaaaaaaaafaafaaabxWbxTbxTbxTbxVbxTbxTbxRbxSccgbwobwhccgbwJbwKbwHbwIbwDbwGbwtbwvbwSbwObfHbxUbwMbgwbjEbwLbxjbiMbxdbfNbiQbiPbxcbxabfNbxObPybymbvnbvlbwcbvobtLbtXbvebvdbiDbvfbvkbvjbuObiDbuQbvFbvNbwUbhebhFaJzbiKbvrbvsbiGbvtbvubuabiGbvYbGKbvUbCTbhQbhQbhQbhQbhQbvqbhQbhQbwqbwmbvvbxlbxxbrhbiwbxEbvabrhbxybwCbwTbwrbwsbwYbxkbumbwVbumbumbuLbunbAEbyVbyVbyVaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbtybjBbuPbulbulbjSbjSbjSbjSbjSbjSbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbAdbzWbsKbzRbxtbthbzBbzFbzHccgbzSbzVccgccgbAlbAmbAnbAhbAibAjbAkbYpbyNbyRbyObyxbyJbyMbyLbzDbyJbyJbyybzpbznbzAcjcbfNbkjbqZbqZbqZbqZbywbqZbqZbqZbysbyrbiDbyvbqJbytbtDbiDbylbynbzybwUbhebhFbhebiKbwWbwXbiGbyibwZbyhbwFbwEbxsbwPbwRbwRbwRbwRbwRbwRbygbwRbwRbygbwRbyBbwRbygbwQbxmbxrbyqbwQbyubxAbxAbxAbxCbxDbxAbxAbxAbxAbxAbxzbyabxZbVNbVObyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaaaaaabxYbjBbxXbjBbjBbjSbjSbjSbjSbjSbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbAdbzWbsKbzRbxtbthbzBbzFbzHccgbzSbzVccgccgbAlbAmbAnbAhbAibAjbAkbYpbyNbyRbyObyxbyJbyMbyLbzDbyJbyJbyybzpbznbzAcjcbfNbkjbqZbqZbqZbqZbywbqZbqZbqZbysbyrbiDbyvbqJbytbtDbiDbylbynbzybwUbhebhFbhebiKbwWbwXbiGbyibwZbyhbwFbwEbxsbwPbwRbwRbwRbwRbwRbwRbygbwRbwRbygbwRbyBbwRbygbwQbxmbxrbyqbwQbyubxAbxAbxAbxCbxDbxAbxAbxAbxAbxAbxzbyabxZbVNbVObyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaaaaaabxYbjBbxXbjBbjBbjSbjSbjSbjSbjSbjSbjSbjBbjBaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
@@ -10791,7 +10797,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
|||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbSFbSGcnjcngcnhcnQbSFcrKcrFcrwcrvcrEcrCcrrcrrcrucnEcnEcnDcnFbAkbYpbjqbjxcnCbwMcnzctfcnBcnwcnxcnybfNbtVcnpcnqdTTbfNbkjbqZdZLdZOdZOdZMdZNbqZdYtdfMdZQbiDdZTdZRdZSdZHbiDdZGbtBcrVbwUbxPbtKbxQbiKdZKdZJbiKcrXbPwbiddfRbssdZVdZWbidbfMdWwdXGbGKaaaaafaaaaaaaafaaaaaaaaaaaaccBdfNdfQdfPccBaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYUbYUcoebYWbYUaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcrLbEQbEQbFgbtybtybjBbjBbjBbjBbEOaafaafaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbSFbSGcnjcngcnhcnQbSFcrKcrFcrwcrvcrEcrCcrrcrrcrucnEcnEcnDcnFbAkbYpbjqbjxcnCbwMcnzctfcnBcnwcnxcnybfNbtVcnpcnqdTTbfNbkjbqZdZLdZOdZOdZMdZNbqZdYtdfMdZQbiDdZTdZRdZSdZHbiDdZGbtBcrVbwUbxPbtKbxQbiKdZKdZJbiKcrXbPwbiddfRbssdZVdZWbidbfMdWwdXGbGKaaaaafaaaaaaaafaaaaaaaaaaaaccBdfNdfQdfPccBaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYUbYUcoebYWbYUaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcrLbEQbEQbFgbtybtybjBbjBbjBbjBbEOaafaafaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaafaafbTebTebTebTebTebTebTebTebTebTebTebTebTeaaaaaacmobSGbSGbSGbSGcmAbSFcqicqgcqfcqecqdcpVcqccpVcpUcpTcpScpQcpOcpLcqjcqwcmCdfmbgXbgXbgXbgXbgXbgXbgXbfNbfNcmBbfNbfNbfNbkjbqZbqZdZrdZsdZtdZubqZdfwcqDcqTbiDbkdbiDbiDbiDbiDbwUdZydZzbwUcqXcqWcqXbiKbXLdZBbiKbPybPybiddZDbssbidbidbidbfMcpWcmNbGKaaaaafaaaaaaaafaaaaaeaaaaaacrfdfzdfIdfHcrfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYUcqQcmGbZVbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaafaafbTebTebTebTebTebTebTebTebTebTebTebTebTeaaaaaacmobSGbSGbSGbSGcmAbSFcqicqgcqfcqecqdcpVcqccpVcpUcpTcpScpQcpOcpLcqjcqwcmCdfmbgXbgXbgXbgXbgXbgXbgXbfNbfNcmBbfNbfNbfNbkjbqZbqZdZrdZsdZtdZubqZdfwcqDcqTbiDbkdbiDbiDbiDbiDbwUdZydZzbwUcqXcqWcqXbiKbXLdZBbiKbPybPybiddZDbssbidbidbidbfMcpWcmNbGKaaaaafaaaaaaaafaaaaaeaaaaaacrfdfzdfIdfHcrfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYUcqQcmGbZVbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecnScqacnSbTecnOcpYcnObTecnMcpZcnMbTeaaaaaacphbSGcpXbSGbSGcpRbSFcFVcFUcQKcFXcRqcRpcFMcFKcFRbqVbqVcFTbqVbqKcFIcFJbjxcpCcpDcpucpucpEdfUdfVcoMdfWcpwcpxcpyeaqcoMbkjbEaeaxbMXbMXeaveaweaDeaEdLbdPueazeaAeayeaeeaeeaudXBbwUbwUbwUdfXcZLdfYbiKbiKbiKbiKbPybPybiddZDbsseareasbidbfMbGKbGKbGKaaaaafaaaaaaaafaaaaaaaaaaaacWzcWQcRYcRScWzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYUcaycqbcaAbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecnScqacnSbTecnOcpYcnObTecnMcpZcnMbTeaaaaaacphbSGcpXbSGbSGcpRbSFcFVcFUcQKcFXcRqcRpcFMcFKcFRbqVbqVcFTbqVbqKcFIcFJbjxcpCcpDcpucpucpEdfUdfVcoMdfWcpwcpxcpyeaqcoMbkjbEaeaxbMXbMXeaveaweaDeaEdLbdPueazeaAeayeaeeaeeaudXBbwUbwUbwUdfXcZLdfYbiKbiKbiKbiKbPybPybiddZDbsseareasbidbfMbGKbGKbGKaaaaafaaaaaaaafaaaaaaaaaaaacWzcWQcRYcRScWzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYUcaycqbcaAbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecnScnRcnSbTecnOcnPcnObTecnMcnNcnMbTeaaaaaacphbSGbSGbSGcpicoIcoHcsOcsNcvgcuVcsWcsPcsMcsEcsmcoycoEcoDcoCbAkbYpcpdcpbcpccpgcpfcpecpfdfScoWcoMdZZcoZcpacoXdZZcoMbkjbEaeabbMXbOsbMXeaaeageahcCNeajeaceadeaeeafeaeeandXBciZboNcDacEycExdfTcFGboNboNboNboNcEzbidbidbidbidbidbidbfMbGKaafaafaafcbfaafaafaafaafaafaafaafccQbudcCKcylccQaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYUcbjcpjcblbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecnScnRcnSbTecnOcnPcnObTecnMcnNcnMbTeaaaaaacphbSGbSGbSGcpicoIcoHcsOcsNcvgcuVcsWcsPcsMcsEcsmcoycoEcoDdoUbAkbYpcpdcpbcpccpgcpfcpecpfdfScoWcoMdZZcoZcpacoXdZZcoMbkjbEaeabbMXbOsbMXeaaeageahcCNeajeaceadeaeeafeaeeandXBciZboNcDacEycExdfTcFGboNboNboNboNcEzbidbidbidbidbidbidbfMbGKaafaafaafcbfaafaafaafaafaafaafaafccQbudcCKcylccQaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYUcbjcpjcblbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecrgcnicrebTecrccnfcrbbTecracnccqZbTeaaaaafcphcrdbSGbSGcqqbWbbSFdPYdPVcvgcvgdPTcvgcvgcvgcvgcrzbYpcrxcrybAkbYpdRPcrlbyOcrhcricrkcridggcrqcrscrtcrmcrncoMcoMcoMbkjbEadgjebrebsebpebqebiebjdQhebhebmebnebkeblebcdgiebadQabJNebfdQedQddghbCTbyDbXPbXQbGKbvKboNboNboNboNboNboNciNbGKaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaabuddQidQSdQRbudaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaacbZccacrNcccccdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecrgcnicrebTecrccnfcrbbTecracnccqZbTeaaaaafcphcrdbSGbSGcqqbWbbSFdPYdPVcvgcvgdPTcvgcvgcvgcvgcrzbYpcrxcrybAkbYpdRPcrlbyOcrhcricrkcridggcrqcrscrtcrmcrncoMcoMcoMbkjbEadgjebrebsebpebqebiebjdQhebhebmebnebkeblebcdgiebadQabJNebfdQedQddghbCTbyDbXPbXQbGKbvKboNboNboNboNboNboNciNbGKaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaabuddQidQSdQRbudaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaacbZccacrNcccccdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafaafbTecqocdMcqpbTecdWcdMcdXbTecdLcdMcdNbTeaaaaafcqrbSGbSGbSIcqqcqybSFdPAdPvcqvcqucqtcqscqAcqAdfZcqBcqAcmpcqzbAkbAkbjqcqIcqJcpDcqCcqCcqHdgadgbcoMcqOcYGcqNcqKcqLcoMbkjbEadgceaMeaNeaOeaPbEaeaFdPDeaHdXBeaIeaJeaKeaSdgedXBbfMbPydXFeaUeaTeaQdXFaaaaaaaaabGKbGKbGKbXObXPbXPbXQbGKbGKbGKaaaaaaaaabudbudbudbudbudbudbudbudbuddPHdPSdPPbudaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafccSdgfccSaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafaafbTecqocdMcqpbTecdWcdMcdXbTecdLcdMcdNbTeaaaaafcqrbSGbSGbSIcqqcqybSFdPAdPvcqvcqucqtcqscqAcqAdfZcqBcqAcmpcqzbAkbAkbjqcqIcqJcpDcqCcqCcqHdgadgbcoMcqOcYGcqNcqKcqLcoMbkjbEadgceaMeaNeaOeaPbEaeaFdPDeaHdXBeaIeaJeaKeaSdgedXBbfMbPydXFeaUeaTeaQdXFaaaaaaaaabGKbGKbGKbXObXPbXPbXQbGKbGKbGKaaaaaaaaabudbudbudbudbudbudbudbudbuddPHdPSdPPbudaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafccSdgfccSaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachdaafaafaafaaaaafcsLaafcsLaafcdmaafcdlaafcdmaafcdlaafaafaaabSFcsKbUXcsIdbicszbQGcsBcsAbQGcsCcsDcmJcmJdTDcmJchBcsGcsFchBcsHcstcsucsvcswcaOcaOcaOcaOcsxcsycaOcjXcjXcjXcjXcjXcjXbkjbEaebRdgmebQebNebObEaeaFdTLebMdXBebKebIebJdglebGdXBbfMbPydXFebFebEdgkdXFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaabudcnbcmXcmYdTJdTKcdydTHcfcdTIdTFdTEdTGcrHaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafcebceccebaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachdaafaafaafaaaaafcsLaafcsLaafcdmaafcdlaafcdmaafcdlaafaafaaabSFcsKbUXcsIdbicszbQGcsBcsAbQGcsCcsDcmJcmJdTDcmJchBcsGcsFchBcsHcstcsucsvcswcaOcaOcaOcaOcsxcsycaOcjXcjXcjXcjXcjXcjXbkjbEaebRdgmebQebNebObEaeaFdTLebMdXBebKebIebJdglebGdXBbfMbPydXFebFebEdgkdXFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaabudcnbcmXcmYdTJdTKcdydTHcfcdTIdTFdTEdTGcrHaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafcebceccebaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
@@ -10930,14 +10936,14 @@ ctEcuqcuwcuxcurcuvcupcuzcuvcuqcuwcuxcurcuvcupcuzcuvcupcuzcuqcuwcuxcurcuvcupcuzct
|
|||||||
ctAcuzcuscuAcuucuxcuwcuCcuxcuzcuscuAcuucuxcuwcuCcuxcuwcuCcuzcuscuAcuucuxcuwcuCctycujctLcuqcurcuvcuzcutcuocuCcAzczXczTczUcAoczRczWcApcAncAmcAEcurcuvcuCcuwcuzcuycuuctBcujaaaaaaczocuocuxczDczZczZczLczDczZczLczDczZczLczDczZczLczDczZczLczDczZczZcuxcupczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczqczzcAFczNcAGczzcAscAdcAhcAhcAgcAhcAdcAicAjcAkcAkczraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacACcACcACaaacADcADcADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
ctAcuzcuscuAcuucuxcuwcuCcuxcuzcuscuAcuucuxcuwcuCcuxcuwcuCcuzcuscuAcuucuxcuwcuCctycujctLcuqcurcuvcuzcutcuocuCcAzczXczTczUcAoczRczWcApcAncAmcAEcurcuvcuCcuwcuzcuycuuctBcujaaaaaaczocuocuxczDczZczZczLczDczZczLczDczZczLczDczZczLczDczZczLczDczZczZcuxcupczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczqczzcAFczNcAGczzcAscAdcAhcAhcAgcAhcAdcAicAjcAkcAkczraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacACcACcACaaacADcADcADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
ctGcuCcuBcuqcutcuAcuscuocuAcuCcuBcuqcutcuAcuscuocuAcuscuocuCcuBcuqcutcuAcuscuoctHcujctIcuzcuucuxcuCcupcurcuocAEcuycuuczScAtcAlcAoczUcutcuqcAHcuucuxcuocuscuCcuvcutctJcujaaaaaaczocurcuAczKcAqcAqcAaczKcAqcAaczKcAqcAaczKcAqcAaczKcAqcAaczKcAqcAqcuAcuwczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczqcAIczzcAJczzcAKcAccAdcAhcAhcAgcAhcAdcAhcAkcAkcAkczraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacACcACcACaaacADcADcADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
ctGcuCcuBcuqcutcuAcuscuocuAcuCcuBcuqcutcuAcuscuocuAcuscuocuCcuBcuqcutcuAcuscuoctHcujctIcuzcuucuxcuCcupcurcuocAEcuycuuczScAtcAlcAoczUcutcuqcAHcuucuxcuocuscuCcuvcutctJcujaaaaaaczocurcuAczKcAqcAqcAaczKcAqcAaczKcAqcAaczKcAqcAaczKcAqcAaczKcAqcAqcuAcuwczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczqcAIczzcAJczzcAKcAccAdcAhcAhcAgcAhcAdcAhcAkcAkcAkczraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacACcACcACaaacADcADcADaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
ctDcuocuycuzcupcuqcuBcurcuqcuocuycuzcupcuqcuBcurcuqcuBcurcuocuycuzcupcuqcuBcurctKcujctycuCcutcuAcuocvOcvMcALcAMcANcvPcAmczTczXcAtczScupcuzcAOcutcuAcurcuBcuocuxcupctMcujaaaaaaczocuucuqcAbcAvcAvczxcAbcAvczxcAbcAvczxcAbcAvczxcAbcAvczxcAbcAvcAvcuqcusczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczqaaacAIcAPcAKaaacAccAdcAhcAhcAgcAhcAdcAicAjcAkcAkczraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAQcARcAScATcAUcACcACcACaaacADcADcADcAQcARcAScATcAUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
ctDcuocuycuzcupcuqcuBcurcuqcuocuycuzcupcuqcuBcurcuqcuBcurcuocuycuzcupcuqcuBcurctKcujctycuCcutcuAcuocvOcvMcALcAMcANcvPcAmczTczXcAtczScupcuzcAOcutcuAcurcuBcuocuxcupctMcujaaaaaaczocuucuqcAbcAvcAvczxcAbcAvczxcAbcAvczxcAbcAvczxcAbcAvczxcAbcAvcAvcuqcusczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczqaaacAIcAPcAKaaacAccAdcAhcAhcAgcAhcAdcAicAjcAkcAkczraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAQcARcAScATcAUcACcACcACaaacADcADcADcAQcARcAScATcAUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
ctLcurcuvcuCcuwcuzcuycuucuzcurcuvcuCcuwcuzcuycuucuzcuycuucurcuvcuCcuwcuzcuycuuctBcujctHcuocupcuqcurcAzczPcAnczUczSczVczQcAncApczTcAmcuwcuCcvKcupcuqcuucuycurcuAcuwctzcujaaaaaaczocutczBcArcAAcAAczBcArcAAczBcArcAAczBcArcAAczBcArcAAczBcArcAAcAAczBcuBczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczrczrczrczrczrczrczrczrczrczrczrczrczrczrczrczrczrczraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAVcAWcAWcAWcAXcAYdoUcAYcAYcAYdoVcAYcBacAWcAWcAWcAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
ctLcurcuvcuCcuwcuzcuycuucuzcurcuvcuCcuwcuzcuycuucuzcuycuucurcuvcuCcuwcuzcuycuuctBcujctHcuocupcuqcurcAzczPcAnczUczSczVczQcAncApczTcAmcuwcuCcvKcupcuqcuucuycurcuAcuwctzcujaaaaaaczocutczBcArcAAcAAczBcArcAAczBcArcAAczBcArcAAczBcArcAAczBcArcAAcAAczBcuBczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczrczrczrczrczrczrczrczrczrczrczrczrczrczrczrczrczrczraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAVcAWcAWcAWcAXcAYdoVcAYcAYcAYdoWcAYcBacAWcAWcAWcAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
ctIcuucuxcuocuscuCcuvcutcuCcuucuxcuocuscuCcuvcutcuCcuvcutcuucuxcuocuscuCcuvcutctJcujctKcurcuwcuzcuucAEczVczPczScAmczRczWczPczUcAnczQcvTcvTcvTcvTcBbcutcuvcuucuqcusctCcujaaaaaaczocupczJczyczDczDczJczyczDczJczyczDczJczyczDczJczyczDczJczyczDczDczJcuyczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAVdQmcBxcBdcTpcBwdoWcBkcBicBjdoXcBwcTqcBldQpdQqcAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
ctIcuucuxcuocuscuCcuvcutcuCcuucuxcuocuscuCcuvcutcuCcuvcutcuucuxcuocuscuCcuvcutctJcujctKcurcuwcuzcuucAEczVczPczScAmczRczWczPczUcAnczQcvTcvTcvTcvTcBbcutcuvcuucuqcusctCcujaaaaaaczocupczJczyczDczDczJczyczDczJczyczDczJczyczDczJczyczDczJczyczDczDczJcuyczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAVdQmcBxcBdcTpcBwdoXcBkcBicBjdoYcBwcTqcBldQpdQqcAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
ctycutcuAcurcuycupcuvcuBcuqcurcBmcBncANcwmcBocuxcBpcBqcvMcBrcBscurcuBcuocuxcupctMcujctBcuucuscuCcutcAHczRczVcAmczQcAlcAoczVczSczPczWczXczTczQcAlcwecupcuxcutcuzcuBctFcujaaaaaaczocuwcuoczCczKczKczZcuvcuwczZczCczKczZczCczKczZcuvcuwczZczCczKczKcuocuvczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAVcBccBccBuctncAZcBecAZcBfcAZcBecAZcBgcBucBccBccAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
ctycutcuAcurcuycupcuvcuBcuqcurcBmcBncANcwmcBocuxcBpcBqcvMcBrcBscurcuBcuocuxcupctMcujctBcuucuscuCcutcAHczRczVcAmczQcAlcAoczVczSczPczWczXczTczQcAlcwecupcuxcutcuzcuBctFcujaaaaaaczocuwcuoczCczKczKczZcuvcuwczZczCczKczZczCczKczZcuvcuwczZczCczKczKcuocuvczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtcBtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAVcBccBccBuctncAZcBecAZcBfcAZcBecAZcBgcBucBccBccAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
ctHcuxcuqcuucuocuAcurcuCcupcuucBzcBAcBBcBCcBDcuucBEcBFcBGcBHcBIcuucuycurcuAcuwctzcujctJcutcuBcuocupcAOcAlczRczQczWczXcAtczRcAmczVcAocApcAnczWczXcBJcuwcuAcupcuCcuyctEcujaaaaaaczocuscurcuxaaacuscurcuxcuscAqczLcAbcAqczLcAbcAqcuxcuscurcuxaaacuscurcuxczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBtcBKcBKcBKcBKcBKcBKcBKcBKcBKcBLcBKcBKcBKcBMcBNcBKcBKcBKcBMcBKcBKcBKcBKcBKcBKcBMcBKcBKcBtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBOcBlcBccBPcBecBecBecBecBecBecBecBecBecBPcBccBdcBQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
ctHcuxcuqcuucuocuAcurcuCcupcuucBzcBAcBBcBCcBDcuucBEcBFcBGcBHcBIcuucuycurcuAcuwctzcujctJcutcuBcuocupcAOcAlczRczQczWczXcAtczRcAmczVcAocApcAnczWczXcBJcuwcuAcupcuCcuyctEcujaaaaaaczocuscurcuxaaacuscurcuxcuscAqczLcAbcAqczLcAbcAqcuxcuscurcuxaaacuscurcuxczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBtcBKcBKcBKcBKcBKcBKcBKcBKcBKcBLcBKcBKcBKcBMcBNcBKcBKcBKcBMcBKcBKcBKcBKcBKcBKcBMcBKcBKcBtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBOcBlcBccBPcBecBecBecBecBecBecBecBecBecBPcBccBdcBQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
ctKcuAcuzcutcurcuqcuucuocuwcutcBIcBRcBScBTcBUcutcBVcBWcBXcBYcBZcutcuvcuucuqcusctCcujctMcupcuycurcuwcvKczXcAlczWcAocApczTcAlczQczRcAtczUczPcAocApczHcuscuqcuwcuocuvctAcujaaaaaaczocuBcuucuAaaacuBcuucuAcuBcAvcAacArcAvcAacArcAvcuAcuBcuucuAaaacuBcuucuAczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBtcBKcBKcBKcBKcBLcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBMcBKcBKcBKcBKcBKcBMcBKcBKcBKcBKcBKcBtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBOcAYcBacCMcAZcBecAZcCLcCLcAZcBecCpcAXcAYcBQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
ctKcuAcuzcutcurcuqcuucuocuwcutcBIcBRcBScBTcBUcutcBVcBWcBXcBYcBZcutcuvcuucuqcusctCcujctMcupcuycurcuwcvKczXcAlczWcAocApczTcAlczQczRcAtczUczPcAocApczHcuscuqcuwcuocuvctAcujaaaaaaczocuBcuucuAaaacuBcuucuAcuBcAvcAacArcAvcAacArcAvcuAcuBcuucuAaaacuBcuucuAczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBtcBKcBKcBKcBKcBLcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBMcBKcBKcBKcBKcBKcBMcBKcBKcBKcBKcBKcBtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBOcAYcBacCMcAZcBecAZcCLcCLcAZcBecCpcAXcAYcBQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
ctBcuqcuCcupcuucuzcutcurcuscupcBZcCgcChcBBcBpcupcBzcCicCjcCkcClcupcuxcutcuzcuBctFcujctzcuwcuvcuucAzcCmcApczXcAocAtczUcAnczXczWcAlczTczSczVcAtczUcCncwmcBbcuscurcuxctGcujaaaaaaczocuBcuucuAaaacuBcuucuAcuBcAvcAacArcAvcAacArcAvcuAcuBcuucuAaaacuBcuucuAczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBtcBKcBKcBKcBKcBKcBKcBKcCocBKcBKcBKcBKcBKcBLcBKcBKcBNcBMcBKcBKcBMcBKcBKcBMcBNcBKcBMcBKcBtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAVcCBcBfcBecCAcCBcCBcCxcBecCrcAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
ctBcuqcuCcupcuucuzcutcurcuscupcBZcCgcChcBBcBpcupcBzcCicCjcCkcClcupcuxcutcuzcuBctFcujctzcuwcuvcuucAzcCmcApczXcAocAtczUcAnczXczWcAlczTczSczVcAtczUcCncwmcBbcuscurcuxctGcujaaaaaaczocuBcuucuAaaacuBcuucuAcuBcAvcAacArcAvcAacArcAvcuAcuBcuucuAaaacuBcuucuAczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBtcBKcBKcBKcBKcBKcBKcBKcCocBKcBKcBKcBKcBKcBLcBKcBKcBNcBMcBKcBKcBMcBKcBKcBMcBNcBKcBMcBKcBtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAVcCBcBfcBecCAcCBcCBcCxcBecCrcAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
ctJcuzcuocuwcutcuCcupcuucuBcuwcClcBCcCtcBScCucuwcBIcCvcBHcCwcBDcuwcuAcupcuCcuyctEcujctCcuscuxcutcAEczQczUcApcAtczTczSczPcApcAoczXcAncAmczRczTczSczPcApcwecuBcuucuActDcujaaaaaaczocuBcuucuAaaacuBcuucuAcuBcAvcAacArcAvcAacArcAvcuAcuBcuucuAaaacuBcuucuAczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBtcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBLcBKcBKcBMcBNcBKcBKcBMcBKcBNcBtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDccDccDccDccAVcCycAZcBecCAcCBcCBcCxcBecBwcAVcCzcCzcCzcCzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
ctJcuzcuocuwcutcuCcupcuucuBcuwcClcBCcCtcBScCucuwcBIcCvcBHcCwcBDcuwcuAcupcuCcuyctEcujctCcuscuxcutcAEczQczUcApcAtczTczSczPcApcAoczXcAncAmczRczTczSczPcApcwecuBcuucuActDcujaaaaaaczocuBcuucuAaaacuBcuucuAcuBcAvcAacArcAvcAacArcAvcuAcuBcuucuAaaacuBcuucuAczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBtcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBLcBKcBKcBMcBNcBKcBKcBMcBKcBNcBtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDccDccDccDccAVcCycAZcBecCAcCBcCBcCxcBecBwcAVcCzcCzcCzcCzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
ctMcuCcurcuscupcuocuwcutcuycuscBDcBzcBUcClcBmcuscBZcBscBEcBIcBUcuscuqcuwcuocuvctAcujctFcuBcuAcupcAHczWczSczUczTcAncAmczVczUcAtcApczPczQcAlcAncAmczVczUcBJcuycutcuqctLcujaaaaaaczocuycutcuqaaacuycutcuqcuycAAczxczycAAczxczycAAcuqcuycutcuqaaacuycutcuqczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBtcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBLcBKcBKcBKcBKcBKcBNcBKcBMcBNcBKcBMcBKcBtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDccDccDccDcdoZdoYcBecBecAZcCscCscAZcBedpadpbcCzcCzcCzcCzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
ctMcuCcurcuscupcuocuwcutcuycuscBDcBzcBUcClcBmcuscBZcBscBEcBIcBUcuscuqcuwcuocuvctAcujctFcuBcuAcupcAHczWczSczUczTcAncAmczVczUcAtcApczPczQcAlcAncAmczVczUcBJcuycutcuqctLcujaaaaaaczocuycutcuqaaacuycutcuqcuycAAczxczycAAczxczycAAcuqcuycutcuqaaacuycutcuqczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBtcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBKcBLcBKcBKcBKcBKcBKcBNcBKcBMcBNcBKcBMcBKcBtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDccDccDccDcdpcdpbcBecBecAZcCscCscAZcBedpadoZcCzcCzcCzcCzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
ctzcuocuucuBcuzcuscurcuxcuscuocuucuBcuzcuscurcuxcuscurcuxcuocuucuBcuzcuscurcuxctGcujctEcuycuqcuwcAOcAocAmczScAnczPczQczRczSczTczUczVczWczXczPczQczRczSczHcuvcupcuzctIcujaaaaaaczocuvcupcuzaaacuvcupcuzcuvcupczBczCczDczBczCcupcuzcuvcupcuzaaacuvcupcuzczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBtcBKcBKcBKcBKcBKcBKcCCcCCcCCcCCcCCcCCcCCcBKcBKcBKcBKcBKcBKcBKcBMcBKcBKcCocBNcBKcBKcBKcBtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDccDccDccDccAVcBwcCqcBecBecBecBecBecBecAZcAVcCzcCzcCzcCzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
ctzcuocuucuBcuzcuscurcuxcuscuocuucuBcuzcuscurcuxcuscurcuxcuocuucuBcuzcuscurcuxctGcujctEcuycuqcuwcAOcAocAmczScAnczPczQczRczSczTczUczVczWczXczPczQczRczSczHcuvcupcuzctIcujaaaaaaczocuvcupcuzaaacuvcupcuzcuvcupczBczCczDczBczCcupcuzcuvcupcuzaaacuvcupcuzczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBtcBKcBKcBKcBKcBKcBKcCCcCCcCCcCCcCCcCCcCCcBKcBKcBKcBKcBKcBKcBKcBMcBKcBKcCocBNcBKcBKcBKcBtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDccDccDccDccAVcBwcCqcBecBecBecBecBecBecAZcAVcCzcCzcCzcCzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
ctCcuxcutcuycuCcuBcuucuAcuBcuxcutcuycuCcuBcuucuAcuBcuucuAcuxcutcuycuCcuBcuucuActDcujctAcuvcuzcuscvKcAtczQcAmczPczVczWcAlcAmcAnczSczRcAocApczVczWcAlcAmczIcuxcuwcuCctycujaaaaaaczocuxcuwcuCaaacuxcuwcuCcuxcuwcuCcuxcuwcuCcuxcuwcuCcuxcuwcuCaaacuxcuwcuCczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBtcBKcBKcBKcBKcBKcCEcCFcCGcCHcCHcCHcCIcCFcCJcBKcBKcBKcBKcCocBKcBKcBLcBKcBLcBKcBMcBKcBMcBtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAXcAYcAYcAYcDFcBecAZcBecBecCDcAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
ctCcuxcutcuycuCcuBcuucuAcuBcuxcutcuycuCcuBcuucuAcuBcuucuAcuxcutcuycuCcuBcuucuActDcujctAcuvcuzcuscvKcAtczQcAmczPczVczWcAlcAmcAnczSczRcAocApczVczWcAlcAmczIcuxcuwcuCctycujaaaaaaczocuxcuwcuCaaacuxcuwcuCcuxcuwcuCcuxcuwcuCcuxcuwcuCcuxcuwcuCaaacuxcuwcuCczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBtcBKcBKcBKcBKcBKcCEcCFcCGcCHcCHcCHcCIcCFcCJcBKcBKcBKcBKcCocBKcBKcBLcBKcBLcBKcBMcBKcBMcBtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAXcAYcAYcAYcDFcBecAZcBecBecCDcAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
ctFcupcupcuvcuocuycutcuqcuycupcupcuvcuocuycutcuqcuycutcuqcupcupcuvcuocuycutcuqctLcujctGcuxcuCcuBcCPczTczWczQczVczRcAoczXczQczPcAmcAlcAtczUczRcAoczXczQczYcuAcuscuoctHcujaaaaaaczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBtcBKcBKcBKcBKcBKcCFcCQcCRdQjdgrcCUcCVcCVcCFcCWcBKcBKcCCcCCcCCcCCcCCcCCcCCcCCcCXcCYcCCcBtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAVcCecCecCfdUMcBecAZcBecBecAZdVtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
ctFcupcupcuvcuocuycutcuqcuycupcupcuvcuocuycutcuqcuycutcuqcupcupcuvcuocuycutcuqctLcujctGcuxcuCcuBcCPczTczWczQczVczRcAoczXczQczPcAmcAlcAtczUczRcAoczXczQczYcuAcuscuoctHcujaaaaaaczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoczoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBtcBKcBKcBKcBKcBKcCFcCQcCRdQjdgrcCUcCVcCVcCFcCWcBKcBKcCCcCCcCCcCCcCCcCCcCCcCCcCXcCYcCCcBtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAVcCecCecCfdUMcBecAZcBecBecAZdVtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
@@ -11034,8 +11040,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
|||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIPcIPcIPcIPcIPcIPcIPcIPcIPcIPdgXdgXcIPcIPcIPcIPcMQcNrcNPcNQcNRcNScMQdRydRYdRYdRydRHdRXcJJdRzcIRcIRcIRcOacIRcIRcwZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIRcIRcIRcIRcIRcIRcIRcIRcNdaaaaaaaaaaaaaaacNUcJQcNwcKlcKlcNxcJQcNyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIPcIPcIPcIPcIPcIPcIPcIPcIPcIPdgXdgXcIPcIPcIPcIPcMQcNrcNPcNQcNRcNScMQdRydRYdRYdRydRHdRXcJJdRzcIRcIRcIRcOacIRcIRcwZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIRcIRcIRcIRcIRcIRcIRcIRcNdaaaaaaaaaaaaaaacNUcJQcNwcKlcKlcNxcJQcNyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacNVcNWcNWcNVaaaaaaaaacMQcNrcNXcNYcNZcNYcMQdRydRZdRZdRydRJdRCcJJdRzcIRcJocLVcJJcLMcOhcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacObcJQcJQcOccOccJQcJQcObaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacNVcNWcNWcNVaaaaaaaaacMQcNrcNXcNYcNZcNYcMQdRydRZdRZdRydRJdRCcJJdRzcIRcJocLVcJJcLMcOhcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacObcJQcJQcOccOccJQcJQcObaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOdcOecOecOecOedgYdgYcOecOecOgaaacMQcNrcNrcNrcNrcNrcMQdRydRYdRYdRydRRdRCcJJdRzcIRcJIcJJcJJcJJcLccIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOBdXUdXTcOFaaaaaaaaaaaaaaaaaaaaaaaaaaacIRcOicJQcJQcJQcJQcOjcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOdcOecOecOecOedgYdgYcOecOecOgaaacMQcNrcNrcNrcNrcNrcMQdRydRYdRYdRydRRdRCcJJdRzcIRcJIcJJcJJcJJcLccIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOBdXUdXTcOFaaaaaaaaaaaaaaaaaaaaaaaaaaacIRcOicJQcJQcJQcJQcOjcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOkcOlcOmdgSdgRcOpcOpcOqcOqcOecOgcMQcMQcMQcMQcMQcMQcMQdRydRydRydRydRBdRCcJJdRzcIRdRAcORdRAdRDdRAcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOBdaCbaidROdaFcOFaaaaaaaaaaaaaaaaaaaaaaaacIRcIRcIRcIRcIRcIRcIRcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOkcOlcOmdgSdgRcOpcOpcOqcOqcOecOgcMQcMQcMQcMQcMQcMQcMQdRydRydRydRydRBdRCcJJdRzcIRdRAcORdRAdRDdRAcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOBdaCdpgdROdaFcOFaaaaaaaaaaaaaaaaaaaaaaaacIRcIRcIRcIRcIRcIRcIRcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOkcOlcOvcOpcOpcOpcOpcOpcOpdgVdgTaaaaaaaaaaaaaaaaaacIRdREdRydREdRydRHdRCcJJdRFdRGcJIcJJdRIcJJcMvcNdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOVdoNcOMcOMdaJcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOkcOlcOvcOpcOpcOpcOpcOpcOpdgVdgTaaaaaaaaaaaaaaaaaacIRdREdRydREdRydRHdRCcJJdRFdRGcJIcJJdRIcJJcMvcNdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOVdphcOMcOMdaJcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOkcOlcOpcOHcOHcOHcOHcOHcOHcOecOIaaaaaaaaaaaaaaaaaacIRdREdRydREdRydRJdRCcJJdRFdRGcKacJJcLxdRLcMXcNdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadXIcOYcOYcOYcOMdXIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOkcOlcOpcOHcOHcOHcOHcOHcOHcOecOIaaaaaaaaaaaaaaaaaacIRdREdRydREdRydRJdRCcJJdRFdRGcKacJJcLxdRLcMXcNdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadXIcOYcOYcOYcOMdXIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOQcOecOecOecOecOecOecOecOecOIaaaaaaaaaaaaaaaaaaaaacIRdREdRydREdRydRRdRQcMEdRTcOydRAdRSdRVdRWdRAcNdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOVcZpcOYcOZdaNcOVdaMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOQcOecOecOecOecOecOecOecOecOIaaaaaaaaaaaaaaaaaaaaacIRdREdRydREdRydRRdRQcMEdRTcOydRAdRSdRVdRWdRAcNdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOVcZpcOYcOZdaNcOVdaMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOydRncJJcJJdRmcLccNdcNdcNdaaaaaaaaaaaaaaaaaaaaacOBdTBcPrdXIcSocPpdTBcPpcOFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOydRncJJcJJdRmcLccNdcNdcNdaaaaaaaaaaaaaaaaaaaaacOBdTBcPrdXIcSocPpdTBcPpcOFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
@@ -11043,13 +11049,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
|||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPicPtcPucPvcPtcPucPudYldYhdYmcPucPxcPycPhcPicPidgPdRrdRrdRrdRrdRrcOycPkcLvcPlcJJcJJcJJcLccLvcPkcNdcNdcNdcNdcNdcNdaaaaaacOVcPLcOYcOYdancRWcRWdakcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPicPtcPucPvcPtcPucPudYldYhdYmcPucPxcPycPhcPicPidgPdRrdRrdRrdRrdRrcOycPkcLvcPlcJJcJJcJJcLccLvcPkcNdcNdcNdcNdcNdcNdaaaaaacOVcPLcOYcOYdancRWcRWdakcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPtdazdgQdavcPEcPFcPFcPFcPFcPFcPFcPGcPHcPhcPicPidRsdRrdRrdRrdRrdRrcOycPkcLvcPlcJJcJJcJJcPncLvcPkcPKcPKcPKcPKcPKcNdaaaaaadXIcPLcOYcOYdXIcQMcQMcQMcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPtdazdgQdavcPEcPFcPFcPFcPFcPFcPFcPGcPHcPhcPicPidRsdRrdRrdRrdRrdRrcOycPkcLvcPlcJJcJJcJJcPncLvcPkcPKcPKcPKcPKcPKcNdaaaaaadXIcPLcOYcOYdXIcQMcQMcQMcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPidYfcPCcPNcPCcPOcPCcPCcPCcPCcPCcPCcPCdgLcPicPicPicOycOycOycOycQccWbcOycPkcLvcPlcJJcJJcJJcVqcWacKwcRVcRVcRVcRVcRVcRVcRVcRXcOVcZIcOYcOYdaccPpcPpcPpcPsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPidYfcPCcPNcPCcPOcPCcPCcPCcPCcPCcPCcPCdgLcPicPicPicOycOycOycOycQccWbcOycPkcLvcPlcJJcJJcJJcVqcWacKwcRVcRVcRVcRVcRVcRVcRVcRXcOVcZIcOYcOYdaccPpcPpcPpcPsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPUdaedgMdafcPEcPXcPXcPXcPXcPXcPXcPYcPZcPhcPicPicOydhjdhJdPFdPtdPtcOydKhdKjdiycJJcJJcJJcJJcUPcQhcQhcQhcQhcQhcUGdoOcUDdoOdoPcOYcOYcOYcOYdaddadcPMdXIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPUdaedgMdafcPEcPXcPXcPXcPXcPXcPXcPYcPZcPhcPicPicOydhjdhJdPFdPtdPtcOydKhdKjdiycJJcJJcJJcJJcUPcQhcQhcQhcQhcQhcUGdpecUDdpedpdcOYcOYcOYcOYdaddadcPMdXIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPicPUcPucQmcPUcPucPudYldYhdYmcPucQncPycPhcPicPicOydPQdPUdQfdPtdPtdQgdQQdQXcJJcJJcJJcJJcJJcUPcQhcQhcQhcQhcQhcUGcSacRVcRXcOVdahcOYcPMdYgcPLcOYdagcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPicPUcPucQmcPUcPucPudYldYhdYmcPucQncPycPhcPicPicOydPQdPUdQfdPtdPtdQgdQQdQXcJJcJJcJJcJJcJJcUPcQhcQhcQhcQhcQhcUGcSacRVcRXcOVdahcOYcPMdYgcPLcOYdagcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPicPicPicPicPicPicPicPicPicPicPicPicPjcPhcPicPicOydRhdRidRjdPtdPtdQgdQQdQXcJJcJJcJJcJJdRfdRgcRVdRecQhcQhcQwdoQcNdaaaaaadYgcPLcOYcPMdYecPLcOYcPMdYgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPicPicPicPicPicPicPicPicPicPicPicPicPjcPhcPicPicOydRhdRidRjdPtdPtdQgdQQdQXcJJcJJcJJcJJdRfdRgcRVdRecQhcQhcQwdpfcNdaaaaaadYgcPLcOYcPMdYecPLcOYcPMdYgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycOycOycOycOycOycQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcVCcVCcVCcQAcQAcQzcVBcLfcVxcJJcJJcJJcPncQQcPkcVMcQhcUGcVOcVNcNdaaaaaadYecPLcOYcPMdYecPLcOYcPMdYeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycOycOycOycOycOycQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcVCcVCcVCcQAcQAcQzcVBcLfcVxcJJcJJcJJcPncQQcPkcVMcQhcUGcVOcVNcNdaaaaaadYecPLcOYcPMdYecPLcOYcPMdYeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycUXcUYcUYcUYcURcUVcQLcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQzcPkcLvcPlcJJcJJcJJcVqcVpcRVcVrcQhcQhcQScVscNdaaaaaadXXcPLcOYcPMdYecPLcOYcPMdXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycUXcUYcUYcUYcURcUVcQLcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQAcQzcPkcLvcPlcJJcJJcJJcVqcVpcRVcVrcQhcQhcQScVscNdaaaaaadXXcPLcOYcPMdYecPLcOYcPMdXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycPbcPbcPbcPbcPbcUJcQTcUHcUKcQYcQAcQWcUOcUNcQYcQAcQAcQAcQAcQAcQAcQAcQAcQzcPkcLvcPIcJJcJJcJJcJJcUPcQhcQhcQhcQhcQhcUGcSacRVcRXcOVcZIcOYcPMdXXcPLcOYcZKcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycPbcPbcPbcPbcPbcUJcQTcUHcUKcQYcQAcQWcUOcUNcQYcQAcQAcQAcQAcQAcQAcQAcQAcQzcPkcLvcPIcJJcJJcJJcJJcUPcQhcQhcQhcQhcQhcUGcSacRVcRXcOVcZIcOYcPMdXXcPLcOYcZKcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycPbcQxcPbcPbcPbcQVcQTcUfcUicQYcQAcQWcSAcSzcQYcQAcQAcSecSecSecSecSecSecQzcShcSgcSrcSicUzcUzcUzcUAcUzcUzcQhcQhcQhcUGdoOcUDdoOdoPcOYcOYcOYcOYcOYcOYcPMdXIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycPbcQxcPbcPbcPbcQVcQTcUfcUicQYcQAcQWcSAcSzcQYcQAcQAcSecSecSecSecSecSecQzcShcSgcSrcSicUzcUzcUzcUAcUzcUzcQhcQhcQhcUGdpecUDdpedpdcOYcOYcOYcOYcOYcOYcPMdXIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycPbdgJcPbcPbcPbcQVcQLcQAcQAcQAcQAcQAcQAcQAcQAcQAcQCcRUcRUcRUcRUcRUcRUcQzcQzcQzcQzcQzcRZcRZcQzcQzcQzcQzcSacRVcRVcRVcRVcRVcRXcOVdXUdXTcRCdXIcZBcOYcZrcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycPbdgJcPbcPbcPbcQVcQLcQAcQAcQAcQAcQAcQAcQAcQAcQAcQCcRUcRUcRUcRUcRUcRUcQzcQzcQzcQzcQzcRZcRZcQzcQzcQzcQzcSacRVcRVcRVcRVcRVcRXcOVdXUdXTcRCdXIcZBcOYcZrcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycPbcPbcREcPbcRGcQVcQTcRNcRFcQYcQAcQWcRAcRzcQYcQAcQCcRycQBcQBcQBcQBcQBcQzcRBcRBcRBcRDcOtcOtcRRcRhcRhcQzcPKcPKcPKcPKcNdaaaaaacOVcRLcRMcPAcRgcOVcZpcZrcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycPbcPbcREcPbcRGcQVcQTcRNcRFcQYcQAcQWcRAcRzcQYcQAcQCcRycQBcQBcQBcQBcQBcQzcRBcRBcRBcRDcOtcOtcRRcRhcRhcQzcPKcPKcPKcPKcNdaaaaaacOVcRLcRMcPAcRgcOVcZpcZrcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycQRcPbcPbcQPcPbcQVcQTcQUcQXcQYcQAcQWcRacQZcQYcQAcQCcQBcQBcQBcQBcQBcQBcQzcZccWncWkcWgcOtcOtcOtcRhcRhcQzcNdcNdcNdcNdcNdaaaaaadXIcPAcPAcPAcZecOVcZdcZdcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycQRcPbcPbcQPcPbcQVcQTcQUcQXcQYcQAcQWcRacQZcQYcQAcQCcQBcQBcQBcQBcQBcQBcQzcZccWncWkcWgcOtcOtcOtcRhcRhcQzcNdcNdcNdcNdcNdaaaaaadXIcPAcPAcPAcZecOVcZdcZdcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
|
|||||||