From 2538540cbb5e6724597a50f416d50c457f4bd4ac Mon Sep 17 00:00:00 2001 From: BurgerLUA <8602857+BurgerLUA@users.noreply.github.com> Date: Sun, 7 Apr 2024 01:46:58 -0700 Subject: [PATCH] experimental guest saving + herald teleport fix --- code/_core/client/_client.dm | 8 +++- code/_core/datum/savedata/_savedata.dm | 2 +- code/_core/datum/savedata/client/_client.dm | 25 ++++++++++-- .../_core/datum/savedata/client/bank/_bank.dm | 4 +- .../connection_history/_connection_history.dm | 11 +++--- .../savedata/client/controls/_controls.dm | 4 +- .../savedata/client/death_box/_death_box.dm | 4 +- .../datum/savedata/client/globals/_globals.dm | 4 +- .../datum/savedata/client/loadout/_loadout.dm | 4 +- code/_core/datum/savedata/client/mob/_mob.dm | 12 +++--- .../savedata/client/settings/_settings.dm | 4 +- code/_core/obj/item/herald_mirror.dm | 21 +++++++--- .../obj/structure/interactive/wizard_hole.dm | 1 + code/_core/obj/teleport/chargen.dm | 17 ++++++++- config/example_config.txt | 1 + maps/_core/bluespace.dmm | 38 ++++++++++--------- 16 files changed, 107 insertions(+), 53 deletions(-) diff --git a/code/_core/client/_client.dm b/code/_core/client/_client.dm index fd76ea9863..92e8412e97 100644 --- a/code/_core/client/_client.dm +++ b/code/_core/client/_client.dm @@ -94,7 +94,7 @@ var/last_control = 0 //Prevents race conditions. - + var/guest = FALSE //Are we a guest? /client/proc/is_player_controlled() @@ -155,8 +155,13 @@ var/global/total_clients = 0 +var/global/regex/guest_regex = regex(@'guest-\d+$',"m") + /client/New() + if(guest_regex.Find(src.ckey)) + guest = TRUE + total_clients++ SSclient.all_clients[src.ckey] = src @@ -301,6 +306,7 @@ var/global/total_clients = 0 return TRUE + /* /client/Command(command as command_text) mob.say(command) diff --git a/code/_core/datum/savedata/_savedata.dm b/code/_core/datum/savedata/_savedata.dm index b9700ad677..d1a4ee9759 100644 --- a/code/_core/datum/savedata/_savedata.dm +++ b/code/_core/datum/savedata/_savedata.dm @@ -4,7 +4,7 @@ /savedata/proc/reset_data() loaded_data = list() -/savedata/proc/get_folder(var/folder_id) +/savedata/proc/get_folder() return "" /savedata/proc/get_file(var/file_id) diff --git a/code/_core/datum/savedata/client/_client.dm b/code/_core/datum/savedata/client/_client.dm index 638ec84979..def8dffc40 100644 --- a/code/_core/datum/savedata/client/_client.dm +++ b/code/_core/datum/savedata/client/_client.dm @@ -1,6 +1,21 @@ /savedata/client/ var/ckey + var/cid var/bot_controlled = FALSE + var/guest = FALSE + +/savedata/client/proc/get_folder_id() + + if(bot_controlled) + return "BOT" + + if(guest) //Only set if the config option is enabled (see below in New()) + return "~guests/[cid]" + + if(ckey) + return ckey + + return "~ERROR" /savedata/client/New(var/desired_ckey) @@ -9,12 +24,16 @@ if(!owner) CRASH("SAVE ERROR: savedata did not have a valid owner!") + if(owner.guest && CONFIG("ENABLE_GUEST_CID_SAVING",FALSE)) + guest = TRUE + cid = owner.computer_id + ckey = desired_ckey return ..() -/savedata/client/get_folder(var/folder_id) - return replacetext(CKEY_PATH_FORMAT,"%CKEY",folder_id) +/savedata/client/get_folder() + return replacetext(CKEY_PATH_FORMAT,"%CKEY",get_folder_id()) /savedata/client/get_files() - return flist(get_folder(ckey)) \ No newline at end of file + return flist(get_folder()) \ No newline at end of file diff --git a/code/_core/datum/savedata/client/bank/_bank.dm b/code/_core/datum/savedata/client/bank/_bank.dm index 6b17975018..fb92608ae8 100644 --- a/code/_core/datum/savedata/client/bank/_bank.dm +++ b/code/_core/datum/savedata/client/bank/_bank.dm @@ -18,13 +18,13 @@ /savedata/client/bank/proc/save() var/client/owner = CLIENT(ckey) - var/full_path = "[get_folder(ckey)][get_file()]" + var/full_path = "[get_folder()][get_file()]" rustg_file_write(json_encode(loaded_data),full_path) owner?.to_chat(span("notice","Your bank data has been saved.")) return TRUE /savedata/client/bank/proc/load() - var/full_path = "[get_folder(ckey)][get_file()]" + var/full_path = "[get_folder()][get_file()]" if(!fexists(full_path)) rustg_file_write(json_encode(loaded_data),full_path) else diff --git a/code/_core/datum/savedata/client/connection_history/_connection_history.dm b/code/_core/datum/savedata/client/connection_history/_connection_history.dm index 91016a31ca..2e9ba09cef 100644 --- a/code/_core/datum/savedata/client/connection_history/_connection_history.dm +++ b/code/_core/datum/savedata/client/connection_history/_connection_history.dm @@ -25,17 +25,18 @@ sort_tim(connection_files, /proc/cmp_path_dsc) var/connections_length = length(connection_files) if(connections_length >= CONNECTIONS_FILE_LIMIT) + var/our_folder = get_folder() for(var/i=CONNECTIONS_FILE_LIMIT,i<=connections_length,i++) - var/file_name = "[get_folder(ckey)][connection_files[i]]" + var/file_name = "[our_folder][connection_files[i]]" fdel(file_name) - var/new_file_name = "[get_folder(ckey)][loaded_data["connection_date"]]_[loaded_data["connection_time"]].json" + var/new_file_name = "[get_folder()][loaded_data["connection_date"]]_[loaded_data["connection_time"]].json" var/new_file_data = json_encode(loaded_data) rustg_file_write(new_file_data,new_file_name) -/savedata/client/connection_history/get_folder(var/folder_id) - return replacetext(CONNECTION_PATH_FORMAT,"%CKEY",folder_id) +/savedata/client/connection_history/get_folder() + return replacetext(CONNECTION_PATH_FORMAT,"%CKEY",get_folder_id()) /savedata/client/connection_history/get_files() - return flist(get_folder(ckey)) \ No newline at end of file + return flist(get_folder()) \ No newline at end of file diff --git a/code/_core/datum/savedata/client/controls/_controls.dm b/code/_core/datum/savedata/client/controls/_controls.dm index 46eba2d313..7cf0da77c4 100644 --- a/code/_core/datum/savedata/client/controls/_controls.dm +++ b/code/_core/datum/savedata/client/controls/_controls.dm @@ -12,7 +12,7 @@ var/client/owner = CLIENT(ckey) - var/full_path = "[get_folder(ckey)][get_file()]" + var/full_path = "[get_folder()][get_file()]" if(!fexists(full_path)) rustg_file_append(json_encode(owner.macros.macros),full_path) @@ -22,6 +22,6 @@ /savedata/client/controls/proc/save() var/client/owner = CLIENT(ckey) - var/full_path = "[get_folder(ckey)][get_file()]" + var/full_path = "[get_folder()][get_file()]" rustg_file_write(json_encode(owner.macros.macros),full_path) owner.to_chat(span("notice","Your control scheme has been saved.")) \ No newline at end of file diff --git a/code/_core/datum/savedata/client/death_box/_death_box.dm b/code/_core/datum/savedata/client/death_box/_death_box.dm index 589b92f12c..749385322c 100644 --- a/code/_core/datum/savedata/client/death_box/_death_box.dm +++ b/code/_core/datum/savedata/client/death_box/_death_box.dm @@ -168,7 +168,7 @@ /savedata/client/death_box/proc/save() var/client/owner = CLIENT(ckey) - var/full_path = "[get_folder(ckey)][get_file()]" + var/full_path = "[get_folder()][get_file()]" var/length_of_data = length(loaded_data) if(length_of_data > 5) loaded_data.Cut(1,length_of_data - (DEATH_BOX_LIMIT-1)) @@ -177,7 +177,7 @@ return TRUE /savedata/client/death_box/proc/load() - var/full_path = "[get_folder(ckey)][get_file()]" + var/full_path = "[get_folder()][get_file()]" if(!fexists(full_path)) rustg_file_write(json_encode(loaded_data),full_path) else diff --git a/code/_core/datum/savedata/client/globals/_globals.dm b/code/_core/datum/savedata/client/globals/_globals.dm index f06b602600..5a8a5b3356 100644 --- a/code/_core/datum/savedata/client/globals/_globals.dm +++ b/code/_core/datum/savedata/client/globals/_globals.dm @@ -27,14 +27,14 @@ /savedata/client/globals/proc/save() var/client/owner = CLIENT(ckey) - var/full_path = "[get_folder(ckey)][get_file()]" + var/full_path = "[get_folder()][get_file()]" loaded_data["new_player"] = FALSE rustg_file_write(json_encode(loaded_data),full_path) owner.to_chat(span("notice","Your global stats and settings have been saved.")) return TRUE /savedata/client/globals/proc/load() - var/full_path = "[get_folder(ckey)][get_file()]" + var/full_path = "[get_folder()][get_file()]" if(!fexists(full_path)) rustg_file_write(json_encode(loaded_data),full_path) else diff --git a/code/_core/datum/savedata/client/loadout/_loadout.dm b/code/_core/datum/savedata/client/loadout/_loadout.dm index 780d65291b..59b822ce19 100644 --- a/code/_core/datum/savedata/client/loadout/_loadout.dm +++ b/code/_core/datum/savedata/client/loadout/_loadout.dm @@ -20,13 +20,13 @@ /savedata/client/loadout/proc/save() var/client/owner = CLIENT(ckey) - var/full_path = "[get_folder(ckey)][get_file()]" + var/full_path = "[get_folder()][get_file()]" rustg_file_write(json_encode(loaded_data),full_path) owner?.to_chat(span("notice","Your loadout data has been saved.")) return TRUE /savedata/client/loadout/proc/load() - var/full_path = "[get_folder(ckey)][get_file()]" + var/full_path = "[get_folder()][get_file()]" if(!fexists(full_path)) rustg_file_write(json_encode(loaded_data),full_path) else diff --git a/code/_core/datum/savedata/client/mob/_mob.dm b/code/_core/datum/savedata/client/mob/_mob.dm index 2ad58df712..d0b3ae3172 100644 --- a/code/_core/datum/savedata/client/mob/_mob.dm +++ b/code/_core/datum/savedata/client/mob/_mob.dm @@ -2,8 +2,8 @@ /savedata/client/mob -/savedata/client/mob/get_folder(var/folder_id) - . = replacetext(CHARACTER_PATH_FORMAT,"%CKEY",folder_id) +/savedata/client/mob/get_folder() + . = replacetext(CHARACTER_PATH_FORMAT,"%CKEY",get_folder_id()) return /savedata/client/mob/reset_data() @@ -25,7 +25,7 @@ ) /savedata/client/mob/New(var/desired_ckey) - ..() + . = ..() reset_data() var/client/owner = CLIENT(ckey) if(owner) @@ -36,8 +36,10 @@ return FALSE /savedata/client/mob/get_file(var/file_id) - var/returning = "[get_folder(ckey)][CHARACTER_FILE_FORMAT]" - returning = replacetext(returning,"%CKEY",bot_controlled ? "BOT" : ckey) + + var/returning = "[get_folder()][CHARACTER_FILE_FORMAT]" + returning = replacetext(returning,"%CID",file_id) + return returning diff --git a/code/_core/datum/savedata/client/settings/_settings.dm b/code/_core/datum/savedata/client/settings/_settings.dm index f670ca0ba9..c49fbfbd15 100644 --- a/code/_core/datum/savedata/client/settings/_settings.dm +++ b/code/_core/datum/savedata/client/settings/_settings.dm @@ -27,7 +27,7 @@ var/client/owner = CLIENT(ckey) - var/full_path = "[get_folder(ckey)][get_file()]" + var/full_path = "[get_folder()][get_file()]" if(!fexists(full_path)) rustg_file_append(json_encode(loaded_data),full_path) @@ -70,6 +70,6 @@ /savedata/client/settings/proc/save() var/client/owner = CLIENT(ckey) - var/full_path = "[get_folder(ckey)][get_file()]" + var/full_path = "[get_folder()][get_file()]" rustg_file_write(json_encode(loaded_data),full_path) owner.mob.to_chat(span("notice","Your settings have been saved.")) \ No newline at end of file diff --git a/code/_core/obj/item/herald_mirror.dm b/code/_core/obj/item/herald_mirror.dm index a0873551bd..142bb73f27 100644 --- a/code/_core/obj/item/herald_mirror.dm +++ b/code/_core/obj/item/herald_mirror.dm @@ -51,18 +51,27 @@ INTERACT_CHECK_NO_DELAY(src) - if(!A.can_move()) - A.to_chat(span("warning","You can't use the mirror in your current state!")) - return FALSE - if(!linked_destination) A.to_chat(span("warning","Something went wrong... tell Burger on discord.")) return FALSE + if(!SSgamemode?.active_gamemode?.allow_launch) + A.to_chat(span("warning","You can't use \the [src.name]... yet.")) + return FALSE + + if(!A.can_move()) + A.to_chat(span("warning","You can't use \the [src.name] in your current state!")) + return FALSE + if(!is_inventory(loc)) A.to_chat(span("warning","You need to be holding \the [src.name] in order to teleport!")) return FALSE + var/obj/hud/inventory/I = loc + + if(!I.click_flags || I.owner != A) + A.to_chat(span("warning","You need to be holding \the [src.name] in order to teleport!")) + return FALSE return TRUE @@ -74,10 +83,10 @@ if(istype(A2,/area/herald)) var/turf/T = get_turf(linked_returning) if(!T) - A.to_chat(span("notice","It seems you cannot go back to your previous location... perhaps the portal can help you get back.")) + A.to_chat(span("notice","It seems you cannot go back to your previous location... perhaps the light can help you get back.")) return TRUE A.force_move(T) - A.visible_message(span("danger","\The [A.name] appears out of nowhere!"),span("notice","\The [src.name] whisks you away back to where you were.")) + A.visible_message(span("danger","\The [A.name] appears out of nowhere!"),span("notice","\The [src.name] whisks you away, back to where you were.")) return TRUE if(linked_returning) diff --git a/code/_core/obj/structure/interactive/wizard_hole.dm b/code/_core/obj/structure/interactive/wizard_hole.dm index 3eac357850..8e65648c03 100644 --- a/code/_core/obj/structure/interactive/wizard_hole.dm +++ b/code/_core/obj/structure/interactive/wizard_hole.dm @@ -22,6 +22,7 @@ return ..() var/obj/marker/wizard_rift_location/RL = pick(wizard_rift_markers) + wizard_rift_markers -= RL var/obj/structure/interactive/wizard_hole/WH = new(get_turf(RL)) WH.linked_wormhole = src diff --git a/code/_core/obj/teleport/chargen.dm b/code/_core/obj/teleport/chargen.dm index 0c4f772702..3fd164c722 100644 --- a/code/_core/obj/teleport/chargen.dm +++ b/code/_core/obj/teleport/chargen.dm @@ -56,13 +56,26 @@ var/obj/marker/shuttle_marker/SM = pick(shuttle_markers) L.force_move(get_turf(SM)) +/obj/trigger/teleport_to_world + name = "teleport to world" + invisibility = 101 + density = TRUE +/obj/trigger/teleport_to_world/Crossed(var/atom/movable/triggerer) + . = ..() -/obj/marker/shuttle_marker/ - name = "shuttle marker" + if(!is_living(triggerer)) + return . + + var/mob/living/L = triggerer + var/obj/marker/wizard_rift_location/RL = pick(wizard_rift_markers) + L.force_move(get_turf(RL)) + +/obj/marker/shuttle_marker/ + name = "shuttle marker" /* diff --git a/config/example_config.txt b/config/example_config.txt index 181f13d134..1ae1b3b293 100644 --- a/config/example_config.txt +++ b/config/example_config.txt @@ -32,6 +32,7 @@ ENABLE_WEATHER 0 ENABLE_PVP_AREA 1 ENABLE_LIGHTING 1 ENABLE_INSTALOAD 0 +ENABLE_GUEST_CID_SAVING 0 #Character Creation MAXIMUM_PLAYER_SAVES 10 diff --git a/maps/_core/bluespace.dmm b/maps/_core/bluespace.dmm index 6a07545d43..373065733c 100644 --- a/maps/_core/bluespace.dmm +++ b/maps/_core/bluespace.dmm @@ -1,4 +1,4 @@ -"aa" = (/turf/unsimulated,/area/space/deep) +"aa" = (/obj/structure/interactive/lighting/streetlamp/jungle/dark,/turf/simulated/floor/basalt,/area/herald) "ab" = (/turf/simulated/wall/rock/indestructable,/area/centcomm/chargen) "ac" = (/turf/bluespace,/area/space/bluespace) "ad" = (/turf/simulated/wall/rock/basalt,/area/centcomm/chargen) @@ -61,6 +61,8 @@ "bj" = (/obj/trigger/teleport_to_shuttle,/obj/effect/fake_lighting/solid,/obj/structure/interactive/lighting/fixture/tube/station/stronger{icon_state = "preview"; dir = 1},/turf/simulated/floor/tile/bananium,/area/centcomm/clown_planet) "bk" = (/obj/structure/interactive/power/apc{icon_state = "apc"; dir = 1},/turf/simulated/wall/metal/magic/bananium,/area/centcomm/clown_planet) "bl" = (/mob/living/advanced/npc/unique/jestmaster,/turf/simulated/floor/tile/morphing,/area/centcomm/clown_planet) +"bm" = (/obj/trigger/teleport_to_world,/obj/effect/fake_lighting/solid,/turf/simulated/floor/chasm,/area/herald) +"bn" = (/obj/effect/fake_lighting/gradient,/turf/simulated/floor/basalt,/area/herald) (1,1,1) = {" acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacac @@ -546,21 +548,21 @@ acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacac acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanasaGaGaGaGaGaGaGaGaGaHaHaHaHaHaHaHaHaHaHaHaHaHaGaGaGaGaGaGaGaGaGasanan acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanasaGaGaGaGaGaGaGaGaGaHaHaHaHaHaHaHaHaHaHaHaHaHaGaGaGaKaGaGaGaGaGasanan acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasasanan -acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacananananananananananananananananaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaaabababababababababababababababaaaaaaaa -acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanaiajajajajajajajajajajajajajaiaaabaeaeaeaeaeaeaeaeaeaeaeaeadabaaaaaaaa -acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanaiajajajamamamamamamajajajajaiaaabaeaeaeaeaeafaeaeaeaeaeaeadabaaaaaaaa -acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanaiajajamamamamamamamamamajajaiaaabaeaeaeaeaeaeaeaeaeaeaeaeadabaaaaaaaa -acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanaiajajamamamamamamamamamamajaiaaabaeaeaeaeaeaeaeaeaeaeaeaeadababababaa -acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanaiajajamamamamamamamamamamajaiaaabaeaeaeaeaeaeaeaeaeaeaeaeadadadadabaa -acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanaiajajamamamamaoamamamamamajaiaaabaeaeaeaeaeaeaeaeaeaeaeaeagahakadabaa -acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanaiajamamamamamamamamamamamajaiaaabaeaeaeaeaeaealaeaeaeaeaeagahakadabaa -acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanaiajamamamamamamamamamamamajaiaaabaeaeaeaeaeaeaeaeaeaeaeaeagahakadabaa -acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanananananananaiajamamamamamamamamamamamajaiaaabaeaeaeaeaeaeaeaeaeaeaeaeadadadadabaa -acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanabababababanaiajajamamamamamamamamamajajaiaaabaeaeaeaeaeaeaeaeaeaeaeaeadababababaa -acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanabapapapabanaiajajajamamamamamamamajajajaiaaabaeaeaeaeaeaeaeaeaeaeaeaeadabaaaaaaaa -acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanabapaqapabanaiajajajajamamamamajajajajajaiaaabaeaeaeaeaeaeaeaeaeaeaeaeadabaaaaaaaa -acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanabapapapabanaiajajajajajajajajajajajajajaiaaabaeaeaeaeaeaeaeaeaeaeaeaeadabaaaaaaaa -acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanabababababanaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaaabababababababababababababababaaaaaaaa -acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacananananananananananananananananananananananaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanananananananananananananananananananananananananananananananananananan +acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacananananananaiaiaiaiaiananananananabababababababababababababababanananan +acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacananananananaibmbmbmaiananananananabaeaeaeaeaeaeaeaeaeaeaeaeadabanananan +acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanaiaiaiaiaiaibnbnbnaiaiaiaiaiaianabaeaeaeaeaeafaeaeaeaeaeaeadabanananan +acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanaiajajajajajamamamajajajajajaianabaeaeaeaeaeaeaeaeaeaeaeaeadabanananan +acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanaiajajajamaaamamamaaajajajajaianabaeaeaeaeaeaeaeaeaeaeaeaeadababababan +acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanaiajajamamamamamamamamamajajaianabaeaeaeaeaeaeaeaeaeaeaeaeadadadadaban +acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanaiajajamamamamamamamamamamajaianabaeaeaeaeaeaeaeaeaeaeaeaeagahakadaban +acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanaiajajamamamamamamamamamamajaianabaeaeaeaeaeaealaeaeaeaeaeagahakadaban +acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanaiajamamamamamaoamamamamamajaianabaeaeaeaeaeaeaeaeaeaeaeaeagahakadaban +acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanananananananaiajamamamamamamamamamamamajaianabaeaeaeaeaeaeaeaeaeaeaeaeadadadadaban +acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanabababababanaiajajamamamamamamamamamajajaianabaeaeaeaeaeaeaeaeaeaeaeaeadababababan +acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanabapapapabanaiajajajamamamamamamamajajajaianabaeaeaeaeaeaeaeaeaeaeaeaeadabanananan +acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanabapaqapabanaiajajajajamamamamajajajajajaianabaeaeaeaeaeaeaeaeaeaeaeaeadabanananan +acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanabapapapabanaiajajajajajajajajajajajajajaianabaeaeaeaeaeaeaeaeaeaeaeaeadabanananan +acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanabababababanaiaiaiaiaiaiaiaiaiaiaiaiaiaiaianabababababababababababababababanananan +acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacanananananananananananananananananananananananananananananananananananananananananan "}