diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index cdd04e32c364..0c0b4f49c0d4 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -753,7 +753,7 @@ Each role inherits the lower role's responsibilities (IE: Headcoders also have c `Headcoders` are the overarching "administrators" of the repository. People included in this role are: * [farie82](https://github.com/farie82) -* [Fox P McCloud](https://github.com/Fox-McCloud) +* [Charliminator](https://github.com/hal9000PR) * [SteelSlayer](https://github.com/SteelSlayer) --- @@ -762,7 +762,6 @@ Each role inherits the lower role's responsibilities (IE: Headcoders also have c * [AffectedArc07](https://github.com/AffectedArc07) -* [Charliminator](https://github.com/hal9000PR) * [lewcc](https://github.com/lewcc) * [S34N](https://github.com/S34NW) @@ -776,6 +775,7 @@ Each role inherits the lower role's responsibilities (IE: Headcoders also have c * [Contrabang](https://github.com/Contrabang) * [Burzah](https://github.com/Burzah) * [DGamerL](https://github.com/DGamerL) +* [Warriorstar](https://github.com/warriorstar-orion) --- diff --git a/.vscode/extensions.json b/.vscode/extensions.json index b5147f210dd7..8046f3196652 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -7,6 +7,7 @@ "eamodio.gitlens", "usernamehw.errorlens", "anturk.dmi-editor", - "esbenp.prettier-vscode" + "esbenp.prettier-vscode", + "arcanis.vscode-zipfs" ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 9c4c5f94ab1f..e6261aec1a1a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,8 +4,16 @@ ], // ESLint settings: "eslint.workingDirectories": [ - "tgui/" + "./tgui" ], + "search.exclude": { + "**/.yarn": true, + "**/.pnp.*": true + }, + "eslint.nodePath": "tgui/.yarn/sdks", + "prettier.prettierPath": "tgui/.yarn/sdks/prettier/index.cjs", + "typescript.tsdk": "tgui/.yarn/sdks/typescript/lib", + "typescript.enablePromptUseWorkspaceTsdk": true, "eslint.rules.customizations": [ // We really want to fail the CI builds on styling errors, // but it's better to show them as yellow squigglies in IDE @@ -22,5 +30,6 @@ }, "[scss]": { "editor.rulers": [80] - } + }, + "editor.formatOnSave": true } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index dca695c03ccc..47c848d24001 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -14,7 +14,7 @@ "type": "shell", "command": "tgui/bin/tgui-build", "windows": { - "command": ".\\tgui\\bin\\tgui-build.bat" + "command": ".\\tgui\\bin\\tgui.bat" }, "problemMatcher": [ "$tsc", @@ -37,18 +37,5 @@ "label": "tgui: run dev server" } , - { - "type": "shell", - "command": "tgui/bin/tgui-formatting", - "windows": { - "command": ".\\tgui\\bin\\tgui-formatting.bat" - }, - "problemMatcher": [ - "$tsc", - "$eslint-stylish" - ], - "group": "build", - "label": "tgui: run prettier formatting" - } ] } diff --git a/_build_dependencies.sh b/_build_dependencies.sh index d146ad1c518d..7e4a8ce153ec 100644 --- a/_build_dependencies.sh +++ b/_build_dependencies.sh @@ -2,7 +2,7 @@ # For dreamchecker export SPACEMANDMM_TAG=suite-1.7.1 # For TGUI -export NODE_VERSION=18 +export NODE_VERSION=20 # Stable Byond Major export STABLE_BYOND_MAJOR=515 # Stable Byond Minor diff --git a/_maps/map_files/Delta/delta.dmm b/_maps/map_files/Delta/delta.dmm index 582b2126b749..163efb8b9007 100644 --- a/_maps/map_files/Delta/delta.dmm +++ b/_maps/map_files/Delta/delta.dmm @@ -1738,11 +1738,11 @@ /area/station/hallway/secondary/entry) "anA" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/meat/slab{ +/obj/item/food/snacks/meat/slab{ pixel_x = 6; pixel_y = 11 }, -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, /area/station/maintenance/fore2) @@ -1929,8 +1929,8 @@ /area/station/hallway/secondary/entry) "aoa" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -4; pixel_y = 2 }, @@ -3854,7 +3854,7 @@ /area/station/maintenance/fore) "att" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood{ icon_state = "wood-broken" }, @@ -6686,7 +6686,7 @@ /area/station/maintenance/fore) "aAk" = ( /obj/structure/rack, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fore) @@ -7950,9 +7950,9 @@ /obj/structure/table, /obj/item/seeds/poppy/lily, /obj/item/seeds/poppy/geranium, -/obj/item/reagent_containers/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, /obj/item/grown/corncob, -/obj/item/reagent_containers/food/snacks/grown/apple, +/obj/item/food/snacks/grown/apple, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/maintenance/abandoned_garden) @@ -7974,9 +7974,9 @@ /obj/structure/table, /obj/item/stack/packageWrap, /obj/item/hand_labeler, -/obj/item/reagent_containers/food/snacks/grown/tea, -/obj/item/reagent_containers/food/snacks/grown/grapes, -/obj/item/reagent_containers/food/snacks/grown/cherries, +/obj/item/food/snacks/grown/tea, +/obj/item/food/snacks/grown/grapes, +/obj/item/food/snacks/grown/cherries, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/maintenance/abandoned_garden) @@ -9238,7 +9238,7 @@ }, /obj/structure/table/wood, /obj/item/book/manual/barman_recipes, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/item/reagent_containers/glass/rag, /obj/machinery/requests_console{ department = "Bar"; @@ -12648,6 +12648,10 @@ /obj/item/storage/fancy/crayons, /turf/simulated/floor/plasteel, /area/station/public/storage/art) +"aPT" = ( +/obj/effect/landmark/damageturf, +/turf/simulated/floor/plating/airless, +/area/space/nearstation) "aPU" = ( /obj/structure/table/wood, /obj/item/instrument/guitar, @@ -12691,11 +12695,11 @@ /area/station/service/bar) "aQc" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -7; pixel_y = 7 }, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/peppermill, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ @@ -12704,7 +12708,7 @@ /area/station/service/bar) "aQd" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -13274,6 +13278,15 @@ icon_state = "bar" }, /area/station/service/bar) +"aRu" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance/eight, +/obj/effect/landmark/damageturf, +/turf/simulated/floor/plasteel/airless{ + dir = 10; + icon_state = "darkblue" + }, +/area/space/nearstation) "aRv" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -13335,7 +13348,7 @@ /area/station/service/bar) "aRC" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/cheesiehonkers, +/obj/item/food/snacks/cheesiehonkers, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -15352,14 +15365,14 @@ /area/station/supply/miningdock) "aWg" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/chips, +/obj/item/food/snacks/chips, /turf/simulated/floor/plasteel{ icon_state = "bar" }, /area/station/service/bar) "aWh" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/dr_gibb, +/obj/item/reagent_containers/drinks/cans/dr_gibb, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -15368,7 +15381,7 @@ /area/station/service/bar) "aWi" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/britcup, +/obj/item/reagent_containers/drinks/britcup, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -19918,7 +19931,7 @@ /area/station/service/kitchen) "bhN" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/condiment/flour, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -19951,7 +19964,7 @@ /area/station/hallway/primary/fore) "bhQ" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/dough, +/obj/item/food/snacks/dough, /obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel{ @@ -21391,8 +21404,8 @@ /area/station/service/kitchen) "blk" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/mint, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/food/snacks/mint, +/obj/item/reagent_containers/condiment/enzyme, /obj/machinery/reagentgrinder, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, @@ -22250,8 +22263,8 @@ /area/station/hallway/primary/fore) "bne" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/peppermill, /obj/item/kitchen/knife, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel, @@ -24873,6 +24886,10 @@ /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/station/hallway/primary/central) +"btJ" = ( +/obj/structure/grille, +/turf/simulated/floor/plating/airless, +/area/space/nearstation) "btL" = ( /turf/simulated/wall/r_wall, /area/station/command/vault) @@ -25756,10 +25773,10 @@ /obj/item/seeds/wheat, /obj/item/seeds/potato, /obj/item/seeds/pumpkin, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/watermelon, -/obj/item/reagent_containers/food/snacks/grown/grapes, -/obj/item/reagent_containers/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/watermelon, +/obj/item/food/snacks/grown/grapes, +/obj/item/food/snacks/grown/tomato, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, /area/station/service/hydroponics) @@ -26971,7 +26988,7 @@ dir = 9 }, /obj/structure/displaycase{ - start_showpiece_type = /obj/item/reagent_containers/food/snacks/donut/sprinkles + start_showpiece_type = /obj/item/food/snacks/donut/sprinkles }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -30056,7 +30073,7 @@ /area/station/engineering/break_room) "bGD" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/cans/starkist, +/obj/item/reagent_containers/drinks/cans/starkist, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -33688,7 +33705,7 @@ "bPp" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp, -/obj/item/reagent_containers/food/drinks/flask/detflask, +/obj/item/reagent_containers/drinks/flask/detflask, /turf/simulated/floor/carpet, /area/station/security/detective) "bPq" = ( @@ -38599,8 +38616,8 @@ /area/station/command/office/ntrep) "cca" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/wood, /area/station/command/office/ntrep) "ccb" = ( @@ -39295,7 +39312,7 @@ /area/station/command/office/ntrep) "cdN" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /obj/item/storage/fancy/donut_box, /turf/simulated/floor/wood, /area/station/command/office/ntrep) @@ -39339,7 +39356,7 @@ /area/station/command/office/blueshield) "cdT" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/flask/gold, +/obj/item/reagent_containers/drinks/flask/gold, /obj/item/razor, /turf/simulated/floor/carpet/black, /area/station/command/office/captain/bedroom) @@ -40498,9 +40515,9 @@ /area/station/command/office/blueshield) "chs" = ( /obj/structure/closet/cabinet, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood, /area/station/command/office/blueshield) "cht" = ( @@ -43003,7 +43020,6 @@ dir = 5 }, /obj/structure/table/glass, -/obj/item/reagent_containers/food/drinks/mug, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitebluecorner" @@ -47579,7 +47595,7 @@ /area/station/science/robotics/showroom) "czO" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -52287,23 +52303,6 @@ icon_state = "whiteblue" }, /area/station/medical/paramedic) -"cOe" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "darkblue" - }, -/area/station/medical/storage/secondary) "cOg" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -52329,7 +52328,7 @@ "cOp" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/bananalamp, -/obj/item/reagent_containers/food/snacks/pie, +/obj/item/food/snacks/pie, /obj/machinery/power/apc{ dir = 8; name = "west bump"; @@ -64367,11 +64366,6 @@ name = "east bump"; pixel_x = 28 }, -/obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/reagent_containers/food/drinks/cans/cola{ - pixel_y = 7; - pixel_x = -7 - }, /turf/simulated/floor/plasteel{ icon_state = "redyellowfull" }, @@ -64861,7 +64855,7 @@ /obj/structure/table/reinforced, /obj/item/stack/packageWrap, /obj/item/hand_labeler, -/obj/item/reagent_containers/food/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee, /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) @@ -65065,7 +65059,7 @@ /obj/item/clothing/gloves/color/black, /obj/item/clothing/suit/storage/hazardvest, /obj/item/clothing/mask/breath, -/obj/item/reagent_containers/food/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee, /obj/machinery/newscaster{ dir = 8; name = "east bump"; @@ -65587,7 +65581,7 @@ /obj/structure/table/reinforced, /obj/item/storage/toolbox/emergency, /obj/item/wrench, -/obj/item/reagent_containers/food/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee, /turf/simulated/floor/plasteel/dark, /area/station/maintenance/apmaint) "dTg" = ( @@ -65856,7 +65850,7 @@ /area/station/service/chapel/office) "dUf" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/holywater, +/obj/item/reagent_containers/drinks/bottle/holywater, /turf/simulated/floor/carpet, /area/station/service/chapel/office) "dUg" = ( @@ -66081,8 +66075,8 @@ /area/station/service/chapel/office) "dUK" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/poppy/geranium, -/obj/item/reagent_containers/food/snacks/grown/poppy/lily{ +/obj/item/food/snacks/grown/poppy/geranium, +/obj/item/food/snacks/grown/poppy/lily{ pixel_x = 4; pixel_y = 5 }, @@ -68534,11 +68528,6 @@ /area/station/science/robotics/showroom) "eNp" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/mug/med, -/obj/item/reagent_containers/food/drinks/coffee{ - pixel_x = 8; - pixel_y = 10 - }, /obj/machinery/alarm{ name = "north bump"; pixel_y = 24 @@ -68590,7 +68579,6 @@ pixel_y = 1; pixel_x = 4 }, -/obj/item/reagent_containers/food/drinks/coffee, /obj/item/reagent_containers/glass/bottle/morphine{ pixel_y = 7; pixel_x = -5 @@ -69280,7 +69268,7 @@ "fmg" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/badminbrew, /turf/simulated/floor/plasteel{ icon_state = "redyellowfull" }, @@ -74983,7 +74971,7 @@ /area/station/service/bar) "iUZ" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/peppermill, /obj/machinery/door/firedoor, /obj/machinery/door/window, /obj/effect/mapping_helpers/airlock/windoor/autoname, @@ -77083,7 +77071,7 @@ /turf/simulated/floor/plasteel/white, /area/station/medical/medbay) "knI" = ( -/obj/item/reagent_containers/food/snacks/donut/jelly/cherryjelly, +/obj/item/food/snacks/donut/jelly/cherryjelly, /obj/structure/table/reinforced, /turf/simulated/floor/plasteel{ dir = 9; @@ -77774,7 +77762,7 @@ /area/station/science/toxins/mixing) "kME" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/mug/sci, +/obj/item/reagent_containers/drinks/mug/sci, /turf/simulated/floor/plasteel/white, /area/station/science/break_room) "kNa" = ( @@ -80636,10 +80624,6 @@ }, /turf/simulated/floor/engine/n2, /area/station/engineering/atmos) -"mIl" = ( -/obj/structure/grille, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) "mJw" = ( /obj/machinery/light{ dir = 8 @@ -81809,8 +81793,8 @@ /obj/machinery/door/window, /obj/effect/mapping_helpers/airlock/windoor/autoname, /obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen, -/obj/item/reagent_containers/food/drinks/britcup, -/obj/item/reagent_containers/food/condiment/saltshaker, +/obj/item/reagent_containers/drinks/britcup, +/obj/item/reagent_containers/condiment/saltshaker, /obj/machinery/door/firedoor, /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel{ @@ -81983,6 +81967,16 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/service/chapel/office) +"nqK" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/medical/storage) "nsl" = ( /obj/machinery/clonepod/biomass, /turf/simulated/floor/plasteel{ @@ -82892,7 +82886,7 @@ known_by = list("captain") }, /obj/item/gun/projectile/revolver/russian, -/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, +/obj/item/reagent_containers/drinks/bottle/absinthe/premium, /obj/item/lighter/zippo/nt_rep, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/toy/figure/crew/captain, @@ -86239,7 +86233,7 @@ }, /obj/item/clothing/head/bearpelt, /obj/item/folder/documents, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, /obj/item/lighter/zippo/nt_rep, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/stack/spacecash/c1000, @@ -89241,7 +89235,7 @@ /obj/structure/table/reinforced, /obj/item/folder, /obj/item/pen, -/obj/item/reagent_containers/food/snacks/grown/apple, +/obj/item/food/snacks/grown/apple, /obj/machinery/door/window/classic/normal{ dir = 8 }, @@ -92168,6 +92162,10 @@ }, /turf/simulated/floor/plasteel/white, /area/station/medical/sleeper) +"tCf" = ( +/obj/effect/spawner/window/reinforced/grilled, +/turf/simulated/floor/plating, +/area/station/medical/virology) "tDw" = ( /turf/simulated/wall, /area/station/medical/reception) @@ -92455,6 +92453,7 @@ /area/station/medical/medbay) "tKX" = ( /obj/effect/spawner/window/reinforced/grilled, +/obj/structure/cable, /turf/simulated/floor/plating, /area/station/medical/virology) "tLO" = ( @@ -92701,11 +92700,11 @@ /area/station/hallway/secondary/exit) "tSt" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5; pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 5 }, /turf/simulated/floor/plasteel/white, @@ -93028,7 +93027,7 @@ "uaL" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, -/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, /turf/simulated/floor/plasteel{ icon_state = "redyellowfull" }, @@ -94402,11 +94401,6 @@ /area/station/maintenance/fore2) "uTD" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/drinks/coffee{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/reagent_containers/food/drinks/dry_ramen, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitebluecorner" @@ -94534,6 +94528,23 @@ /obj/item/target/syndicate, /turf/simulated/floor/plating, /area/station/security/range) +"uWm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkblue" + }, +/area/station/medical/storage/secondary) "uWt" = ( /obj/machinery/light{ dir = 8 @@ -95040,9 +95051,9 @@ /obj/item/seeds/lime, /obj/item/seeds/watermelon, /obj/item/seeds/grape, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/watermelon, -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/watermelon, +/obj/item/food/snacks/grown/banana, /obj/machinery/door/window/classic/reversed{ dir = 8 }, @@ -95163,11 +95174,6 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/supply/miningdock) -"vuL" = ( -/obj/effect/spawner/window/reinforced/grilled, -/obj/structure/cable, -/turf/simulated/floor/plating, -/area/station/medical/virology) "vuX" = ( /obj/machinery/alarm{ dir = 4; @@ -96453,16 +96459,6 @@ icon_state = "whitebluecorner" }, /area/station/medical/storage) -"wjh" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull" - }, -/area/station/medical/storage) "wjm" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ @@ -97926,10 +97922,6 @@ /obj/effect/decal/cleanable/fungus, /turf/simulated/wall, /area/station/maintenance/aft) -"xcn" = ( -/obj/effect/landmark/damageturf, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) "xcs" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -98902,15 +98894,6 @@ icon_state = "neutral" }, /area/station/maintenance/fsmaint) -"xGL" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance/eight, -/obj/effect/landmark/damageturf, -/turf/simulated/floor/plasteel/airless{ - dir = 10; - icon_state = "darkblue" - }, -/area/space/nearstation) "xGY" = ( /obj/structure/cable{ d1 = 1; @@ -132768,7 +132751,7 @@ azd aAp awX abj -xGL +aRu ghZ aFq aVK @@ -133024,7 +133007,7 @@ aCo azd aAq awX -xcn +aPT abj aVK aGp @@ -145952,7 +145935,7 @@ lGs rYe jin lky -cOe +uWm usf dmt hLd @@ -146465,7 +146448,7 @@ cUM bSe cMz eCn -wjh +nqK kQG ewa htc @@ -148303,9 +148286,9 @@ cBf wdL dGw dGw -tKX -tKX -tKX +tCf +tCf +tCf dGw dGw hGZ @@ -150618,7 +150601,7 @@ dFG dFG vOB kce -vuL +tKX dFG dFG abj @@ -151534,7 +151517,7 @@ abj aaa abj abj -mIl +btJ aaa ygH tFK @@ -151791,7 +151774,7 @@ aaa aaa aaa aaa -mIl +btJ abj ygH aJx @@ -152048,7 +152031,7 @@ aaa aaa aaa aaa -mIl +btJ aaa ygH uUu @@ -154926,7 +154909,7 @@ nlB aaa abj abj -mIl +btJ abj abj iuY @@ -155440,7 +155423,7 @@ aaa aaa aaa abj -mIl +btJ abj abj iuY @@ -155955,7 +155938,7 @@ aaa aaa abj abj -mIl +btJ abj iuY rEQ @@ -157988,10 +157971,10 @@ aaa aaa abj abj -mIl -mIl -mIl -mIl +btJ +btJ +btJ +btJ abj abj fhF @@ -158250,7 +158233,7 @@ aaa abj abj aaa -mIl +btJ fhF fhF fhF @@ -158260,7 +158243,7 @@ fhF fhF abj abj -mIl +btJ aaa aaa aaa @@ -158504,10 +158487,10 @@ aaa abj abj abj -mIl -mIl -mIl -mIl +btJ +btJ +btJ +btJ fhF fhF fhF @@ -158517,7 +158500,7 @@ fhF fhF abj aaa -mIl +btJ aaa aaa aaa @@ -158774,7 +158757,7 @@ fhF fhF abj aaa -mIl +btJ aaa aaa aaa @@ -159021,7 +159004,7 @@ aaa aaa aaa aaa -mIl +btJ fhF fhF fhF @@ -159029,9 +159012,9 @@ fhF fhF fhF fhF -mIl +btJ abj -mIl +btJ aaa aaa aaa @@ -159272,13 +159255,13 @@ aaa aaa aaa aaa -mIl +btJ aaa aaa aaa aaa aaa -mIl +btJ fhF fhF fhF @@ -159286,7 +159269,7 @@ fhF fhF fhF fhF -mIl +btJ abj abj aaa @@ -159529,20 +159512,20 @@ aaa aaa aaa aaa -mIl +btJ aaa aaa aaa aaa aaa bPS -mIl -mIl +btJ +btJ abj bPS abj -mIl -mIl +btJ +btJ bPS aaa aaa @@ -159786,7 +159769,7 @@ aaa aaa aaa aaa -mIl +btJ aaa aaa aaa @@ -160051,11 +160034,11 @@ aaa aaa aaa aaa -mIl -mIl -mIl -mIl -mIl +btJ +btJ +btJ +btJ +btJ aaa aaa aaa diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 2a2ad0b01e0b..923970aa2549 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -237,7 +237,7 @@ /area/station/science/toxins/mixing) "adc" = ( /obj/structure/closet/secure_closet/clown, -/obj/item/reagent_containers/food/snacks/pie, +/obj/item/food/snacks/pie, /turf/simulated/floor/wood, /area/station/service/clown) "adi" = ( @@ -540,7 +540,7 @@ /area/shuttle/pod_3) "afT" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = 5; pixel_y = 12 }, @@ -667,7 +667,7 @@ name = "south bump"; pixel_y = -24 }, -/obj/item/reagent_containers/food/drinks/flask/detflask, +/obj/item/reagent_containers/drinks/flask/detflask, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -754,20 +754,20 @@ /area/station/public/fitness) "aii" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/sillycup{ +/obj/item/reagent_containers/drinks/sillycup{ pixel_x = -5; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/sillycup, -/obj/item/reagent_containers/food/drinks/sillycup{ +/obj/item/reagent_containers/drinks/sillycup, +/obj/item/reagent_containers/drinks/sillycup{ pixel_x = 5; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/sillycup{ +/obj/item/reagent_containers/drinks/sillycup{ pixel_x = 5; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/sillycup{ +/obj/item/reagent_containers/drinks/sillycup{ pixel_x = 5; pixel_y = 3 }, @@ -4201,7 +4201,7 @@ /area/station/maintenance/fore) "axH" = ( /obj/structure/flora/ausbushes/lavendergrass, -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /turf/simulated/floor/grass/no_creep, /area/station/medical/virology) "axM" = ( @@ -9968,12 +9968,10 @@ /area/station/security/prisonlockers) "aRy" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/mint, /obj/item/kitchen/rollingpin, /obj/item/reagent_containers/glass/beaker{ pixel_x = 5 }, -/obj/item/reagent_containers/food/condiment/enzyme, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -10062,7 +10060,7 @@ /obj/item/reagent_containers/glass/beaker/waterbottle{ pixel_x = -5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 5 }, /obj/structure/window/reinforced{ @@ -10725,7 +10723,7 @@ /area/station/maintenance/fpmaint) "aUa" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 5 }, /obj/item/reagent_containers/glass/beaker/waterbottle{ @@ -13900,24 +13898,24 @@ /area/station/hallway/primary/central) "bcO" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -4; pixel_y = 6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 4; pixel_y = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5; pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 6; pixel_y = -1 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /obj/machinery/newscaster{ name = "north bump"; pixel_y = 28 @@ -18147,7 +18145,7 @@ pixel_y = -24 }, /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/flask/gold, +/obj/item/reagent_containers/drinks/flask/gold, /obj/item/razor{ pixel_x = -4; pixel_y = 2 @@ -18315,7 +18313,7 @@ }, /obj/item/clothing/head/bearpelt, /obj/item/folder/documents, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, /obj/item/lighter/zippo/nt_rep, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/stack/spacecash/c1000, @@ -20415,7 +20413,7 @@ /area/station/hallway/primary/port) "btq" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/chips, +/obj/item/food/snacks/chips, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -22481,7 +22479,7 @@ known_by = list("captain") }, /obj/item/gun/projectile/revolver/russian, -/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, +/obj/item/reagent_containers/drinks/bottle/absinthe/premium, /obj/item/lighter/zippo/nt_rep, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/toy/figure/crew/captain, @@ -23299,14 +23297,6 @@ icon_state = "darkbluecorners" }, /area/station/turret_protected/aisat/interior) -"bAB" = ( -/obj/structure/table/wood, -/obj/machinery/bottler, -/obj/structure/sign/poster/random{ - pixel_y = -32 - }, -/turf/simulated/floor/wood, -/area/station/service/bar) "bAC" = ( /turf/simulated/floor/plating/airless, /area/station/engineering/solar/auxport) @@ -23503,10 +23493,6 @@ /area/station/turret_protected/aisat/interior) "bBk" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/watermelon, -/obj/item/reagent_containers/food/snacks/grown/citrus/orange, -/obj/item/reagent_containers/food/snacks/grown/grapes, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "green" @@ -24632,7 +24618,7 @@ /area/station/command/office/captain) "bEl" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -25396,9 +25382,6 @@ pixel_y = -1 }, /obj/structure/table, -/obj/item/reagent_containers/food/drinks/shaker{ - pixel_x = -6 - }, /obj/machinery/reagentgrinder{ pixel_x = 6; pixel_y = 6 @@ -27654,7 +27637,7 @@ /area/station/command/teleporter) "bPB" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/ale, +/obj/item/reagent_containers/drinks/cans/ale, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) "bPE" = ( @@ -27692,9 +27675,9 @@ /area/station/public/vacant_office) "bPS" = ( /obj/structure/closet/secure_closet/blueshield, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood, /area/station/command/office/blueshield) "bPT" = ( @@ -28885,7 +28868,7 @@ pixel_x = 5; pixel_y = -1 }, -/obj/item/reagent_containers/food/drinks/mug{ +/obj/item/reagent_containers/drinks/mug{ pixel_x = -4; pixel_y = 4 }, @@ -28997,13 +28980,6 @@ "bTY" = ( /turf/simulated/floor/plating, /area/station/maintenance/port) -"bTZ" = ( -/obj/structure/table, -/obj/item/storage/bag/tray, -/turf/simulated/floor/plasteel{ - icon_state = "cafeteria" - }, -/area/station/service/kitchen) "bUi" = ( /obj/machinery/gibber, /turf/simulated/floor/plasteel{ @@ -29020,8 +28996,6 @@ /area/station/service/hydroponics) "bUl" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/condiment/enzyme, -/obj/item/reagent_containers/food/condiment/enzyme, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -29927,10 +29901,6 @@ "bXb" = ( /obj/machinery/plantgenes, /obj/effect/turf_decal/stripes/line, -/obj/structure/extinguisher_cabinet{ - name = "north bump"; - pixel_y = 30 - }, /turf/simulated/floor/plasteel, /area/station/service/hydroponics) "bXi" = ( @@ -31755,6 +31725,14 @@ }, /turf/simulated/floor/plasteel, /area/station/science/robotics) +"cdj" = ( +/obj/structure/table/wood, +/obj/machinery/bottler, +/obj/structure/sign/poster/random{ + pixel_y = -32 + }, +/turf/simulated/floor/wood, +/area/station/service/bar) "cdk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -31879,7 +31857,7 @@ /area/station/maintenance/apmaint) "cdJ" = ( /obj/structure/lattice, -/obj/item/reagent_containers/food/drinks/bottle/goldschlager, +/obj/item/reagent_containers/drinks/bottle/goldschlager, /turf/space, /area/space/nearstation) "cdM" = ( @@ -32225,7 +32203,7 @@ "ceW" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/gin, +/obj/item/reagent_containers/drinks/bottle/gin, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) "ceY" = ( @@ -34096,7 +34074,6 @@ }, /area/station/service/chapel/office) "cln" = ( -/obj/item/reagent_containers/food/snacks/monkeycube, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, /turf/simulated/floor/plasteel, /area/station/maintenance/asmaint) @@ -34116,6 +34093,12 @@ icon_state = "white" }, /area/station/science/rnd) +"clv" = ( +/obj/item/food/snacks/monkeycube, +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/turf/simulated/floor/plating, +/area/station/maintenance/aft2) "cly" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/visible{ @@ -35218,7 +35201,7 @@ }, /obj/structure/flora/ausbushes/sparsegrass, /obj/structure/flora/ausbushes/ywflowers, -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, @@ -35945,7 +35928,6 @@ /area/station/maintenance/starboard2) "csW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/item/reagent_containers/food/snacks/monkeycube, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "csX" = ( @@ -38488,11 +38470,11 @@ dir = 1 }, /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, /turf/simulated/floor/carpet, /area/station/service/chapel) "cCu" = ( @@ -39011,7 +38993,7 @@ pixel_y = 2 }, /obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) "cEk" = ( @@ -39698,7 +39680,7 @@ dir = 4 }, /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, @@ -40045,10 +40027,10 @@ /area/station/science/research) "cHO" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3 }, /turf/simulated/floor/plating, @@ -40513,7 +40495,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, /turf/simulated/floor/plasteel{ icon_state = "cult" }, @@ -40885,7 +40867,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/rack, /obj/item/reagent_containers/iv_bag/blood/random, -/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -41355,7 +41337,7 @@ /area/station/maintenance/portsolar) "cMF" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/holywater{ +/obj/item/reagent_containers/drinks/bottle/holywater{ pixel_x = -2; pixel_y = 2 }, @@ -41382,8 +41364,8 @@ /area/station/medical/break_room) "cMK" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/enzyme{ layer = 5 }, /turf/simulated/floor/plating, @@ -41400,7 +41382,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/item/reagent_containers/food/drinks/bottle/tequila, +/obj/item/reagent_containers/drinks/bottle/tequila, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "cMP" = ( @@ -42992,11 +42974,11 @@ /area/station/maintenance/apmaint) "cSR" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, @@ -43162,7 +43144,7 @@ /area/station/security/interrogation) "cTz" = ( /obj/structure/lattice/catwalk, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ pixel_x = -7; pixel_y = 2 }, @@ -47371,6 +47353,18 @@ icon_state = "red" }, /area/station/security/permabrig) +"dQI" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel, +/area/station/science/research) "dRt" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, @@ -50221,7 +50215,6 @@ /turf/simulated/floor/plating, /area/station/security/brig) "fbQ" = ( -/obj/item/reagent_containers/food/snacks/monkeycube, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, @@ -51482,7 +51475,7 @@ /area/station/engineering/control) "fCn" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /obj/item/reagent_containers/glass/beaker/waterbottle{ @@ -55711,20 +55704,20 @@ /area/station/maintenance/starboard2) "htP" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/milk{ +/obj/item/reagent_containers/condiment/milk{ pixel_x = 6; pixel_y = 8 }, -/obj/item/reagent_containers/food/condiment/soymilk{ +/obj/item/reagent_containers/condiment/soymilk{ pixel_x = -6; pixel_y = 8 }, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/drinks/bottle/cream{ +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/drinks/bottle/cream{ pixel_x = 6; pixel_y = -2 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = -5; pixel_y = -2 }, @@ -55892,6 +55885,10 @@ }, /turf/simulated/floor/plasteel/dark, /area/station/telecomms/chamber) +"hxz" = ( +/obj/structure/grille/broken, +/turf/simulated/floor/plating/airless, +/area/space/nearstation) "hxD" = ( /obj/structure/window/reinforced{ dir = 1 @@ -56604,11 +56601,11 @@ /area/station/turret_protected/ai) "hLT" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/harebell, -/obj/item/reagent_containers/food/snacks/grown/harebell, -/obj/item/reagent_containers/food/snacks/grown/harebell, -/obj/item/reagent_containers/food/snacks/grown/harebell, -/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, /turf/simulated/floor/plasteel{ icon_state = "darkgrey" }, @@ -58734,9 +58731,13 @@ icon_state = "whitehall" }, /area/station/science/research) +"iFx" = ( +/obj/machinery/light, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard2) "iFA" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/h_chocolate, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -63589,11 +63590,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/aft2) -"kQv" = ( -/obj/structure/grille/broken, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) "kQx" = ( /obj/item/kirbyplants/plant11, /turf/simulated/floor/wood, @@ -64909,15 +64905,15 @@ "lpp" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced, -/obj/item/reagent_containers/food/snacks/muffin{ +/obj/item/food/snacks/muffin{ pixel_x = -4; pixel_y = 8 }, -/obj/item/reagent_containers/food/snacks/carrotcakeslice{ +/obj/item/food/snacks/carrotcakeslice{ pixel_x = 8; pixel_y = -2 }, -/obj/item/reagent_containers/food/snacks/poppypretzel{ +/obj/item/food/snacks/poppypretzel{ pixel_x = -8; pixel_y = -3 }, @@ -64999,11 +64995,11 @@ /area/station/command/office/captain) "lrA" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8; pixel_y = 1 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 11 }, @@ -67360,6 +67356,22 @@ icon_state = "caution" }, /area/station/engineering/controlroom) +"mor" = ( +/obj/structure/table/reinforced, +/obj/item/food/snacks/pie, +/obj/machinery/door/window/classic/normal{ + name = "Kitchen" + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 2; + id_tag = "kitchen_counter"; + name = "Kitchen Counter Shutters" + }, +/obj/effect/mapping_helpers/airlock/windoor/access/all/service/kitchen, +/turf/simulated/wall, +/area/station/service/kitchen) "moE" = ( /obj/structure/chair/comfy/beige{ dir = 8 @@ -67957,6 +67969,30 @@ }, /turf/simulated/floor/plating, /area/station/command/office/rd) +"mEd" = ( +/obj/structure/disposalpipe/sortjunction{ + dir = 4; + name = "Kitchen Junction"; + sort_type_txt = "20" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/wood, +/area/station/service/bar) "mEe" = ( /obj/structure/chair/office/dark{ dir = 8 @@ -68849,11 +68885,11 @@ /area/shuttle/arrival/station) "mXE" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = 5; pixel_y = 12 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = -3; pixel_y = 9 }, @@ -69298,7 +69334,7 @@ /area/station/public/construction) "nfj" = ( /obj/structure/closet, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ desc = "Takes you to a whole new level of thinking."; name = "Meta-Cider" }, @@ -69918,12 +69954,6 @@ /area/station/engineering/control) "nsB" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -3 - }, -/obj/item/reagent_containers/food/condiment/peppermill{ - pixel_x = 3 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -72000,12 +72030,6 @@ /area/station/public/locker) "orV" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -3 - }, -/obj/item/reagent_containers/food/condiment/peppermill{ - pixel_x = 3 - }, /obj/machinery/door/window/classic/reversed{ name = "Kitchen" }, @@ -73343,6 +73367,21 @@ /obj/effect/spawner/random_spawners/fungus_maybe, /turf/simulated/wall, /area/station/maintenance/starboard) +"oXP" = ( +/obj/machinery/reagentgrinder{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/machinery/camera{ + c_tag = "Bar - Counter"; + dir = 1 + }, +/obj/structure/table, +/obj/item/storage/bag/tray, +/turf/simulated/floor/plasteel{ + icon_state = "cafeteria" + }, +/area/station/service/kitchen) "oXS" = ( /obj/structure/chair/office/light{ dir = 4 @@ -73388,10 +73427,6 @@ /obj/effect/turf_decal/woodsiding{ dir = 8 }, -/obj/structure/extinguisher_cabinet{ - name = "south bump"; - pixel_y = -30 - }, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -74172,9 +74207,6 @@ /area/station/aisat) "prI" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" @@ -75866,7 +75898,6 @@ }, /area/station/turret_protected/ai_upload) "qaW" = ( -/obj/item/reagent_containers/food/snacks/monkeycube, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -76859,21 +76890,21 @@ "qvp" = ( /obj/structure/closet/crate, /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/onion, -/obj/item/reagent_containers/food/snacks/grown/onion, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/onion, +/obj/item/food/snacks/grown/onion, /obj/item/storage/box/donkpockets, /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 1 }, /obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/rice, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, /obj/machinery/light{ dir = 1 }, @@ -79112,7 +79143,7 @@ /area/station/engineering/engine/supermatter) "rwj" = ( /obj/structure/safe/floor, -/obj/item/reagent_containers/food/snacks/fortunecookie, +/obj/item/food/snacks/fortunecookie, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "rwk" = ( @@ -80366,6 +80397,27 @@ icon_state = "cafeteria" }, /area/station/science/break_room) +"rXW" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 3 + }, +/obj/machinery/door/window/classic/reversed{ + name = "Kitchen" + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 2; + id_tag = "kitchen_counter"; + name = "Kitchen Counter Shutters" + }, +/obj/effect/mapping_helpers/airlock/windoor/access/all/service/kitchen, +/turf/simulated/wall, +/area/station/service/kitchen) "rYd" = ( /obj/machinery/chem_dispenser, /turf/simulated/floor/plasteel{ @@ -80545,18 +80597,6 @@ /obj/effect/spawner/random_spawners/fungus_maybe, /turf/simulated/wall/r_wall, /area/station/public/mrchangs) -"sdj" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel, -/area/station/science/research) "sdJ" = ( /obj/machinery/door/airlock/freezer, /obj/effect/mapping_helpers/airlock/access/all/service/kitchen, @@ -82376,12 +82416,6 @@ /area/station/maintenance/engimaint) "sTF" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/peppermill{ - pixel_x = 3 - }, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -3 - }, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/wood, /area/station/service/bar) @@ -82465,6 +82499,12 @@ icon_state = "dark" }, /area/station/medical/morgue) +"sWd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/wall, +/area/station/service/kitchen) "sWL" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 1 @@ -84548,14 +84588,6 @@ icon_state = "whitepurple" }, /area/station/science/robotics) -"tXA" = ( -/obj/machinery/alarm{ - dir = 1; - name = "south bump"; - pixel_y = -24 - }, -/turf/simulated/floor/wood, -/area/station/service/bar) "tYb" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -84609,12 +84641,12 @@ /area/station/security/permabrig) "tYV" = ( /obj/structure/rack, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ pixel_x = -7; pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/bottle/vodka, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/cans/beer, /obj/machinery/economy/vending/wallmed{ name = "Emergency NanoMed"; pixel_y = 28 @@ -87688,30 +87720,6 @@ icon_state = "grimy" }, /area/station/security/detective) -"voT" = ( -/obj/structure/sink{ - pixel_y = 22 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard2) -"voV" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/pie, -/obj/machinery/door/window/classic/normal{ - name = "Kitchen" - }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 2; - id_tag = "kitchen_counter"; - name = "Kitchen Counter Shutters" - }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/service/kitchen, -/turf/simulated/floor/plasteel{ - icon_state = "cafeteria" - }, -/area/station/service/kitchen) "vpj" = ( /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 4; @@ -88081,10 +88089,10 @@ /area/station/engineering/atmos) "vwA" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/chips{ +/obj/item/food/snacks/chips{ pixel_x = 8 }, -/obj/item/reagent_containers/food/drinks/cans/thirteenloko{ +/obj/item/reagent_containers/drinks/cans/thirteenloko{ pixel_x = -6; pixel_y = 6 }, @@ -88738,11 +88746,34 @@ icon_state = "dark" }, /area/station/engineering/atmos) +"vQf" = ( +/obj/structure/table, +/obj/item/reagent_containers/drinks/drinkingglass{ + pixel_x = 4; + pixel_y = 5 + }, +/obj/item/reagent_containers/drinks/drinkingglass{ + pixel_x = 6; + pixel_y = -1 + }, +/obj/item/reagent_containers/drinks/drinkingglass{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/syringe, +/obj/item/reagent_containers/syringe, +/obj/machinery/economy/vending/wallmed{ + name = "Emergency NanoMed"; + pixel_y = 28 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/starboard2) "vQo" = ( /obj/item/stack/sheet/cardboard{ amount = 2 }, -/obj/item/reagent_containers/food/snacks/monkeycube, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/blood/drip, /turf/simulated/floor/plasteel, @@ -88813,15 +88844,15 @@ "vSE" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced, -/obj/item/reagent_containers/food/drinks/tea{ +/obj/item/reagent_containers/drinks/tea{ pixel_x = 7; pixel_y = 1 }, -/obj/item/reagent_containers/food/drinks/tea{ +/obj/item/reagent_containers/drinks/tea{ pixel_x = -5; pixel_y = 9 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = -5 }, /turf/simulated/floor/plasteel/dark, @@ -89729,7 +89760,7 @@ /area/station/security/prisonlockers) "wnD" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 1 @@ -91703,6 +91734,21 @@ icon_state = "darkred" }, /area/station/security/execution) +"xhN" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/classic/reversed{ + name = "Kitchen" + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 2; + id_tag = "kitchen_counter"; + name = "Kitchen Counter Shutters" + }, +/obj/effect/mapping_helpers/airlock/windoor/access/all/service/kitchen, +/turf/simulated/wall, +/area/station/service/kitchen) "xhX" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green{ @@ -92760,29 +92806,6 @@ icon_state = "neutral" }, /area/station/hallway/primary/central) -"xFW" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/peppermill{ - pixel_x = 3 - }, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = -3 - }, -/obj/machinery/door/window/classic/reversed{ - name = "Kitchen" - }, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 2; - id_tag = "kitchen_counter"; - name = "Kitchen Counter Shutters" - }, -/obj/effect/mapping_helpers/airlock/windoor/access/all/service/kitchen, -/turf/simulated/floor/plasteel{ - icon_state = "cafeteria" - }, -/area/station/service/kitchen) "xGg" = ( /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment{ @@ -92876,11 +92899,11 @@ /area/station/engineering/atmos) "xIx" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8; pixel_y = 1 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 11 }, @@ -92958,30 +92981,6 @@ icon_state = "neutralcorner" }, /area/station/supply/lobby) -"xLw" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 4; - name = "Kitchen Junction"; - sort_type_txt = "20" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/wood, -/area/station/service/bar) "xLA" = ( /obj/machinery/hydroponics/constructable, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -117858,7 +117857,7 @@ aaa aaa aaa aaa -kQv +hxz uNk uNk uNk @@ -122350,7 +122349,7 @@ tmz qKY lYB avs -cUL +clv lCO coG ech @@ -127700,9 +127699,9 @@ bEv sTF mBe bHO -voV +jQx nic -bTZ +oXP dnI bVs nic @@ -127957,7 +127956,7 @@ bEv omK udl bHO -xFW +orV nic bQJ aRy @@ -128726,7 +128725,7 @@ byM bEA bvz bEv -xLw +mEd uhV lBQ fjy @@ -129498,8 +129497,8 @@ sqp sqp sqp fsh -tXA -bQI +bEv +rXW soT tRb fnS @@ -129756,10 +129755,10 @@ rDd rDd sAP pah -bQI +mor bQI sdJ -bQI +sWd bQI bQI fWa @@ -130013,7 +130012,7 @@ uft bHP tZl ncl -bQI +xhN sgk qlh bQQ @@ -130543,7 +130542,7 @@ caS bZv bZv clC -ipj +iFx cte lXi xmO @@ -131333,7 +131332,7 @@ cQg rOD cDa mra -sdj +dQI vCB lHQ eIa @@ -131549,7 +131548,7 @@ bsp buI bwO pjb -bAB +cdj aoG aoG aoG @@ -132605,7 +132604,7 @@ cYB gSO csV cte -voT +vQf cqi fNl ool diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm index 1295070c312c..3433ee2ffdd7 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm @@ -979,7 +979,7 @@ /turf/simulated/floor/mineral/bananium/lubed, /area/ruin/powered/clownplanet) "bL" = ( -/obj/item/reagent_containers/food/drinks/trophy/gold_cup, +/obj/item/reagent_containers/drinks/trophy/gold_cup, /obj/structure/table/glass, /turf/simulated/floor/carpet, /area/ruin/powered/clownplanet) diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm index f1b2e315b9ee..3ee31c383d40 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm @@ -36,7 +36,7 @@ /turf/simulated/floor/plating, /area/ruin/powered/snow_biodome) "ah" = ( -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/plating, /area/ruin/powered/snow_biodome) "ai" = ( @@ -102,7 +102,7 @@ /area/ruin/powered/snow_cabin) "ax" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/beans, +/obj/item/food/snacks/beans, /turf/simulated/floor/wood, /area/ruin/powered/snow_cabin) "ay" = ( @@ -141,7 +141,7 @@ /area/ruin/powered/snow_cabin) "aF" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/h_chocolate, +/obj/item/reagent_containers/drinks/h_chocolate, /turf/simulated/floor/wood, /area/ruin/powered/snow_cabin) "aG" = ( diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_althland_excavation.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_althland_excavation.dmm index 0104330f6cee..df6cb8ff2e84 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_althland_excavation.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_althland_excavation.dmm @@ -673,7 +673,7 @@ /area/lavaland/surface/outdoors) "ie" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/badrecipe, +/obj/item/food/snacks/badrecipe, /turf/simulated/floor/plating/airless, /area/ruin/unpowered/althland_excavation) "iv" = ( @@ -959,7 +959,7 @@ "wi" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/drinks/oilcan, +/obj/item/reagent_containers/drinks/oilcan, /obj/machinery/constructable_frame, /turf/simulated/floor/pod/light{ oxygen = 0; @@ -1101,8 +1101,8 @@ "Cs" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table_frame, -/obj/item/reagent_containers/food/snacks/badrecipe, -/obj/item/reagent_containers/food/snacks/badrecipe{ +/obj/item/food/snacks/badrecipe, +/obj/item/food/snacks/badrecipe{ pixel_y = 14; pixel_x = 14 }, @@ -1324,7 +1324,7 @@ /area/lavaland/surface/outdoors) "OX" = ( /obj/structure/table_frame, -/obj/item/reagent_containers/food/snacks/badrecipe, +/obj/item/food/snacks/badrecipe, /turf/simulated/floor/plating/airless, /area/ruin/unpowered/althland_excavation) "Pe" = ( diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_althland_facility.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_althland_facility.dmm index bb91ea362faa..671f1773b33f 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_althland_facility.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_althland_facility.dmm @@ -1435,11 +1435,11 @@ /area/ruin/unpowered/althland_processing) "Jw" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 8; pixel_y = 10 }, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ temperature = 300; diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm index 899178dd7177..4cd633eeba32 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm @@ -60,7 +60,7 @@ /obj/item/seeds/reishi, /obj/item/seeds/plump, /obj/item/seeds/plump, -/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom, +/obj/item/food/snacks/grown/mushroom/glowshroom, /turf/simulated/floor/plating/asteroid/basalt, /area/ruin/powered) "n" = ( diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm index 4f64ee076493..c3df51e78744 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm @@ -56,7 +56,7 @@ }, /area/ruin/unpowered/misc_lavaruin) "j" = ( -/obj/item/reagent_containers/food/snacks/mushroompizzaslice, +/obj/item/food/snacks/mushroompizzaslice, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating{ nitrogen = 23; @@ -243,7 +243,7 @@ /area/ruin/unpowered/misc_lavaruin) "D" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/margheritapizzaslice, +/obj/item/food/snacks/margheritapizzaslice, /obj/item/trash/plate, /turf/simulated/floor/wood{ nitrogen = 23; @@ -253,7 +253,7 @@ /area/ruin/unpowered/misc_lavaruin) "E" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/meatpizzaslice, +/obj/item/food/snacks/meatpizzaslice, /turf/simulated/floor/wood{ nitrogen = 23; oxygen = 14; @@ -262,7 +262,7 @@ /area/ruin/unpowered/misc_lavaruin) "F" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/sliceable/birthdaycake, +/obj/item/food/snacks/sliceable/birthdaycake, /turf/simulated/floor/wood{ nitrogen = 23; oxygen = 14; diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm index 8e9f26c16a23..cd84220ae6d0 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm @@ -115,7 +115,7 @@ /obj/effect/mapping_helpers/no_lava, /obj/effect/mob_spawn/human/corpse/seed_vault_diona, /obj/item/pickaxe/mini, -/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom{ +/obj/item/food/snacks/grown/mushroom/glowshroom{ pixel_x = 8; pixel_y = -8 }, diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm index 5607f14a46e8..c6a81c6289b1 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm @@ -25,7 +25,7 @@ /area/ruin/unpowered/misc_lavaruin) "f" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/citrus/orange, +/obj/item/food/snacks/grown/citrus/orange, /turf/simulated/floor/sepia{ slowdown = 10 }, diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_watcher_grave.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_watcher_grave.dmm index 94b3daeba793..d87396e356f8 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_watcher_grave.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_watcher_grave.dmm @@ -34,7 +34,7 @@ /obj/structure/stone_tile{ dir = 1 }, -/obj/item/reagent_containers/food/snacks/egg/watcher, +/obj/item/food/snacks/egg/watcher, /obj/effect/mapping_helpers/no_lava, /obj/effect/mapping_helpers/no_lava, /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/abandoned_engi_sat.dmm b/_maps/map_files/RandomRuins/SpaceRuins/abandoned_engi_sat.dmm index 40cb7ab08a1e..32ff1af7d777 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/abandoned_engi_sat.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/abandoned_engi_sat.dmm @@ -548,9 +548,9 @@ /obj/item/poster/random_contraband, /obj/item/poster/random_contraband, /obj/item/poster/random_contraband, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/bottle/vodka, -/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, /turf/simulated/floor/plasteel, /area/ruin/space/abandoned_engi_sat) "pb" = ( diff --git a/_maps/map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm b/_maps/map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm index 390bf2401ea0..d6ff668bb773 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm @@ -545,7 +545,7 @@ /area/ruin/space/unpowered) "bn" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/carrotfries, +/obj/item/food/snacks/carrotfries, /turf/simulated/floor/plasteel{ icon_state = "dark" }, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/blowntcommsat.dmm b/_maps/map_files/RandomRuins/SpaceRuins/blowntcommsat.dmm index 1ea6c1179145..6ac333f53412 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/blowntcommsat.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/blowntcommsat.dmm @@ -584,7 +584,7 @@ /turf/simulated/wall/r_wall, /area/space/nearstation) "Nw" = ( -/obj/item/reagent_containers/food/snacks/xenomeatbreadslice{ +/obj/item/food/snacks/xenomeatbreadslice{ name = "green mold bread slice" }, /turf/simulated/floor/plating/airless, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm index 0559b278a5d4..9fec92ec655c 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/deepstorage.dmm @@ -318,20 +318,20 @@ /area/ruin/space/unpowered) "aF" = ( /obj/structure/closet/cardboard, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans, /turf/simulated/floor/plasteel, /area/ruin/space/unpowered) "aG" = ( /obj/structure/closet/cardboard, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, /turf/simulated/floor/plasteel, /area/ruin/space/unpowered) "aH" = ( @@ -390,11 +390,11 @@ /area/ruin/space/unpowered) "aP" = ( /obj/structure/closet/cardboard, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, /obj/machinery/light{ dir = 4 }, @@ -649,7 +649,7 @@ /area/ruin/space/unpowered) "bD" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/beans, +/obj/item/food/snacks/beans, /turf/simulated/floor/plasteel{ icon_state = "bar" }, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm b/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm index b7b7e3bc1845..96be2fc177cf 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm @@ -261,10 +261,10 @@ /area/ruin/space/unpowered) "SX" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/beans{ +/obj/item/food/snacks/beans{ pixel_x = 10 }, -/obj/item/reagent_containers/food/snacks/beans{ +/obj/item/food/snacks/beans{ pixel_x = -5 }, /turf/simulated/floor/plasteel, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/dj.dmm b/_maps/map_files/RandomRuins/SpaceRuins/dj.dmm index 0950d75b262b..c5862def159b 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/dj.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/dj.dmm @@ -556,15 +556,15 @@ /area/ruin/space/djstation) "bw" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/bottle/vodka{ +/obj/item/reagent_containers/drinks/bottle/vodka{ pixel_x = 7; pixel_y = 10 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = 28; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "darkblue" diff --git a/_maps/map_files/RandomRuins/SpaceRuins/druglab.dmm b/_maps/map_files/RandomRuins/SpaceRuins/druglab.dmm index 4b707a0c38e7..330d27499d54 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/druglab.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/druglab.dmm @@ -51,7 +51,7 @@ /area/ruin/space/methlab) "l" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/chips, +/obj/item/food/snacks/chips, /turf/simulated/floor/plating, /area/ruin/space/methlab) "m" = ( diff --git a/_maps/map_files/RandomRuins/SpaceRuins/meatpackers.dmm b/_maps/map_files/RandomRuins/SpaceRuins/meatpackers.dmm index 89a5ba26557e..3d7f086484de 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/meatpackers.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/meatpackers.dmm @@ -95,8 +95,8 @@ /area/ruin/unpowered/BMPship/Delta) "ax" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -104,7 +104,7 @@ /area/ruin/unpowered/BMPship/Delta) "ay" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -446,8 +446,8 @@ /area/ruin/unpowered/BMPship/Delta) "bN" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/hugemushroomslice, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/hugemushroomslice, /obj/effect/turf_decal/stripes/line{ dir = 2 }, @@ -564,7 +564,7 @@ "cb" = ( /obj/structure/table, /obj/item/kitchen/knife/butcher, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/plasteel{ icon_state = "barber" }, @@ -648,7 +648,7 @@ /turf/simulated/wall/mineral/titanium, /area/ruin/unpowered/BMPship/Aft) "cp" = ( -/obj/item/reagent_containers/food/snacks/hugemushroomslice, +/obj/item/food/snacks/hugemushroomslice, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -750,7 +750,7 @@ /turf/simulated/floor/carpet, /area/ruin/unpowered/BMPship/Fore) "cH" = ( -/obj/item/reagent_containers/food/snacks/hugemushroomslice, +/obj/item/food/snacks/hugemushroomslice, /turf/simulated/floor/plasteel, /area/ruin/unpowered/BMPship/Midship) "cI" = ( @@ -792,8 +792,8 @@ /area/ruin/unpowered/BMPship/Aft) "cP" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -898,7 +898,7 @@ }, /area/ruin/unpowered/BMPship/Midship) "di" = ( -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -1944,7 +1944,7 @@ /area/ruin/unpowered/BMPship/Fore) "fS" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -2234,7 +2234,7 @@ /area/ruin/powered) "gO" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /obj/item/grenade/chem_grenade/drugs, /turf/simulated/floor/plating/airless, /area/ruin/powered) @@ -2389,7 +2389,7 @@ /turf/simulated/floor/plating/airless, /area/ruin/powered) "hn" = ( -/obj/item/reagent_containers/food/snacks/chips, +/obj/item/food/snacks/chips, /turf/simulated/floor/plating/airless, /area/ruin/powered) "ho" = ( diff --git a/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm b/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm index b6767a4fded9..a1971f408d5c 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/moonoutpost19.dmm @@ -1,14 +1,14 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aaa" = ( +"aa" = ( /turf/template_noop, /area/template_noop) -"aab" = ( +"ab" = ( /obj/structure/window/reinforced{ dir = 1 }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aac" = ( +"ac" = ( /obj/structure/sign/directions/medical{ pixel_x = -32; dir = 8 @@ -19,10 +19,10 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aad" = ( +"ad" = ( /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"aae" = ( +"ae" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 4 }, @@ -33,14 +33,14 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"aaf" = ( +"af" = ( /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall/r_wall, /area/ruin/space/moonbase19) -"aag" = ( +"ag" = ( /turf/simulated/wall/r_wall, /area/ruin/space/moonbase19) -"aah" = ( +"ah" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -51,24 +51,24 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aai" = ( +"ai" = ( /obj/structure/railing/corner, /turf/simulated/floor/plasteel{ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aaj" = ( +"aj" = ( /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/hostile/alien, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"aak" = ( +"ak" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aal" = ( +"al" = ( /obj/structure/railing/cap{ dir = 10 }, @@ -76,7 +76,7 @@ icon_state = "green" }, /area/ruin/space/moonbase19) -"aam" = ( +"am" = ( /obj/structure/window/reinforced, /obj/structure/chair{ dir = 1 @@ -87,14 +87,14 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aao" = ( +"ao" = ( /obj/structure/closet/crate, /obj/item/flashlight/flare, /obj/item/flashlight/flare, /obj/item/flashlight/flare, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aap" = ( +"ap" = ( /obj/machinery/shower{ dir = 8 }, @@ -102,7 +102,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/noslip, /area/ruin/space/moonbase19) -"aaq" = ( +"aq" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery/partial{ dir = 8 @@ -112,7 +112,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aas" = ( +"as" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal, /turf/simulated/floor/plasteel{ @@ -120,7 +120,7 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"aat" = ( +"at" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -132,7 +132,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aau" = ( +"au" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 1 }, @@ -142,12 +142,12 @@ /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"aav" = ( +"av" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid2" }, /area/ruin/space/moonbase19) -"aaw" = ( +"aw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, @@ -162,7 +162,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aax" = ( +"ax" = ( /obj/machinery/computer/arcade/recruiter{ dir = 1 }, @@ -171,7 +171,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aay" = ( +"ay" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 1 }, @@ -182,10 +182,10 @@ icon_state = "asteroid10" }, /area/ruin/space/moonbase19) -"aaA" = ( +"aA" = ( /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aaB" = ( +"aB" = ( /obj/structure/railing, /obj/item/storage/toolbox/mechanical{ pixel_x = 2; @@ -196,7 +196,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aaC" = ( +"aC" = ( /obj/structure/table/glass, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 8 @@ -205,7 +205,7 @@ icon_state = "whitehall" }, /area/ruin/space/moonbase19) -"aaD" = ( +"aD" = ( /obj/structure/toilet{ pixel_y = 8 }, @@ -215,14 +215,14 @@ icon_state = "freezerfloor" }, /area/ruin/space/moonbase19) -"aaE" = ( +"aE" = ( /obj/structure/railing{ dir = 1 }, /obj/structure/chair/sofa/bench/right, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aaF" = ( +"aF" = ( /obj/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -233,7 +233,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aaG" = ( +"aG" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal{ dir = 4 @@ -251,14 +251,14 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"aaH" = ( +"aH" = ( /obj/structure/railing/cap{ dir = 8 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aaI" = ( +"aI" = ( /obj/structure/railing{ dir = 4 }, @@ -273,7 +273,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aaJ" = ( +"aJ" = ( /obj/structure/railing, /obj/effect/turf_decal/stripes/asteroid/line, /obj/effect/turf_decal/stripes/asteroid/line{ @@ -283,34 +283,34 @@ icon_state = "asteroid12" }, /area/ruin/space/moonbase19) -"aaK" = ( +"aK" = ( /obj/structure/window/reinforced{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aaL" = ( +"aL" = ( /turf/simulated/wall, /area/ruin/space/moonbase19) -"aaM" = ( +"aM" = ( /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall, /area/ruin/space/moonbase19) -"aaN" = ( +"aN" = ( /obj/machinery/door/airlock/medical/glass{ req_access_txt = "271"; name = "Storage Room" }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aaO" = ( +"aO" = ( /obj/structure/table/glass/reinforced/titanium, /turf/simulated/floor/plasteel{ icon_state = "black" }, /area/ruin/space/moonbase19) -"aaP" = ( +"aP" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 1 }, @@ -319,7 +319,7 @@ }, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"aaQ" = ( +"aQ" = ( /obj/structure/disposaloutlet{ dir = 8 }, @@ -333,7 +333,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aaR" = ( +"aR" = ( /obj/structure/railing/cap{ dir = 1 }, @@ -346,7 +346,7 @@ dir = 6 }, /area/ruin/space/moonbase19) -"aaS" = ( +"aS" = ( /obj/structure/railing, /obj/effect/turf_decal/stripes/asteroid/line, /obj/effect/turf_decal/stripes/asteroid/line{ @@ -356,15 +356,15 @@ icon_state = "asteroid8" }, /area/ruin/space/moonbase19) -"aaU" = ( +"aU" = ( /turf/simulated/floor/mineral/titanium, /area/ruin/space/powered) -"aaV" = ( +"aV" = ( /obj/effect/decal/remains/human, /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"aaW" = ( +"aW" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -377,7 +377,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aaX" = ( +"aX" = ( /obj/structure/railing{ dir = 8 }, @@ -388,7 +388,7 @@ dir = 10 }, /area/ruin/space/moonbase19) -"aaY" = ( +"aY" = ( /obj/structure/chair/office/light{ dir = 1 }, @@ -396,7 +396,7 @@ icon_state = "black" }, /area/ruin/space/moonbase19) -"aaZ" = ( +"aZ" = ( /obj/machinery/door/poddoor/impassable{ id_tag = "awaymlock" }, @@ -406,7 +406,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aba" = ( +"ba" = ( /obj/machinery/door/airlock/multi_tile/glass{ req_access_txt = "271" }, @@ -414,14 +414,14 @@ icon_state = "freezerfloor" }, /area/ruin/space/moonbase19) -"abb" = ( +"bb" = ( /obj/machinery/door/airlock/multi_tile/glass, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"abd" = ( +"bd" = ( /obj/structure/sign/nosmoking_1{ pixel_x = 32 }, @@ -431,7 +431,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"abe" = ( +"be" = ( /obj/structure/chair/sofa/bench/left{ dir = 4 }, @@ -440,7 +440,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"abf" = ( +"bf" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -450,7 +450,7 @@ icon_state = "black" }, /area/ruin/space/moonbase19) -"abh" = ( +"bh" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plasteel{ @@ -458,39 +458,39 @@ dir = 4 }, /area/ruin/space/moonbase19) -"abi" = ( +"bi" = ( /obj/structure/railing{ dir = 1 }, /obj/structure/chair/sofa/bench/left, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"abj" = ( +"bj" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/structure/barricade/wooden/crude{ layer = 4 }, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"abk" = ( +"bk" = ( /obj/machinery/economy/vending/snack, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"abl" = ( +"bl" = ( /obj/structure/chair/office{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"abm" = ( +"bm" = ( /obj/structure/closet, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"abp" = ( +"bp" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ dir = 4 @@ -504,7 +504,7 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"abq" = ( +"bq" = ( /obj/structure/table/reinforced, /obj/item/book/manual/wiki/security_space_law, /obj/item/stack/rods, @@ -513,14 +513,14 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"abs" = ( +"bs" = ( /obj/structure/table/glass, /turf/simulated/floor/plasteel{ icon_state = "whitehall"; dir = 8 }, /area/ruin/space/moonbase19) -"abt" = ( +"bt" = ( /obj/structure/bed, /obj/item/bedsheet/medical, /obj/machinery/iv_drip, @@ -532,7 +532,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"abu" = ( +"bu" = ( /obj/structure/railing{ dir = 4 }, @@ -540,11 +540,11 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"abv" = ( +"bv" = ( /obj/structure/ore_box, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"abw" = ( +"bw" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -553,15 +553,15 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"abx" = ( +"bx" = ( /obj/machinery/door/airlock/external/glass, /turf/simulated/floor/mineral/titanium, /area/ruin/space/powered) -"abz" = ( +"bz" = ( /obj/structure/girder, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"abB" = ( +"bB" = ( /obj/machinery/light/small{ dir = 4 }, @@ -574,7 +574,7 @@ icon_state = "black" }, /area/ruin/space/moonbase19) -"abC" = ( +"bC" = ( /obj/machinery/atmospherics/unary/cryo_cell, /obj/structure/window/reinforced{ dir = 4 @@ -585,7 +585,7 @@ /obj/effect/turf_decal/delivery/white/hollow, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"abD" = ( +"bD" = ( /obj/structure/railing{ dir = 1 }, @@ -595,7 +595,7 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"abE" = ( +"bE" = ( /obj/effect/turf_decal/stripes/corner, /obj/structure/sign/vacuum{ desc = "A warning sign which reads 'HOSTILE ATMOSPHERE AHEAD'"; @@ -610,7 +610,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"abF" = ( +"bF" = ( /obj/structure/railing, /obj/effect/turf_decal/stripes/asteroid/end{ dir = 4 @@ -621,7 +621,7 @@ /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"abG" = ( +"bG" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb, /obj/structure/rack, @@ -631,7 +631,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"abH" = ( +"bH" = ( /obj/structure/sign/restroom{ pixel_y = -32 }, @@ -639,7 +639,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"abJ" = ( +"bJ" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal{ dir = 1 @@ -649,14 +649,14 @@ dir = 8 }, /area/ruin/space/moonbase19) -"abK" = ( +"bK" = ( /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "dark" }, /area/ruin/space/moonbase19) -"abN" = ( +"bN" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -669,15 +669,15 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"abO" = ( +"bO" = ( /obj/item/cigbutt, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"abP" = ( +"bP" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"abS" = ( +"bS" = ( /obj/effect/turf_decal/loading_area/white{ dir = 1 }, @@ -686,7 +686,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"abU" = ( +"bU" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plasteel{ @@ -694,7 +694,7 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"abW" = ( +"bW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -703,11 +703,11 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"abY" = ( +"bY" = ( /obj/structure/railing, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"abZ" = ( +"bZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, @@ -716,7 +716,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aca" = ( +"ca" = ( /obj/structure/railing/cap{ dir = 8 }, @@ -724,30 +724,30 @@ dir = 1 }, /area/ruin/space/moonbase19) -"acb" = ( +"cb" = ( /obj/structure/railing/corner, /turf/simulated/floor/plasteel/stairs{ dir = 4 }, /area/ruin/space/moonbase19) -"acc" = ( +"cc" = ( /obj/structure/flora/tree/jungle/small, /obj/structure/flora/rock/pile/largejungle, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"acd" = ( +"cd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"ace" = ( +"ce" = ( /obj/structure/window/reinforced, /obj/machinery/light/small, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"acf" = ( +"cf" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; desc = "Your instincts say you shouldn't be following these."; @@ -762,13 +762,13 @@ dir = 4 }, /area/ruin/space/moonbase19) -"ach" = ( +"ch" = ( /obj/structure/chair/office{ dir = 8 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aci" = ( +"ci" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ d1 = 1; @@ -779,22 +779,22 @@ dir = 1 }, /area/ruin/space/moonbase19) -"acj" = ( +"cj" = ( /obj/structure/chair/office/dark{ dir = 1 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"acm" = ( +"cm" = ( /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"acn" = ( +"cn" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 8 }, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"aco" = ( +"co" = ( /obj/structure/railing/cap{ dir = 1 }, @@ -806,11 +806,11 @@ dir = 4 }, /area/ruin/space/moonbase19) -"acp" = ( +"cp" = ( /obj/effect/landmark/damageturf, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"acq" = ( +"cq" = ( /obj/structure/railing/corner{ dir = 4 }, @@ -818,17 +818,17 @@ dir = 1 }, /area/ruin/space/moonbase19) -"acr" = ( +"cr" = ( /obj/effect/landmark/damageturf, /turf/simulated/floor/plating/airless, /area/ruin/space/moonbase19) -"acs" = ( +"cs" = ( /obj/structure/flora/ausbushes/sunnybush, /obj/structure/flora/ausbushes/ppflowers, /obj/structure/window/full/basic, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"act" = ( +"ct" = ( /obj/structure/railing, /obj/machinery/optable, /obj/effect/turf_decal/box/white, @@ -837,7 +837,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"acv" = ( +"cv" = ( /obj/structure/table/glass/reinforced/titanium, /obj/machinery/door_control{ pixel_y = 8; @@ -853,7 +853,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"acw" = ( +"cw" = ( /obj/machinery/sleeper, /obj/effect/turf_decal/delivery/white/hollow, /obj/machinery/atmospherics/pipe/manifold/hidden, @@ -861,7 +861,7 @@ icon_state = "whitehall" }, /area/ruin/space/moonbase19) -"acx" = ( +"cx" = ( /obj/machinery/door/airlock/security/glass{ req_access_txt = "271" }, @@ -873,14 +873,14 @@ dir = 8 }, /area/ruin/space/moonbase19) -"acy" = ( +"cy" = ( /obj/structure/closet, /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"acA" = ( +"cA" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -889,7 +889,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"acB" = ( +"cB" = ( /obj/structure/railing{ dir = 4 }, @@ -899,7 +899,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"acC" = ( +"cC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, @@ -907,7 +907,7 @@ icon_state = "blackcorner" }, /area/ruin/space/moonbase19) -"acD" = ( +"cD" = ( /obj/structure/railing/cap{ dir = 5 }, @@ -920,7 +920,7 @@ /obj/effect/landmark/damageturf, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"acF" = ( +"cF" = ( /obj/structure/barricade/wooden/crude{ layer = 4 }, @@ -930,7 +930,7 @@ }, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"acI" = ( +"cI" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 32 }, @@ -941,7 +941,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"acJ" = ( +"cJ" = ( /obj/structure/table/reinforced, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -949,7 +949,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"acK" = ( +"cK" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -958,13 +958,13 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"acL" = ( +"cL" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"acM" = ( +"cM" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -973,7 +973,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"acN" = ( +"cN" = ( /obj/machinery/bodyscanner{ dir = 4 }, @@ -985,7 +985,7 @@ icon_state = "whitehall" }, /area/ruin/space/moonbase19) -"acR" = ( +"cR" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 8 @@ -998,18 +998,18 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"acS" = ( +"cS" = ( /obj/effect/decal/cleanable/cobweb2, /obj/structure/largecrate, /turf/simulated/floor/mineral/titanium, /area/ruin/space/powered) -"acX" = ( +"cX" = ( /turf/simulated/floor/plasteel{ dir = 1; icon_state = "black" }, /area/ruin/space/moonbase19) -"acY" = ( +"cY" = ( /obj/structure/railing{ dir = 8 }, @@ -1022,7 +1022,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"ada" = ( +"da" = ( /obj/structure/chair{ dir = 8 }, @@ -1031,18 +1031,18 @@ dir = 4 }, /area/ruin/space/moonbase19) -"adb" = ( +"db" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"adc" = ( +"dc" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 4 }, /area/ruin/space/moonbase19) -"add" = ( +"dd" = ( /obj/structure/table/glass, /obj/machinery/light/small{ dir = 1 @@ -1056,7 +1056,7 @@ icon_state = "darkblue" }, /area/ruin/space/moonbase19) -"adf" = ( +"df" = ( /obj/structure/railing{ dir = 1 }, @@ -1064,51 +1064,51 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"adg" = ( +"dg" = ( /obj/structure/shuttle/engine/propulsion/burst{ dir = 4 }, /turf/simulated/wall/mineral/titanium, /area/ruin/space/powered) -"adh" = ( +"dh" = ( /obj/machinery/computer, /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/mineral/titanium, /area/ruin/space/powered) -"adi" = ( +"di" = ( /obj/machinery/door/airlock/centcom, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, /area/ruin/space/moonbase19) -"adj" = ( +"dj" = ( /obj/structure/closet/crate, /turf/simulated/floor/mineral/titanium, /area/ruin/space/powered) -"adk" = ( +"dk" = ( /obj/structure/window/reinforced, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"adm" = ( +"dm" = ( /obj/effect/turf_decal/stripes/asteroid/line, /obj/structure/flora/ausbushes/fullgrass, /obj/structure/railing/corner, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"adn" = ( +"dn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, /area/ruin/space/moonbase19) -"ado" = ( +"do" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid12" }, /area/ruin/space/moonbase19) -"adp" = ( +"dp" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -1121,7 +1121,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"ads" = ( +"ds" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, @@ -1133,7 +1133,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"adt" = ( +"dt" = ( /obj/effect/turf_decal/stripes/asteroid/corner{ dir = 8 }, @@ -1142,7 +1142,7 @@ }, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/powered) -"adu" = ( +"du" = ( /obj/structure/sign/directions/cargo{ dir = 4; pixel_y = 39 @@ -1166,30 +1166,30 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"adw" = ( +"dw" = ( /turf/simulated/floor/plasteel{ icon_state = "whitehall" }, /area/ruin/space/moonbase19) -"adx" = ( +"dx" = ( /obj/machinery/suit_storage_unit/standard_unit, /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 6 }, /area/ruin/space/moonbase19) -"adz" = ( +"dz" = ( /obj/structure/flora/ausbushes/fernybush, /obj/structure/flora/ausbushes/brflowers, /obj/structure/window/full/basic, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"adA" = ( +"dA" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid1" }, /area/ruin/space/moonbase19) -"adB" = ( +"dB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -1201,20 +1201,20 @@ icon_state = "whitecorner" }, /area/ruin/space/moonbase19) -"adD" = ( +"dD" = ( /obj/structure/closet/walllocker/emerglocker{ pixel_y = 32 }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"adE" = ( +"dE" = ( /obj/effect/turf_decal/loading_area/white, /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 8 }, /area/ruin/space/moonbase19) -"adG" = ( +"dG" = ( /obj/machinery/door/poddoor/impassable{ id_tag = "awaycontlockdown" }, @@ -1224,7 +1224,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"adH" = ( +"dH" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -1236,7 +1236,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"adK" = ( +"dK" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb2, /obj/effect/decal/cleanable/blood/splatter{ @@ -1246,18 +1246,18 @@ icon_state = "freezerfloor" }, /area/ruin/space/moonbase19) -"adL" = ( +"dL" = ( /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"adM" = ( +"dM" = ( /turf/simulated/floor/plasteel/stairs{ dir = 4 }, /area/ruin/space/moonbase19) -"adN" = ( +"dN" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 1 }, @@ -1267,7 +1267,7 @@ /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"adO" = ( +"dO" = ( /obj/structure/table/glass/reinforced/plastitanium, /obj/item/clipboard, /obj/item/stamp/rd{ @@ -1279,7 +1279,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"adQ" = ( +"dQ" = ( /obj/structure/table/glass, /obj/structure/railing{ dir = 1 @@ -1292,7 +1292,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"adR" = ( +"dR" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/splatter{ color = "red" @@ -1303,20 +1303,20 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"adS" = ( +"dS" = ( /obj/effect/decal/cleanable/generic, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"adT" = ( +"dT" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /turf/simulated/floor/carpet/royalblue, /area/ruin/space/moonbase19) -"adU" = ( +"dU" = ( /obj/machinery/computer/arcade/orion_trail{ dir = 1 }, @@ -1325,18 +1325,18 @@ dir = 8 }, /area/ruin/space/moonbase19) -"adV" = ( +"dV" = ( /obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"adW" = ( +"dW" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"adX" = ( +"dX" = ( /obj/structure/sign/security{ pixel_y = 32 }, @@ -1345,13 +1345,13 @@ dir = 8 }, /area/ruin/space/moonbase19) -"adY" = ( +"dY" = ( /turf/simulated/floor/plasteel{ dir = 9; icon_state = "caution" }, /area/ruin/space/moonbase19) -"aeb" = ( +"eb" = ( /obj/structure/closet/crate/can, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plasteel{ @@ -1359,7 +1359,7 @@ temperature = 273.15 }, /area/ruin/space/moonbase19) -"aed" = ( +"ed" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -1374,14 +1374,14 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aee" = ( +"ee" = ( /obj/structure/table/glass/reinforced/titanium, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aeg" = ( +"eg" = ( /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"aeh" = ( +"eh" = ( /obj/effect/turf_decal/caution{ dir = 4 }, @@ -1394,7 +1394,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aek" = ( +"ek" = ( /obj/effect/turf_decal/stripes/asteroid/line, /obj/effect/decal/cleanable/dirt, /obj/structure/railing/corner{ @@ -1402,19 +1402,19 @@ }, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"ael" = ( +"el" = ( /obj/machinery/door/airlock, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, /area/ruin/space/moonbase19) -"aem" = ( +"em" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "blackcorner" }, /area/ruin/space/moonbase19) -"aeo" = ( +"eo" = ( /obj/machinery/door/poddoor/impassable{ id_tag = "awaymlock" }, @@ -1424,7 +1424,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aep" = ( +"ep" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, @@ -1432,14 +1432,14 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aeq" = ( +"eq" = ( /obj/effect/turf_decal/loading_area/white{ dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aer" = ( +"er" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -1452,11 +1452,11 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aes" = ( +"es" = ( /obj/structure/flora/ausbushes/fernybush, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"aev" = ( +"ev" = ( /obj/structure/chair{ dir = 8 }, @@ -1465,7 +1465,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aew" = ( +"ew" = ( /obj/machinery/computer/security{ desc = "Used to access the various cameras on the outpost."; dir = 1; @@ -1476,7 +1476,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aey" = ( +"ey" = ( /obj/item/kirbyplants, /obj/machinery/light/small{ dir = 1 @@ -1486,7 +1486,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aez" = ( +"ez" = ( /obj/structure/chair{ dir = 8 }, @@ -1501,22 +1501,22 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aeA" = ( +"eA" = ( /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, /area/ruin/space/moonbase19) -"aeC" = ( +"eC" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"aeE" = ( +"eE" = ( /obj/machinery/light/small{ dir = 8 }, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/powered) -"aeH" = ( +"eH" = ( /obj/effect/turf_decal/loading_area/white, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/glass, @@ -1528,11 +1528,11 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aeJ" = ( +"eJ" = ( /obj/structure/flora/junglebush/large, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"aeK" = ( +"eK" = ( /obj/item/kirbyplants, /obj/effect/decal/cleanable/dirt, /obj/machinery/camera{ @@ -1545,7 +1545,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aeL" = ( +"eL" = ( /obj/structure/extinguisher_cabinet{ pixel_x = -32 }, @@ -1558,13 +1558,13 @@ icon_state = "black" }, /area/ruin/space/moonbase19) -"aeM" = ( +"eM" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, /area/ruin/space/moonbase19) -"aeO" = ( +"eO" = ( /obj/structure/mirror{ pixel_x = -28 }, @@ -1578,7 +1578,7 @@ icon_state = "freezerfloor" }, /area/ruin/space/moonbase19) -"aeR" = ( +"eR" = ( /obj/structure/railing{ dir = 8 }, @@ -1587,13 +1587,13 @@ icon_state = "black" }, /area/ruin/space/moonbase19) -"aeU" = ( +"eU" = ( /turf/simulated/floor/plasteel{ dir = 4; icon_state = "black" }, /area/ruin/space/moonbase19) -"aeW" = ( +"eW" = ( /obj/structure/railing/corner{ dir = 1 }, @@ -1601,7 +1601,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aeX" = ( +"eX" = ( /obj/structure/barricade/wooden/crude{ layer = 4 }, @@ -1610,7 +1610,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aeZ" = ( +"eZ" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -1622,7 +1622,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"afc" = ( +"fc" = ( /obj/structure/railing{ dir = 4 }, @@ -1644,7 +1644,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"afd" = ( +"fd" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 8 }, @@ -1652,14 +1652,14 @@ icon_state = "asteroid6" }, /area/ruin/space/moonbase19) -"afe" = ( +"fe" = ( /obj/structure/railing{ dir = 8 }, /obj/structure/closet/crate, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aff" = ( +"ff" = ( /obj/structure/chair/stool{ dir = 4 }, @@ -1680,7 +1680,7 @@ }, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"afi" = ( +"fi" = ( /obj/structure/chair/wheelchair, /obj/effect/turf_decal/delivery/white, /turf/simulated/floor/plasteel{ @@ -1688,11 +1688,11 @@ dir = 8 }, /area/ruin/space/moonbase19) -"afl" = ( +"fl" = ( /obj/structure/closet/crate, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"afm" = ( +"fm" = ( /obj/effect/decal/cleanable/cobweb, /obj/item/clothing/suit/storage/labcoat, /obj/item/clothing/suit/storage/labcoat, @@ -1706,43 +1706,43 @@ dir = 1 }, /area/ruin/space/moonbase19) -"afn" = ( +"fn" = ( /obj/machinery/door/airlock/centcom{ req_access_txt = "271" }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"afp" = ( +"fp" = ( /obj/structure/window/reinforced{ dir = 8 }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"afq" = ( +"fq" = ( /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"afr" = ( +"fr" = ( /obj/structure/window/reinforced{ dir = 4 }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"afs" = ( +"fs" = ( /obj/structure/chair/sofa/bench, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, /area/ruin/space/moonbase19) -"afv" = ( +"fv" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"afw" = ( +"fw" = ( /obj/structure/flora/ash/rock/style_random, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"afx" = ( +"fx" = ( /obj/structure/filingcabinet/chestdrawer, /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -1755,18 +1755,18 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"afy" = ( +"fy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"afA" = ( +"fA" = ( /obj/structure/mopbucket, /obj/item/mop, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"afB" = ( +"fB" = ( /obj/structure/railing{ dir = 1 }, @@ -1778,32 +1778,32 @@ }, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"afC" = ( +"fC" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 10 }, /area/ruin/space/moonbase19) -"afD" = ( +"fD" = ( /obj/structure/chair, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"afF" = ( +"fF" = ( /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 6 }, /area/ruin/space/moonbase19) -"afG" = ( +"fG" = ( /obj/structure/fans/tiny, /obj/machinery/door/poddoor{ id_tag = "awaycargogate1" }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"afI" = ( +"fI" = ( /obj/machinery/atmospherics/pipe/simple/visible, /obj/machinery/atmospherics/meter, /obj/effect/turf_decal/stripes/line{ @@ -1811,7 +1811,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"afJ" = ( +"fJ" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal{ dir = 1 @@ -1831,26 +1831,26 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"afK" = ( +"fK" = ( /turf/simulated/floor/plasteel{ dir = 5; icon_state = "black" }, /area/ruin/space/moonbase19) -"afM" = ( +"fM" = ( /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 8 }, /area/ruin/space/moonbase19) -"afP" = ( +"fP" = ( /obj/structure/railing{ dir = 4 }, /obj/structure/closet/l3closet/general, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"afQ" = ( +"fQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, @@ -1860,7 +1860,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"afR" = ( +"fR" = ( /obj/machinery/light/small{ dir = 4 }, @@ -1870,24 +1870,24 @@ dir = 8 }, /area/ruin/space/moonbase19) -"afV" = ( +"fV" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"afX" = ( +"fX" = ( /obj/structure/grille/broken, /obj/effect/decal/cleanable/glass, /obj/effect/landmark/damageturf, /turf/simulated/floor/plating/airless, /area/ruin/space/moonbase19) -"afY" = ( +"fY" = ( /obj/item/stack/sheet/mineral/titanium, /obj/effect/decal/cleanable/glass, /obj/effect/decal/cleanable/molten_object/large, /obj/effect/landmark/damageturf, /turf/simulated/floor/plating/airless, /area/ruin/space/moonbase19) -"agb" = ( +"gb" = ( /obj/machinery/light/small{ dir = 4 }, @@ -1898,7 +1898,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"agc" = ( +"gc" = ( /obj/structure/chair/sofa/bench/right{ dir = 4 }, @@ -1910,7 +1910,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"agd" = ( +"gd" = ( /obj/structure/sign/directions/science{ dir = 1; pixel_y = 32 @@ -1919,34 +1919,34 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"age" = ( +"ge" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"agf" = ( +"gf" = ( /obj/structure/railing{ dir = 4 }, /obj/structure/filingcabinet/chestdrawer, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"agg" = ( +"gg" = ( /obj/structure/flora/ausbushes/grassybush, /obj/machinery/light/small, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"agh" = ( +"gh" = ( /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/hostile/alien, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"agi" = ( +"gi" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid4" }, /area/ruin/space/moonbase19) -"agj" = ( +"gj" = ( /obj/structure/railing, /obj/structure/railing/cap{ dir = 9 @@ -1955,14 +1955,14 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"agk" = ( +"gk" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 1 }, /obj/machinery/atmospherics/portable/canister/oxygen, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"agl" = ( +"gl" = ( /obj/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -1973,7 +1973,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"agm" = ( +"gm" = ( /obj/effect/turf_decal/delivery/partial{ dir = 1 }, @@ -1986,7 +1986,7 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"agn" = ( +"gn" = ( /obj/machinery/economy/vending/coffee, /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/plasteel{ @@ -1994,7 +1994,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"ago" = ( +"go" = ( /obj/structure/railing, /obj/structure/largecrate, /turf/simulated/floor/plasteel{ @@ -2002,7 +2002,7 @@ dir = 6 }, /area/ruin/space/moonbase19) -"agq" = ( +"gq" = ( /obj/structure/railing/corner{ dir = 1 }, @@ -2018,7 +2018,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"agr" = ( +"gr" = ( /obj/effect/turf_decal/delivery/red/partial{ dir = 1 }, @@ -2027,22 +2027,22 @@ dir = 1 }, /area/ruin/space/moonbase19) -"ags" = ( +"gs" = ( /obj/machinery/economy/vending/snack, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"agt" = ( +"gt" = ( /obj/machinery/economy/vending/cola, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"agv" = ( +"gv" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "caution" }, /area/ruin/space/moonbase19) -"agw" = ( +"gw" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/splatter{ color = "red" @@ -2052,7 +2052,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"agx" = ( +"gx" = ( /obj/structure/closet/secure_closet/freezer/kitchen, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -2060,11 +2060,11 @@ temperature = 273.15 }, /area/ruin/space/moonbase19) -"agy" = ( -/obj/item/reagent_containers/food/snacks/xenomeatbreadslice{ +"gy" = ( +/obj/item/food/snacks/xenomeatbreadslice{ pixel_y = 5 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 10; pixel_x = 10 }, @@ -2074,7 +2074,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"agz" = ( +"gz" = ( /obj/machinery/light{ active_power_consumption = 0; icon_state = "tube-broken"; @@ -2085,21 +2085,21 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"agA" = ( +"gA" = ( /obj/structure/flora/ausbushes/grassybush, /obj/structure/flora/ausbushes, /obj/structure/flora/ausbushes/ywflowers, /obj/structure/window/full/basic, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"agB" = ( +"gB" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "cautioncorner"; dir = 1 }, /area/ruin/space/moonbase19) -"agC" = ( +"gC" = ( /obj/effect/decal/cleanable/greenglow, /obj/effect/landmark/damageturf, /obj/item/clothing/mask/facehugger{ @@ -2109,11 +2109,11 @@ }, /turf/simulated/floor/plating/airless, /area/ruin/space/moonbase19) -"agD" = ( +"gD" = ( /obj/structure/girder, /turf/simulated/floor/plating/airless, /area/ruin/space/moonbase19) -"agE" = ( +"gE" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 1 }, @@ -2124,19 +2124,19 @@ icon_state = "asteroid5" }, /area/ruin/space/moonbase19) -"agH" = ( +"gH" = ( /obj/structure/fans/tiny, /obj/machinery/door/airlock/external, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"agJ" = ( +"gJ" = ( /obj/effect/turf_decal/stripes/asteroid/line, /obj/structure/railing, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"agL" = ( +"gL" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -2148,7 +2148,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"agM" = ( +"gM" = ( /obj/machinery/shower{ dir = 4 }, @@ -2157,47 +2157,47 @@ }, /turf/simulated/floor/noslip, /area/ruin/space/moonbase19) -"agN" = ( +"gN" = ( /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"agO" = ( +"gO" = ( /obj/structure/chair/comfy/shuttle{ dir = 8 }, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/mineral/titanium, /area/ruin/space/powered) -"agP" = ( +"gP" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "caution" }, /area/ruin/space/moonbase19) -"agS" = ( +"gS" = ( /obj/structure/chair{ dir = 8 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"agT" = ( +"gT" = ( /obj/structure/flora/rock/pile, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"agU" = ( +"gU" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "whitehall" }, /area/ruin/space/moonbase19) -"agV" = ( +"gV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"agW" = ( +"gW" = ( /obj/effect/landmark/damageturf, /obj/machinery/door/airlock/titanium{ id_tag = "s_docking_airlock"; @@ -2205,7 +2205,7 @@ }, /turf/simulated/floor/mineral/titanium/airless, /area/ruin/space/moonbase19) -"agX" = ( +"gX" = ( /obj/structure/rack, /obj/effect/decal/cleanable/cobweb2, /obj/effect/spawner/lootdrop/maintenance, @@ -2214,7 +2214,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"agZ" = ( +"gZ" = ( /obj/structure/railing{ dir = 1 }, @@ -2228,7 +2228,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"ahc" = ( +"hc" = ( /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/hostile/alien, /turf/simulated/floor/plasteel{ @@ -2236,7 +2236,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"ahe" = ( +"he" = ( /obj/effect/turf_decal/stripes/asteroid/corner{ dir = 8 }, @@ -2247,23 +2247,23 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"ahf" = ( +"hf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"ahg" = ( +"hg" = ( /turf/simulated/floor/plasteel{ icon_state = "yellowsiding"; dir = 8 }, /area/ruin/space/moonbase19) -"ahh" = ( +"hh" = ( /turf/simulated/floor/plasteel{ icon_state = "whitehall"; dir = 8 }, /area/ruin/space/moonbase19) -"ahi" = ( +"hi" = ( /obj/structure/falsewall/rock_ancient, /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -2275,7 +2275,7 @@ }, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"ahj" = ( +"hj" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 4 @@ -2287,7 +2287,7 @@ dir = 6 }, /area/ruin/space/moonbase19) -"ahk" = ( +"hk" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ dir = 1 @@ -2303,7 +2303,7 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"ahl" = ( +"hl" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -2315,12 +2315,12 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"ahm" = ( +"hm" = ( /obj/structure/closet/cabinet, /obj/item/clothing/under/suit/navy, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"ahn" = ( +"hn" = ( /obj/structure/railing/corner{ dir = 8 }, @@ -2329,14 +2329,14 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aho" = ( +"ho" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "darkbluefull"; dir = 8 }, /area/ruin/space/moonbase19) -"ahp" = ( +"hp" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/xeno{ color = "green" @@ -2346,7 +2346,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"ahq" = ( +"hq" = ( /obj/item/storage/toolbox/mechanical{ pixel_x = 2; pixel_y = 2 @@ -2357,7 +2357,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"ahr" = ( +"hr" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -2367,17 +2367,17 @@ dir = 8 }, /area/ruin/space/moonbase19) -"ahs" = ( +"hs" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "dark" }, /area/ruin/space/moonbase19) -"ahu" = ( +"hu" = ( /turf/simulated/wall/mineral/titanium, /area/ruin/space/powered) -"ahv" = ( +"hv" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 10 }, @@ -2388,7 +2388,7 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"ahw" = ( +"hw" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -2403,7 +2403,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"ahx" = ( +"hx" = ( /obj/machinery/light/small{ dir = 8 }, @@ -2419,7 +2419,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"ahy" = ( +"hy" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -2432,11 +2432,11 @@ dir = 4 }, /area/ruin/space/moonbase19) -"ahz" = ( +"hz" = ( /obj/structure/flora/junglebush, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"ahA" = ( +"hA" = ( /obj/structure/chair/sofa/bench{ dir = 4 }, @@ -2445,7 +2445,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"ahC" = ( +"hC" = ( /obj/structure/chair/office/dark{ dir = 8 }, @@ -2454,7 +2454,7 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"ahD" = ( +"hD" = ( /obj/structure/chair/office/dark{ dir = 1 }, @@ -2464,10 +2464,10 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"ahE" = ( +"hE" = ( /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"ahF" = ( +"hF" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ dir = 4 @@ -2478,33 +2478,33 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"ahG" = ( +"hG" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid10" }, /area/ruin/space/moonbase19) -"ahH" = ( +"hH" = ( /obj/effect/decal/remains/xeno, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid8" }, /area/ruin/space/moonbase19) -"ahI" = ( +"hI" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid5" }, /area/ruin/space/moonbase19) -"ahK" = ( +"hK" = ( /obj/machinery/door/airlock/external/glass, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"ahL" = ( +"hL" = ( /turf/simulated/floor/plasteel{ icon_state = "showroomfloor"; temperature = 273.15 }, /area/ruin/space/moonbase19) -"ahN" = ( +"hN" = ( /obj/structure/railing, /obj/structure/railing{ dir = 1 @@ -2513,17 +2513,17 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"ahO" = ( +"hO" = ( /obj/effect/spawner/window/shuttle, /turf/simulated/floor/plating, /area/ruin/space/powered) -"ahP" = ( +"hP" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"ahQ" = ( +"hQ" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 5 }, @@ -2534,7 +2534,7 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"ahR" = ( +"hR" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -2543,21 +2543,21 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"ahS" = ( +"hS" = ( /obj/structure/railing{ dir = 1 }, /obj/structure/closet, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"ahT" = ( +"hT" = ( /obj/structure/window/reinforced{ dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"ahU" = ( +"hU" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal{ dir = 8 @@ -2572,10 +2572,10 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"ahV" = ( +"hV" = ( /obj/structure/railing, /obj/structure/closet/secure_closet, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -3; pixel_y = -2 }, @@ -2588,12 +2588,12 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"ahW" = ( +"hW" = ( /obj/structure/bed, /obj/item/bedsheet, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"ahX" = ( +"hX" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal{ dir = 4 @@ -2604,30 +2604,30 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"ahY" = ( +"hY" = ( /obj/effect/decal/cleanable/blood/oil{ color = "black" }, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"ahZ" = ( +"hZ" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid8" }, /area/ruin/space/moonbase19) -"aia" = ( +"ia" = ( /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/ruin/space/moonbase19) -"aib" = ( +"ib" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/ruin/space/moonbase19) -"aic" = ( +"ic" = ( /obj/structure/railing{ dir = 4 }, @@ -2640,11 +2640,11 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aid" = ( +"id" = ( /obj/structure/largecrate, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aie" = ( +"ie" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, @@ -2652,7 +2652,7 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"aif" = ( +"if" = ( /obj/structure/bed, /obj/item/bedsheet/medical, /obj/machinery/iv_drip, @@ -2660,14 +2660,14 @@ icon_state = "whitehall" }, /area/ruin/space/moonbase19) -"aig" = ( +"ig" = ( /obj/machinery/door/poddoor/impassable{ id_tag = "awaymlock" }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aii" = ( +"ii" = ( /obj/machinery/light/small{ dir = 1 }, @@ -2680,14 +2680,14 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"aij" = ( +"ij" = ( /obj/structure/fans/tiny, /obj/machinery/door/poddoor/multi_tile/impassable/four_tile_ver{ id_tag = "awaycargogate" }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"ail" = ( +"il" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -2697,7 +2697,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aim" = ( +"im" = ( /obj/effect/turf_decal/stripes/asteroid/corner{ dir = 4 }, @@ -2708,14 +2708,14 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"ain" = ( +"in" = ( /obj/structure/largecrate, /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"aio" = ( +"io" = ( /obj/item/kirbyplants, /obj/structure/sign/directions/engineering{ pixel_x = -32; @@ -2729,7 +2729,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aiq" = ( +"iq" = ( /obj/structure/railing{ dir = 1 }, @@ -2739,7 +2739,7 @@ /obj/effect/turf_decal/stripes/asteroid/line, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"air" = ( +"ir" = ( /obj/structure/railing{ dir = 1 }, @@ -2751,7 +2751,7 @@ icon_state = "asteroid8" }, /area/ruin/space/moonbase19) -"ais" = ( +"is" = ( /obj/structure/railing/cap{ dir = 5 }, @@ -2760,7 +2760,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"ait" = ( +"it" = ( /obj/structure/railing/cap{ dir = 1 }, @@ -2769,20 +2769,20 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aiu" = ( +"iu" = ( /obj/structure/railing{ dir = 1 }, /obj/structure/table, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aiv" = ( +"iv" = ( /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, /area/ruin/space/moonbase19) -"aiw" = ( +"iw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -2795,13 +2795,13 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aix" = ( +"ix" = ( /turf/simulated/floor/plasteel{ icon_state = "white"; dir = 8 }, /area/ruin/space/moonbase19) -"aiy" = ( +"iy" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -2813,13 +2813,13 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aiz" = ( +"iz" = ( /obj/structure/flora/ausbushes/stalkybush, /obj/structure/flora/ausbushes/ppflowers, /obj/structure/window/full/basic, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"aiA" = ( +"iA" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, @@ -2829,7 +2829,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aiB" = ( +"iB" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, /turf/simulated/floor/plasteel{ @@ -2837,7 +2837,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aiC" = ( +"iC" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -2845,7 +2845,7 @@ icon_state = "green" }, /area/ruin/space/moonbase19) -"aiD" = ( +"iD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -2859,14 +2859,14 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aiE" = ( +"iE" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, /obj/effect/decal/remains/human, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aiF" = ( +"iF" = ( /obj/machinery/door/window/reinforced/normal{ dir = 8 }, @@ -2874,13 +2874,13 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aiG" = ( +"iG" = ( /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 1 }, /area/ruin/space/moonbase19) -"aiI" = ( +"iI" = ( /obj/machinery/door/window/reinforced/normal{ dir = 4 }, @@ -2888,21 +2888,21 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aiJ" = ( +"iJ" = ( /obj/machinery/light/small, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aiL" = ( +"iL" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid6" }, /area/ruin/space/moonbase19) -"aiM" = ( +"iM" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid12" }, /area/ruin/space/moonbase19) -"aiN" = ( +"iN" = ( /obj/effect/turf_decal/caution{ dir = 4 }, @@ -2914,21 +2914,21 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aiO" = ( +"iO" = ( /obj/effect/turf_decal/delivery/white/partial, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "whitehall" }, /area/ruin/space/moonbase19) -"aiP" = ( +"iP" = ( /obj/structure/window/reinforced{ dir = 4 }, /obj/structure/window/reinforced, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aiQ" = ( +"iQ" = ( /obj/structure/kitchenspike, /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/plasteel{ @@ -2936,7 +2936,7 @@ temperature = 273.15 }, /area/ruin/space/moonbase19) -"aiR" = ( +"iR" = ( /obj/structure/railing{ dir = 1 }, @@ -2948,7 +2948,7 @@ icon_state = "asteroid12" }, /area/ruin/space/moonbase19) -"aiS" = ( +"iS" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ dir = 8 @@ -2965,11 +2965,11 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"aiT" = ( +"iT" = ( /obj/structure/fans/tiny, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aiW" = ( +"iW" = ( /obj/structure/chair{ dir = 4 }, @@ -2978,19 +2978,19 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aiX" = ( +"iX" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"aiY" = ( +"iY" = ( /obj/structure/flora/junglebush, /obj/structure/flora/ausbushes/brflowers, /obj/structure/window/full/basic, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"aiZ" = ( +"iZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ d1 = 1; @@ -3003,24 +3003,24 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aja" = ( +"ja" = ( /obj/machinery/economy/arcade/claw, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"ajb" = ( +"jb" = ( /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"ajc" = ( +"jc" = ( /turf/simulated/floor/plasteel{ icon_state = "black" }, /area/ruin/space/moonbase19) -"ajf" = ( +"jf" = ( /obj/machinery/atmospherics/unary/cryo_cell, /obj/structure/window/reinforced{ dir = 8 @@ -3031,7 +3031,7 @@ /obj/effect/turf_decal/delivery/white/hollow, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"ajg" = ( +"jg" = ( /obj/structure/railing{ dir = 9 }, @@ -3039,14 +3039,14 @@ icon_state = "whitecorner" }, /area/ruin/space/moonbase19) -"ajh" = ( +"jh" = ( /obj/structure/closet/emcloset, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"aji" = ( +"ji" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 8 }, @@ -3057,19 +3057,19 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"ajj" = ( +"jj" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 8 }, /area/ruin/space/moonbase19) -"ajk" = ( +"jk" = ( /obj/structure/flora/ausbushes/ppflowers, /obj/structure/flora/ash/rock/style_random, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"ajl" = ( +"jl" = ( /obj/structure/table/reinforced, /obj/structure/railing/cap{ dir = 4 @@ -3084,7 +3084,7 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"ajm" = ( +"jm" = ( /obj/structure/railing{ dir = 1 }, @@ -3094,19 +3094,19 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"ajn" = ( +"jn" = ( /obj/machinery/door/airlock/centcom, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, /area/ruin/space/moonbase19) -"ajo" = ( +"jo" = ( /obj/structure/closet/cabinet, /obj/item/clothing/under/misc/assistantformal, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"ajp" = ( +"jp" = ( /obj/structure/railing, /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ @@ -3114,24 +3114,24 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"ajq" = ( +"jq" = ( /obj/structure/window/reinforced{ dir = 1 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"ajr" = ( +"jr" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"ajt" = ( +"jt" = ( /obj/structure/railing/cap, /obj/structure/railing/cap{ dir = 5 }, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"ajw" = ( +"jw" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal{ dir = 8 @@ -3142,19 +3142,19 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"ajx" = ( +"jx" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/grille/broken, /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"ajy" = ( +"jy" = ( /obj/effect/decal/cleanable/dirt, /obj/item/trash/candy, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"ajz" = ( +"jz" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -3166,7 +3166,7 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"ajB" = ( +"jB" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -3178,22 +3178,22 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"ajC" = ( +"jC" = ( /obj/effect/landmark/damageturf, /mob/living/simple_animal/hostile/alien, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"ajD" = ( +"jD" = ( /obj/structure/closet/crate, /turf/simulated/floor/plasteel/stairs{ dir = 4 }, /area/ruin/space/moonbase19) -"ajE" = ( +"jE" = ( /obj/structure/grille, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"ajF" = ( +"jF" = ( /obj/structure/railing, /obj/effect/turf_decal/stripes/asteroid/end{ dir = 8 @@ -3203,13 +3203,13 @@ }, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"ajH" = ( +"jH" = ( /turf/simulated/floor/plasteel{ icon_state = "cautioncorner"; dir = 4 }, /area/ruin/space/moonbase19) -"ajI" = ( +"jI" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -3222,7 +3222,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"ajJ" = ( +"jJ" = ( /obj/structure/window/reinforced, /obj/machinery/computer/security{ desc = "Used to access the various cameras on the outpost."; @@ -3234,7 +3234,7 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"ajK" = ( +"jK" = ( /obj/structure/railing{ dir = 4 }, @@ -3243,17 +3243,17 @@ dir = 4 }, /area/ruin/space/moonbase19) -"ajL" = ( +"jL" = ( /obj/structure/closet/emcloset, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"ajM" = ( +"jM" = ( /obj/structure/chair/office/dark{ dir = 4 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"ajP" = ( +"jP" = ( /obj/structure/railing, /obj/effect/turf_decal/stripes/asteroid/line, /obj/effect/turf_decal/stripes/asteroid/line{ @@ -3261,36 +3261,36 @@ }, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"ajQ" = ( +"jQ" = ( /obj/machinery/door/poddoor/shutters{ dir = 2 }, /turf/simulated/floor/mineral/titanium, /area/ruin/space/powered) -"ajR" = ( +"jR" = ( /turf/simulated/floor/plasteel{ dir = 4; icon_state = "blackcorner" }, /area/ruin/space/moonbase19) -"ajS" = ( +"jS" = ( /turf/simulated/floor/plasteel{ icon_state = "cautioncorner"; dir = 1 }, /area/ruin/space/moonbase19) -"ajU" = ( +"jU" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/ywflowers, /obj/structure/window/full/basic, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"ajW" = ( +"jW" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid8" }, /area/ruin/space/moonbase19) -"ajY" = ( +"jY" = ( /obj/structure/chair{ dir = 4 }, @@ -3305,7 +3305,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"ajZ" = ( +"jZ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 }, @@ -3321,7 +3321,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aka" = ( +"ka" = ( /obj/structure/railing/corner{ dir = 4 }, @@ -3330,12 +3330,12 @@ dir = 4 }, /area/ruin/space/moonbase19) -"akb" = ( +"kb" = ( /obj/structure/closet, /obj/item/storage/box/lights/mixed, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"akc" = ( +"kc" = ( /obj/structure/railing{ dir = 1 }, @@ -3354,7 +3354,7 @@ icon_state = "asteroid6" }, /area/ruin/space/moonbase19) -"akd" = ( +"kd" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 8 @@ -3365,7 +3365,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"ake" = ( +"ke" = ( /obj/structure/window/reinforced, /obj/structure/chair{ dir = 1 @@ -3379,7 +3379,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"akf" = ( +"kf" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plasteel{ @@ -3387,7 +3387,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"akg" = ( +"kg" = ( /obj/item/kirbyplants, /obj/effect/landmark/damageturf, /turf/simulated/floor/plasteel{ @@ -3395,7 +3395,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"akh" = ( +"kh" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/poddoor/impassable{ id_tag = "awayscilock" @@ -3406,11 +3406,11 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aki" = ( +"ki" = ( /obj/machinery/door/airlock/external, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"akj" = ( +"kj" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -3421,13 +3421,13 @@ /obj/effect/turf_decal/box, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"akk" = ( +"kk" = ( /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 4 }, /area/ruin/space/moonbase19) -"akm" = ( +"km" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -3436,17 +3436,17 @@ dir = 8 }, /area/ruin/space/moonbase19) -"ako" = ( +"ko" = ( /obj/structure/railing, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "caution" }, /area/ruin/space/moonbase19) -"akp" = ( +"kp" = ( /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"akr" = ( +"kr" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 }, @@ -3456,7 +3456,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aks" = ( +"ks" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -3475,7 +3475,7 @@ dir = 9 }, /area/ruin/space/moonbase19) -"aku" = ( +"ku" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/portable/scrubber, /turf/simulated/floor/plasteel{ @@ -3483,7 +3483,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"akw" = ( +"kw" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -3496,14 +3496,14 @@ dir = 1 }, /area/ruin/space/moonbase19) -"akx" = ( +"kx" = ( /obj/structure/table/glass, /turf/simulated/floor/plasteel{ icon_state = "white"; dir = 8 }, /area/ruin/space/moonbase19) -"aky" = ( +"ky" = ( /obj/structure/railing/cap{ dir = 9 }, @@ -3511,7 +3511,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"akz" = ( +"kz" = ( /obj/structure/cable{ d2 = 2; icon_state = "0-2" @@ -3521,14 +3521,14 @@ }, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"akB" = ( +"kB" = ( /obj/item/kirbyplants, /obj/structure/railing{ dir = 10 }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"akC" = ( +"kC" = ( /obj/machinery/light/small{ dir = 8 }, @@ -3543,7 +3543,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"akE" = ( +"kE" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -3553,14 +3553,14 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"akG" = ( +"kG" = ( /obj/item/kirbyplants, /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/plasteel{ icon_state = "whitecorner" }, /area/ruin/space/moonbase19) -"akJ" = ( +"kJ" = ( /obj/machinery/power/port_gen/pacman{ desc = "A portable generator for emergency backup power."; name = "P.A.C.M.A.N.-type portable generator" @@ -3570,13 +3570,13 @@ dir = 8 }, /area/ruin/space/moonbase19) -"akM" = ( +"kM" = ( /obj/structure/flora/ausbushes/sunnybush, /obj/structure/flora/ausbushes/ywflowers, /obj/structure/window/full/basic, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"akN" = ( +"kN" = ( /obj/item/kirbyplants, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -3591,7 +3591,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"akO" = ( +"kO" = ( /obj/machinery/computer/security/telescreen{ desc = "Used for monitoring the research division and the labs within."; name = "research monitor"; @@ -3600,7 +3600,7 @@ }, /turf/simulated/floor/carpet/royalblue, /area/ruin/space/moonbase19) -"akQ" = ( +"kQ" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -3613,11 +3613,11 @@ dir = 1 }, /area/ruin/space/moonbase19) -"akR" = ( +"kR" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"akW" = ( +"kW" = ( /obj/machinery/door/airlock/centcom{ req_access_txt = "271" }, @@ -3626,7 +3626,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"akX" = ( +"kX" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -3638,18 +3638,18 @@ dir = 8 }, /area/ruin/space/moonbase19) -"akZ" = ( +"kZ" = ( /obj/structure/flora/rock/jungle, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"ala" = ( +"la" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /mob/living/simple_animal/hostile/alien, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"alc" = ( +"lc" = ( /obj/machinery/shieldwallgen{ locked = 0; req_access = null @@ -3661,7 +3661,7 @@ /obj/effect/turf_decal/box, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"ali" = ( +"li" = ( /obj/structure/railing{ dir = 1 }, @@ -3670,13 +3670,13 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"alk" = ( +"lk" = ( /obj/machinery/light/small, /turf/simulated/floor/plasteel{ icon_state = "black" }, /area/ruin/space/moonbase19) -"alm" = ( +"lm" = ( /obj/effect/turf_decal/stripes/asteroid/line, /obj/effect/decal/cleanable/dirt, /obj/structure/railing, @@ -3684,20 +3684,20 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"alo" = ( +"lo" = ( /obj/structure/barricade/wooden{ layer = 4 }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"alp" = ( +"lp" = ( /turf/simulated/floor/plasteel{ dir = 9; icon_state = "black" }, /area/ruin/space/moonbase19) -"alq" = ( +"lq" = ( /obj/machinery/door/airlock{ req_access_txt = "271" }, @@ -3709,30 +3709,30 @@ dir = 8 }, /area/ruin/space/moonbase19) -"alv" = ( +"lv" = ( /obj/structure/largecrate, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"alz" = ( +"lz" = ( /obj/machinery/photocopier, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"alC" = ( -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans{ +"lC" = ( +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans{ pixel_y = 6; pixel_x = 9 }, -/obj/item/reagent_containers/food/snacks/beans{ +/obj/item/food/snacks/beans{ pixel_y = 3; pixel_x = 3 }, -/obj/item/reagent_containers/food/snacks/beans{ +/obj/item/food/snacks/beans{ pixel_y = 1; pixel_x = -5 }, @@ -3742,7 +3742,7 @@ dir = 9 }, /area/ruin/space/moonbase19) -"alD" = ( +"lD" = ( /obj/item/kirbyplants, /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, @@ -3750,7 +3750,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"alF" = ( +"lF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -3764,7 +3764,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"alH" = ( +"lH" = ( /obj/machinery/power/port_gen/pacman{ desc = "A portable generator for emergency backup power."; name = "P.A.C.M.A.N.-type portable generator" @@ -3779,7 +3779,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"alI" = ( +"lI" = ( /obj/item/kirbyplants, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -3787,7 +3787,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"alL" = ( +"lL" = ( /obj/structure/railing{ dir = 8 }, @@ -3798,39 +3798,39 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"alM" = ( +"lM" = ( /obj/structure/closet/firecloset, /obj/structure/window/reinforced{ dir = 1 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"alN" = ( +"lN" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 1 }, /area/ruin/space/moonbase19) -"alP" = ( +"lP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/carpet/royalblue, /area/ruin/space/moonbase19) -"alQ" = ( +"lQ" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "dark" }, /area/ruin/space/moonbase19) -"alS" = ( +"lS" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid4" }, /area/ruin/space/moonbase19) -"alT" = ( +"lT" = ( /obj/structure/chair/office/dark{ dir = 8 }, @@ -3840,23 +3840,23 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"alX" = ( +"lX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"alY" = ( +"lY" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "caution" }, /area/ruin/space/moonbase19) -"amb" = ( +"mb" = ( /obj/structure/closet/cabinet, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"amd" = ( +"md" = ( /obj/structure/chair/sofa/bench/left{ dir = 1 }, @@ -3865,7 +3865,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"amh" = ( +"mh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -3879,7 +3879,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"amj" = ( +"mj" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ @@ -3887,7 +3887,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"amk" = ( +"mk" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -3900,7 +3900,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"amm" = ( +"mm" = ( /obj/machinery/conveyor/east{ id = "awayfusrodah" }, @@ -3909,7 +3909,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"amn" = ( +"mn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -3921,14 +3921,14 @@ icon_state = "cautioncorner" }, /area/ruin/space/moonbase19) -"amq" = ( +"mq" = ( /obj/machinery/atmospherics/unary/outlet_injector/on{ dir = 4; volume_rate = 200 }, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"amr" = ( +"mr" = ( /obj/machinery/light/small{ dir = 8 }, @@ -3938,7 +3938,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"ams" = ( +"ms" = ( /obj/machinery/door/window{ dir = 8 }, @@ -3949,7 +3949,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"amt" = ( +"mt" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, @@ -3961,7 +3961,7 @@ icon_state = "cautioncorner" }, /area/ruin/space/moonbase19) -"amu" = ( +"mu" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery/partial{ dir = 4 @@ -3971,21 +3971,21 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"amv" = ( +"mv" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "caution" }, /area/ruin/space/moonbase19) -"amw" = ( +"mw" = ( /obj/structure/alien/resin/wall, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"amx" = ( +"mx" = ( /obj/machinery/shieldwallgen{ locked = 0; req_access = null @@ -3994,7 +3994,7 @@ /obj/effect/turf_decal/box, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"amy" = ( +"my" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -4003,7 +4003,7 @@ icon_state = "cautioncorner" }, /area/ruin/space/moonbase19) -"amz" = ( +"mz" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/splatter{ color = "red" @@ -4012,7 +4012,7 @@ icon_state = "whitehall" }, /area/ruin/space/moonbase19) -"amB" = ( +"mB" = ( /obj/machinery/economy/vending/cigarette, /obj/machinery/light/small{ dir = 8 @@ -4027,7 +4027,7 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"amC" = ( +"mC" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; desc = "Your instincts say you shouldn't be following these."; @@ -4039,7 +4039,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"amH" = ( +"mH" = ( /obj/machinery/light/small{ dir = 1 }, @@ -4054,26 +4054,26 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"amJ" = ( +"mJ" = ( /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"amK" = ( +"mK" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/alien/resin/wall, /obj/machinery/atmospherics/air_sensor, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"amM" = ( +"mM" = ( /obj/machinery/floodlight, /turf/simulated/floor/plasteel{ icon_state = "yellowsiding"; dir = 5 }, /area/ruin/space/moonbase19) -"amS" = ( +"mS" = ( /obj/machinery/conveyor/east{ id = "awayfusrodah" }, @@ -4095,7 +4095,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"amT" = ( +"mT" = ( /obj/item/kitchen/knife, /obj/item/kitchen/rollingpin, /obj/structure/table, @@ -4104,7 +4104,7 @@ temperature = 273.15 }, /area/ruin/space/moonbase19) -"amU" = ( +"mU" = ( /obj/machinery/shieldwallgen{ locked = 0; req_access = null @@ -4126,7 +4126,7 @@ /obj/effect/turf_decal/box, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"amV" = ( +"mV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -4138,7 +4138,7 @@ /mob/living/simple_animal/hostile/alien/sentinel, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"amW" = ( +"mW" = ( /obj/effect/decal/cleanable/cobweb, /obj/machinery/computer/security{ desc = "Used to access the various cameras on the outpost."; @@ -4148,7 +4148,7 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"amX" = ( +"mX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -4157,7 +4157,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"ana" = ( +"na" = ( /obj/structure/sign/nosmoking_1{ pixel_x = -32 }, @@ -4177,7 +4177,7 @@ }, /turf/simulated/floor/plasteel/stairs, /area/ruin/space/moonbase19) -"anc" = ( +"nc" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/machinery/light/small{ dir = 8 @@ -4188,28 +4188,28 @@ icon_state = "black" }, /area/ruin/space/moonbase19) -"anf" = ( +"nf" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 }, /obj/structure/alien/resin/wall, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"ang" = ( +"ng" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "darkblue"; dir = 8 }, /area/ruin/space/moonbase19) -"anh" = ( +"nh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, /turf/simulated/floor/carpet/royalblue, /area/ruin/space/moonbase19) -"ank" = ( +"nk" = ( /obj/structure/sign/electricshock{ pixel_y = 32 }, @@ -4219,7 +4219,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"anl" = ( +"nl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -4236,44 +4236,44 @@ /obj/effect/spawner/window/reinforced/tinted/grilled, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"anm" = ( +"nm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"ann" = ( +"nn" = ( /obj/effect/spawner/window/reinforced/tinted/grilled, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"ant" = ( +"nt" = ( /turf/simulated/floor/plasteel{ dir = 8; icon_state = "black" }, /area/ruin/space/moonbase19) -"anu" = ( +"nu" = ( /obj/structure/lattice, /obj/item/stack/sheet/plasteel, /turf/template_noop, /area/space/nearstation) -"anw" = ( +"nw" = ( /obj/machinery/door/airlock, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"anx" = ( +"nx" = ( /obj/machinery/door/airlock/centcom{ req_access_txt = "271"; name = "Engineering Division" }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"any" = ( +"ny" = ( /obj/effect/landmark/damageturf, /turf/simulated/floor/plating/airless, /area/space/nearstation) -"anz" = ( +"nz" = ( /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -4281,7 +4281,7 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"anA" = ( +"nA" = ( /obj/structure/rack, /obj/item/flashlight/flare, /obj/item/flashlight/flare, @@ -4292,7 +4292,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"anC" = ( +"nC" = ( /obj/structure/closet/secure_closet, /obj/machinery/camera{ c_tag = "Security Checkpoint"; @@ -4305,7 +4305,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"anE" = ( +"nE" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -4318,7 +4318,7 @@ }, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"anG" = ( +"nG" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/splatter{ color = "red" @@ -4328,14 +4328,14 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"anI" = ( +"nI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"anJ" = ( +"nJ" = ( /obj/structure/railing/cap{ dir = 10 }, @@ -4350,7 +4350,7 @@ icon_state = "green" }, /area/ruin/space/moonbase19) -"anK" = ( +"nK" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -4361,7 +4361,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"anO" = ( +"nO" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/machinery/light/small{ dir = 1 @@ -4372,14 +4372,14 @@ dir = 9 }, /area/ruin/space/moonbase19) -"anQ" = ( +"nQ" = ( /obj/structure/railing, /obj/structure/closet/cardboard, /turf/simulated/floor/plasteel{ icon_state = "caution" }, /area/ruin/space/moonbase19) -"anV" = ( +"nV" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -4388,7 +4388,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"anW" = ( +"nW" = ( /obj/structure/railing{ dir = 10 }, @@ -4397,7 +4397,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"anX" = ( +"nX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -4407,14 +4407,14 @@ /mob/living/simple_animal/hostile/alien, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"anZ" = ( +"nZ" = ( /obj/structure/window/reinforced, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aoc" = ( +"oc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -4429,13 +4429,13 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aod" = ( +"od" = ( /obj/structure/chair/office/dark, /turf/simulated/floor/plasteel{ icon_state = "black" }, /area/ruin/space/moonbase19) -"aoh" = ( +"oh" = ( /obj/structure/sign/poster/contraband/lusty_xenomorph{ pixel_y = 32 }, @@ -4446,7 +4446,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aoi" = ( +"oi" = ( /obj/structure/chair/office/dark{ dir = 4 }, @@ -4461,7 +4461,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aok" = ( +"ok" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -4472,13 +4472,13 @@ /mob/living/simple_animal/hostile/alien, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aon" = ( +"on" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aoo" = ( +"oo" = ( /obj/structure/chair/office/dark, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -4486,14 +4486,14 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aop" = ( +"op" = ( /mob/living/simple_animal/hostile/alien/sentinel, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aor" = ( +"or" = ( /obj/machinery/light/small{ dir = 4 }, @@ -4502,13 +4502,13 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aot" = ( +"ot" = ( /obj/structure/railing{ dir = 8 }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aov" = ( +"ov" = ( /obj/effect/turf_decal/caution/stand_clear/white{ dir = 4 }, @@ -4517,14 +4517,14 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aow" = ( +"ow" = ( /obj/structure/window/reinforced, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aoA" = ( +"oA" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; desc = "Your instincts say you shouldn't be following these."; @@ -4537,7 +4537,7 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"aoD" = ( +"oD" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, @@ -4545,7 +4545,7 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"aoF" = ( +"oF" = ( /obj/structure/chair/sofa/bench/left, /obj/machinery/camera{ c_tag = "East Research Division"; @@ -4557,7 +4557,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aoH" = ( +"oH" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable{ d1 = 2; @@ -4574,7 +4574,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aoJ" = ( +"oJ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -4586,7 +4586,7 @@ }, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"aoL" = ( +"oL" = ( /obj/structure/rack, /obj/structure/window/reinforced{ dir = 1 @@ -4594,7 +4594,7 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aoM" = ( +"oM" = ( /obj/structure/chair{ dir = 1 }, @@ -4603,7 +4603,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aoP" = ( +"oP" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light{ dir = 4 @@ -4616,12 +4616,12 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aoR" = ( +"oR" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/grille/broken, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aoS" = ( +"oS" = ( /obj/structure/railing{ dir = 8 }, @@ -4630,7 +4630,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aoT" = ( +"oT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ @@ -4638,14 +4638,14 @@ icon_state = "green" }, /area/ruin/space/moonbase19) -"aoU" = ( +"oU" = ( /obj/item/kirbyplants, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, /area/ruin/space/moonbase19) -"aoX" = ( +"oX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, @@ -4653,7 +4653,7 @@ icon_state = "greencorner" }, /area/ruin/space/moonbase19) -"aoZ" = ( +"oZ" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, @@ -4668,14 +4668,14 @@ }, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"apa" = ( +"pa" = ( /obj/structure/table, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "caution" }, /area/ruin/space/moonbase19) -"ape" = ( +"pe" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -4692,13 +4692,13 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aph" = ( +"ph" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid4" }, /area/ruin/space/moonbase19) -"api" = ( +"pi" = ( /obj/effect/turf_decal/loading_area{ dir = 4 }, @@ -4710,20 +4710,20 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"apm" = ( +"pm" = ( /obj/structure/largecrate, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"apn" = ( +"pn" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid3" }, /area/ruin/space/moonbase19) -"app" = ( +"pp" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -4738,7 +4738,7 @@ /obj/structure/table/reinforced, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"apq" = ( +"pq" = ( /obj/structure/railing/cap{ dir = 5 }, @@ -4748,7 +4748,7 @@ icon_state = "blackcorner" }, /area/ruin/space/moonbase19) -"apr" = ( +"pr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, @@ -4759,7 +4759,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aps" = ( +"ps" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -4769,7 +4769,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"apt" = ( +"pt" = ( /obj/structure/railing{ dir = 1 }, @@ -4777,7 +4777,7 @@ /obj/item/flashlight/flare/glowstick, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"apu" = ( +"pu" = ( /obj/effect/decal/cleanable/greenglow, /obj/structure/railing/cap{ dir = 8 @@ -4787,19 +4787,19 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"apz" = ( +"pz" = ( /turf/simulated/floor/plasteel{ icon_state = "caution" }, /area/ruin/space/moonbase19) -"apB" = ( +"pB" = ( /obj/structure/rack, /obj/item/paicard{ pixel_x = -4 }, /turf/simulated/floor/carpet/royalblue, /area/ruin/space/moonbase19) -"apD" = ( +"pD" = ( /obj/structure/chair/sofa/bench/right{ dir = 4 }, @@ -4808,12 +4808,12 @@ dir = 10 }, /area/ruin/space/moonbase19) -"apE" = ( +"pE" = ( /turf/simulated/floor/plasteel{ icon_state = "yellowsiding" }, /area/ruin/space/moonbase19) -"apF" = ( +"pF" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -4821,7 +4821,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"apI" = ( +"pI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, @@ -4830,17 +4830,17 @@ dir = 1 }, /area/ruin/space/moonbase19) -"apK" = ( +"pK" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"apL" = ( +"pL" = ( /obj/structure/rack, /obj/effect/decal/cleanable/cobweb2, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"apN" = ( +"pN" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/xeno{ color = "green" @@ -4851,7 +4851,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"apP" = ( +"pP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, @@ -4861,7 +4861,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"apQ" = ( +"pQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, @@ -4879,11 +4879,11 @@ icon_state = "cautioncorner" }, /area/ruin/space/moonbase19) -"apR" = ( +"pR" = ( /obj/structure/closet/secure_closet/freezer/fridge, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"apS" = ( +"pS" = ( /obj/machinery/light/small{ dir = 8 }, @@ -4893,7 +4893,7 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"apV" = ( +"pV" = ( /obj/machinery/door/poddoor/impassable{ id_tag = "awayscilock" }, @@ -4903,7 +4903,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"apW" = ( +"pW" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable{ d1 = 2; @@ -4915,12 +4915,12 @@ dir = 8 }, /area/ruin/space/moonbase19) -"apZ" = ( +"pZ" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/badrecipe, +/obj/item/food/snacks/badrecipe, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aqa" = ( +"qa" = ( /obj/structure/chair/sofa/bench{ dir = 8 }, @@ -4935,7 +4935,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aqb" = ( +"qb" = ( /obj/structure/railing/cap{ dir = 10 }, @@ -4947,7 +4947,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aqc" = ( +"qc" = ( /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/hostile/alien/sentinel, /turf/simulated/floor/plasteel{ @@ -4955,7 +4955,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aqj" = ( +"qj" = ( /obj/structure/railing/cap{ dir = 9 }, @@ -4963,7 +4963,7 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"aqm" = ( +"qm" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -4978,7 +4978,7 @@ }, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aqo" = ( +"qo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -4989,7 +4989,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aqp" = ( +"qp" = ( /obj/structure/railing{ dir = 8 }, @@ -4998,7 +4998,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aqq" = ( +"qq" = ( /obj/structure/table/reinforced, /obj/item/clipboard{ pixel_y = 2; @@ -5013,7 +5013,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aqr" = ( +"qr" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -5022,7 +5022,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aqt" = ( +"qt" = ( /obj/machinery/power/smes{ input_level = 10000; inputting = 0; @@ -5032,14 +5032,14 @@ /obj/structure/cable, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"aqu" = ( +"qu" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "escape" }, /area/ruin/space/moonbase19) -"aqv" = ( +"qv" = ( /obj/structure/disposalpipe/segment{ desc = "An underfloor disposal pipe. This one has been applied with an acid-proof coating."; dir = 2; @@ -5051,14 +5051,14 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aqx" = ( +"qx" = ( /obj/machinery/door/airlock/centcom{ req_access_txt = "271"; name = "Cafeteria" }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aqA" = ( +"qA" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; desc = "Your instincts say you shouldn't be following these."; @@ -5071,7 +5071,7 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"aqB" = ( +"qB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, @@ -5084,7 +5084,7 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"aqC" = ( +"qC" = ( /obj/structure/chair/sofa/bench/left{ dir = 8 }, @@ -5098,7 +5098,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aqD" = ( +"qD" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, @@ -5107,14 +5107,14 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aqF" = ( +"qF" = ( /obj/structure/closet/firecloset, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, /area/ruin/space/moonbase19) -"aqI" = ( +"qI" = ( /obj/structure/railing{ dir = 1 }, @@ -5123,7 +5123,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aqM" = ( +"qM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/air_sensor, @@ -5135,7 +5135,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aqQ" = ( +"qQ" = ( /obj/machinery/kitchen_machine/grill, /obj/machinery/light/small{ dir = 8 @@ -5146,7 +5146,7 @@ temperature = 273.15 }, /area/ruin/space/moonbase19) -"aqS" = ( +"qS" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb2, /obj/effect/turf_decal/delivery/hollow, @@ -5156,14 +5156,14 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"aqY" = ( +"qY" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "black" }, /area/ruin/space/moonbase19) -"are" = ( +"re" = ( /obj/structure/railing/cap{ dir = 8 }, @@ -5175,14 +5175,14 @@ dir = 1 }, /area/ruin/space/moonbase19) -"arf" = ( +"rf" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/decal/cleanable/cobweb2, /obj/item/toy/plushie/lizardplushie, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"ari" = ( +"ri" = ( /obj/item/radio/off{ pixel_x = -8 }, @@ -5202,7 +5202,7 @@ /obj/structure/table, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"ark" = ( +"rk" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/damageturf, /obj/effect/turf_decal/delivery/partial{ @@ -5213,7 +5213,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"arl" = ( +"rl" = ( /obj/structure/sink{ dir = 8; pixel_x = -12; @@ -5224,7 +5224,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"arm" = ( +"rm" = ( /obj/structure/railing/cap, /obj/structure/railing/cap{ dir = 10 @@ -5237,7 +5237,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aro" = ( +"ro" = ( /obj/structure/railing/cap, /obj/structure/alien/resin/wall, /turf/simulated/floor/plasteel{ @@ -5245,7 +5245,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"arp" = ( +"rp" = ( /obj/effect/decal/cleanable/blood/xeno{ color = "green" }, @@ -5254,7 +5254,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"arq" = ( +"rq" = ( /obj/structure/railing/cap{ dir = 6 }, @@ -5262,7 +5262,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"ars" = ( +"rs" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/remains/human, /obj/effect/decal/cleanable/blood/splatter{ @@ -5278,27 +5278,27 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aru" = ( +"ru" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "green" }, /area/ruin/space/moonbase19) -"arv" = ( +"rv" = ( /turf/simulated/floor/plasteel{ icon_state = "whitehall"; dir = 1 }, /area/ruin/space/moonbase19) -"arx" = ( +"rx" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "caution" }, /area/ruin/space/moonbase19) -"ary" = ( +"ry" = ( /obj/structure/table/reinforced, /obj/item/clothing/glasses/meson, /obj/structure/cable{ @@ -5309,7 +5309,7 @@ /obj/item/paper/fluff/ruins/moonoutpost19/engineering, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"arB" = ( +"rB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -5319,7 +5319,7 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"arC" = ( +"rC" = ( /obj/structure/railing/corner{ dir = 8 }, @@ -5327,7 +5327,7 @@ icon_state = "asteroid5" }, /area/ruin/space/moonbase19) -"arD" = ( +"rD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, @@ -5337,7 +5337,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"arE" = ( +"rE" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; desc = "Your instincts say you shouldn't be following these."; @@ -5347,26 +5347,26 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"arG" = ( +"rG" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"arH" = ( +"rH" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "escape" }, /area/ruin/space/moonbase19) -"arJ" = ( +"rJ" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "black" }, /area/ruin/space/moonbase19) -"arK" = ( +"rK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -5386,14 +5386,14 @@ dir = 8 }, /area/ruin/space/moonbase19) -"arL" = ( +"rL" = ( /obj/structure/chair/sofa/bench/left, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, /area/ruin/space/moonbase19) -"arN" = ( +"rN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -5402,11 +5402,11 @@ dir = 8 }, /area/ruin/space/moonbase19) -"arP" = ( +"rP" = ( /obj/structure/flora/ash/rock/style_random, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"arQ" = ( +"rQ" = ( /obj/structure/railing/cap, /obj/effect/decal/cleanable/blood/splatter{ color = "red" @@ -5416,7 +5416,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"arS" = ( +"rS" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -5435,7 +5435,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"arT" = ( +"rT" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -5448,7 +5448,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"arV" = ( +"rV" = ( /obj/machinery/door/airlock{ req_access_txt = "271"; name = "Dorms" @@ -5458,13 +5458,13 @@ icon_state = "green" }, /area/ruin/space/moonbase19) -"arW" = ( +"rW" = ( /turf/simulated/floor/plasteel{ icon_state = "escapecorner"; dir = 8 }, /area/ruin/space/moonbase19) -"arY" = ( +"rY" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, @@ -5473,13 +5473,13 @@ dir = 4 }, /area/ruin/space/moonbase19) -"arZ" = ( +"rZ" = ( /obj/machinery/door/airlock/maintenance_hatch{ req_access_txt = "271" }, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"asa" = ( +"sa" = ( /obj/structure/sign/radiation/rad_area{ pixel_y = 32 }, @@ -5490,14 +5490,14 @@ dir = 4 }, /area/ruin/space/moonbase19) -"asc" = ( +"sc" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"ase" = ( +"se" = ( /obj/effect/turf_decal/stripes/asteroid/corner{ dir = 8 }, @@ -5505,7 +5505,7 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"asg" = ( +"sg" = ( /obj/effect/decal/cleanable/cobweb, /obj/structure/railing, /turf/simulated/floor/plasteel{ @@ -5513,7 +5513,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"ash" = ( +"sh" = ( /obj/machinery/recharger{ pixel_y = 4 }, @@ -5525,7 +5525,7 @@ /obj/structure/table/reinforced, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"asi" = ( +"si" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -5533,7 +5533,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"asj" = ( +"sj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ @@ -5541,7 +5541,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"ask" = ( +"sk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -5558,7 +5558,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"asl" = ( +"sl" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -5570,11 +5570,11 @@ /obj/structure/alien/resin/wall, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"asm" = ( +"sm" = ( /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"asn" = ( +"sn" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ id_tag = "awayscilock2" @@ -5587,7 +5587,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aso" = ( +"so" = ( /obj/structure/railing/corner{ dir = 8 }, @@ -5595,7 +5595,7 @@ icon_state = "asteroid6" }, /area/ruin/space/moonbase19) -"asp" = ( +"sp" = ( /obj/item/kirbyplants, /obj/structure/railing, /obj/structure/cable{ @@ -5608,7 +5608,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"asq" = ( +"sq" = ( /obj/structure/chair/office/dark{ dir = 4 }, @@ -5618,7 +5618,7 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"asv" = ( +"sv" = ( /obj/machinery/power/terminal{ dir = 1 }, @@ -5628,15 +5628,15 @@ }, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"asy" = ( +"sy" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/wall/r_wall, /area/ruin/space/moonbase19) -"asF" = ( +"sF" = ( /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall/indestructible/riveted, /area/ruin/space/moonbase19) -"asK" = ( +"sK" = ( /obj/structure/chair/sofa/bench/left{ dir = 8 }, @@ -5645,34 +5645,34 @@ dir = 4 }, /area/ruin/space/moonbase19) -"asL" = ( +"sL" = ( /obj/machinery/door/airlock/external/glass, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"asR" = ( +"sR" = ( /obj/structure/chair/sofa/bench/left, /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"asV" = ( +"sV" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"asY" = ( +"sY" = ( /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "caution" }, /area/ruin/space/moonbase19) -"asZ" = ( +"sZ" = ( /obj/structure/chair/office/dark, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "dark" }, /area/ruin/space/moonbase19) -"atb" = ( +"tb" = ( /obj/structure/sign/securearea{ pixel_x = -32 }, @@ -5684,14 +5684,14 @@ dir = 8 }, /area/ruin/space/moonbase19) -"atc" = ( +"tc" = ( /obj/structure/railing{ dir = 4 }, /obj/item/kirbyplants, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"atd" = ( +"td" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ @@ -5699,7 +5699,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"ate" = ( +"te" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, @@ -5709,7 +5709,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"atf" = ( +"tf" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -5721,20 +5721,20 @@ /obj/machinery/atmospherics/air_sensor, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"ath" = ( +"th" = ( /obj/structure/chair/office/dark{ dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"atj" = ( +"tj" = ( /obj/structure/railing/cap, /obj/structure/flora/ash/rock/style_random, /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"atk" = ( +"tk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, @@ -5754,7 +5754,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"atl" = ( +"tl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -5766,21 +5766,21 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"atm" = ( +"tm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, /obj/effect/landmark/damageturf, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"ato" = ( +"to" = ( /obj/structure/railing{ dir = 4 }, /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"atp" = ( +"tp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, @@ -5792,7 +5792,7 @@ /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"ats" = ( +"ts" = ( /obj/structure/railing{ dir = 10 }, @@ -5809,11 +5809,11 @@ dir = 1 }, /area/ruin/space/moonbase19) -"atv" = ( +"tv" = ( /obj/structure/largecrate, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"atw" = ( +"tw" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ dir = 8 @@ -5826,12 +5826,12 @@ dir = 8 }, /area/ruin/space/moonbase19) -"atx" = ( +"tx" = ( /obj/structure/window/reinforced, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"atD" = ( +"tD" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/noticeboard{ pixel_x = -32 @@ -5840,12 +5840,12 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"atE" = ( +"tE" = ( /obj/structure/closet/crate/secure/loot, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"atG" = ( +"tG" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -5859,7 +5859,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"atI" = ( +"tI" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/splatter{ color = "red" @@ -5868,7 +5868,7 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"atR" = ( +"tR" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ dir = 4 @@ -5881,7 +5881,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"atV" = ( +"tV" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, @@ -5890,21 +5890,21 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"atW" = ( +"tW" = ( /obj/structure/grille/broken, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"atX" = ( +"tX" = ( /turf/simulated/wall/indestructible/rock, /area/ruin/space/moonbase19) -"atY" = ( +"tY" = ( /obj/machinery/economy/vending/dinnerware, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"atZ" = ( +"tZ" = ( /obj/structure/railing/corner{ dir = 4 }, @@ -5916,7 +5916,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aub" = ( +"ub" = ( /obj/structure/cable, /obj/machinery/power/smes{ input_level = 10000; @@ -5926,7 +5926,7 @@ }, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"auf" = ( +"uf" = ( /obj/structure/window/reinforced, /mob/living/simple_animal/hostile/alien/drone, /turf/simulated/floor/plasteel{ @@ -5934,14 +5934,14 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aug" = ( +"ug" = ( /obj/structure/railing{ dir = 6 }, /obj/structure/chair, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"auh" = ( +"uh" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -5956,12 +5956,12 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"auj" = ( +"uj" = ( /obj/effect/decal/remains/human, /obj/item/reagent_containers/hypospray/autoinjector/survival, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"aup" = ( +"up" = ( /obj/structure/chair/sofa/bench{ dir = 8 }, @@ -5970,7 +5970,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aur" = ( +"ur" = ( /obj/machinery/light/small{ active_power_consumption = 0; dir = 4; @@ -5983,7 +5983,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"auv" = ( +"uv" = ( /obj/structure/railing/cap{ dir = 9 }, @@ -5991,7 +5991,7 @@ icon_state = "asteroid12" }, /area/ruin/space/moonbase19) -"auw" = ( +"uw" = ( /obj/structure/chair/comfy/brown{ dir = 8 }, @@ -6001,14 +6001,14 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"auA" = ( +"uA" = ( /obj/structure/closet/crate, /turf/simulated/floor/plasteel{ icon_state = "white"; dir = 8 }, /area/ruin/space/moonbase19) -"auG" = ( +"uG" = ( /obj/structure/railing{ dir = 4 }, @@ -6016,7 +6016,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"auJ" = ( +"uJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -6034,7 +6034,7 @@ /obj/effect/spawner/window/reinforced/tinted/grilled, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"auM" = ( +"uM" = ( /obj/machinery/light/small, /obj/structure/noticeboard{ pixel_y = -32 @@ -6043,7 +6043,7 @@ icon_state = "black" }, /area/ruin/space/moonbase19) -"auO" = ( +"uO" = ( /obj/structure/table/reinforced, /obj/item/storage/fancy/vials, /turf/simulated/floor/plasteel{ @@ -6051,14 +6051,14 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"auP" = ( +"uP" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, /obj/structure/alien/resin/wall, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"auR" = ( +"uR" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; desc = "Your instincts say you shouldn't be following these."; @@ -6068,7 +6068,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"auS" = ( +"uS" = ( /obj/structure/railing{ dir = 8 }, @@ -6080,7 +6080,7 @@ dir = 9 }, /area/ruin/space/moonbase19) -"auT" = ( +"uT" = ( /obj/structure/railing/cap{ dir = 10 }, @@ -6089,26 +6089,26 @@ dir = 4 }, /area/ruin/space/moonbase19) -"auV" = ( +"uV" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"auX" = ( +"uX" = ( /obj/structure/table/glass/reinforced/titanium, /obj/item/paper_bin, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"ava" = ( +"va" = ( /obj/machinery/economy/vending/cola, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"avd" = ( +"vd" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -6121,14 +6121,14 @@ }, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"ave" = ( +"ve" = ( /obj/structure/window/reinforced{ dir = 8 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"avf" = ( +"vf" = ( /obj/machinery/light/small{ dir = 1 }, @@ -6138,7 +6138,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"avh" = ( +"vh" = ( /obj/structure/rack, /obj/item/mecha_parts/core, /obj/item/stock_parts/cell/infinite, @@ -6147,26 +6147,26 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"avm" = ( +"vm" = ( /obj/machinery/atmospherics/portable/canister/air, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"avn" = ( +"vn" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "black" }, /area/ruin/space/moonbase19) -"avq" = ( +"vq" = ( /obj/structure/railing/cap{ dir = 1 }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"avy" = ( +"vy" = ( /obj/structure/railing/cap{ dir = 1 }, @@ -6177,14 +6177,14 @@ dir = 8 }, /area/ruin/space/moonbase19) -"avz" = ( +"vz" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/plasteel{ icon_state = "whitehall"; dir = 1 }, /area/ruin/space/moonbase19) -"avA" = ( +"vA" = ( /obj/structure/table/reinforced, /obj/item/paper_bin{ pixel_y = 5 @@ -6200,7 +6200,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"avB" = ( +"vB" = ( /obj/item/kirbyplants, /obj/machinery/light/small{ dir = 4 @@ -6210,7 +6210,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"avC" = ( +"vC" = ( /obj/structure/bed, /obj/item/bedsheet/medical, /obj/machinery/iv_drip, @@ -6219,26 +6219,26 @@ dir = 1 }, /area/ruin/space/moonbase19) -"avD" = ( +"vD" = ( /obj/structure/railing{ dir = 1 }, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"avF" = ( +"vF" = ( /obj/structure/table, /turf/simulated/floor/plasteel{ icon_state = "whitecorner"; dir = 8 }, /area/ruin/space/moonbase19) -"avH" = ( +"vH" = ( /obj/structure/railing/cap{ dir = 4 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"avL" = ( +"vL" = ( /obj/structure/noticeboard{ pixel_y = 32 }, @@ -6247,14 +6247,14 @@ }, /turf/simulated/floor/carpet/royalblue, /area/ruin/space/moonbase19) -"avN" = ( +"vN" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor"; temperature = 273.15 }, /area/ruin/space/moonbase19) -"avO" = ( +"vO" = ( /obj/structure/chair/office/dark{ dir = 4 }, @@ -6265,14 +6265,14 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"avS" = ( +"vS" = ( /obj/structure/alien/resin/door, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"avT" = ( +"vT" = ( /obj/structure/railing/cap{ dir = 6 }, @@ -6280,7 +6280,7 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"avV" = ( +"vV" = ( /obj/structure/flora/ausbushes/pointybush, /obj/structure/flora/ausbushes/ppflowers, /obj/machinery/light/small{ @@ -6288,7 +6288,7 @@ }, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"avY" = ( +"vY" = ( /obj/structure/railing, /obj/structure/railing{ dir = 1 @@ -6301,7 +6301,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"awb" = ( +"wb" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; desc = "Your instincts say you shouldn't be following these."; @@ -6313,7 +6313,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"awc" = ( +"wc" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; desc = "Your instincts say you shouldn't be following these."; @@ -6325,7 +6325,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"awd" = ( +"wd" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ dir = 1 @@ -6338,7 +6338,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"awe" = ( +"we" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/structure/sign/poster/contraband/donut_corp{ pixel_x = -32 @@ -6349,7 +6349,7 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"awh" = ( +"wh" = ( /obj/item/chair{ dir = 4; pixel_x = -1; @@ -6360,21 +6360,21 @@ dir = 8 }, /area/ruin/space/moonbase19) -"awj" = ( +"wj" = ( /obj/structure/railing/cap, /turf/simulated/floor/plasteel/stairs{ dir = 4 }, /area/ruin/space/moonbase19) -"awk" = ( +"wk" = ( /obj/machinery/computer, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"awl" = ( +"wl" = ( /obj/item/stack/ore/slag, /turf/simulated/floor/engine/vacuum, /area/space/nearstation) -"awo" = ( +"wo" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8; initialize_directions = 7 @@ -6385,14 +6385,14 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"awp" = ( +"wp" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 5 }, /area/ruin/space/moonbase19) -"awq" = ( +"wq" = ( /obj/machinery/light/small, /obj/structure/closet/l3closet/general, /turf/simulated/floor/plasteel{ @@ -6400,26 +6400,26 @@ dir = 1 }, /area/ruin/space/moonbase19) -"awt" = ( +"wt" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"awv" = ( +"wv" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"awC" = ( +"wC" = ( /obj/structure/closet/cabinet, /obj/effect/decal/cleanable/dirt, /obj/item/clothing/under/syndicate, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"awD" = ( +"wD" = ( /obj/machinery/economy/vending/cola, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -6427,7 +6427,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"awF" = ( +"wF" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -6439,26 +6439,26 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"awH" = ( +"wH" = ( /obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"awL" = ( -/obj/item/reagent_containers/food/drinks/drinkingglass, +"wL" = ( +/obj/item/reagent_containers/drinks/drinkingglass, /obj/structure/table, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"awP" = ( +"wP" = ( /obj/machinery/door/airlock/engineering/glass{ name = "Engine Room" }, /obj/machinery/door/firedoor/closed, /turf/simulated/floor/plating/airless, /area/ruin/space/moonbase19) -"awQ" = ( +"wQ" = ( /obj/structure/railing{ dir = 4 }, @@ -6466,7 +6466,7 @@ /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"awR" = ( +"wR" = ( /obj/structure/sign/monkey_paint{ pixel_x = -28; pixel_y = 4 @@ -6479,7 +6479,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"awS" = ( +"wS" = ( /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/splatter{ @@ -6488,7 +6488,7 @@ /obj/effect/decal/remains/human, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"awU" = ( +"wU" = ( /obj/structure/chair/office/dark, /obj/effect/turf_decal/delivery/red/partial, /obj/effect/decal/cleanable/dirt, @@ -6497,7 +6497,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"axf" = ( +"xf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -6514,20 +6514,20 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"axh" = ( +"xh" = ( /obj/structure/railing/cap, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "green" }, /area/ruin/space/moonbase19) -"axi" = ( +"xi" = ( /obj/effect/landmark/damageturf, /turf/simulated/floor/plasteel/stairs{ dir = 8 }, /area/ruin/space/moonbase19) -"axl" = ( +"xl" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -6541,7 +6541,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"axm" = ( +"xm" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -6555,7 +6555,7 @@ icon_state = "black" }, /area/ruin/space/moonbase19) -"axn" = ( +"xn" = ( /obj/structure/railing{ dir = 4 }, @@ -6563,13 +6563,13 @@ icon_state = "asteroid10" }, /area/ruin/space/moonbase19) -"axo" = ( +"xo" = ( /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"axs" = ( +"xs" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -6588,7 +6588,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"axt" = ( +"xt" = ( /obj/structure/railing{ dir = 8 }, @@ -6600,7 +6600,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"axu" = ( +"xu" = ( /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 1 }, @@ -6608,12 +6608,12 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"axw" = ( +"xw" = ( /obj/structure/closet/crate/can, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"axz" = ( +"xz" = ( /obj/structure/sign/lifestar{ pixel_y = 32 }, @@ -6629,7 +6629,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"axA" = ( +"xA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ @@ -6637,7 +6637,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"axC" = ( +"xC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, @@ -6649,7 +6649,7 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"axE" = ( +"xE" = ( /obj/structure/chair/sofa/bench/right{ dir = 1 }, @@ -6658,7 +6658,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"axF" = ( +"xF" = ( /obj/structure/chair/sofa/bench/right{ dir = 8 }, @@ -6667,15 +6667,15 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"axG" = ( +"xG" = ( /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"axL" = ( +"xL" = ( /turf/simulated/floor/plasteel/stairs{ dir = 8 }, /area/ruin/space/moonbase19) -"axO" = ( +"xO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -6684,7 +6684,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"axS" = ( +"xS" = ( /obj/structure/railing/cap{ dir = 10 }, @@ -6695,18 +6695,18 @@ dir = 5 }, /area/ruin/space/moonbase19) -"axW" = ( +"xW" = ( /obj/machinery/door/airlock, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"axX" = ( +"xX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"axZ" = ( +"xZ" = ( /obj/machinery/disposal/deliveryChute{ dir = 8 }, @@ -6717,7 +6717,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aya" = ( +"ya" = ( /obj/structure/chair/sofa/bench{ dir = 8 }, @@ -6729,13 +6729,13 @@ dir = 4 }, /area/ruin/space/moonbase19) -"ayb" = ( +"yb" = ( /obj/machinery/light/small{ dir = 1 }, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"ayc" = ( +"yc" = ( /obj/machinery/computer{ dir = 8 }, @@ -6744,13 +6744,13 @@ dir = 8 }, /area/ruin/space/moonbase19) -"ayd" = ( +"yd" = ( /obj/structure/railing, /turf/simulated/floor/plasteel/stairs{ dir = 4 }, /area/ruin/space/moonbase19) -"ayf" = ( +"yf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, @@ -6759,7 +6759,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"ayi" = ( +"yi" = ( /obj/structure/rack, /obj/item/pickaxe, /obj/item/flashlight/lantern, @@ -6768,7 +6768,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"ayj" = ( +"yj" = ( /obj/item/storage/belt/utility, /obj/structure/table, /turf/simulated/floor/plasteel{ @@ -6776,7 +6776,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aym" = ( +"ym" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -6793,7 +6793,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"ays" = ( +"ys" = ( /obj/structure/railing{ dir = 8 }, @@ -6801,7 +6801,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"ayu" = ( +"yu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4; @@ -6814,7 +6814,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"ayv" = ( +"yv" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -6837,7 +6837,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"ayx" = ( +"yx" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -6846,14 +6846,14 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"ayy" = ( +"yy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"ayB" = ( +"yB" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, /turf/simulated/floor/plasteel{ @@ -6861,7 +6861,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"ayD" = ( +"yD" = ( /obj/structure/rack, /obj/effect/turf_decal/delivery, /obj/machinery/alarm/monitor{ @@ -6875,7 +6875,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"ayE" = ( +"yE" = ( /obj/item/stack/sheet/metal, /obj/effect/landmark/damageturf, /obj/effect/turf_decal/delivery/partial{ @@ -6886,12 +6886,12 @@ dir = 8 }, /area/ruin/space/moonbase19) -"ayF" = ( +"yF" = ( /obj/structure/table/wood, /obj/item/toy/plushie/nianplushie, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"ayG" = ( +"yG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -6900,7 +6900,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"ayI" = ( +"yI" = ( /obj/structure/railing/cap{ dir = 1 }, @@ -6909,7 +6909,7 @@ }, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"ayM" = ( +"yM" = ( /obj/structure/railing/cap{ dir = 4 }, @@ -6918,13 +6918,13 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"ayO" = ( +"yO" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid8" }, /area/ruin/space/moonbase19) -"ayQ" = ( +"yQ" = ( /obj/structure/table/glass/reinforced/plastitanium, /obj/machinery/door_control{ pixel_x = -7; @@ -6951,13 +6951,13 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"ayR" = ( -/obj/item/reagent_containers/food/snacks/xenomeatbreadslice, -/obj/item/reagent_containers/food/snacks/xenomeatbreadslice{ +"yR" = ( +/obj/item/food/snacks/xenomeatbreadslice, +/obj/item/food/snacks/xenomeatbreadslice{ pixel_y = 7; pixel_x = 6 }, -/obj/item/reagent_containers/food/snacks/xenomeatbreadslice{ +/obj/item/food/snacks/xenomeatbreadslice{ pixel_y = 9; pixel_x = -5 }, @@ -6970,12 +6970,12 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"ayU" = ( -/obj/item/reagent_containers/food/snacks/candy, +"yU" = ( +/obj/item/food/snacks/candy, /obj/structure/table, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"ayX" = ( +"yX" = ( /obj/structure/railing/cap{ dir = 4 }, @@ -6988,20 +6988,20 @@ dir = 1 }, /area/ruin/space/moonbase19) -"ayZ" = ( +"yZ" = ( /obj/structure/closet/cabinet, /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"azh" = ( -/obj/item/reagent_containers/food/snacks/badrecipe, +"zh" = ( +/obj/item/food/snacks/badrecipe, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor"; temperature = 273.15 }, /area/ruin/space/moonbase19) -"azi" = ( +"zi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -7020,7 +7020,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"azj" = ( +"zj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, @@ -7031,33 +7031,33 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"azl" = ( +"zl" = ( /obj/structure/closet/firecloset, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"azm" = ( +"zm" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "escapecorner"; dir = 1 }, /area/ruin/space/moonbase19) -"azn" = ( +"zn" = ( /obj/effect/spawner/random_spawners/wall_rusted_always, /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall/r_wall, /area/ruin/space/moonbase19) -"azr" = ( +"zr" = ( /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "green" }, /area/ruin/space/moonbase19) -"azu" = ( +"zu" = ( /obj/structure/alien/resin/wall, /obj/structure/cable{ d1 = 1; @@ -7066,22 +7066,22 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"azv" = ( +"zv" = ( /obj/structure/rack, -/obj/item/reagent_containers/food/snacks/cornchips, +/obj/item/food/snacks/cornchips, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "escape" }, /area/ruin/space/moonbase19) -"azw" = ( +"zw" = ( /obj/machinery/computer/aifixer, /obj/machinery/light/small{ dir = 1 }, /turf/simulated/floor/carpet/royalblue, /area/ruin/space/moonbase19) -"azy" = ( +"zy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, @@ -7101,7 +7101,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"azz" = ( +"zz" = ( /obj/structure/window/reinforced, /obj/structure/chair/comfy/corp{ dir = 1 @@ -7110,11 +7110,11 @@ icon_state = "black" }, /area/ruin/space/moonbase19) -"azE" = ( +"zE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"azG" = ( +"zG" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 8 @@ -7125,13 +7125,13 @@ dir = 10 }, /area/ruin/space/moonbase19) -"azI" = ( +"zI" = ( /turf/simulated/floor/plasteel{ dir = 8; icon_state = "escape" }, /area/ruin/space/moonbase19) -"azK" = ( +"zK" = ( /obj/item/kirbyplants, /obj/structure/sign/biohazard{ pixel_y = 32 @@ -7149,7 +7149,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"azL" = ( +"zL" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -7161,21 +7161,21 @@ icon_state = "freezerfloor" }, /area/ruin/space/moonbase19) -"azM" = ( +"zM" = ( /obj/machinery/cooker/deepfryer, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor"; temperature = 273.15 }, /area/ruin/space/moonbase19) -"azN" = ( +"zN" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"azP" = ( +"zP" = ( /obj/structure/closet/secure_closet/freezer/fridge, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -7183,7 +7183,7 @@ temperature = 273.15 }, /area/ruin/space/moonbase19) -"azQ" = ( +"zQ" = ( /obj/structure/disposalpipe/segment/corner{ dir = 8 }, @@ -7198,12 +7198,12 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"azT" = ( +"zT" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid3" }, /area/ruin/space/moonbase19) -"azV" = ( +"zV" = ( /obj/machinery/economy/vending/medical{ req_access_txt = "271" }, @@ -7212,24 +7212,24 @@ dir = 1 }, /area/ruin/space/moonbase19) -"azW" = ( +"zW" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aAa" = ( +"Aa" = ( /obj/structure/filingcabinet/chestdrawer, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aAe" = ( +"Ae" = ( /obj/machinery/economy/vending/coffee, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"aAf" = ( +"Af" = ( /obj/machinery/door/airlock/command/glass{ req_access_txt = "271"; name = "Senior Researcher's Office" @@ -7242,18 +7242,18 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aAj" = ( +"Aj" = ( /mob/living/simple_animal/hostile/alien/sentinel, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aAk" = ( +"Ak" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "cautioncorner"; dir = 4 }, /area/ruin/space/moonbase19) -"aAl" = ( +"Al" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -7263,7 +7263,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aAm" = ( +"Am" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 6 }, @@ -7271,7 +7271,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aAn" = ( +"An" = ( /obj/structure/punching_bag, /obj/effect/turf_decal/delivery/hollow, /obj/structure/railing{ @@ -7283,7 +7283,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aAo" = ( +"Ao" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -7292,7 +7292,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aAp" = ( +"Ap" = ( /obj/structure/chair{ dir = 1 }, @@ -7301,7 +7301,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aAr" = ( +"Ar" = ( /obj/effect/turf_decal/delivery, /obj/structure/railing{ dir = 1 @@ -7311,7 +7311,7 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"aAs" = ( +"As" = ( /obj/structure/closet/secure_closet, /obj/item/clothing/gloves/color/latex, /obj/item/storage/backpack/satchel_tox, @@ -7324,7 +7324,7 @@ /obj/item/clothing/suit/storage/labcoat, /turf/simulated/floor/carpet/royalblue, /area/ruin/space/moonbase19) -"aAv" = ( +"Av" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; desc = "Your instincts say you shouldn't be following these."; @@ -7338,7 +7338,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aAw" = ( +"Aw" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -7351,37 +7351,37 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aAy" = ( +"Ay" = ( /obj/structure/railing{ dir = 5 }, /obj/structure/closet/l3closet/general, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aAz" = ( +"Az" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"aAA" = ( +"AA" = ( /obj/structure/chair{ dir = 4 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aAH" = ( +"AH" = ( /obj/effect/decal/cleanable/dirt, /obj/item/chair{ pixel_y = -3 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aAI" = ( +"AI" = ( /obj/structure/table, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aAJ" = ( +"AJ" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; desc = "Your instincts say you shouldn't be following these."; @@ -7391,13 +7391,13 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aAL" = ( +"AL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aAM" = ( +"AM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -7408,7 +7408,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aAN" = ( +"AN" = ( /obj/structure/grille/broken, /obj/effect/decal/cleanable/glass, /obj/item/stack/rods, @@ -7417,7 +7417,7 @@ }, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aAO" = ( +"AO" = ( /obj/structure/railing/cap{ dir = 5 }, @@ -7430,10 +7430,10 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aAP" = ( +"AP" = ( /turf/simulated/wall/indestructible/riveted, /area/ruin/space/moonbase19) -"aAQ" = ( +"AQ" = ( /obj/machinery/light/small{ dir = 1 }, @@ -7449,14 +7449,14 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aAR" = ( +"AR" = ( /obj/structure/window/reinforced, /turf/simulated/floor/plasteel{ icon_state = "yellowsiding"; dir = 1 }, /area/ruin/space/moonbase19) -"aAS" = ( +"AS" = ( /obj/structure/chair/office/dark{ dir = 4 }, @@ -7466,7 +7466,7 @@ icon_state = "black" }, /area/ruin/space/moonbase19) -"aAV" = ( +"AV" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/glass/beaker{ pixel_x = -4; @@ -7485,7 +7485,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aAZ" = ( +"AZ" = ( /obj/machinery/atmospherics/unary/tank/air{ dir = 8 }, @@ -7496,7 +7496,7 @@ dir = 6 }, /area/ruin/space/moonbase19) -"aBd" = ( +"Bd" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -7505,19 +7505,19 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aBe" = ( +"Be" = ( /obj/effect/turf_decal/stripes/corner, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"aBg" = ( +"Bg" = ( /turf/simulated/floor/plasteel/stairs{ dir = 1 }, /area/ruin/space/moonbase19) -"aBj" = ( +"Bj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -7530,14 +7530,14 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aBk" = ( +"Bk" = ( /obj/effect/turf_decal/stripes/corner, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aBr" = ( +"Br" = ( /obj/structure/railing{ dir = 4 }, @@ -7549,7 +7549,7 @@ dir = 5 }, /area/ruin/space/moonbase19) -"aBt" = ( +"Bt" = ( /obj/structure/disposalpipe/segment{ desc = "An underfloor disposal pipe. This one has been applied with an acid-proof coating."; dir = 2; @@ -7559,7 +7559,7 @@ /obj/effect/landmark/damageturf, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aBu" = ( +"Bu" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; desc = "Your instincts say you shouldn't be following these."; @@ -7571,7 +7571,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aBv" = ( +"Bv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, @@ -7583,7 +7583,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aBw" = ( +"Bw" = ( /obj/structure/railing/cap{ dir = 6 }, @@ -7595,7 +7595,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aBx" = ( +"Bx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, @@ -7606,7 +7606,7 @@ }, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"aBA" = ( +"BA" = ( /obj/structure/railing{ dir = 4 }, @@ -7618,7 +7618,7 @@ icon_state = "asteroid12" }, /area/ruin/space/moonbase19) -"aBB" = ( +"BB" = ( /obj/structure/railing{ dir = 8 }, @@ -7628,11 +7628,11 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aBC" = ( +"BC" = ( /obj/machinery/economy/vending/boozeomat, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aBE" = ( +"BE" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal{ dir = 4; @@ -7646,7 +7646,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aBF" = ( +"BF" = ( /obj/item/chair{ pixel_y = -6; pixel_x = -3 @@ -7657,7 +7657,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aBI" = ( +"BI" = ( /obj/machinery/door/poddoor/impassable{ id_tag = "awayscilock" }, @@ -7666,12 +7666,12 @@ }, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aBK" = ( +"BK" = ( /obj/structure/railing, /obj/structure/chair, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aBO" = ( +"BO" = ( /obj/machinery/door/airlock/engineering/glass{ req_access_txt = "271"; name = "Engineering Division" @@ -7689,13 +7689,13 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aBQ" = ( +"BQ" = ( /obj/structure/railing{ dir = 9 }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aBY" = ( +"BY" = ( /obj/structure/railing{ dir = 8 }, @@ -7705,7 +7705,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aBZ" = ( +"BZ" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, @@ -7714,20 +7714,20 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aCc" = ( +"Cc" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid6" }, /area/ruin/space/moonbase19) -"aCd" = ( +"Cd" = ( /obj/structure/table, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"aCi" = ( +"Ci" = ( /obj/structure/railing{ dir = 1 }, @@ -7736,7 +7736,7 @@ icon_state = "whitehall" }, /area/ruin/space/moonbase19) -"aCm" = ( +"Cm" = ( /obj/structure/table/glass/reinforced/plastitanium, /obj/item/paper/fluff/ruins/moonoutpost19/boreraccountant, /turf/simulated/floor/plasteel{ @@ -7744,7 +7744,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aCr" = ( +"Cr" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -7759,7 +7759,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aCs" = ( +"Cs" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/remains/human, /turf/simulated/floor/plasteel{ @@ -7767,7 +7767,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aCt" = ( +"Ct" = ( /obj/machinery/door/airlock/highsecurity{ req_access_txt = "271" }, @@ -7779,7 +7779,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aCv" = ( +"Cv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -7798,7 +7798,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aCw" = ( +"Cw" = ( /obj/item/chair{ pixel_x = 4; pixel_y = -3 @@ -7808,7 +7808,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aCy" = ( +"Cy" = ( /obj/structure/rack, /obj/item/mop, /obj/effect/decal/cleanable/dirt, @@ -7817,7 +7817,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aCB" = ( +"CB" = ( /obj/machinery/economy/vending/coffee, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -7825,7 +7825,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aCC" = ( +"CC" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -7835,25 +7835,25 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aCE" = ( +"CE" = ( /obj/structure/table, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, /area/ruin/space/moonbase19) -"aCH" = ( +"CH" = ( /obj/structure/rack, /obj/effect/decal/cleanable/cobweb2, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"aCI" = ( +"CI" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"aCJ" = ( +"CJ" = ( /obj/structure/chair/stool/bar{ dir = 8 }, @@ -7868,14 +7868,14 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"aCL" = ( +"CL" = ( /obj/structure/filingcabinet/chestdrawer, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "black" }, /area/ruin/space/moonbase19) -"aCM" = ( +"CM" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -7886,7 +7886,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aCR" = ( +"CR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -7899,18 +7899,18 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aCS" = ( +"CS" = ( /turf/simulated/floor/plasteel{ dir = 1; icon_state = "escape" }, /area/ruin/space/moonbase19) -"aCV" = ( +"CV" = ( /obj/effect/decal/cleanable/cobweb, /obj/machinery/atmospherics/portable/scrubber, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aCW" = ( +"CW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -7924,11 +7924,11 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aCY" = ( +"CY" = ( /obj/structure/rack, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aCZ" = ( +"CZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -7938,10 +7938,10 @@ /obj/effect/decal/remains/human, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aDa" = ( +"Da" = ( /turf/simulated/floor/plasteel/stairs, /area/ruin/space/moonbase19) -"aDc" = ( +"Dc" = ( /obj/structure/chair/sofa/bench/left{ dir = 1 }, @@ -7950,30 +7950,30 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aDd" = ( +"Dd" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid1" }, /area/ruin/space/moonbase19) -"aDe" = ( +"De" = ( /obj/structure/closet/crate, /obj/item/reagent_containers/glass/beaker/waterbottle, /obj/item/reagent_containers/glass/beaker/waterbottle, -/obj/item/reagent_containers/food/snacks/syndicake, -/obj/item/reagent_containers/food/snacks/syndicake, +/obj/item/food/snacks/syndicake, +/obj/item/food/snacks/syndicake, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"aDf" = ( +"Df" = ( /obj/structure/chair{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aDi" = ( +"Di" = ( /obj/machinery/light{ dir = 8 }, @@ -7982,7 +7982,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aDk" = ( +"Dk" = ( /obj/effect/turf_decal/delivery/white/partial{ dir = 1 }, @@ -7992,12 +7992,12 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aDl" = ( +"Dl" = ( /obj/structure/rack, /obj/item/tank/internals/emergency_oxygen, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aDn" = ( +"Dn" = ( /obj/structure/railing{ dir = 9 }, @@ -8007,14 +8007,14 @@ /obj/machinery/light/small, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aDp" = ( +"Dp" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 10 }, /area/ruin/space/moonbase19) -"aDr" = ( +"Dr" = ( /obj/effect/turf_decal/delivery/hollow, /obj/structure/railing{ dir = 1 @@ -8023,7 +8023,7 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"aDs" = ( +"Ds" = ( /obj/effect/turf_decal/caution/stand_clear{ dir = 8 }, @@ -8035,7 +8035,7 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"aDt" = ( +"Dt" = ( /obj/machinery/door/airlock/medical/glass{ req_access_txt = "271" }, @@ -8050,14 +8050,14 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aDw" = ( +"Dw" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"aDy" = ( +"Dy" = ( /obj/item/kirbyplants, /obj/structure/sign/biohazard{ pixel_y = 32 @@ -8070,7 +8070,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aDA" = ( +"DA" = ( /obj/effect/turf_decal/delivery, /obj/structure/cable{ d1 = 2; @@ -8079,13 +8079,13 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aDB" = ( +"DB" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "cautioncorner" }, /area/ruin/space/moonbase19) -"aDG" = ( +"DG" = ( /obj/structure/chair/sofa/bench/right{ dir = 8 }, @@ -8094,7 +8094,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aDJ" = ( +"DJ" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -8107,7 +8107,7 @@ icon_state = "black" }, /area/ruin/space/moonbase19) -"aDK" = ( +"DK" = ( /obj/structure/railing/cap{ dir = 5 }, @@ -8116,7 +8116,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aDM" = ( +"DM" = ( /obj/structure/rack, /obj/machinery/light/small{ dir = 1 @@ -8124,7 +8124,7 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aDO" = ( +"DO" = ( /obj/machinery/light/small{ dir = 4 }, @@ -8137,12 +8137,12 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"aDR" = ( +"DR" = ( /obj/item/kitchen/utensil/spoon, /obj/structure/table, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aDU" = ( +"DU" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1; initialize_directions = 14 @@ -8152,18 +8152,18 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aDV" = ( +"DV" = ( /obj/structure/closet/crate, -/obj/item/reagent_containers/food/snacks/beans, +/obj/item/food/snacks/beans, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aEf" = ( +"Ef" = ( /turf/simulated/floor/plasteel{ dir = 8; icon_state = "dark" }, /area/ruin/space/moonbase19) -"aEg" = ( +"Eg" = ( /obj/effect/decal/cleanable/blood/xeno{ color = "green" }, @@ -8176,7 +8176,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aEl" = ( +"El" = ( /obj/machinery/light/small{ dir = 1 }, @@ -8196,7 +8196,7 @@ icon_state = "whitehall" }, /area/ruin/space/moonbase19) -"aEm" = ( +"Em" = ( /obj/structure/rack, /obj/effect/decal/cleanable/cobweb2, /obj/item/clothing/mask/facehugger{ @@ -8217,7 +8217,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aEo" = ( +"Eo" = ( /obj/structure/filingcabinet, /obj/structure/sign/poster/official/fruit_bowl{ pixel_y = 32 @@ -8225,7 +8225,7 @@ /obj/item/paper/fluff/ruins/moonoutpost19/rdnote, /turf/simulated/floor/carpet/royalblue, /area/ruin/space/moonbase19) -"aEp" = ( +"Ep" = ( /obj/item/kirbyplants, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -8233,7 +8233,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aEr" = ( +"Er" = ( /obj/structure/railing/corner{ dir = 8 }, @@ -8247,7 +8247,7 @@ icon_state = "black" }, /area/ruin/space/moonbase19) -"aEs" = ( +"Es" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -8270,13 +8270,13 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aEt" = ( +"Et" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid1" }, /area/ruin/space/moonbase19) -"aEv" = ( +"Ev" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -8284,9 +8284,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aEx" = ( +"Ex" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread{ +/obj/item/food/snacks/sliceable/xenomeatbread{ pixel_y = 5 }, /obj/effect/turf_decal/delivery, @@ -8295,18 +8295,18 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aEy" = ( +"Ey" = ( /obj/machinery/shower{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/noslip, /area/ruin/space/moonbase19) -"aEE" = ( +"EE" = ( /obj/item/stack/ore/slag, /turf/simulated/floor/plating/airless, /area/space/nearstation) -"aEF" = ( +"EF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, @@ -8323,12 +8323,12 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aEH" = ( +"EH" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/decal/cleanable/vomit/green, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"aEL" = ( +"EL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, @@ -8338,7 +8338,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aEN" = ( +"EN" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/greenglow, /turf/simulated/floor/plasteel{ @@ -8346,18 +8346,18 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aEP" = ( +"EP" = ( /obj/machinery/light/small, /turf/simulated/floor/plasteel{ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aEQ" = ( +"EQ" = ( /obj/structure/window/reinforced, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aER" = ( +"ER" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 5 }, @@ -8368,7 +8368,7 @@ icon_state = "yellowsiding" }, /area/ruin/space/moonbase19) -"aET" = ( +"ET" = ( /obj/effect/decal/cleanable/cobweb, /obj/structure/table, /turf/simulated/floor/plasteel{ @@ -8376,7 +8376,7 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"aEV" = ( +"EV" = ( /obj/structure/closet, /obj/item/soap, /obj/item/storage/box/lights/mixed, @@ -8386,14 +8386,14 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aEZ" = ( +"EZ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/xeno{ color = "green" }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aFa" = ( +"Fa" = ( /obj/effect/turf_decal/delivery/white/partial{ dir = 1 }, @@ -8405,13 +8405,13 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aFb" = ( +"Fb" = ( /obj/structure/chair/office/dark{ dir = 4 }, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"aFc" = ( +"Fc" = ( /obj/structure/cable{ d1 = 1; d2 = 8; @@ -8422,7 +8422,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aFd" = ( +"Fd" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -8430,7 +8430,7 @@ /mob/living/simple_animal/hostile/alien/sentinel, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aFe" = ( +"Fe" = ( /obj/structure/table/reinforced, /obj/item/stock_parts/cell/high, /obj/structure/cable{ @@ -8440,7 +8440,7 @@ }, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"aFf" = ( +"Ff" = ( /obj/machinery/computer{ dir = 1 }, @@ -8449,14 +8449,14 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aFk" = ( +"Fk" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 4 }, /area/ruin/space/moonbase19) -"aFm" = ( +"Fm" = ( /obj/structure/safe, /obj/machinery/light/small{ dir = 4 @@ -8469,7 +8469,7 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"aFo" = ( +"Fo" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -8479,7 +8479,7 @@ /obj/machinery/atmospherics/air_sensor, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"aFp" = ( +"Fp" = ( /obj/structure/sink{ dir = 4; pixel_x = 12 @@ -8489,12 +8489,12 @@ temperature = 273.15 }, /area/ruin/space/moonbase19) -"aFq" = ( +"Fq" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/brflowers, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"aFs" = ( +"Fs" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/greenglow, /obj/item/clothing/mask/facehugger{ @@ -8504,7 +8504,7 @@ }, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aFt" = ( +"Ft" = ( /obj/effect/turf_decal/stripes/corner, /mob/living/simple_animal/hostile/alien/sentinel, /obj/effect/decal/cleanable/blood/splatter{ @@ -8515,25 +8515,25 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aFw" = ( +"Fw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aFz" = ( +"Fz" = ( /obj/structure/disposalpipe/segment/corner{ dir = 8 }, /turf/simulated/wall/r_wall, /area/ruin/space/moonbase19) -"aFB" = ( +"FB" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aFC" = ( +"FC" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plasteel{ @@ -8541,7 +8541,7 @@ dir = 10 }, /area/ruin/space/moonbase19) -"aFH" = ( +"FH" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, @@ -8550,7 +8550,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aFM" = ( +"FM" = ( /obj/structure/railing{ dir = 8 }, @@ -8559,7 +8559,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aFN" = ( +"FN" = ( /obj/structure/reagent_dispensers/watertank, /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plasteel{ @@ -8567,7 +8567,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aFO" = ( +"FO" = ( /obj/item/kirbyplants, /obj/structure/railing{ dir = 1 @@ -8577,7 +8577,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aFP" = ( +"FP" = ( /obj/structure/mopbucket, /obj/machinery/light/small{ dir = 1 @@ -8587,7 +8587,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aFT" = ( +"FT" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plasteel{ @@ -8595,7 +8595,7 @@ icon_state = "whitecorner" }, /area/ruin/space/moonbase19) -"aFV" = ( +"FV" = ( /obj/item/kirbyplants, /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/plasteel{ @@ -8603,7 +8603,7 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"aFW" = ( +"FW" = ( /obj/structure/flora/ausbushes/grassybush, /obj/structure/flora/ausbushes/ywflowers, /obj/machinery/light/small{ @@ -8611,20 +8611,20 @@ }, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"aFX" = ( +"FX" = ( /obj/structure/railing{ dir = 1 }, /obj/structure/chair/sofa/bench, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aFY" = ( +"FY" = ( /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"aFZ" = ( +"FZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/air_sensor, @@ -8635,7 +8635,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aGd" = ( +"Gd" = ( /obj/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -8645,14 +8645,14 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aGe" = ( +"Ge" = ( /obj/structure/closet/crate/secure/loot, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aGg" = ( +"Gg" = ( /turf/simulated/mineral/ancient, /area/ruin/space/moonbase19) -"aGh" = ( +"Gh" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plasteel{ @@ -8660,7 +8660,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aGk" = ( +"Gk" = ( /obj/machinery/door/airlock/medical/glass{ req_access_txt = "271"; name = "Operation Room" @@ -8670,7 +8670,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aGl" = ( +"Gl" = ( /obj/structure/railing/cap{ dir = 9 }, @@ -8680,7 +8680,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aGp" = ( +"Gp" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -8691,7 +8691,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aGq" = ( +"Gq" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -8699,7 +8699,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aGs" = ( +"Gs" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, @@ -8720,7 +8720,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aGw" = ( +"Gw" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -8740,25 +8740,25 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aGx" = ( +"Gx" = ( /obj/structure/closet/crate/freezer, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor"; temperature = 273.15 }, /area/ruin/space/moonbase19) -"aGy" = ( +"Gy" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/grille/broken, /obj/item/stack/rods, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aGz" = ( +"Gz" = ( /obj/structure/table/wood, /obj/item/toy/plushie/slimeplushie, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"aGC" = ( +"GC" = ( /obj/effect/turf_decal/caution/stand_clear/white{ dir = 8 }, @@ -8767,7 +8767,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aGD" = ( +"GD" = ( /obj/structure/holosign/barrier/engineering, /obj/effect/landmark/damageturf, /obj/structure/cable{ @@ -8780,7 +8780,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aGH" = ( +"GH" = ( /obj/machinery/light/small{ dir = 8 }, @@ -8789,7 +8789,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aGJ" = ( +"GJ" = ( /obj/structure/railing{ dir = 1 }, @@ -8805,7 +8805,7 @@ icon_state = "green" }, /area/ruin/space/moonbase19) -"aGL" = ( +"GL" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/splatter{ color = "red" @@ -8815,7 +8815,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aGP" = ( +"GP" = ( /obj/machinery/computer, /obj/structure/window/reinforced{ dir = 8 @@ -8828,19 +8828,19 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aGS" = ( +"GS" = ( /obj/structure/grille/broken, /obj/effect/decal/cleanable/glass, /obj/item/stack/rods, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aGT" = ( +"GT" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"aGX" = ( +"GX" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -8848,7 +8848,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aHb" = ( +"Hb" = ( /obj/structure/table/wood, /obj/item/toy/plushie/greyplushie{ pixel_x = -7 @@ -8859,7 +8859,7 @@ }, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"aHd" = ( +"Hd" = ( /obj/machinery/light/small{ dir = 4 }, @@ -8869,7 +8869,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aHg" = ( +"Hg" = ( /obj/structure/table/reinforced, /obj/machinery/door/window{ dir = 8 @@ -8877,11 +8877,11 @@ /obj/machinery/door/poddoor/shutters/preopen{ id_tag = "awaykitchen" }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_y = 10; pixel_x = -1 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 7; pixel_x = 11 }, @@ -8890,7 +8890,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aHh" = ( +"Hh" = ( /obj/structure/railing/cap{ dir = 10 }, @@ -8898,7 +8898,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aHj" = ( +"Hj" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -8907,7 +8907,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aHm" = ( +"Hm" = ( /obj/structure/railing, /obj/effect/decal/cleanable/blood/splatter{ color = "red" @@ -8917,14 +8917,14 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aHp" = ( +"Hp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, /obj/structure/table, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aHq" = ( +"Hq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -8933,7 +8933,7 @@ dir = 10 }, /area/ruin/space/moonbase19) -"aHr" = ( +"Hr" = ( /obj/structure/railing{ dir = 8 }, @@ -8946,13 +8946,13 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aHu" = ( +"Hu" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "yellowsiding" }, /area/ruin/space/moonbase19) -"aHv" = ( +"Hv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, @@ -8966,7 +8966,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aHx" = ( +"Hx" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -8975,21 +8975,21 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aHA" = ( +"HA" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 10 }, /area/ruin/space/moonbase19) -"aHE" = ( +"HE" = ( /obj/structure/chair/sofa/bench/right, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, /area/ruin/space/moonbase19) -"aHL" = ( +"HL" = ( /obj/machinery/light{ active_power_consumption = 0; dir = 1; @@ -9003,7 +9003,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aHM" = ( +"HM" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, /obj/structure/cable{ @@ -9022,7 +9022,7 @@ }, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"aHO" = ( +"HO" = ( /obj/machinery/door/airlock/highsecurity{ req_access_txt = "271"; name = "Chamber #1" @@ -9033,13 +9033,13 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aHP" = ( +"HP" = ( /obj/item/chair{ pixel_y = -3 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aHU" = ( +"HU" = ( /obj/structure/rack, /obj/item/stack/sheet/metal/fifty{ pixel_x = 2; @@ -9053,7 +9053,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aHV" = ( +"HV" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/decal/cleanable/dirt, @@ -9062,14 +9062,14 @@ dir = 9 }, /area/ruin/space/moonbase19) -"aHW" = ( +"HW" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/largecrate, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"aHY" = ( +"HY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -9081,12 +9081,12 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aIb" = ( +"Ib" = ( /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid11" }, /area/ruin/space/moonbase19) -"aIc" = ( +"Ic" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/railing{ dir = 1 @@ -9094,15 +9094,15 @@ /obj/structure/table, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aIe" = ( +"Ie" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/generic, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aIf" = ( +"If" = ( /turf/simulated/floor/bluegrid, /area/ruin/space/moonbase19) -"aIj" = ( +"Ij" = ( /obj/machinery/light/small{ dir = 1 }, @@ -9115,13 +9115,13 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aIo" = ( +"Io" = ( /turf/simulated/floor/plasteel{ icon_state = "darkbluecorners"; dir = 1 }, /area/ruin/space/moonbase19) -"aIp" = ( +"Ip" = ( /obj/structure/cable{ d1 = 1; d2 = 4; @@ -9129,7 +9129,7 @@ }, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"aIq" = ( +"Iq" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -9137,7 +9137,7 @@ /obj/structure/alien/weeds/node, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"aIx" = ( +"Ix" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, @@ -9146,11 +9146,11 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aIz" = ( +"Iz" = ( /obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aIB" = ( +"IB" = ( /obj/machinery/light/small{ dir = 4 }, @@ -9160,7 +9160,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aIC" = ( +"IC" = ( /obj/structure/railing{ dir = 4 }, @@ -9169,7 +9169,7 @@ icon_state = "asteroid1" }, /area/ruin/space/moonbase19) -"aID" = ( +"ID" = ( /obj/structure/bed, /obj/item/bedsheet/medical, /obj/machinery/iv_drip, @@ -9178,7 +9178,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aIE" = ( +"IE" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -9187,7 +9187,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aIH" = ( +"IH" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -9195,7 +9195,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aIJ" = ( +"IJ" = ( /obj/structure/window/reinforced{ dir = 1 }, @@ -9212,7 +9212,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aIM" = ( +"IM" = ( /obj/structure/chair{ dir = 8 }, @@ -9225,12 +9225,12 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aIN" = ( +"IN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/landmark/damageturf, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aIO" = ( +"IO" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/machinery/light/small{ dir = 4 @@ -9241,7 +9241,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aIS" = ( +"IS" = ( /obj/effect/turf_decal/stripes/corner, /obj/structure/filingcabinet/chestdrawer, /obj/machinery/light/small{ @@ -9253,7 +9253,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aIU" = ( +"IU" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/airlock/highsecurity{ req_access_txt = "271"; @@ -9264,14 +9264,14 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aIV" = ( +"IV" = ( /obj/machinery/light/small, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aIW" = ( +"IW" = ( /turf/simulated/floor/engine/vacuum, /area/space/nearstation) -"aIZ" = ( +"IZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -9289,27 +9289,27 @@ }, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aJc" = ( +"Jc" = ( /obj/structure/rack, /turf/simulated/floor/plasteel{ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aJi" = ( +"Ji" = ( /obj/structure/railing/cap, /turf/simulated/floor/plasteel{ icon_state = "whitehall"; dir = 1 }, /area/ruin/space/moonbase19) -"aJl" = ( +"Jl" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, /obj/structure/alien/resin/wall, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"aJm" = ( +"Jm" = ( /obj/structure/punching_bag, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel{ @@ -9317,20 +9317,20 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aJo" = ( +"Jo" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aJr" = ( +"Jr" = ( /obj/structure/alien/resin/wall, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aJu" = ( +"Ju" = ( /obj/machinery/autolathe, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"aJv" = ( +"Jv" = ( /obj/effect/decal/cleanable/dirt, /obj/item/chair{ pixel_x = -1; @@ -9342,7 +9342,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aJx" = ( +"Jx" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 8 @@ -9351,13 +9351,13 @@ icon_state = "whitecorner" }, /area/ruin/space/moonbase19) -"aJy" = ( +"Jy" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aJz" = ( +"Jz" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4; initialize_directions = 11 @@ -9365,14 +9365,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aJA" = ( +"JA" = ( /obj/structure/table/glass, /obj/item/storage/backpack/duffel/medical, /turf/simulated/floor/plasteel{ icon_state = "darkblue" }, /area/ruin/space/moonbase19) -"aJB" = ( +"JB" = ( /obj/item/clothing/gloves/color/black, /obj/item/stack/tape_roll, /obj/machinery/light/small, @@ -9381,18 +9381,18 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aJE" = ( +"JE" = ( /obj/machinery/door/airlock/external{ req_access_txt = "271" }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aJG" = ( +"JG" = ( /obj/structure/flora/ash/rock/style_random, /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"aJI" = ( +"JI" = ( /obj/structure/railing/cap{ dir = 10 }, @@ -9401,14 +9401,14 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aJJ" = ( +"JJ" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 5 }, /area/ruin/space/moonbase19) -"aJK" = ( +"JK" = ( /obj/effect/turf_decal/delivery/partial, /obj/effect/turf_decal/caution{ pixel_y = -4 @@ -9420,13 +9420,13 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"aJL" = ( +"JL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, /turf/simulated/floor/carpet/royalblue, /area/ruin/space/moonbase19) -"aJN" = ( +"JN" = ( /obj/structure/chair{ dir = 1 }, @@ -9437,28 +9437,28 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aJP" = ( +"JP" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/machinery/newscaster{ pixel_y = 30 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aJQ" = ( +"JQ" = ( /obj/structure/window/reinforced{ dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aJR" = ( +"JR" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/structure/sign/poster/official/nanotrasen_logo{ pixel_y = 32 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aJS" = ( +"JS" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -9474,7 +9474,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aJU" = ( +"JU" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/power/apc/off_station/empty_charge{ cell_type = 15000; @@ -9501,21 +9501,21 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aJW" = ( +"JW" = ( /obj/machinery/light/small{ dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"aJZ" = ( +"JZ" = ( /obj/structure/table/wood, /obj/item/lighter/zippo, /obj/effect/decal/cleanable/dirt, /obj/item/toy/plushie/tabby_cat, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"aKa" = ( +"Ka" = ( /obj/item/chair{ pixel_y = -3 }, @@ -9530,14 +9530,14 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aKb" = ( +"Kb" = ( /obj/structure/barricade/wooden/crude{ layer = 4 }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aKc" = ( +"Kc" = ( /obj/structure/railing/cap, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -9545,14 +9545,14 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aKd" = ( +"Kd" = ( /obj/structure/table, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "whitecorner" }, /area/ruin/space/moonbase19) -"aKi" = ( +"Ki" = ( /obj/machinery/light/small{ dir = 4 }, @@ -9561,7 +9561,7 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"aKm" = ( +"Km" = ( /obj/structure/railing{ dir = 6 }, @@ -9570,13 +9570,13 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aKp" = ( +"Kp" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aKr" = ( +"Kr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -9591,7 +9591,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aKt" = ( +"Kt" = ( /obj/machinery/light/small{ dir = 4 }, @@ -9601,34 +9601,34 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aKu" = ( +"Ku" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "green" }, /area/ruin/space/moonbase19) -"aKv" = ( +"Kv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aKx" = ( +"Kx" = ( /obj/structure/closet/toolcloset, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"aKz" = ( +"Kz" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "escape"; dir = 4 }, /area/ruin/space/moonbase19) -"aKC" = ( +"KC" = ( /obj/machinery/disposal/deliveryChute, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -9645,7 +9645,7 @@ /obj/machinery/door/window/reinforced/normal, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aKE" = ( +"KE" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, @@ -9654,7 +9654,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aKG" = ( +"KG" = ( /obj/structure/railing/cap{ dir = 9 }, @@ -9668,7 +9668,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aKI" = ( +"KI" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -9676,13 +9676,13 @@ /obj/effect/turf_decal/box, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"aKJ" = ( +"KJ" = ( /obj/structure/railing{ dir = 4 }, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"aKN" = ( +"KN" = ( /obj/structure/railing{ dir = 4 }, @@ -9692,13 +9692,13 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aKO" = ( +"KO" = ( /turf/simulated/floor/plasteel{ dir = 8; icon_state = "cautioncorner" }, /area/ruin/space/moonbase19) -"aKP" = ( +"KP" = ( /obj/machinery/light{ dir = 4 }, @@ -9721,7 +9721,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aKQ" = ( +"KQ" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, @@ -9730,14 +9730,14 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aKR" = ( +"KR" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aKS" = ( +"KS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -9750,11 +9750,11 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aKW" = ( +"KW" = ( /obj/structure/chair/sofa/bench/right, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aKZ" = ( +"KZ" = ( /obj/machinery/door/poddoor/impassable{ id_tag = "awaycontlockdown" }, @@ -9765,7 +9765,7 @@ /obj/effect/spawner/window/reinforced/tinted/grilled, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aLa" = ( +"La" = ( /obj/structure/closet/crate/freezer, /obj/item/clothing/mask/facehugger{ icon_state = "facehugger_impregnated"; @@ -9776,12 +9776,12 @@ icon_state = "darkbluecorners" }, /area/ruin/space/moonbase19) -"aLb" = ( +"Lb" = ( /obj/structure/rack, /obj/effect/landmark/damageturf, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aLd" = ( +"Ld" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -9794,7 +9794,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aLf" = ( +"Lf" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -9805,7 +9805,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aLj" = ( +"Lj" = ( /obj/effect/decal/cleanable/dirt, /obj/item/chair{ pixel_x = -1; @@ -9817,7 +9817,7 @@ dir = 9 }, /area/ruin/space/moonbase19) -"aLk" = ( +"Lk" = ( /obj/machinery/light/small{ dir = 1 }, @@ -9828,21 +9828,21 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aLl" = ( +"Ll" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "escape" }, /area/ruin/space/moonbase19) -"aLn" = ( +"Ln" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"aLq" = ( +"Lq" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 }, @@ -9851,7 +9851,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aLw" = ( +"Lw" = ( /obj/structure/railing{ dir = 4 }, @@ -9859,7 +9859,7 @@ icon_state = "asteroid4" }, /area/ruin/space/moonbase19) -"aLz" = ( +"Lz" = ( /obj/structure/railing{ dir = 4 }, @@ -9870,17 +9870,17 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aLA" = ( +"LA" = ( /obj/structure/shuttle/engine/propulsion/burst, /turf/simulated/wall/mineral/titanium, /area/ruin/space/moonbase19) -"aLC" = ( +"LC" = ( /obj/structure/largecrate, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid3" }, /area/ruin/space/moonbase19) -"aLD" = ( +"LD" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -9890,7 +9890,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aLG" = ( +"LG" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb2, /obj/structure/table, @@ -9899,7 +9899,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aLJ" = ( +"LJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, @@ -9913,7 +9913,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aLK" = ( +"LK" = ( /obj/structure/filingcabinet/chestdrawer, /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -9925,19 +9925,19 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aLL" = ( +"LL" = ( /obj/structure/table/reinforced, /obj/item/paper_bin{ pixel_x = 6; pixel_y = 5 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 3; pixel_x = -7 }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aLS" = ( +"LS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, @@ -9947,21 +9947,21 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aLY" = ( +"LY" = ( /obj/structure/railing{ dir = 1 }, /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"aLZ" = ( +"LZ" = ( /obj/structure/disposalpipe/trunk{ dir = 1 }, /obj/structure/disposaloutlet, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"aMe" = ( +"Me" = ( /obj/effect/turf_decal/stripes/asteroid/line, /obj/structure/railing, /obj/structure/railing/cap{ @@ -9971,7 +9971,7 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"aMg" = ( +"Mg" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -9981,7 +9981,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aMk" = ( +"Mk" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -9991,20 +9991,20 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aMl" = ( +"Ml" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"aMn" = ( +"Mn" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, /area/ruin/space/moonbase19) -"aMp" = ( +"Mp" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/railing/corner{ dir = 1 @@ -10014,7 +10014,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aMq" = ( +"Mq" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -10028,7 +10028,7 @@ icon_state = "black" }, /area/ruin/space/moonbase19) -"aMt" = ( +"Mt" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, @@ -10037,7 +10037,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aMv" = ( +"Mv" = ( /obj/structure/rack, /obj/item/storage/toolbox/mechanical{ pixel_x = 2; @@ -10052,20 +10052,20 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aMx" = ( +"Mx" = ( /obj/machinery/door/airlock/maintenance_hatch{ req_access_txt = "271" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aMy" = ( +"My" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aMz" = ( +"Mz" = ( /obj/item/t_scanner, /obj/structure/table, /turf/simulated/floor/plasteel{ @@ -10073,7 +10073,7 @@ icon_state = "cautioncorner" }, /area/ruin/space/moonbase19) -"aMF" = ( +"MF" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/newscaster{ pixel_y = -30 @@ -10088,7 +10088,7 @@ dir = 6 }, /area/ruin/space/moonbase19) -"aMG" = ( +"MG" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -10101,21 +10101,21 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aMH" = ( +"MH" = ( /obj/structure/closet/emcloset, /obj/structure/window/basic{ dir = 4 }, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aMI" = ( +"MI" = ( /obj/structure/chair/sofa/bench, /obj/machinery/light/small{ dir = 1 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aMJ" = ( +"MJ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ d1 = 1; @@ -10124,7 +10124,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aMK" = ( +"MK" = ( /obj/machinery/door_control{ id = "awaykitchen"; name = "kitchen shutters control"; @@ -10135,7 +10135,7 @@ dir = 5 }, /area/ruin/space/moonbase19) -"aMN" = ( +"MN" = ( /obj/effect/decal/cleanable/cobweb2, /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -10145,7 +10145,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aMS" = ( +"MS" = ( /obj/effect/turf_decal/stripes/corner, /obj/machinery/light/small, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -10162,17 +10162,17 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aMT" = ( +"MT" = ( /obj/structure/lattice, /turf/template_noop, /area/space/nearstation) -"aMU" = ( +"MU" = ( /obj/machinery/light{ dir = 1 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aMY" = ( +"MY" = ( /obj/item/kirbyplants, /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/effect/decal/cleanable/cobweb2, @@ -10181,13 +10181,13 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aMZ" = ( +"MZ" = ( /obj/structure/railing/corner{ dir = 8 }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aNb" = ( +"Nb" = ( /obj/structure/chair/sofa/bench{ dir = 1 }, @@ -10195,7 +10195,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aNc" = ( +"Nc" = ( /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -10203,7 +10203,7 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aNd" = ( +"Nd" = ( /obj/structure/filingcabinet/chestdrawer, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -10211,7 +10211,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aNe" = ( +"Ne" = ( /obj/structure/table/reinforced, /obj/machinery/flasher_button{ pixel_y = -1 @@ -10234,11 +10234,11 @@ dir = 5 }, /area/ruin/space/moonbase19) -"aNi" = ( +"Ni" = ( /obj/structure/falsewall/rock_ancient, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"aNm" = ( +"Nm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -10254,7 +10254,7 @@ icon_state = "cautioncorner" }, /area/ruin/space/moonbase19) -"aNn" = ( +"Nn" = ( /obj/machinery/camera{ c_tag = "South Cafeteria"; dir = 5; @@ -10268,7 +10268,7 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"aNp" = ( +"Np" = ( /obj/structure/chair/sofa/bench{ dir = 4 }, @@ -10280,7 +10280,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aNu" = ( +"Nu" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 8 @@ -10296,12 +10296,12 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aNv" = ( +"Nv" = ( /obj/effect/decal/cleanable/cobweb2, /obj/structure/grille/broken, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aNx" = ( +"Nx" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -10312,7 +10312,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aNy" = ( +"Ny" = ( /obj/structure/alien/resin/wall, /obj/structure/cable{ d1 = 1; @@ -10324,7 +10324,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aNC" = ( +"NC" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; desc = "Your instincts say you shouldn't be following these."; @@ -10336,7 +10336,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aNE" = ( +"NE" = ( /obj/machinery/light/small{ active_power_consumption = 0; dir = 1; @@ -10347,7 +10347,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"aNF" = ( +"NF" = ( /obj/structure/railing, /obj/effect/turf_decal/delivery/red/partial{ dir = 1 @@ -10357,14 +10357,14 @@ icon_state = "black" }, /area/ruin/space/moonbase19) -"aNJ" = ( +"NJ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, /area/ruin/space/moonbase19) -"aNM" = ( +"NM" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -10379,14 +10379,14 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aNS" = ( +"NS" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aNT" = ( +"NT" = ( /obj/effect/decal/cleanable/cobweb, /obj/effect/decal/cleanable/dirt, /obj/item/clothing/head/det_hat{ @@ -10402,14 +10402,14 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"aNU" = ( +"NU" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/oil{ color = "black" }, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aNZ" = ( +"NZ" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ dir = 4 @@ -10425,7 +10425,7 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"aOa" = ( +"Oa" = ( /obj/structure/chair/sofa/bench{ dir = 1 }, @@ -10434,13 +10434,13 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aOb" = ( +"Ob" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid12" }, /area/ruin/space/moonbase19) -"aOc" = ( +"Oc" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/splatter{ color = "red" @@ -10450,7 +10450,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aOd" = ( +"Od" = ( /obj/item/kirbyplants, /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/plasteel{ @@ -10458,7 +10458,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aOe" = ( +"Oe" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/reinforced/normal{ dir = 1 @@ -10468,18 +10468,18 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aOf" = ( +"Of" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aOg" = ( +"Og" = ( /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 8 }, /area/ruin/space/moonbase19) -"aOi" = ( +"Oi" = ( /obj/effect/decal/cleanable/blood/tracks{ color = "red"; desc = "Your instincts say you shouldn't be following these."; @@ -10492,7 +10492,7 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"aOj" = ( +"Oj" = ( /obj/structure/table/glass, /obj/item/storage/fancy/donut_box, /obj/effect/decal/cleanable/dirt, @@ -10501,7 +10501,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aOl" = ( +"Ol" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, @@ -10515,7 +10515,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aOm" = ( +"Om" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -10525,7 +10525,7 @@ icon_state = "cautioncorner" }, /area/ruin/space/moonbase19) -"aOn" = ( +"On" = ( /obj/structure/safe/floor{ known_by = list("captain") }, @@ -10537,7 +10537,7 @@ /obj/item/coin/adamantine, /turf/simulated/floor/carpet/royalblue, /area/ruin/space/moonbase19) -"aOo" = ( +"Oo" = ( /obj/item/kirbyplants, /obj/machinery/light/small{ dir = 1 @@ -10550,21 +10550,21 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aOp" = ( +"Op" = ( /obj/structure/window/reinforced, /obj/structure/table, /turf/simulated/floor/plasteel{ icon_state = "black" }, /area/ruin/space/moonbase19) -"aOq" = ( +"Oq" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "yellowsiding"; dir = 6 }, /area/ruin/space/moonbase19) -"aOs" = ( +"Os" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -10574,7 +10574,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aOt" = ( +"Ot" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, @@ -10584,13 +10584,13 @@ /obj/effect/decal/remains/human, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aOu" = ( +"Ou" = ( /obj/structure/rack, /turf/simulated/floor/plasteel{ icon_state = "escape" }, /area/ruin/space/moonbase19) -"aOx" = ( +"Ox" = ( /obj/machinery/light{ active_power_consumption = 0; icon_state = "tube-broken"; @@ -10598,7 +10598,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aOD" = ( +"OD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ @@ -10606,7 +10606,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aOE" = ( +"OE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -10616,10 +10616,10 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aOG" = ( +"OG" = ( /turf/simulated/wall/mineral/titanium, /area/ruin/space/moonbase19) -"aOL" = ( +"OL" = ( /obj/structure/railing/cap{ dir = 1 }, @@ -10629,7 +10629,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aOM" = ( +"OM" = ( /obj/effect/decal/cleanable/cobweb, /obj/item/shard{ icon_state = "medium" @@ -10639,17 +10639,17 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aON" = ( +"ON" = ( /turf/template_noop, /area/space/nearstation) -"aOO" = ( +"OO" = ( /obj/item/stack/sheet/metal, /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 4 }, /area/ruin/space/moonbase19) -"aOP" = ( +"OP" = ( /obj/machinery/light/small{ dir = 4 }, @@ -10660,7 +10660,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aOT" = ( +"OT" = ( /obj/effect/turf_decal/delivery/partial{ dir = 4 }, @@ -10674,13 +10674,13 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aOW" = ( +"OW" = ( /obj/structure/railing{ dir = 10 }, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"aOX" = ( +"OX" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -10692,7 +10692,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aOZ" = ( +"OZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -10701,7 +10701,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aPa" = ( +"Pa" = ( /obj/structure/table/glass, /obj/machinery/light/small{ dir = 1 @@ -10711,7 +10711,7 @@ icon_state = "darkblue" }, /area/ruin/space/moonbase19) -"aPd" = ( +"Pd" = ( /obj/machinery/light/small{ active_power_consumption = 0; dir = 1; @@ -10720,21 +10720,21 @@ }, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"aPf" = ( +"Pf" = ( /obj/structure/railing/cap{ dir = 1 }, /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"aPh" = ( +"Ph" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 4 }, /area/ruin/space/moonbase19) -"aPj" = ( +"Pj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ d1 = 1; @@ -10746,7 +10746,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aPo" = ( +"Po" = ( /obj/structure/alien/resin/wall, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -10754,7 +10754,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aPq" = ( +"Pq" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -10762,10 +10762,10 @@ /obj/machinery/atmospherics/air_sensor, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"aPr" = ( +"Pr" = ( /turf/simulated/floor/carpet/royalblue, /area/ruin/space/moonbase19) -"aPs" = ( +"Ps" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -10774,7 +10774,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aPt" = ( +"Pt" = ( /obj/structure/chair/comfy/brown{ dir = 4 }, @@ -10783,7 +10783,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aPv" = ( +"Pv" = ( /obj/structure/chair/office/dark{ dir = 4 }, @@ -10792,26 +10792,26 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aPA" = ( +"PA" = ( /turf/simulated/floor/plasteel{ icon_state = "yellowsiding"; dir = 10 }, /area/ruin/space/moonbase19) -"aPB" = ( +"PB" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/grille, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aPE" = ( +"PE" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/badrecipe, +/obj/item/food/snacks/badrecipe, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor"; temperature = 273.15 }, /area/ruin/space/moonbase19) -"aPF" = ( +"PF" = ( /obj/machinery/door/airlock/security{ req_access_txt = "271"; name = "Security Checkpoint" @@ -10821,25 +10821,25 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aPK" = ( +"PK" = ( /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, /area/ruin/space/moonbase19) -"aPL" = ( +"PL" = ( /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aPM" = ( +"PM" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, /obj/effect/landmark/damageturf, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aPP" = ( +"PP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -10852,20 +10852,20 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aPQ" = ( +"PQ" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "caution" }, /area/ruin/space/moonbase19) -"aPS" = ( +"PS" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid5" }, /area/ruin/space/moonbase19) -"aPT" = ( +"PT" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -10877,7 +10877,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"aPU" = ( +"PU" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, @@ -10886,7 +10886,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aPY" = ( +"PY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -10907,19 +10907,19 @@ }, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aPZ" = ( +"PZ" = ( /obj/structure/railing{ dir = 8 }, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"aQc" = ( +"Qc" = ( /obj/structure/railing/cap{ dir = 10 }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aQe" = ( +"Qe" = ( /obj/structure/railing/cap{ dir = 1 }, @@ -10929,14 +10929,14 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aQf" = ( +"Qf" = ( /obj/effect/landmark/damageturf, /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 4 }, /area/ruin/space/moonbase19) -"aQh" = ( +"Qh" = ( /obj/structure/cable{ d1 = 2; d2 = 8; @@ -10944,7 +10944,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aQj" = ( +"Qj" = ( /obj/machinery/light/small{ active_power_consumption = 0; dir = 1; @@ -10954,11 +10954,11 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"aQk" = ( +"Qk" = ( /mob/living/simple_animal/hostile/alien, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aQl" = ( +"Ql" = ( /obj/structure/chair/sofa/bench/right{ dir = 1 }, @@ -10972,12 +10972,12 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aQm" = ( +"Qm" = ( /obj/structure/flora/junglebush, /obj/structure/flora/ausbushes/ywflowers, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"aQn" = ( +"Qn" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, @@ -10989,7 +10989,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aQt" = ( +"Qt" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -11002,7 +11002,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aQu" = ( +"Qu" = ( /obj/structure/rack, /obj/item/stack/sheet/mineral/plasma{ amount = 30 @@ -11015,7 +11015,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aQv" = ( +"Qv" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 }, @@ -11023,7 +11023,7 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"aQx" = ( +"Qx" = ( /obj/structure/table/reinforced, /obj/machinery/door/window{ dir = 8 @@ -11033,7 +11033,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aQy" = ( +"Qy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -11043,7 +11043,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aQz" = ( +"Qz" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/tracks{ color = "red"; @@ -11053,7 +11053,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aQB" = ( +"QB" = ( /obj/structure/sign/biohazard{ pixel_y = 32 }, @@ -11061,7 +11061,7 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aQD" = ( +"QD" = ( /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -11070,14 +11070,14 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aQE" = ( +"QE" = ( /obj/structure/table/reinforced, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"aQF" = ( +"QF" = ( /obj/structure/railing{ dir = 4 }, @@ -11088,7 +11088,7 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aQG" = ( +"QG" = ( /obj/structure/railing{ dir = 1 }, @@ -11097,7 +11097,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aQI" = ( +"QI" = ( /obj/structure/railing/cap{ dir = 10 }, @@ -11106,11 +11106,11 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aQK" = ( +"QK" = ( /obj/machinery/light/small, /turf/simulated/floor/carpet/royalblue, /area/ruin/space/moonbase19) -"aQL" = ( +"QL" = ( /obj/effect/decal/cleanable/glass, /obj/item/shard{ icon_state = "medium" @@ -11118,7 +11118,7 @@ /obj/item/stack/rods, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aQM" = ( +"QM" = ( /obj/structure/railing/cap{ dir = 1 }, @@ -11127,7 +11127,7 @@ icon_state = "blackcorner" }, /area/ruin/space/moonbase19) -"aQO" = ( +"QO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -11140,45 +11140,45 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aQP" = ( +"QP" = ( /obj/effect/landmark/damageturf, /turf/simulated/floor/plasteel/stairs, /area/ruin/space/moonbase19) -"aQQ" = ( +"QQ" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 5 }, /turf/simulated/floor/plating/asteroid/ancient, /area/ruin/space/moonbase19) -"aQS" = ( +"QS" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "whitecorner"; dir = 8 }, /area/ruin/space/moonbase19) -"aQT" = ( +"QT" = ( /obj/machinery/light/small{ dir = 1 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aQW" = ( +"QW" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "white"; dir = 8 }, /area/ruin/space/moonbase19) -"aQX" = ( +"QX" = ( /obj/structure/alien/weeds/node, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aQZ" = ( +"QZ" = ( /obj/structure/alien/resin/wall, /obj/structure/cable{ d1 = 4; @@ -11187,7 +11187,7 @@ }, /turf/simulated/floor/plasteel/stairs, /area/ruin/space/moonbase19) -"aRc" = ( +"Rc" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -11211,7 +11211,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aRf" = ( +"Rf" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -11224,7 +11224,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aRg" = ( +"Rg" = ( /obj/machinery/door/airlock/freezer{ req_access_txt = "271" }, @@ -11233,13 +11233,13 @@ temperature = 273.15 }, /area/ruin/space/moonbase19) -"aRh" = ( +"Rh" = ( /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid10" }, /area/ruin/space/moonbase19) -"aRi" = ( +"Ri" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/blood/splatter{ color = "red" @@ -11247,7 +11247,7 @@ /obj/effect/decal/remains/human, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aRl" = ( +"Rl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/railing/cap{ @@ -11255,7 +11255,7 @@ }, /turf/simulated/floor/plasteel/stairs, /area/ruin/space/moonbase19) -"aRo" = ( +"Ro" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -11273,7 +11273,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aRr" = ( +"Rr" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -11282,7 +11282,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aRu" = ( +"Ru" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, @@ -11291,23 +11291,23 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aRv" = ( +"Rv" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"aRA" = ( +"RA" = ( /obj/structure/flora/rock, /turf/simulated/floor/engine/vacuum, /area/space/nearstation) -"aRC" = ( +"RC" = ( /obj/structure/table/reinforced, /obj/structure/alien/egg/burst, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"aRD" = ( +"RD" = ( /obj/machinery/door/airlock/multi_tile/glass{ req_access_txt = "271" }, @@ -11318,20 +11318,20 @@ icon_state = "freezerfloor" }, /area/ruin/space/moonbase19) -"aRF" = ( +"RF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aRH" = ( +"RH" = ( /obj/machinery/kitchen_machine/oven, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor"; temperature = 273.15 }, /area/ruin/space/moonbase19) -"aRI" = ( +"RI" = ( /obj/structure/railing/cap{ dir = 8 }, @@ -11340,7 +11340,7 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"aRK" = ( +"RK" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -11349,7 +11349,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aRN" = ( +"RN" = ( /obj/structure/sign/radiation/rad_area{ pixel_y = 32 }, @@ -11360,7 +11360,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aRQ" = ( +"RQ" = ( /obj/effect/turf_decal/delivery/hollow, /obj/machinery/porta_turret{ check_synth = 1; @@ -11369,35 +11369,35 @@ }, /turf/simulated/floor/bluegrid, /area/ruin/space/moonbase19) -"aRU" = ( +"RU" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 8 }, /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aSa" = ( +"Sa" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "cautioncorner" }, /area/ruin/space/moonbase19) -"aSb" = ( +"Sb" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 8 }, /area/ruin/space/moonbase19) -"aSc" = ( +"Sc" = ( /obj/machinery/computer/monitor/secret{ dir = 4 }, /obj/structure/cable, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"aSd" = ( +"Sd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8; @@ -11411,7 +11411,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aSg" = ( +"Sg" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ dir = 1 @@ -11424,7 +11424,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aSi" = ( +"Si" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/xeno{ color = "green" @@ -11434,7 +11434,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aSj" = ( +"Sj" = ( /obj/structure/chair/office/dark{ dir = 4 }, @@ -11443,28 +11443,28 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aSk" = ( +"Sk" = ( /obj/structure/flora/ausbushes/fernybush, /obj/structure/flora/ausbushes/ppflowers, /turf/simulated/floor/grass, /area/ruin/space/moonbase19) -"aSm" = ( +"Sm" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "whitehall"; dir = 10 }, /area/ruin/space/moonbase19) -"aSp" = ( +"Sp" = ( /mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aSq" = ( +"Sq" = ( /turf/simulated/floor/plasteel{ icon_state = "green" }, /area/ruin/space/moonbase19) -"aSt" = ( +"St" = ( /obj/structure/table/reinforced, /obj/machinery/door/window, /obj/machinery/door/poddoor/shutters/preopen{ @@ -11476,24 +11476,24 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aSu" = ( +"Su" = ( /obj/structure/closet/crate, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"aSv" = ( +"Sv" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid10" }, /area/ruin/space/moonbase19) -"aSx" = ( +"Sx" = ( /obj/effect/decal/cleanable/greenglow, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aSz" = ( +"Sz" = ( /obj/effect/landmark/damageturf, /obj/structure/cable{ d1 = 4; @@ -11505,7 +11505,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aSG" = ( +"SG" = ( /obj/structure/railing{ dir = 4 }, @@ -11515,7 +11515,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aSI" = ( +"SI" = ( /obj/structure/table/glass, /obj/effect/decal/cleanable/dirt, /obj/item/storage/box/gloves, @@ -11525,14 +11525,14 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aSL" = ( +"SL" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 }, /obj/structure/alien/resin/wall, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"aSO" = ( +"SO" = ( /obj/effect/turf_decal/stripes/asteroid/line, /obj/structure/railing, /obj/effect/decal/cleanable/cobweb, @@ -11540,7 +11540,7 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"aST" = ( +"ST" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -11555,7 +11555,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aSV" = ( +"SV" = ( /obj/structure/chair/stool/bar{ dir = 8 }, @@ -11564,7 +11564,7 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"aTc" = ( +"Tc" = ( /obj/machinery/computer{ dir = 4 }, @@ -11573,7 +11573,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aTd" = ( +"Td" = ( /obj/structure/weightmachine/stacklifter, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel{ @@ -11581,7 +11581,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aTe" = ( +"Te" = ( /obj/machinery/shieldwallgen{ locked = 0; req_access = null @@ -11601,7 +11601,7 @@ /obj/effect/turf_decal/box, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aTf" = ( +"Tf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -11612,7 +11612,7 @@ icon_state = "cautioncorner" }, /area/ruin/space/moonbase19) -"aTi" = ( +"Ti" = ( /obj/machinery/door/airlock/command/glass{ req_access_txt = "271"; name = "Senior Researcher's Office" @@ -11627,7 +11627,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aTm" = ( +"Tm" = ( /obj/structure/railing/cap{ dir = 9 }, @@ -11637,7 +11637,7 @@ dir = 6 }, /area/ruin/space/moonbase19) -"aTn" = ( +"Tn" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -11652,7 +11652,7 @@ }, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aTr" = ( +"Tr" = ( /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/hostile/alien, /turf/simulated/floor/plasteel{ @@ -11660,7 +11660,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aTu" = ( +"Tu" = ( /obj/structure/railing/corner{ dir = 8 }, @@ -11669,7 +11669,7 @@ icon_state = "black" }, /area/ruin/space/moonbase19) -"aTv" = ( +"Tv" = ( /obj/structure/chair/sofa/bench/right{ dir = 1 }, @@ -11678,7 +11678,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aTw" = ( +"Tw" = ( /obj/machinery/light/small{ active_power_consumption = 0; dir = 1; @@ -11688,7 +11688,7 @@ /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"aTx" = ( +"Tx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, @@ -11697,14 +11697,14 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"aTz" = ( +"Tz" = ( /obj/structure/chair/office/dark, /turf/simulated/floor/plasteel{ icon_state = "white"; dir = 8 }, /area/ruin/space/moonbase19) -"aTB" = ( +"TB" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced{ dir = 4 @@ -11720,14 +11720,14 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aTD" = ( +"TD" = ( /obj/structure/chair/comfy/corp, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aTF" = ( +"TF" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -11737,7 +11737,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aTI" = ( +"TI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -11754,14 +11754,14 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aTK" = ( +"TK" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/decal/cleanable/cobweb, /obj/item/toy/plushie/voxplushie, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"aTO" = ( +"TO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/barricade/wooden/crude{ @@ -11771,7 +11771,7 @@ icon_state = "freezerfloor" }, /area/ruin/space/moonbase19) -"aTS" = ( +"TS" = ( /obj/machinery/reagentgrinder, /obj/structure/table, /turf/simulated/floor/plasteel{ @@ -11779,7 +11779,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aTW" = ( +"TW" = ( /obj/structure/railing/cap{ dir = 1 }, @@ -11789,7 +11789,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aTY" = ( +"TY" = ( /obj/structure/sign/biohazard{ pixel_y = -32 }, @@ -11807,7 +11807,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aTZ" = ( +"TZ" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/effect/decal/cleanable/dirt, @@ -11816,7 +11816,7 @@ icon_state = "cautioncorner" }, /area/ruin/space/moonbase19) -"aUa" = ( +"Ua" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/chair/office/dark{ dir = 1 @@ -11826,7 +11826,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aUb" = ( +"Ub" = ( /obj/structure/filingcabinet, /obj/structure/sign/poster/contraband/fun_police{ pixel_y = 32 @@ -11836,7 +11836,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aUe" = ( +"Ue" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock{ @@ -11848,7 +11848,7 @@ icon_state = "green" }, /area/ruin/space/moonbase19) -"aUg" = ( +"Ug" = ( /obj/structure/chair, /obj/machinery/light/small{ dir = 1 @@ -11858,7 +11858,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aUl" = ( +"Ul" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, @@ -11874,7 +11874,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aUn" = ( +"Un" = ( /obj/item/shard{ icon_state = "medium" }, @@ -11884,14 +11884,14 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aUp" = ( +"Up" = ( /obj/item/chair{ pixel_y = 1; dir = 4 }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aUr" = ( +"Ur" = ( /obj/structure/cable{ d1 = 2; d2 = 4; @@ -11899,7 +11899,7 @@ }, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aUt" = ( +"Ut" = ( /obj/item/chair{ dir = 4; pixel_x = -1; @@ -11910,7 +11910,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aUu" = ( +"Uu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/blood/xeno{ @@ -11923,7 +11923,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aUv" = ( +"Uv" = ( /obj/machinery/flasher{ pixel_x = 28 }, @@ -11938,7 +11938,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aUz" = ( +"Uz" = ( /obj/structure/barricade/wooden/crude{ layer = 4 }, @@ -11954,7 +11954,7 @@ }, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aUA" = ( +"UA" = ( /obj/structure/table/glass/reinforced/plastitanium, /obj/machinery/computer/id_upgrader, /turf/simulated/floor/plasteel{ @@ -11962,7 +11962,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aUB" = ( +"UB" = ( /obj/structure/weightmachine/weightlifter, /obj/effect/turf_decal/delivery/hollow, /obj/structure/railing{ @@ -11975,30 +11975,30 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aUD" = ( +"UD" = ( /mob/living/simple_animal/hostile/alien/drone, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aUF" = ( +"UF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aUG" = ( +"UG" = ( /obj/structure/rack, /obj/effect/decal/cleanable/cobweb2, /obj/item/stack/cable_coil, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aUH" = ( +"UH" = ( /obj/structure/railing/cap{ dir = 6 }, /turf/simulated/floor/plasteel/stairs, /area/ruin/space/moonbase19) -"aUI" = ( +"UI" = ( /obj/structure/railing{ dir = 4 }, @@ -12014,7 +12014,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aUK" = ( +"UK" = ( /obj/structure/railing{ dir = 10 }, @@ -12024,20 +12024,20 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aUO" = ( +"UO" = ( /obj/structure/lattice, /obj/item/shard{ icon_state = "medium" }, /turf/template_noop, /area/space/nearstation) -"aUQ" = ( +"UQ" = ( /obj/structure/railing/corner{ dir = 1 }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aUV" = ( +"UV" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 }, @@ -12047,12 +12047,12 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aUX" = ( +"UX" = ( /obj/structure/alien/resin/wall, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aUZ" = ( +"UZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, @@ -12061,11 +12061,11 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aVa" = ( +"Va" = ( /obj/machinery/door/airlock/maintenance_hatch, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aVf" = ( +"Vf" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -12074,7 +12074,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aVg" = ( +"Vg" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, @@ -12083,7 +12083,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aVh" = ( +"Vh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, @@ -12092,7 +12092,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aVi" = ( +"Vi" = ( /obj/effect/turf_decal/delivery/white/partial, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 8 @@ -12107,18 +12107,18 @@ icon_state = "whitecorner" }, /area/ruin/space/moonbase19) -"aVl" = ( +"Vl" = ( /obj/structure/railing, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aVm" = ( +"Vm" = ( /obj/structure/railing/corner{ dir = 4 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aVo" = ( +"Vo" = ( /obj/structure/closet/crate/can, /obj/effect/decal/cleanable/cobweb2, /obj/effect/spawner/lootdrop/maintenance, @@ -12127,13 +12127,13 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"aVs" = ( +"Vs" = ( /obj/effect/decal/cleanable/dirt, /obj/item/kitchen/utensil/fork, /obj/structure/table, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aVv" = ( +"Vv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -12145,7 +12145,7 @@ /obj/structure/table, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aVx" = ( +"Vx" = ( /obj/machinery/light/small{ dir = 1 }, @@ -12154,14 +12154,14 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aVy" = ( +"Vy" = ( /obj/machinery/floodlight, /turf/simulated/floor/plasteel{ icon_state = "darkfull"; dir = 8 }, /area/ruin/space/moonbase19) -"aVC" = ( +"VC" = ( /obj/structure/window/reinforced{ dir = 8 }, @@ -12174,14 +12174,14 @@ dir = 10 }, /area/ruin/space/moonbase19) -"aVG" = ( +"VG" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "caution"; dir = 9 }, /area/ruin/space/moonbase19) -"aVH" = ( +"VH" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -12189,7 +12189,7 @@ }, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"aVK" = ( +"VK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, @@ -12202,7 +12202,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aVL" = ( +"VL" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 1 }, @@ -12213,7 +12213,7 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"aVM" = ( +"VM" = ( /obj/structure/rack, /obj/item/flashlight/flare, /obj/item/flashlight/flare, @@ -12223,18 +12223,18 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aVN" = ( +"VN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, /turf/simulated/wall/r_wall, /area/ruin/space/moonbase19) -"aVO" = ( +"VO" = ( /obj/machinery/computer, /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aVR" = ( +"VR" = ( /obj/structure/chair{ dir = 1 }, @@ -12243,7 +12243,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aVS" = ( +"VS" = ( /obj/structure/disposalpipe/segment{ desc = "An underfloor disposal pipe. This one has been applied with an acid-proof coating."; dir = 2; @@ -12256,12 +12256,12 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aVT" = ( +"VT" = ( /obj/structure/bed, /obj/structure/closet/crate/secure/loot, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"aVU" = ( +"VU" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/xeno{ color = "green" @@ -12271,7 +12271,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aVV" = ( +"VV" = ( /obj/structure/railing{ dir = 4 }, @@ -12284,7 +12284,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aVX" = ( +"VX" = ( /obj/machinery/shower{ dir = 8 }, @@ -12295,17 +12295,17 @@ }, /turf/simulated/floor/noslip, /area/ruin/space/moonbase19) -"aWb" = ( +"Wb" = ( /obj/effect/decal/cleanable/blood/xeno{ color = "green" }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aWd" = ( +"Wd" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aWe" = ( +"We" = ( /obj/machinery/door/airlock/maintenance_hatch{ req_access_txt = "271" }, @@ -12315,12 +12315,12 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aWg" = ( +"Wg" = ( /obj/structure/lattice, /obj/machinery/door/firedoor/closed, /turf/template_noop, /area/ruin/space/moonbase19) -"aWi" = ( +"Wi" = ( /obj/effect/decal/cleanable/blood/splatter{ color = "red" }, @@ -12329,20 +12329,20 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aWl" = ( +"Wl" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid6" }, /area/ruin/space/moonbase19) -"aWn" = ( +"Wn" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" }, /area/ruin/space/moonbase19) -"aWo" = ( +"Wo" = ( /obj/machinery/light/small{ dir = 4 }, @@ -12355,24 +12355,24 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aWp" = ( +"Wp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel/stairs, /area/ruin/space/moonbase19) -"aWq" = ( +"Wq" = ( /turf/simulated/floor/plasteel{ icon_state = "yellowsiding"; dir = 4 }, /area/ruin/space/moonbase19) -"aWs" = ( +"Ws" = ( /turf/simulated/floor/plasteel{ icon_state = "whitehall"; dir = 5 }, /area/ruin/space/moonbase19) -"aWv" = ( +"Wv" = ( /obj/structure/railing{ dir = 8 }, @@ -12382,7 +12382,7 @@ /obj/structure/table, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aWz" = ( +"Wz" = ( /obj/machinery/light/small, /obj/structure/table, /turf/simulated/floor/plasteel{ @@ -12390,7 +12390,7 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"aWE" = ( +"WE" = ( /obj/structure/railing, /obj/item/cigbutt{ pixel_x = 5 @@ -12402,10 +12402,10 @@ /obj/item/cigbutt{ pixel_y = 7 }, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aWF" = ( +"WF" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ d1 = 2; @@ -12417,14 +12417,14 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aWG" = ( +"WG" = ( /obj/machinery/door/airlock/vault{ locked = 1; req_access_txt = "271" }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aWH" = ( +"WH" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/table, /turf/simulated/floor/plasteel{ @@ -12432,14 +12432,14 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aWJ" = ( +"WJ" = ( /obj/item/kirbyplants, /obj/structure/railing{ dir = 9 }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aWK" = ( +"WK" = ( /obj/effect/turf_decal/stripes/asteroid/corner{ dir = 1 }, @@ -12448,7 +12448,7 @@ }, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/powered) -"aWM" = ( +"WM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, @@ -12457,18 +12457,18 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aWN" = ( +"WN" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/carpet, /area/ruin/space/moonbase19) -"aWS" = ( +"WS" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "escapecorner"; dir = 8 }, /area/ruin/space/moonbase19) -"aWU" = ( +"WU" = ( /obj/machinery/light{ active_power_consumption = 0; dir = 1; @@ -12483,7 +12483,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aWW" = ( +"WW" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -12494,11 +12494,11 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aWX" = ( +"WX" = ( /obj/item/stack/rods, /turf/template_noop, /area/space/nearstation) -"aWZ" = ( +"WZ" = ( /obj/structure/chair{ dir = 4 }, @@ -12507,7 +12507,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aXb" = ( +"Xb" = ( /obj/structure/disposalpipe/segment{ desc = "An underfloor disposal pipe. This one has been applied with an acid-proof coating."; dir = 2; @@ -12518,14 +12518,14 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aXc" = ( +"Xc" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "black"; dir = 6 }, /area/ruin/space/moonbase19) -"aXd" = ( +"Xd" = ( /obj/effect/turf_decal/delivery/white/partial{ dir = 1 }, @@ -12534,7 +12534,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aXg" = ( +"Xg" = ( /obj/structure/railing{ dir = 4 }, @@ -12544,7 +12544,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aXi" = ( +"Xi" = ( /obj/machinery/computer, /obj/structure/window/reinforced{ dir = 1 @@ -12554,13 +12554,13 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aXl" = ( +"Xl" = ( /obj/item/shard{ icon_state = "medium" }, /turf/template_noop, /area/space/nearstation) -"aXm" = ( +"Xm" = ( /obj/structure/railing/cap, /obj/machinery/light/small{ dir = 8 @@ -12575,7 +12575,7 @@ icon_state = "green" }, /area/ruin/space/moonbase19) -"aXp" = ( +"Xp" = ( /obj/structure/chair{ dir = 8 }, @@ -12585,7 +12585,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aXq" = ( +"Xq" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -12596,7 +12596,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aXr" = ( +"Xr" = ( /obj/machinery/atmospherics/unary/thermomachine/freezer/on{ dir = 1 }, @@ -12604,7 +12604,7 @@ icon_state = "asteroidplating" }, /area/ruin/space/moonbase19) -"aXs" = ( +"Xs" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, @@ -12616,16 +12616,16 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aXv" = ( +"Xv" = ( /obj/machinery/reagentgrinder, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_y = 4; pixel_x = -12 }, /obj/structure/table, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aXw" = ( +"Xw" = ( /obj/machinery/processor{ dir = 4 }, @@ -12634,7 +12634,7 @@ temperature = 273.15 }, /area/ruin/space/moonbase19) -"aXz" = ( +"Xz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -12645,13 +12645,13 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aXB" = ( +"XB" = ( /obj/structure/railing{ dir = 10 }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aXD" = ( +"XD" = ( /obj/structure/chair/sofa/bench/right{ dir = 8 }, @@ -12660,13 +12660,13 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aXE" = ( +"XE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /turf/simulated/floor/carpet/royalblue, /area/ruin/space/moonbase19) -"aXF" = ( +"XF" = ( /obj/structure/table/reinforced, /obj/item/taperecorder{ pixel_x = -3 @@ -12676,7 +12676,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aXH" = ( +"XH" = ( /obj/structure/railing{ dir = 1 }, @@ -12691,7 +12691,7 @@ icon_state = "green" }, /area/ruin/space/moonbase19) -"aXK" = ( +"XK" = ( /obj/machinery/camera{ c_tag = "Exterior Hangar"; dir = 5; @@ -12699,7 +12699,7 @@ }, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"aXL" = ( +"XL" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -12709,7 +12709,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aXM" = ( +"XM" = ( /obj/structure/filingcabinet, /obj/structure/sign/mech{ pixel_y = 32 @@ -12720,7 +12720,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aXN" = ( +"XN" = ( /obj/machinery/reagentgrinder, /obj/machinery/light/small{ dir = 8 @@ -12735,7 +12735,7 @@ temperature = 273.15 }, /area/ruin/space/moonbase19) -"aXO" = ( +"XO" = ( /obj/structure/railing/cap{ dir = 4 }, @@ -12743,7 +12743,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aXR" = ( +"XR" = ( /obj/structure/chair{ dir = 1 }, @@ -12756,7 +12756,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aXU" = ( +"XU" = ( /obj/item/airlock_electronics, /obj/item/stack/cable_coil, /obj/structure/table, @@ -12764,14 +12764,14 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aXW" = ( +"XW" = ( /obj/structure/closet/l3closet/general, /turf/simulated/floor/plasteel{ icon_state = "whitecorner"; dir = 1 }, /area/ruin/space/moonbase19) -"aXX" = ( +"XX" = ( /obj/structure/closet/crate/can, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plasteel{ @@ -12779,13 +12779,13 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aXY" = ( +"XY" = ( /obj/item/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "whitehall" }, /area/ruin/space/moonbase19) -"aYd" = ( +"Yd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, @@ -12795,7 +12795,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aYe" = ( +"Ye" = ( /obj/structure/window/reinforced{ dir = 4 }, @@ -12806,11 +12806,11 @@ icon_state = "black" }, /area/ruin/space/moonbase19) -"aYh" = ( +"Yh" = ( /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aYi" = ( +"Yi" = ( /obj/structure/railing/cap, /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -12826,7 +12826,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aYj" = ( +"Yj" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/engineering/glass{ req_access_txt = "271"; @@ -12834,7 +12834,7 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aYk" = ( +"Yk" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery/white/partial, /turf/simulated/floor/plasteel{ @@ -12842,7 +12842,7 @@ dir = 1 }, /area/ruin/space/moonbase19) -"aYl" = ( +"Yl" = ( /obj/structure/mirror{ pixel_x = -28 }, @@ -12854,7 +12854,7 @@ icon_state = "freezerfloor" }, /area/ruin/space/moonbase19) -"aYt" = ( +"Yt" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, @@ -12867,7 +12867,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aYu" = ( +"Yu" = ( /obj/structure/toilet{ pixel_y = 8 }, @@ -12877,7 +12877,7 @@ icon_state = "freezerfloor" }, /area/ruin/space/moonbase19) -"aYw" = ( +"Yw" = ( /obj/machinery/chem_master, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -12885,13 +12885,13 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aYy" = ( +"Yy" = ( /obj/structure/chair/office/dark{ dir = 1 }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aYz" = ( +"Yz" = ( /obj/machinery/light/small{ active_power_consumption = 0; dir = 4; @@ -12909,7 +12909,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aYB" = ( +"YB" = ( /obj/machinery/door/poddoor/impassable{ id_tag = "awaymlock" }, @@ -12920,7 +12920,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aYC" = ( +"YC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, @@ -12935,18 +12935,18 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aYJ" = ( +"YJ" = ( /obj/structure/table, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aYK" = ( +"YK" = ( /obj/structure/railing{ dir = 8 }, /mob/living/simple_animal/hostile/alien/sentinel, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aYL" = ( +"YL" = ( /obj/structure/railing{ dir = 4 }, @@ -12962,14 +12962,14 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aYM" = ( +"YM" = ( /obj/machinery/door/airlock/engineering/glass{ req_access_txt = "271"; name = "Workshop" }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aYQ" = ( +"YQ" = ( /obj/structure/railing{ dir = 8 }, @@ -12982,7 +12982,7 @@ dir = 4 }, /area/ruin/space/moonbase19) -"aYS" = ( +"YS" = ( /obj/structure/alien/resin/wall, /obj/structure/cable{ d1 = 1; @@ -12991,7 +12991,7 @@ }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aYX" = ( +"YX" = ( /obj/structure/railing, /obj/effect/turf_decal/delivery/red/partial{ dir = 1 @@ -13003,7 +13003,7 @@ dir = 10 }, /area/ruin/space/moonbase19) -"aYY" = ( +"YY" = ( /obj/structure/chair{ dir = 4 }, @@ -13018,18 +13018,18 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aZa" = ( +"Za" = ( /obj/structure/holosign/barrier/engineering, /obj/effect/landmark/damageturf, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aZb" = ( +"Zb" = ( /obj/machinery/door/airlock/external/glass{ locked = 1 }, /turf/simulated/floor/catwalk, /area/ruin/space/moonbase19) -"aZf" = ( +"Zf" = ( /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/hostile/alien/queen/large{ melee_damage_upper = 35; @@ -13040,7 +13040,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aZg" = ( +"Zg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, @@ -13055,7 +13055,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aZh" = ( +"Zh" = ( /obj/effect/decal/cleanable/molten_object/large, /obj/effect/decal/cleanable/glass, /obj/effect/landmark/damageturf, @@ -13067,14 +13067,14 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aZi" = ( +"Zi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aZj" = ( +"Zj" = ( /obj/effect/turf_decal/delivery/white/partial{ dir = 1 }, @@ -13082,7 +13082,7 @@ icon_state = "black" }, /area/ruin/space/moonbase19) -"aZk" = ( +"Zk" = ( /obj/machinery/atmospherics/unary/tank/air{ dir = 8 }, @@ -13096,7 +13096,7 @@ dir = 5 }, /area/ruin/space/moonbase19) -"aZn" = ( +"Zn" = ( /obj/machinery/light/small{ dir = 8 }, @@ -13104,7 +13104,7 @@ icon_state = "dark" }, /area/ruin/space/moonbase19) -"aZp" = ( +"Zp" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/table, /turf/simulated/floor/plasteel{ @@ -13112,7 +13112,7 @@ icon_state = "escape" }, /area/ruin/space/moonbase19) -"aZq" = ( +"Zq" = ( /obj/structure/rack, /obj/item/taperecorder{ pixel_x = -3 @@ -13120,7 +13120,7 @@ /obj/item/storage/secure/briefcase, /turf/simulated/floor/carpet/royalblue, /area/ruin/space/moonbase19) -"aZu" = ( +"Zu" = ( /obj/machinery/computer, /obj/structure/window/reinforced{ dir = 4 @@ -13133,7 +13133,7 @@ icon_state = "caution" }, /area/ruin/space/moonbase19) -"aZw" = ( +"Zw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /mob/living/simple_animal/hostile/alien/sentinel, @@ -13144,14 +13144,14 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aZz" = ( +"Zz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aZA" = ( +"ZA" = ( /obj/structure/railing{ dir = 1 }, @@ -13165,7 +13165,7 @@ icon_state = "whitecorner" }, /area/ruin/space/moonbase19) -"aZC" = ( +"ZC" = ( /obj/structure/railing, /obj/effect/turf_decal/stripes/asteroid/line, /obj/effect/turf_decal/stripes/asteroid/line{ @@ -13174,21 +13174,21 @@ /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/moonbase19) -"aZE" = ( +"ZE" = ( /obj/machinery/door/airlock/external/glass, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aZI" = ( +"ZI" = ( /obj/effect/decal/cleanable/cobweb2, /obj/structure/table, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aZK" = ( +"ZK" = ( /obj/machinery/light/small, /mob/living/simple_animal/cockroach, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aZL" = ( +"ZL" = ( /obj/structure/alien/resin/wall, /obj/structure/cable{ d1 = 1; @@ -13200,7 +13200,7 @@ icon_state = "cafeteria" }, /area/ruin/space/moonbase19) -"aZN" = ( +"ZN" = ( /obj/structure/chair/office/dark{ dir = 4 }, @@ -13210,7 +13210,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aZO" = ( +"ZO" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -13222,7 +13222,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/engine, /area/ruin/space/moonbase19) -"aZP" = ( +"ZP" = ( /obj/machinery/door/airlock/medical/glass{ req_access_txt = "271" }, @@ -13234,7 +13234,7 @@ dir = 8 }, /area/ruin/space/moonbase19) -"aZR" = ( +"ZR" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/space_heater, /obj/structure/window/basic{ @@ -13242,7 +13242,7 @@ }, /turf/simulated/floor/plating, /area/ruin/space/moonbase19) -"aZU" = ( +"ZU" = ( /obj/machinery/kitchen_machine/microwave{ pixel_x = -3; pixel_y = 6 @@ -13250,13 +13250,13 @@ /obj/structure/table, /turf/simulated/floor/plasteel, /area/ruin/space/moonbase19) -"aZV" = ( +"ZV" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/plating/asteroid/airless{ icon_state = "asteroid5" }, /area/ruin/space/moonbase19) -"aZX" = ( +"ZX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -13269,4802 +13269,4802 @@ /area/ruin/space/moonbase19) (1,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -atX -atX -atX -atX -atX -atX -atX -aaa -aaa -aaa -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -aaa -aaa -aaa -atX -atX -atX -atX -atX -atX -aaa -atX -atX -aaa -atX -atX -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aa +aa +aa +aa +aa +aa +aa +aa +tX +tX +tX +tX +tX +tX +tX +aa +aa +aa +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +aa +aa +aa +tX +tX +tX +tX +tX +tX +aa +tX +tX +aa +tX +tX +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa "} (2,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -afV -aad -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aa +aa +aa +aa +aa +aa +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +fV +ad +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa "} (3,1,1) = {" -aaa -aaa -aaa -aaa -aaa -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -afw -adA -aiM -aEt -ahG -atX -atX -aag -aaf -aaf -aag -aag -aaf -aag -aag -aag -aaf -aag -aag -aaf -aaf -aaf -aag -atX -atX -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aa +aa +aa +aa +aa +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +fw +dA +iM +Et +hG +tX +tX +ag +af +af +ag +ag +af +ag +ag +ag +af +ag +ag +af +af +af +ag +tX +tX +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa "} (4,1,1) = {" -aaa -aaa -aaa -aaa -atX -atX -aag -aaf -aag -aag -aag -aag -aag -aaf -aag -aag -aag -aaf -aaf -atX -atX -atX -azT -aSv -ahZ -afw -amq -afV -atX -aaf -aiQ -aXw -aXN -amT -aqQ -aGx -aag -aLa -arl -awc -aDt -aOc -aZA -aTS -aag -atX -atX -atX -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aa +aa +aa +aa +tX +tX +ag +af +ag +ag +ag +ag +ag +af +ag +ag +ag +af +af +tX +tX +tX +zT +Sv +hZ +fw +mq +fV +tX +af +iQ +Xw +XN +mT +qQ +Gx +ag +La +rl +wc +Dt +Oc +ZA +TS +ag +tX +tX +tX +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa "} (5,1,1) = {" -aaa -aaa -aaa -aaa -atX -atX -aag -ahW -ayF -aaf -aTK -ajo -aag -ahW -aHb -aag -aAz -awC -aaf -atX -atX -afV -ahZ -atj -axn -aIC -aBA -atX -atX -aag -ahL -avN -avN -ahL -avN -avN -aaf -add -aQI -ats -aWd -aAm -aCi -avz -acF -aQQ -atX -atX -atX -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aa +aa +aa +aa +tX +tX +ag +hW +yF +af +TK +jo +ag +hW +Hb +ag +Az +wC +af +tX +tX +fV +hZ +tj +xn +IC +BA +tX +tX +ag +hL +vN +vN +hL +vN +vN +af +dd +QI +ts +Wd +Am +Ci +vz +cF +QQ +tX +tX +tX +aa +aa +aa +aa +aa +aa +aa +aa +aa "} (6,1,1) = {" -aaa -aaa -aaa -atX -atX -atX -aag -aTw -aWN -aaf -aPd -ahE -aag -aJW -aWN -aag -aNE -aWN -aaf -atX -atX -aag -aag -aaf -aWd -aWd -aKv -aag -aag -aag -agx -aPE -aeb -azM -aRH -ahL -aaf -aJA -aVU -act -aWd -aJx -aTm -awq -aag -axu -agk -atX -atX -atX -atX -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aa +aa +aa +tX +tX +tX +ag +Tw +WN +af +Pd +hE +ag +JW +WN +ag +NE +WN +af +tX +tX +ag +ag +af +Wd +Wd +Kv +ag +ag +ag +gx +PE +eb +zM +RH +hL +af +JA +VU +ct +Wd +Jx +Tm +wq +ag +xu +gk +tX +tX +tX +tX +aa +aa +aa +aa +aa +aa +aa "} (7,1,1) = {" -aaa -aaa -aaa -atX -atX -atX -aag -ann -axW -aaf -ann -axW -aag -aGS -axW -aag -ann -anw -aag -aag -atX -aag -aET -amB -azv -azI -arB -awe -aZp -aaf -azP -aFp -ahL -avN -azh -avN -aag -aPa -aho -are -aaM -aEl -aQW -aSI -aaf -aQv -aXr -atX -atX -atX -atX -atX -atX -atX -aaa -aaa -aaa -aaa +aa +aa +aa +tX +tX +tX +ag +nn +xW +af +nn +xW +ag +GS +xW +ag +nn +nw +ag +ag +tX +ag +ET +mB +zv +zI +rB +we +Zp +af +zP +Fp +hL +vN +zh +vN +ag +Pa +ho +re +aM +El +QW +SI +af +Qv +Xr +tX +tX +tX +tX +tX +tX +tX +aa +aa +aa +aa "} (8,1,1) = {" -aaa -aaa -atX -atX -atX -atX -aaf -amJ -azN -amr -amJ -adM -aGJ -aLz -aKm -aXm -auG -aKm -aru -aag -aag -aaf -aLl -aak -aNC -acL -afy -aak -api -aaf -aaf -aag -aRg -aQx -aQx -aag -aag -aGh -ang -aIo -aaL -aEm -ahh -azV -aaf -aeC -awt -apK -ajb -ajb -akp -ajb -aeC -atX -atX -aaa -aaa -aaa +aa +aa +tX +tX +tX +tX +af +mJ +zN +mr +mJ +dM +GJ +Lz +Km +Xm +uG +Km +ru +ag +ag +af +Ll +ak +NC +cL +fy +ak +pi +af +af +ag +Rg +Qx +Qx +ag +ag +Gh +ng +Io +aL +Em +hh +zV +af +eC +wt +pK +jb +jb +kp +jb +eC +tX +tX +aa +aa +aa "} (9,1,1) = {" -aaa -aaa -atX -atX -atX -atX -aag -aaf -aaf -aag -aag -aaA -aKG -aOl -aak -aQz -auR -aaA -aKu -aTd -aag -aaf -aii -aaA -aWZ -aDf -aZi -aaA -aDr -akX -alC -awR -aOg -aOg -aDp -atY -aag -aWd -aGk -aWd -aaL -aRU -aaN -aWd -aag -aUz -aag -aag -aag -aaf -arZ -aag -axo -ajb -atX -atX -aaa -aaa +aa +aa +tX +tX +tX +tX +ag +af +af +ag +ag +aA +KG +Ol +ak +Qz +uR +aA +Ku +Td +ag +af +ii +aA +WZ +Df +Zi +aA +Dr +kX +lC +wR +Og +Og +Dp +tY +ag +Wd +Gk +Wd +aL +RU +aN +Wd +ag +Uz +ag +ag +ag +af +rZ +ag +xo +jb +tX +tX +aa +aa "} (10,1,1) = {" -aaa -aaa -atX -atX -atX -atX -atX -aag -ayb -ahE -anw -anW -arE -acC -aDJ -aMq -axm -aVh -axh -aUB -aaf -aFV -azm -ayU -awL -aVs -aVv -aak -aAr -aSt -aiG -aaA -aBC -aak -ajc -aaf -aaf -akG -acf -awb -ana -aVi -amC -amC -akC -aJS -aaf -anc -aCL -aag -adX -aaf -aaf -awt -atX -atX -aaa -aaa +aa +aa +tX +tX +tX +tX +tX +ag +yb +hE +nw +nW +rE +cC +DJ +Mq +xm +Vh +xh +UB +af +FV +zm +yU +wL +Vs +Vv +ak +Ar +St +iG +aA +BC +ak +jc +af +af +kG +cf +wb +na +Vi +mC +mC +kC +JS +af +nc +CL +ag +dX +af +af +wt +tX +tX +aa +aa "} (11,1,1) = {" -aaa -aaa -atX -atX -atX -atX -atX -aag -aVT -ayZ -ann -ayd -aQk -azz -asV -aFW -aSk -akw -aIx -aiC -arV -aCS -aKR -aIM -aKa -aez -aPP -aiy -aAr -aSt -aiG -aak -aZU -apZ -alk -aaf -aKW -adw -aKQ -aJI -abC -acw -aqD -afi -ahp -agr -acx -acX -avn -awd -arx -aHA -aaf -ajb -atX -atX -aaa -aaa +aa +aa +tX +tX +tX +tX +tX +ag +VT +yZ +nn +yd +Qk +zz +sV +FW +Sk +kw +Ix +iC +rV +CS +KR +IM +Ka +ez +PP +iy +Ar +St +iG +ak +ZU +pZ +lk +af +KW +dw +KQ +JI +bC +cw +qD +fi +hp +gr +cx +cX +vn +wd +rx +HA +af +jb +tX +tX +aa +aa "} (12,1,1) = {" -aaa -aaa -atX -atX -atX -atX -atX -aag -aag -aaf -aaf -aBw -aak -aOp -aeg -acc -aFq -akQ -aaA -aSq -aWd -aLl -aaA -agN -aaL -aaL -anX -aGp -aDr -akX -aJJ -ajR -aXv -apR -ajc -aag -aMI -amz -aQW -arv -akM -aaC -ail -afi -aOc -aAp -aKb -aAS -aod -abJ -aMn -amd -aag -ajb -atX -atX -aaa -aaa +aa +aa +tX +tX +tX +tX +tX +ag +ag +af +af +Bw +ak +Op +eg +cc +Fq +kQ +aA +Sq +Wd +Ll +aA +gN +aL +aL +nX +Gp +Dr +kX +JJ +jR +Xv +pR +jc +ag +MI +mz +QW +rv +kM +aC +il +fi +Oc +Ap +Kb +AS +od +bJ +Mn +md +ag +jb +tX +tX +aa +aa "} (13,1,1) = {" -aaa -aaa -atX -atX -atX -atX -atX -aag -aMl -aGz -aAN -aHm -aak -azz -aQm -avV -akZ -aIJ -aoX -aoT -aUe -aTx -abZ -aWZ -aAA -aUp -ayG -aEg -aDs -aaL -aaL -aMK -adc -adc -afF -aag -asR -agU -aix -aJi -ajf -acN -arN -akx -aLj -aXL -alo -abf -aYe -aSg -atV -aOa -aag -aeC -atX -atX -aaa -aaa +aa +aa +tX +tX +tX +tX +tX +ag +Ml +Gz +AN +Hm +ak +zz +Qm +vV +kZ +IJ +oX +oT +Ue +Tx +bZ +WZ +AA +Up +yG +Eg +Ds +aL +aL +MK +dc +dc +fF +ag +sR +gU +ix +Ji +jf +cN +rN +kx +Lj +XL +lo +bf +Ye +Sg +tV +Oa +ag +eC +tX +tX +aa +aa "} (14,1,1) = {" -aaa -aaa -atX -atX -atX -atX -atX -aaf -aPd -asc -axW -aKm -aak -aYd -arT -aer -aQt -apI -aal -aAn -aaf -aqu -aKS -aDR -aYJ -awL -aHp -aAJ -aWS -arH -aaL -atw -aHg -atw -ams -aag -aag -aXY -aix -aTr -aDa -aiO -aym -auA -aDk -aRD -agM -aEy -aba -aDa -ajS -aQl -aag -apK -atX -atX -atX -aaa +aa +aa +tX +tX +tX +tX +tX +af +Pd +sc +xW +Km +ak +Yd +rT +er +Qt +pI +al +An +af +qu +KS +DR +YJ +wL +Hp +AJ +WS +rH +aL +tw +Hg +tw +ms +ag +ag +XY +ix +Tr +Da +iO +ym +uA +Dk +RD +gM +Ey +ba +Da +jS +Ql +ag +pK +tX +tX +tX +aa "} (15,1,1) = {" -aaa -aaa -atX -atX -atX -atX -aag -aag -aaf -aaf -aag -aaA -avH -aKp -aaA -aaA -aaA -aak -aSq -aJm -aag -aag -amH -agS -aHP -agS -afy -aak -aAH -arW -aNn -aCJ -aSV -aSV -azI -aWz -aaf -aif -aOc -avC -ajg -aaR -ayf -apP -aFa -aTO -aVX -aap -adn -aWp -ads -alD -aag -awt -atX -atX -atX -aaa +aa +aa +tX +tX +tX +tX +ag +ag +af +af +ag +aA +vH +Kp +aA +aA +aA +ak +Sq +Jm +ag +ag +mH +gS +HP +gS +fy +ak +AH +rW +Nn +CJ +SV +SV +zI +Wz +af +if +Oc +vC +jg +aR +yf +pP +Fa +TO +VX +ap +dn +Wp +ds +lD +ag +wt +tX +tX +tX +aa "} (16,1,1) = {" -aaa -aaa -atX -atX -atX -atX -aag -amJ -amJ -aKt -amJ -axL -aXH -ays -anW -anJ -aoS -aUK -azr -aag -aag -aag -axC -aMy -aMy -alX -aJz -aOt -alX -aMy -aEL -aaA -aJy -aak -acL -aOu -aaf -abt -aAv -aID -adQ -abs -aev -aHq -aWs -aLD -aKb -ahr -adH -adp -aHY -aep -arZ -ajb -atX -atX -atX -aaa +aa +aa +tX +tX +tX +tX +ag +mJ +mJ +Kt +mJ +xL +XH +ys +nW +nJ +oS +UK +zr +ag +ag +ag +xC +My +My +lX +Jz +Ot +lX +My +EL +aA +Jy +ak +cL +Ou +af +bt +Av +ID +dQ +bs +ev +Hq +Ws +LD +Kb +hr +dH +dp +HY +ep +rZ +jb +tX +tX +tX +aa "} (17,1,1) = {" -aaa -aaa -aaa -atX -atX -atX -aag -ann -axW -aag -ann -anw -aaf -ann -anw -aag -ann -axW -aaf -aag -afA -aaf -aVo -awD -apF -aEp -aXD -aya -asK -aKz -aYt -aMy -anI -aMy -awo -aoD -aag -aag -aig -aig -aag -aig -aig -aQn -aSm -aXd -aZP -aQW -aoo -aOe -aHY -aoM -aaf -atX -atX -atX -atX -aaa +aa +aa +aa +tX +tX +tX +ag +nn +xW +ag +nn +nw +af +nn +nw +ag +nn +xW +af +ag +fA +af +Vo +wD +pF +Ep +XD +ya +sK +Kz +Yt +My +nI +My +wo +oD +ag +ag +ig +ig +ag +ig +ig +Qn +Sm +Xd +ZP +QW +oo +Oe +HY +oM +af +tX +tX +tX +tX +aa "} (18,1,1) = {" -aaa -aaa -aaa -aaa -atX -atX -aag -aQj -ahE -aag -ayb -aWN -aaf -aQj -ahE -aag -aJW -ahE -aag -aCV -acm -aaf -aaf -aag -aag -aag -aaf -aag -aag -aaf -axF -aup -asK -avB -aVK -aqB -aaf -atX -atX -aPZ -ayI -aOW -aig -aig -aQS -aXR -aKb -aIO -aTz -atR -aiD -aJc -aag -atX -atX -atX -atX -aaa +aa +aa +aa +aa +tX +tX +ag +Qj +hE +ag +yb +WN +af +Qj +hE +ag +JW +hE +ag +CV +cm +af +af +ag +ag +ag +af +ag +ag +af +xF +up +sK +vB +VK +qB +af +tX +tX +PZ +yI +OW +ig +ig +QS +XR +Kb +IO +Tz +tR +iD +Jc +ag +tX +tX +tX +tX +aa "} (19,1,1) = {" -aaa -aaa -aaa -atX -atX -atX -aag -arf -amb -aaf -aAz -aJZ -aag -aiX -amb -aaf -aAz -ahm -aag -acm -acm -aBg -aBg -acm -acm -arZ -adY -aSb -aFC -aag -aag -aWd -aWd -aag -aqx -aQO -aag -atX -atX -azT -afv -aso -aOW -aig -aig -aag -aag -aag -aag -aag -axz -aJN -aag -atX -atX -atX -atX -aaa +aa +aa +aa +tX +tX +tX +ag +rf +mb +af +Az +JZ +ag +iX +mb +af +Az +hm +ag +cm +cm +Bg +Bg +cm +cm +rZ +dY +Sb +FC +ag +ag +Wd +Wd +ag +qx +QO +ag +tX +tX +zT +fv +so +OW +ig +ig +ag +ag +ag +ag +ag +xz +JN +ag +tX +tX +tX +tX +aa "} (20,1,1) = {" -aaa -aaa -aaa -atX -atX -aag -aaf -aag -aaf -aaf -aag -aag -aaf -aaf -aag -aag -aag -aaf -aag -aag -arZ -aag -aag -apL -aGe -aag -aGP -aak -aEP -aag -atX -atX -azT -agJ -aab -aGd -atX -atX -aad -afw -ajW -afV -arC -aPZ -aPZ -aPf -atX -atX -aig -awv -aiw -alY -aig -aLY -atX -atX -atX -aaa +aa +aa +aa +tX +tX +ag +af +ag +af +af +ag +ag +af +af +ag +ag +ag +af +ag +ag +rZ +ag +ag +pL +Ge +ag +GP +ak +EP +ag +tX +tX +zT +gJ +ab +Gd +tX +tX +ad +fw +jW +fV +rC +PZ +PZ +Pf +tX +tX +ig +wv +iw +lY +ig +LY +tX +tX +tX +aa "} (21,1,1) = {" -aaa -aaa -aaa -atX -aag -aag -acm -aGy -abP -abP -aMx -aYh -aaA -aak -aHu -aBK -akJ -alH -aQu -aKx -azN -aFH -aag -aag -aag -aaf -aXi -acj -alY -aaf -atX -afv -ajW -agJ -aab -aGd -aVL -aiL -afV -ado -ahI -afw -ayO -agi -aCc -aad -aDd -ajW -aig -azN -aiw -apz -aig -avD -aWl -atX -atX -atX +aa +aa +aa +tX +ag +ag +cm +Gy +bP +bP +Mx +Yh +aA +ak +Hu +BK +kJ +lH +Qu +Kx +zN +FH +ag +ag +ag +af +Xi +cj +lY +af +tX +fv +jW +gJ +ab +Gd +VL +iL +fV +do +hI +fw +yO +gi +Cc +ad +Dd +jW +ig +zN +iw +pz +ig +vD +Wl +tX +tX +tX "} (22,1,1) = {" -aaa -aaa -atX -atX -aaf -acm -abP -aag -aag -aag -aag -aag -amM -aWq -aOq -aWE -aBe -aRr -aRr -aRr -aRr -amk -aYi -aSG -aKN -aaf -aZu -ajM -asY -aaf -atX -afw -aRh -agJ -aps -aGd -aVL -aad -adA -agi -afv -ahG -adA -ahI -afw -aDd -afv -ahI -aag -aaZ -ape -aaZ -aaf -auv -agi -afV -atX -atX +aa +aa +tX +tX +af +cm +bP +ag +ag +ag +ag +ag +mM +Wq +Oq +WE +Be +Rr +Rr +Rr +Rr +mk +Yi +SG +KN +af +Zu +jM +sY +af +tX +fw +Rh +gJ +ps +Gd +VL +ad +dA +gi +fv +hG +dA +hI +fw +Dd +fv +hI +ag +aZ +pe +aZ +af +uv +gi +fV +tX +tX "} (23,1,1) = {" -aaa -atX -atX -aag -aag -aPB -aag -aag -any -aMT -aEE -aag -aag -asa -awj -aug -awH -aJu -ary -aSc -akR -ayy -acM -aBg -aBg -aYM -atV -aak -alY -aWd -aLY -aiM -aDd -agJ -ahT -aGd -aVL -ayO -afw -ahI -agi -aad -alS -afw -aiM -ajW -aad -afV -agJ -aab -amX -adk -aVL -ayO -afw -ahI -atX -atX +aa +tX +tX +ag +ag +PB +ag +ag +ny +MT +EE +ag +ag +sa +wj +ug +wH +Ju +ry +Sc +kR +yy +cM +Bg +Bg +YM +tV +ak +lY +Wd +LY +iM +Dd +gJ +hT +Gd +VL +yO +fw +hI +gi +ad +lS +fw +iM +jW +ad +fV +gJ +ab +mX +dk +VL +yO +fw +hI +tX +tX "} (24,1,1) = {" -aaa -atX -atX -aag -atE -abP -aag -awl -aMT -aXl -aON -any -awP -aZa -aUr -anK -aRf -aVH -avd -aVH -aIp -ayy -arm -axt -aHr -aWd -aiv -aZz -aKE -aWd -avD -ahI -afw -agJ -ahT -aGd -aVL -aad -aSv -aiM -atX -atX -aad -ajW -ahG -alS -aCc -aad -agJ -aIE -amX -ace -aVL -ahG -aOb -aph -atX -atX +aa +tX +tX +ag +tE +bP +ag +wl +MT +Xl +ON +ny +wP +Za +Ur +nK +Rf +VH +vd +VH +Ip +yy +rm +xt +Hr +Wd +iv +Zz +KE +Wd +vD +hI +fw +gJ +hT +Gd +VL +ad +Sv +iM +tX +tX +ad +jW +hG +lS +Cc +ad +gJ +IE +mX +ce +VL +hG +Ob +ph +tX +tX "} (25,1,1) = {" -aaa -atX -atX -aaf -aDM -abP -aag -aMT -aMT -aON -aWX -aON -aWg -aZa -aSz -aag -aJU -aVH -anE -aFe -aHM -aBx -aed -aci -aci -aiZ -aPj -aCW -alY -aWd -avD -aWl -aad -agJ -ahT -aaF -ahQ -aim -aad -atX -atX -atX -atX -aKJ -ato -ajt -aKJ -aKJ -aMe -aab -amX -adk -aVL -alS -aad -atX -atX -atX +aa +tX +tX +af +DM +bP +ag +MT +MT +ON +WX +ON +Wg +Za +Sz +ag +JU +VH +nE +Fe +HM +Bx +ed +ci +ci +iZ +Pj +CW +lY +Wd +vD +Wl +ad +gJ +hT +aF +hQ +im +ad +tX +tX +tX +tX +KJ +to +jt +KJ +KJ +Me +ab +mX +dk +VL +lS +ad +tX +tX +tX "} (26,1,1) = {" -aaa -atX -atX -aag -aUG -acm -aag -aIW -awl -aON -aRA -aUO -aWg -aGD -aFc -amJ -aoH -aqt -asv -app -aff -aIp -aqb -aFM -aBY -aag -ank -aoc -aEP -aag -atX -aad -afV -agJ -aab -ate -aNu -ahQ -aim -atX -atX -aag -aaf -aWd -aWd -aaf -aWd -aWd -aag -aeo -anl -aYB -aaf -aaf -atX -atX -atX -atX +aa +tX +tX +ag +UG +cm +ag +IW +wl +ON +RA +UO +Wg +GD +Fc +mJ +oH +qt +sv +pp +ff +Ip +qb +FM +BY +ag +nk +oc +EP +ag +tX +ad +fV +gJ +ab +te +Nu +hQ +im +tX +tX +ag +af +Wd +Wd +af +Wd +Wd +ag +eo +nl +YB +af +af +tX +tX +tX +tX "} (27,1,1) = {" -aaa -atX -atX -aag -aaf -acm -aaf -aaf -aIW -anu -aMT -aaf -aaf -aRN -aHh -aXB -apW -aub -asv -ash -aKI -aKI -acM -amJ -apm -aWd -aHE -aoc -aHU -aag -atX -afV -aiL -agJ -ahR -afq -aRu -acR -atX -atX -atX -aag -aVG -afM -afM -aGH -afM -afM -aac -agB -aBj -aKO -amv -aaf -atX -atX -atX -atX +aa +tX +tX +ag +af +cm +af +af +IW +nu +MT +af +af +RN +Hh +XB +pW +ub +sv +sh +KI +KI +cM +mJ +pm +Wd +HE +oc +HU +ag +tX +fV +iL +gJ +hR +fq +Ru +cR +tX +tX +tX +ag +VG +fM +fM +GH +fM +fM +ac +gB +Bj +KO +mv +af +tX +tX +tX +tX "} (28,1,1) = {" -aaa -atX -atX -atX -aaf -acm -aoR -aaf -aaf -aag -aag -aaf -aHV -aGL -aPA -aVl -aLq -akm -akm -aCC -akm -akm -aUV -aSu -aDn -aag -afs -amh -aJB -aaf -atX -atX -ahG -ahe -ahv -ahR -afq -ate -ayx -aEv -aEv -afQ -atd -abZ -ada -ada -aOO -aaA -aUZ -alX -aLS -aak -aEP -aag -atX -atX -atX -aaa +aa +tX +tX +tX +af +cm +oR +af +af +ag +ag +af +HV +GL +PA +Vl +Lq +km +km +CC +km +km +UV +Su +Dn +ag +fs +mh +JB +af +tX +tX +hG +he +hv +hR +fq +te +yx +Ev +Ev +fQ +td +bZ +da +da +OO +aA +UZ +lX +LS +ak +EP +ag +tX +tX +tX +aa "} (29,1,1) = {" -aaa -aaa -atX -atX -aaf -aaf -aSp -acm -aPB -abP -aMx -aak -aaA -aaA -apE -aMZ -aXB -avm -aku -ayi -ayj -anA -aVy -aBQ -aUQ -aWd -arL -amh -aMv -asy -atX -atX -aDd -afw -ahe -ahv -ahR -afr -aaK -aHx -aaK -aqx -aAk -agl -adz -ajU -acs -ajq -aTf -akk -akk -akk -aPQ -aag -atX -atX -aaa -aaa +aa +aa +tX +tX +af +af +Sp +cm +PB +bP +Mx +ak +aA +aA +pE +MZ +XB +vm +ku +yi +yj +nA +Vy +BQ +UQ +Wd +rL +mh +Mv +sy +tX +tX +Dd +fw +he +hv +hR +fr +aK +Hx +aK +qx +Ak +gl +dz +jU +cs +jq +Tf +kk +kk +kk +PQ +ag +tX +tX +aa +aa "} (30,1,1) = {" -aaa -aaa -atX -atX -atX -aaf -aaf -aMx -aaf -aag -aag -aag -aaf -aUg -agw -aPA -aMZ -aot -aot -aYK -aot -aot -aot -aUQ -aWd -aWd -aqF -amh -aXU -aag -aag -aag -aag -afv -ado -ahe -aji -aji -aji -aji -aji -aag -aVx -aOE -awh -aiW -aiW -aAj -aAw -aaM -aGS -aWd -abz -aaf -atX -atX -aaa -aaa +aa +aa +tX +tX +tX +af +af +Mx +af +ag +ag +ag +af +Ug +gw +PA +MZ +ot +ot +YK +ot +ot +ot +UQ +Wd +Wd +qF +mh +XU +ag +ag +ag +ag +fv +do +he +ji +ji +ji +ji +ji +ag +Vx +OE +wh +iW +iW +Aj +Aw +aM +GS +Wd +bz +af +tX +tX +aa +aa "} (31,1,1) = {" -aaa -aaa -atX -atX -atX -aSO -apt -aIe -abP -ajE -acm -azW -aaf -aBF -aaI -afc -aUI -aDK -arQ -aXg -aYL -aVV -aDK -ahg -aXO -afM -agB -amh -aMz -abe -ahA -apD -aaf -atX -aad -aad -ado -adA -afw -ajW -aZV -aag -akf -aDU -aOD -aMt -aOD -alX -aTZ -abb -aOM -amJ -aax -aaf -atX -atX -atX -aaa +aa +aa +tX +tX +tX +SO +pt +Ie +bP +jE +cm +zW +af +BF +aI +fc +UI +DK +rQ +Xg +YL +VV +DK +hg +XO +fM +gB +mh +Mz +be +hA +pD +af +tX +ad +ad +do +dA +fw +jW +ZV +ag +kf +DU +OD +Mt +OD +lX +TZ +bb +OM +mJ +ax +af +tX +tX +tX +aa "} (32,1,1) = {" -aaa -aaa -atX -atX -adb -aek -aMp -abP -ahY -aCY -abP -ajx -aag -aAR -aag -aag -aaf -aoL -atx -aag -aag -aag -alM -acL -aqI -aak -aJo -atp -aok -aQy -apr -apQ -aag -atX -atX -aCc -afw -aiM -ado -aRh -atX -aaf -arD -aow -ava -aAe -abk -aJQ -aOm -amJ -azN -azN -adU -aag -atX -atX -atX -aaa +aa +aa +tX +tX +db +ek +Mp +bP +hY +CY +bP +jx +ag +AR +ag +ag +af +oL +tx +ag +ag +ag +lM +cL +qI +ak +Jo +tp +ok +Qy +pr +pQ +ag +tX +tX +Cc +fw +iM +do +Rh +tX +af +rD +ow +va +Ae +bk +JQ +Om +mJ +zN +zN +dU +ag +tX +tX +tX +aa "} (33,1,1) = {" -aaa -aaa -aaa -atX -ajb -ase -aag -aag -aaf -aaf -aag -aag -aag -axS -aYQ -aqp -aBB -aTW -auT -aqp -aBB -aqp -aco -aWq -aky -aPh -akk -alF -aIB -agh -aWF -axs -aag -aag -aaf -aag -aag -atX -aLw -atX -atX -aaf -aCE -aQk -aOg -aOg -aWi -aak -aqo -aWd -afR -amJ -aja -aag -atX -atX -atX -aaa +aa +aa +aa +tX +jb +se +ag +ag +af +af +ag +ag +ag +xS +YQ +qp +BB +TW +uT +qp +BB +qp +co +Wq +ky +Ph +kk +lF +IB +gh +WF +xs +ag +ag +af +ag +ag +tX +Lw +tX +tX +af +CE +Qk +Og +Og +Wi +ak +qo +Wd +fR +mJ +ja +ag +tX +tX +tX +aa "} (34,1,1) = {" -aaa -aaa -aaa -atX -ajb -aeC -aaf -aOd -apB -aZq -aAs -alz -aag -aag -aag -aaf -aaf -aaf -aag -aaf -aaf -aag -aag -aaf -aks -aNx -aVC -aVN -aag -aYj -aNc -aBO -aag -azl -ajh -aCd -aaf -aWd -aWd -aWd -aag -aag -aey -aak -ada -aUt -aCw -aak -azi -aag -aag -arZ -aag -aag -atX -atX -atX -aaa +aa +aa +aa +tX +jb +eC +af +Od +pB +Zq +As +lz +ag +ag +ag +af +af +af +ag +af +af +ag +ag +af +ks +Nx +VC +VN +ag +Yj +Nc +BO +ag +zl +jh +Cd +af +Wd +Wd +Wd +ag +ag +ey +ak +da +Ut +Cw +ak +zi +ag +ag +rZ +ag +ag +tX +tX +tX +aa "} (35,1,1) = {" -aaa -aaa -aaa -atX -aCH -ajb -aag -avL -aPr -adL -aPr -aQK -aaf -aag -aBr -apq -ayB -aaf -anO -anC -aYX -aTc -aQE -aag -aAQ -afI -aER -aaf -abG -aak -afM -amh -atb -aSb -aqc -aSb -aSb -aSb -afM -afM -aQD -aag -aiv -atx -aiz -aiY -agA -ajq -aqo -aaf -adV -ahY -aAI -aaf -atX -atX -atX -aaa +aa +aa +aa +tX +CH +jb +ag +vL +Pr +dL +Pr +QK +af +ag +Br +pq +yB +af +nO +nC +YX +Tc +QE +ag +AQ +fI +ER +af +bG +ak +fM +mh +tb +Sb +qc +Sb +Sb +Sb +fM +fM +QD +ag +iv +tx +iz +iY +gA +jq +qo +af +dV +hY +AI +af +tX +tX +tX +aa "} (36,1,1) = {" -aaa -aaa -atX -atX -atX -akp -aag -akO -aUA -adO -aPt -aPr -aPr -aAf -aUH -aiG -aQS -aPF -aNS -aaA -aca -awU -aew -aag -aZk -ayD -aAZ -aag -avf -aaA -aak -aZg -aQy -aZw -aUu -aSd -apr -aQy -aLJ -aak -aak -afn -aak -aak -aJv -aiW -aiW -aaA -aqo -arZ -acm -abP -akb -aaf -atX -atX -atX -aaa +aa +aa +tX +tX +tX +kp +ag +kO +UA +dO +Pt +Pr +Pr +Af +UH +iG +QS +PF +NS +aA +ca +wU +ew +ag +Zk +yD +AZ +ag +vf +aA +ak +Zg +Qy +Zw +Uu +Sd +pr +Qy +LJ +ak +ak +fn +ak +ak +Jv +iW +iW +aA +qo +rZ +cm +bP +kb +af +tX +tX +tX +aa "} (37,1,1) = {" -aaa -aaa -atX -atX -atX -adb -aag -aOn -aTD -aCm -adL -aPr -awv -akz -asp -aWW -atG -aag -aOj -aak -arq -aZN -aFf -aag -aag -aag -aag -aag -apa -ahq -abh -akk -aPh -alI -aDG -aqa -aqC -aFk -aRo -aDB -aXp -aag -awp -aIB -aAk -amt -aOP -axA -aBv -aag -aNv -ajy -aZK -aaf -atX -atX -atX -aaa +aa +aa +tX +tX +tX +db +ag +On +TD +Cm +dL +Pr +wv +kz +sp +WW +tG +ag +Oj +ak +rq +ZN +Ff +ag +ag +ag +ag +ag +pa +hq +bh +kk +Ph +lI +DG +qa +qC +Fk +Ro +DB +Xp +ag +wp +IB +Ak +mt +OP +xA +Bv +ag +Nv +jy +ZK +af +tX +tX +tX +aa "} (38,1,1) = {" -aaa -aaa -atX -atX -atX -ajb -aag -aEo -aWM -ayQ -auw -anh -alP -aTi -aRl -asj -aEF -aPF -aak -aWb -aNF -ayc -acJ -aag -atX -atX -atX -aag -aag -aaf -aag -aaf -aag -aaf -aaf -aaf -aag -aag -aCv -anx -aaf -aag -aaf -aaf -akW -aST -aag -aaf -aaf -aag -aag -aZR -aIe -aag -aag -atX -atX -aaa +aa +aa +tX +tX +tX +jb +ag +Eo +WM +yQ +uw +nh +lP +Ti +Rl +sj +EF +PF +ak +Wb +NF +yc +cJ +ag +tX +tX +tX +ag +ag +af +ag +af +ag +af +af +af +ag +ag +Cv +nx +af +ag +af +af +kW +ST +ag +af +af +ag +ag +ZR +Ie +ag +ag +tX +tX +aa "} (39,1,1) = {" -aaa -aaa -atX -atX -aeC -ajb -aaf -azw -aXE -aXX -aPr -adT -aag -aag -auS -aQM -arK -aag -aXM -aak -aEr -aag -aag -aaf -aaf -aag -atX -atX -atX -atX -atX -aag -aag -agP -abe -aNp -agc -aio -ask -aSa -aeK -aYY -ajY -ajj -ajS -amn -aDi -aPM -aSx -aLb -aaf -aMH -abO -aIz -aag -aag -atX -aaa +aa +aa +tX +tX +eC +jb +af +zw +XE +XX +Pr +dT +ag +ag +uS +QM +rK +ag +XM +ak +Er +ag +ag +af +af +ag +tX +tX +tX +tX +tX +ag +ag +gP +be +Np +gc +io +sk +Sa +eK +YY +jY +jj +jS +mn +Di +PM +Sx +Lb +af +MH +bO +Iz +ag +ag +tX +aa "} (40,1,1) = {" -aaa -aaa -atX -atX -awt -apK -aaf -aMY -aJL -aPr -aPr -akN -aag -aaf -aiB -aak -aEs -aag -aUb -aak -ajc -abJ -arx -afM -aDc -aag -atX -aPS -ahG -atX -atX -aag -agn -aHv -aQy -aQy -azy -aUl -aGs -alX -aXs -aXs -aMy -alX -alX -aFd -aIN -atm -acp -acm -arZ -acm -acm -abP -atW -aag -atX -atX +aa +aa +tX +tX +wt +pK +af +MY +JL +Pr +Pr +kN +ag +af +iB +ak +Es +ag +Ub +ak +jc +bJ +rx +fM +Dc +ag +tX +PS +hG +tX +tX +ag +gn +Hv +Qy +Qy +zy +Ul +Gs +lX +Xs +Xs +My +lX +lX +Fd +IN +tm +cp +cm +rZ +cm +cm +bP +tW +ag +tX +tX "} (41,1,1) = {" -aaa -aaa -atX -atX -adb -aag -aag -aaf -akz -aTn -aqm -aag -aag -azn -aLG -aak -aTI -aag -aNe -aSj -aXc -abJ -aIH -aFw -aNb -aag -ayO -afw -aEt -azT -ayO -aaf -ags -aKr -aDB -aGC -aPU -abS -akk -akk -aeH -akk -aGC -ajH -acL -aZX -akk -akk -aQf -akg -aag -aZI -aor -ahY -acm -aaf -atX -atX +aa +aa +tX +tX +db +ag +ag +af +kz +Tn +qm +ag +ag +zn +LG +ak +TI +ag +Ne +Sj +Xc +bJ +IH +Fw +Nb +ag +yO +fw +Et +zT +yO +af +gs +Kr +DB +GC +PU +bS +kk +kk +eH +kk +GC +jH +cL +ZX +kk +kk +Qf +kg +ag +ZI +or +hY +cm +af +tX +tX "} (42,1,1) = {" -aaa -aaa -atX -atX -ajb -aag -afq -aQc -aot -aot -alL -avq -afq -aaf -aag -aJR -aMS -aag -asn -aBE -aTB -aag -aDy -abW -aTv -aaf -aae -aae -aae -aae -aae -aaf -agt -aNm -ahj -ajB -ahU -aiS -aiF -aiF -ajl -ajw -ajB -ajI -ajH -axX -aWn -aDl -aIV -aag -aag -aag -aag -aag -arZ -aag -atX -atX +aa +aa +tX +tX +jb +ag +fq +Qc +ot +ot +lL +vq +fq +af +ag +JR +MS +ag +sn +BE +TB +ag +Dy +bW +Tv +af +ae +ae +ae +ae +ae +af +gt +Nm +hj +jB +hU +iS +iF +iF +jl +jw +jB +jI +jH +xX +Wn +Dl +IV +ag +ag +ag +ag +ag +rZ +ag +tX +tX "} (43,1,1) = {" -aaa -aaa -atX -aFY -awt -aaf -aNd -adW -aBZ -aPv -aoi -avA -aah -aah -ayX -aMJ -aRc -aCt -aaq -aaq -ayE -aZh -aLf -ala -aak -akh -ave -ave -aqr -afp -afp -apV -aaA -axf -ahk -alT -aEf -ahV -alN -ajc -ajm -ahC -asZ -ajJ -aMn -aRF -akd -akj -aak -aWd -ahz -aes -ajk -aaf -ajb -atX -atX -atX +aa +aa +tX +FY +wt +af +Nd +dW +BZ +Pv +oi +vA +ah +ah +yX +MJ +Rc +Ct +aq +aq +yE +Zh +Lf +la +ak +kh +ve +ve +qr +fp +fp +pV +aA +xf +hk +lT +Ef +hV +lN +jc +jm +hC +sZ +jJ +Mn +RF +kd +kj +ak +Wd +hz +es +jk +af +jb +tX +tX +tX "} (44,1,1) = {" -aaa -atX -atX -arP -akp -aaf -aqq -adW -aYw -auO -aXF -aAV -aUa -adW -aFO -aEZ -ayv -aIZ -aqM -aFZ -aFZ -aPY -aGw -ayu -aCR -auJ -aOs -azj -azj -aOs -aAM -auJ -aXz -aaw -afJ -ahD -alQ -aDa -aYk -aZj -aBg -aEf -alQ -aas -aiv -aCZ -aam -abN -aak -aWd -aeg -acc -agg -aaf -apK -atX -atX -atX +aa +tX +tX +rP +kp +af +qq +dW +Yw +uO +XF +AV +Ua +dW +FO +EZ +yv +IZ +qM +FZ +FZ +PY +Gw +yu +CR +uJ +Os +zj +zj +Os +AM +uJ +Xz +aw +fJ +hD +lQ +Da +Yk +Zj +Bg +Ef +lQ +as +iv +CZ +am +bN +ak +Wd +eg +cc +gg +af +pK +tX +tX +tX "} (45,1,1) = {" -aaa -atX -atX -ajb -adb -aaf -aIS -agL -aRK -aHd -aFt -aMG -auh -aHd -aky -aaA -aNM -aCt -aOT -aUv -ark -aCt -aAo -aQk -aaA -apV -afr -afr -aHx -aaK -aaK -akh -aak -axO -ahl -aEf -asq -ajp -aiG -avn -ajm -alQ -avO -abq -aUn -aRF -ake -aeZ -aaA -aWd -aes -agT -aeJ -aag -adb -apK -atX -atX +aa +tX +tX +jb +db +af +IS +gL +RK +Hd +Ft +MG +uh +Hd +ky +aA +NM +Ct +OT +Uv +rk +Ct +Ao +Qk +aA +pV +fr +fr +Hx +aK +aK +kh +ak +xO +hl +Ef +sq +jp +iG +vn +jm +lQ +vO +bq +Un +RF +ke +eZ +aA +Wd +es +gT +eJ +ag +db +pK +tX +tX "} (46,1,1) = {" -aaa -atX -atX -aHW -ajb -aag -aag -aHO -aaf -aag -aag -aIU -aag -aag -aag -aJP -ajZ -aag -aag -aag -aag -aag -azK -aak -amd -aag -aji -aji -aji -aji -aji -aag -agd -amy -azG -ahF -ahX -abp -aiI -axi -aNZ -aaG -awF -aaW -ajS -axX -aVM -ajr -abH -aaf -aaf -aag -aag -aag -aag -ajb -atX -atX +aa +tX +tX +HW +jb +ag +ag +HO +af +ag +ag +IU +ag +ag +ag +JP +jZ +ag +ag +ag +ag +ag +zK +ak +md +ag +ji +ji +ji +ji +ji +ag +gd +my +zG +hF +hX +bp +iI +xi +NZ +aG +wF +aW +jS +xX +VM +jr +bH +af +af +ag +ag +ag +ag +jb +tX +tX "} (47,1,1) = {" -aaa -atX -atX -aGg -ajb -aag -afx -aBd -akr -aag -ayR -aBd -aLK -aag -afm -acL -amV -aGX -aCB -aWH -avF -aag -aLk -aak -aNb -aag -apn -ado -afw -ahI -afV -aag -afD -abW -aKO -aov -aSb -aeq -acp -aQL -adE -afM -aov -agB -aak -aRF -afM -afM -aSb -aSb -ajn -aeM -aYl -aeO -aag -akp -aRv -atX +aa +tX +tX +Gg +jb +ag +fx +Bd +kr +ag +yR +Bd +LK +ag +fm +cL +mV +GX +CB +WH +vF +ag +Lk +ak +Nb +ag +pn +do +fw +hI +fV +ag +fD +bW +KO +ov +Sb +eq +cp +QL +dE +fM +ov +gB +ak +RF +fM +fM +Sb +Sb +jn +eM +Yl +eO +ag +kp +Rv +tX "} (48,1,1) = {" -aaa -atX -atX -aGg -aeC -aaf -amS -adW -adW -aag -aBk -aPs -aRK -aag -aXW -aBu -atk -atl -ahf -aYC -awS -aag -aoh -akk -axE -aaf -atX -ahG -alS -aiM -atX -aaf -agv -aAL -aRi -agV -agV -aon -aQk -acp -aFs -aak -aak -aak -apN -aUF -azE -anm -aaA -axw -aag -aoU -aeA -azL -aag -ajb -apK -atX +aa +tX +tX +Gg +eC +af +mS +dW +dW +ag +Bk +Ps +RK +ag +XW +Bu +tk +tl +hf +YC +wS +ag +oh +kk +xE +af +tX +hG +lS +iM +tX +af +gv +AL +Ri +gV +gV +on +Qk +cp +Fs +ak +ak +ak +pN +UF +zE +nm +aA +xw +ag +oU +eA +zL +ag +jb +pK +tX "} (49,1,1) = {" -aaa -atX -atX -aGg -akp -aaf -amm -aaQ -adL -aag -amj -aEx -anV -aaf -aIj -aak -aOX -aKd -aKd -adB -aFT -aag -aag -aBI -aaf -aaf -atX -atX -aad -atX -atX -aag -aag -agX -akk -abd -aKP -arY -akk -aPh -akk -aKc -acB -acB -ajK -aka -akk -aWo -akk -aPh -adi -adK -aNJ -azL -aag -aaj -aeC -atX +aa +tX +tX +Gg +kp +af +mm +aQ +dL +ag +mj +Ex +nV +af +Ij +ak +OX +Kd +Kd +dB +FT +ag +ag +BI +af +af +tX +tX +ad +tX +tX +ag +ag +gX +kk +bd +KP +rY +kk +Ph +kk +Kc +cB +cB +jK +ka +kk +Wo +kk +Ph +di +dK +NJ +zL +ag +aj +eC +tX "} (50,1,1) = {" -aaa -aaa -atX -aGg -awt -aag -axZ -azQ -adW -aaf -aMN -aoP -aAl -aaf -aoF -aak -aCM -abz -aaL -alq -aaL -aag -abP -acm -aag -atX -atX -atX -afv -atX -atX -atX -aag -aaf -aVa -aag -aaf -ahs -abK -anz -anz -abK -aBg -afq -afq -ali -abU -aaf -aaf -aaf -aag -aaf -aeM -aaf -aag -ahP -aGg -atX +aa +aa +tX +Gg +wt +ag +xZ +zQ +dW +af +MN +oP +Al +af +oF +ak +CM +bz +aL +lq +aL +ag +bP +cm +ag +tX +tX +tX +fv +tX +tX +tX +ag +af +Va +ag +af +hs +bK +nz +nz +bK +Bg +fq +fq +li +bU +af +af +af +ag +af +eM +af +ag +hP +Gg +tX "} (51,1,1) = {" -aaa -aaa -atX -aGg -akp -aag -aag -aaf -aaf -aaf -aaf -aag -aag -aag -aOo -aUD -aCM -aaL -aCy -aOZ -aVR -aaf -abP -asy -aaf -atX -atX -azT -aad -asL -adb -aie -arG -awt -awt -atX -aag -aag -adu -acK -akE -ajz -agb -afq -afq -abD -aaf -aaf -atX -aag -aaD -ael -aeA -aaf -ajb -akp -aGg -atX +aa +aa +tX +Gg +kp +ag +ag +af +af +af +af +ag +ag +ag +Oo +UD +CM +aL +Cy +OZ +VR +af +bP +sy +af +tX +tX +zT +ad +sL +db +ie +rG +wt +wt +tX +ag +ag +du +cK +kE +jz +gb +fq +fq +bD +af +af +tX +ag +aD +el +eA +af +jb +kp +Gg +tX "} (52,1,1) = {" -aaa -aaa -atX -aGg -ajb -ajb -adm -acq -abP -ajE -abP -acm -abP -aWe -aMg -aHj -axl -aaL -aFP -acd -agy -aaf -aQT -aag -atX -atX -afv -aiM -atX -atX -atX -auV -ajb -atX -atX -atX -atX -aag -aiT -aiT -aiT -aij -aag -aJE -aJE -aag -aag -atX -atX -aag -aaL -aaL -aeA -abz -atI -aGg -aGg -atX +aa +aa +tX +Gg +jb +jb +dm +cq +bP +jE +bP +cm +bP +We +Mg +Hj +xl +aL +FP +cd +gy +af +QT +ag +tX +tX +fv +iM +tX +tX +tX +uV +jb +tX +tX +tX +tX +ag +iT +iT +iT +ij +ag +JE +JE +ag +ag +tX +tX +ag +aL +aL +eA +bz +tI +Gg +Gg +tX "} (53,1,1) = {" -aaa -aaa -atX -aGg -aJG -aeC -alm -aIc -aNU -aaL -aFB -abP -ajL -aag -aQB -aDA -aTY -aaL -aFN -aVg -aEV -aag -aPL -aZE -aad -afV -ahG -afw -atX -atX -atX -atX -atX -atX -atX -aad -afV -akc -aad -aCI -aCI -aad -ajF -aab -adk -adN -atX -atX -atX -aag -aYu -ael -aPK -aag -apK -aGg -atX -atX +aa +aa +tX +Gg +JG +eC +lm +Ic +NU +aL +FB +bP +jL +ag +QB +DA +TY +aL +FN +Vg +EV +ag +PL +ZE +ad +fV +hG +fw +tX +tX +tX +tX +tX +tX +tX +ad +fV +kc +ad +CI +CI +ad +jF +ab +dk +dN +tX +tX +tX +ag +Yu +el +PK +ag +pK +Gg +tX +tX "} (54,1,1) = {" -aaa -aaa -atX -aGg -aGg -atv -alm -aIc -acm -abP -aNU -aoR -aAP -aAP -adG -aKZ -aCr -aAP -aAP -aag -aag -aag -aag -aag -atX -azT -afv -aph -atX -atX -atX -atX -atX -atX -aad -afw -ahI -aiR -ahZ -aCI -aCI -aaV -ajP -aab -adk -agE -ado -adA -atX -aag -aag -aag -aag -aag -aLn -aGg -atX -atX +aa +aa +tX +Gg +Gg +tv +lm +Ic +cm +bP +NU +oR +AP +AP +dG +KZ +Cr +AP +AP +ag +ag +ag +ag +ag +tX +zT +fv +ph +tX +tX +tX +tX +tX +tX +ad +fw +hI +iR +hZ +CI +CI +aV +jP +ab +dk +gE +do +dA +tX +ag +ag +ag +ag +ag +Ln +Gg +tX +tX "} (55,1,1) = {" -aaa -aaa -atX -atX -aGg -aNi -aGg -aAP -asF -aAP -asF -aAP -aAP -asg -awj -atc -aAO -aQG -asF -asF -aAP -aAP -aAP -atX -atX -afw -aad -atX -atX -atX -atX -atX -atX -atX -aad -ahG -afw -aiq -aad -aCI -aCI -aiM -aZC -ahT -adk -aay -afw -ahZ -atX -atX -atX -atX -atX -atX -aqA -aGg -atX -atX +aa +aa +tX +tX +Gg +Ni +Gg +AP +sF +AP +sF +AP +AP +sg +wj +tc +AO +QG +sF +sF +AP +AP +AP +tX +tX +fw +ad +tX +tX +tX +tX +tX +tX +tX +ad +hG +fw +iq +ad +CI +CI +iM +ZC +hT +dk +ay +fw +hZ +tX +tX +tX +tX +tX +tX +qA +Gg +tX +tX "} (56,1,1) = {" -aaa -atX -atX -atX -ari -awt -atX -aAP -adL -aPo -anG -aop -aQX -apu -amu -adR -ahw -aGl -aro -auG -atZ -aAa -aAP -atX -atX -afv -ahI -atX -atX -atX -atX -atX -atX -atX -afV -ahH -afv -aiq -aiL -aCI -aCI -aad -aaS -ahT -adk -aaP -afV -ahI -aad -atX -atX -atX -atX -aoA -aOi -aGg -atX -aaa +aa +tX +tX +tX +ri +wt +tX +AP +dL +Po +nG +op +QX +pu +mu +dR +hw +Gl +ro +uG +tZ +Aa +AP +tX +tX +fv +hI +tX +tX +tX +tX +tX +tX +tX +fV +hH +fv +iq +iL +CI +CI +ad +aS +hT +dk +aP +fV +hI +ad +tX +tX +tX +tX +oA +Oi +Gg +tX +aa "} (57,1,1) = {" -aaa -atX -atX -amW -aFb -ajb -atX -aAP -adW -aUX -aJr -axL -aJr -aJr -avS -amw -aXq -adW -amw -amw -agZ -aAa -asF -atX -afV -aiM -afw -atX -atX -atX -atX -atX -atX -atX -afw -adA -ahG -aiq -aiM -aCI -aCI -afV -ajP -aab -aEQ -aau -ajW -afv -adA -atX -atX -apK -apK -aqA -aGg -aGg -atX -aaa +aa +tX +tX +mW +Fb +jb +tX +AP +dW +UX +Jr +xL +Jr +Jr +vS +mw +Xq +dW +mw +mw +gZ +Aa +sF +tX +fV +iM +fw +tX +tX +tX +tX +tX +tX +tX +fw +dA +hG +iq +iM +CI +CI +fV +jP +ab +EQ +au +jW +fv +dA +tX +tX +pK +pK +qA +Gg +Gg +tX +aa "} (58,1,1) = {" -aaa -atX -atX -awk -adS -arP -atX -aAP -aWU -amx -auP -aPq -aJl -alc -arS -aZL -aNy -avS -adL -aag -agq -agz -aAP -atX -ahI -afV -atX -atX -atX -atX -aiM -ajW -atX -atX -atX -ahI -agi -air -afv -aCI -aCI -aiL -aaJ -aab -adk -aaP -afV -afw -atX -atX -awt -apK -aGg -ahi -aGg -atX -atX -aaa +aa +tX +tX +wk +dS +rP +tX +AP +WU +mx +uP +Pq +Jl +lc +rS +ZL +Ny +vS +dL +ag +gq +gz +AP +tX +hI +fV +tX +tX +tX +tX +iM +jW +tX +tX +tX +hI +gi +ir +fv +CI +CI +iL +aJ +ab +dk +aP +fV +fw +tX +tX +wt +pK +Gg +hi +Gg +tX +tX +aa "} (59,1,1) = {" -aaa -atX -atX -alv -aDe -adb -atX -aAP -aGq -auP -aSL -aRC -anf -aJl -aGq -adL -amw -amw -anZ -aVO -ath -aat -aAP -afw -afv -aLC -atX -atX -atX -aiL -afw -ahI -aiL -atX -atX -atX -aad -afB -aad -aCI -aCI -aad -abF -aab -adk -adN -aad -ahI -atX -ajb -adb -aGg -aGg -aqA -atX -atX -atX -aaa +aa +tX +tX +lv +De +db +tX +AP +Gq +uP +SL +RC +nf +Jl +Gq +dL +mw +mw +nZ +VO +th +at +AP +fw +fv +LC +tX +tX +tX +iL +fw +hI +iL +tX +tX +tX +ad +fB +ad +CI +CI +ad +bF +ab +dk +dN +ad +hI +tX +jb +db +Gg +Gg +qA +tX +tX +tX +aa "} (60,1,1) = {" -aaa -atX -atX -atX -ain -atX -atX -aAP -aGq -aFo -aLZ -aRC -axG -amK -aQZ -acp -aSi -adL -auf -aLL -aYy -aat -aAP -auj -afV -atX -atX -atX -azT -aiL -agi -adA -ahG -atX -atX -aag -aag -aag -aiT -aiT -aiT -aij -aag -aeX -aeX -aag -aag -aag -aag -abj -aag -aag -aNT -aqA -atX -atX -atX -aaa +aa +tX +tX +tX +in +tX +tX +AP +Gq +Fo +LZ +RC +xG +mK +QZ +cp +Si +dL +uf +LL +Yy +at +AP +uj +fV +tX +tX +tX +zT +iL +gi +dA +hG +tX +tX +ag +ag +ag +iT +iT +iT +ij +ag +eX +eX +ag +ag +ag +ag +bj +ag +ag +NT +qA +tX +tX +tX +aa "} (61,1,1) = {" -aaa -atX -atX -atX -atX -atX -atX -asF -aGq -aPT -aIq -aRC -aEH -aGT -aGq -ajC -acm -amw -anZ -aKC -aiE -aLd -aAP -aPS -aiM -atX -atX -atX -aad -azT -aad -aOG -aOG -aOG -aLA -aag -awQ -acD -aeh -acA -acA -aiN -ahx -abv -afl -avY -ahS -alp -aeL -ant -afC -aag -awt -aoJ -adb -atX -atX -aaa +aa +tX +tX +tX +tX +tX +tX +sF +Gq +PT +Iq +RC +EH +GT +Gq +jC +cm +mw +nZ +KC +iE +Ld +AP +PS +iM +tX +tX +tX +ad +zT +ad +OG +OG +OG +LA +ag +wQ +cD +eh +cA +cA +iN +hx +bv +fl +vY +hS +lp +eL +nt +fC +ag +wt +oJ +db +tX +tX +aa "} (62,1,1) = {" -aaa -atX -atX -atX -atX -atX -atX -asF -aHL -aTe -aZO -atf -asl -amU -aVS -aBt -aqv -aqv -aXb -aFz -aVm -aOx -aAP -atX -afw -atX -atX -aiL -aad -aad -aiL -afX -agC -acr -agW -ahK -aQP -acm -aaA -aaA -aak -aaA -abY -ajD -adM -ahN -aaE -arJ -abl -auX -aaO -aag -age -aoZ -ajb -atX -aaa -aaa +aa +tX +tX +tX +tX +tX +tX +sF +HL +Te +ZO +tf +sl +mU +VS +Bt +qv +qv +Xb +Fz +Vm +Ox +AP +tX +fw +tX +tX +iL +ad +ad +iL +fX +gC +cr +gW +hK +QP +cm +aA +aA +ak +aA +bY +jD +dM +hN +aE +rJ +bl +uX +aO +ag +ge +oZ +jb +tX +aa +aa "} (63,1,1) = {" -aaa -atX -atX -atX -atX -atX -atX -asF -amw -aQh -asi -aTF -aYS -azu -acp -aZf -amw -aiA -ahc -adW -aAy -afP -asF -atX -atX -atX -atX -atX -aad -ahG -aad -afY -agD -aOG -aLA -aag -aWv -aQe -aiP -ahO -ahO -abw -aaH -aaA -aaA -agj -aFX -arJ -aaA -aee -aaY -aag -aDw -adb -atX -atX -aaa -aaa +aa +tX +tX +tX +tX +tX +tX +sF +mw +Qh +si +TF +YS +zu +cp +Zf +mw +iA +hc +dW +Ay +fP +sF +tX +tX +tX +tX +tX +ad +hG +ad +fY +gD +OG +LA +ag +Wv +Qe +iP +hO +hO +bw +aH +aA +aA +gj +FX +rJ +aA +ee +aY +ag +Dw +db +tX +tX +aa +aa "} (64,1,1) = {" -aaa -atX -atX -atX -atX -atX -atX -aAP -amw -amw -aEN -aCs -avS -arp -adL -adL -adW -adW -adL -adW -ars -adL -asF -atX -atX -atX -atX -atX -atX -aad -aad -aad -aad -aad -aad -aag -aic -ais -ahO -adh -agO -ahO -aak -aak -aaA -aaB -abi -acX -ach -acv -auM -aag -acy -atX -atX -atX -atX -aaa +aa +tX +tX +tX +tX +tX +tX +AP +mw +mw +EN +Cs +vS +rp +dL +dL +dW +dW +dL +dW +rs +dL +sF +tX +tX +tX +tX +tX +tX +ad +ad +ad +ad +ad +ad +ag +ic +is +hO +dh +gO +hO +ak +ak +aA +aB +bi +cX +ch +cv +uM +ag +cy +tX +tX +tX +tX +aa "} (65,1,1) = {" -aaa -atX -atX -atX -atX -atX -atX -aAP -aAP -aAP -asF -aAP -aAP -aYz -aWJ -avy -akB -aur -aAP -aAP -asF -aAP -aAP -atX -atX -atX -atX -atX -atX -aad -aad -aad -ahG -aad -aad -aZb -aDa -aiv -abx -aaU -aaU -ahu -aMU -aDV -aaA -ako -adf -afK -aqY -aeU -aMF -aag -atX -atX -atX -atX -atX -aaa +aa +tX +tX +tX +tX +tX +tX +AP +AP +AP +sF +AP +AP +Yz +WJ +vy +kB +ur +AP +AP +sF +AP +AP +tX +tX +tX +tX +tX +tX +ad +ad +ad +hG +ad +ad +Zb +Da +iv +bx +aU +aU +hu +MU +DV +aA +ko +df +fK +qY +eU +MF +ag +tX +tX +tX +tX +tX +aa "} (66,1,1) = {" -aaa -aaa -atX -atX -atX -atX -atX -atX -atX -atX -atX -aAP -aAP -aAP -aAP -aWG -aAP -aAP -aAP -aAP -atX -atX -atX -atX -atX -atX -atX -atX -atX -aad -aiL -aad -aIb -ahI -aad -aag -acY -ait -ahu -adj -aaU -ajQ -aaA -aid -aao -ako -aiu -adM -acb -agf -abu -aag -atX -atX -atX -atX -atX -aaa +aa +aa +tX +tX +tX +tX +tX +tX +tX +tX +tX +AP +AP +AP +AP +WG +AP +AP +AP +AP +tX +tX +tX +tX +tX +tX +tX +tX +tX +ad +iL +ad +Ib +hI +ad +ag +cY +it +hu +dj +aU +jQ +aA +id +ao +ko +iu +dM +cb +gf +bu +ag +tX +tX +tX +tX +tX +aa "} (67,1,1) = {" -aaa -aaa -atX -atX -atX -atX -atX -atX -atX -atX -atX -aAP -aIf -aWd -apS -afq -aZn -aWd -aIf -aAP -atX -atX -atX -atX -atX -atX -atX -atX -ahI -aad -aad -aad -afw -ajW -aad -aag -aQF -ais -ahu -acS -aaU -ajQ -aaA -abm -aOf -ahn -aeW -alp -aTu -aeR -aaX -aag -atX -atX -atX -atX -atX -aaa +aa +aa +tX +tX +tX +tX +tX +tX +tX +tX +tX +AP +If +Wd +pS +fq +Zn +Wd +If +AP +tX +tX +tX +tX +tX +tX +tX +tX +hI +ad +ad +ad +fw +jW +ad +ag +QF +is +hu +cS +aU +jQ +aA +bm +Of +hn +eW +lp +Tu +eR +aX +ag +tX +tX +tX +tX +tX +aa "} (68,1,1) = {" -aaa -aaa -atX -atX -atX -atX -atX -atX -atX -atX -atX -aAP -aIf -aWd -ayM -afq -avT -aWd -aIf -aAP -atX -atX -atX -atX -atX -atX -atX -atX -aav -aad -aiM -aad -adA -aiM -aad -aZb -aDa -aiv -adg -ahu -ahu -adg -aaA -aaA -aaA -aai -acq -arJ -aaA -aem -adx -aag -atX -atX -atX -atX -atX -aaa +aa +aa +tX +tX +tX +tX +tX +tX +tX +tX +tX +AP +If +Wd +yM +fq +vT +Wd +If +AP +tX +tX +tX +tX +tX +tX +tX +tX +av +ad +iM +ad +dA +iM +ad +Zb +Da +iv +dg +hu +hu +dg +aA +aA +aA +ai +cq +rJ +aA +em +dx +ag +tX +tX +tX +tX +tX +aa "} (69,1,1) = {" -aaa -aaa -atX -atX -atX -atX -atX -atX -atX -atX -atX -aAP -aRQ -aWd -aJK -afq -agm -aWd -aRQ -aAP -atX -atX -atX -atX -atX -atX -atX -atX -aad -aIb -aad -aad -aad -aad -aad -aag -afe -aOL -aaA -aak -aak -aak -aak -aak -aaA -anQ -aiu -afK -abB -aXc -aag -aag -atX -atX -atX -atX -atX -atX +aa +aa +tX +tX +tX +tX +tX +tX +tX +tX +tX +AP +RQ +Wd +JK +fq +gm +Wd +RQ +AP +tX +tX +tX +tX +tX +tX +tX +tX +ad +Ib +ad +ad +ad +ad +ad +ag +fe +OL +aA +ak +ak +ak +ak +ak +aA +nQ +iu +fK +bB +Xc +ag +ag +tX +tX +tX +tX +tX +tX "} (70,1,1) = {" -aaa -aaa -aaa -atX -atX -atX -atX -atX -atX -atX -atX -aAP -aIf -aWd -aqj -afq -aRI -aWd -aIf -aAP -atX -atX -atX -atX -atX -atX -atX -atX -aav -aad -aad -aad -aad -aiL -aad -aag -aag -acI -abE -aMk -aMk -aVf -aVf -aVf -ahy -ago -aag -aki -aag -aki -aag -aad -ahG -atX -atX -atX -atX -atX +aa +aa +aa +tX +tX +tX +tX +tX +tX +tX +tX +AP +If +Wd +qj +fq +RI +Wd +If +AP +tX +tX +tX +tX +tX +tX +tX +tX +av +ad +ad +ad +ad +iL +ad +ag +ag +cI +bE +Mk +Mk +Vf +Vf +Vf +hy +go +ag +ki +ag +ki +ag +ad +hG +tX +tX +tX +tX +tX "} (71,1,1) = {" -aaa -aaa -aaa -aaa -atX -atX -atX -atX -atX -atX -atX -aAP -aIf -aWd -aKi -afq -aDO -aWd -aIf -aAP -atX -atX -atX -atX -atX -atX -atX -atX -aad -aad -aav -aad -aad -aad -aad -aad -aag -aag -aag -afG -afG -afG -afG -afG -aag -aag -aag -asm -afq -afq -aag -adA -aad -atX -atX -atX -atX -atX +aa +aa +aa +aa +tX +tX +tX +tX +tX +tX +tX +AP +If +Wd +Ki +fq +DO +Wd +If +AP +tX +tX +tX +tX +tX +tX +tX +tX +ad +ad +av +ad +ad +ad +ad +ad +ag +ag +ag +fG +fG +fG +fG +fG +ag +ag +ag +sm +fq +fq +ag +dA +ad +tX +tX +tX +tX +tX "} (72,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -atX -atX -atX -atX -atX -aAP -aAP -aAP -aAP -aWG -aAP -aAP -aAP -aAP -atX -atX -atX -atX -atX -atX -atX -atX -atX -aad -aad -ajW -aIb -aad -ajW -aiM -aad -aXK -adt -acn -afd -acn -acn -acn -aWK -aad -aag -adD -afq -aiJ -aag -afw -azT -aad -atX -atX -atX -atX +aa +aa +aa +aa +aa +aa +tX +tX +tX +tX +tX +AP +AP +AP +AP +WG +AP +AP +AP +AP +tX +tX +tX +tX +tX +tX +tX +tX +tX +ad +ad +jW +Ib +ad +jW +iM +ad +XK +dt +cn +fd +cn +cn +cn +WK +ad +ag +dD +fq +iJ +ag +fw +zT +ad +tX +tX +tX +tX "} (73,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -atX -atX -atX -atX -atX -aAP -atD -aia -aib -aAP -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -aad -aad -afw -ahI -aad -aad -afw -aav -aad -aad -aiL -aad -aad -aad -aad -adA -ajW -aag -agH -aag -agH -aag -aiM -adA -ahG -atX -atX -atX -atX +aa +aa +aa +aa +aa +aa +aa +aa +tX +tX +tX +tX +tX +AP +tD +ia +ib +AP +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +ad +ad +fw +hI +ad +ad +fw +av +ad +ad +iL +ad +ad +ad +ad +dA +jW +ag +gH +ag +gH +ag +iM +dA +hG +tX +tX +tX +tX "} (74,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -atX -atX -atX -aAP -aqS -aFm -avh -aAP -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -aad -aad -ahG -agi -azT -agi -aiL -ahI -aad -aad -azT -aad -ahI -azT -aad -afw -aiM -aeE -aad -ahG -aad -aeE -ahG -afw -atX -atX -atX -atX -atX +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +tX +tX +tX +AP +qS +Fm +vh +AP +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +ad +ad +hG +gi +zT +gi +iL +hI +ad +ad +zT +ad +hI +zT +ad +fw +iM +eE +ad +hG +ad +eE +hG +fw +tX +tX +tX +tX +tX "} (75,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -atX -atX -aAP -aAP -aAP -aAP -aAP -atX -atX -atX -atX -aaa -aaa -atX -atX -atX -atX -atX -atX -aad -aad -aad -aad -aIb -aIb -aad -aad -aad -adA -aIb -aad -aad -aad -aad -aad -aad -aiL -aad -aad -ahG -azT -agi -atX -atX -atX -atX -aaa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +tX +tX +AP +AP +AP +AP +AP +tX +tX +tX +tX +aa +aa +tX +tX +tX +tX +tX +tX +ad +ad +ad +ad +Ib +Ib +ad +ad +ad +dA +Ib +ad +ad +ad +ad +ad +ad +iL +ad +ad +hG +zT +gi +tX +tX +tX +tX +aa "} (76,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -atX -atX -atX -atX -atX -atX -atX -atX -atX -aaa -aaa -aaa -aaa -atX -atX -atX -atX -atX -aad -aad -aad -aad -aIb -aad -aad -aad -aad -aIb -aIb -aad -aad -ajW -aad -aad -afw -adA -aad -adA -aad -aad -atX -atX -atX -atX -atX -aaa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +tX +tX +tX +tX +tX +tX +tX +tX +tX +aa +aa +aa +aa +tX +tX +tX +tX +tX +ad +ad +ad +ad +Ib +ad +ad +ad +ad +Ib +Ib +ad +ad +jW +ad +ad +fw +dA +ad +dA +ad +ad +tX +tX +tX +tX +tX +aa "} (77,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -atX -atX -atX -atX -atX -atX -atX -aaa -aaa -aaa -aaa -aaa -aaa -atX -atX -atX -atX -atX -atX -aad -aad -aad -aad -aad -aad -ahI -aad -aad -aad -azT -aiL -aiL -aad -aad -agi -aiM -aad -atX -atX -atX -atX -atX -atX -atX -aaa -aaa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +tX +tX +tX +tX +tX +tX +tX +aa +aa +aa +aa +aa +aa +tX +tX +tX +tX +tX +tX +ad +ad +ad +ad +ad +ad +hI +ad +ad +ad +zT +iL +iL +ad +ad +gi +iM +ad +tX +tX +tX +tX +tX +tX +tX +aa +aa "} (78,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -atX -atX -atX -atX -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -atX -atX -atX -atX -atX -atX -aad -aad -aad -aad -aad -aad -aad -azT -aad -aad -aad -aad -aad -aad -aiL -atX -atX -atX -atX -atX -atX -atX -atX -atX -aaa -aaa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +tX +tX +tX +tX +aa +aa +aa +aa +aa +aa +aa +aa +aa +tX +tX +tX +tX +tX +tX +ad +ad +ad +ad +ad +ad +ad +zT +ad +ad +ad +ad +ad +ad +iL +tX +tX +tX +tX +tX +tX +tX +tX +tX +aa +aa "} (79,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -atX -atX -atX -atX -atX -atX -aaa -aaa -aad -aad -aad -aad -aad -agi -aad -aad -aad -atX -atX -atX -atX -atX -atX -atX -atX -atX -atX -aaa -aaa -aaa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +tX +tX +tX +tX +tX +tX +aa +aa +ad +ad +ad +ad +ad +gi +ad +ad +ad +tX +tX +tX +tX +tX +tX +tX +tX +tX +tX +aa +aa +aa "} (80,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -atX -atX -atX -aaa -aaa -aaa -aaa -aaa -aad -aad -aad -aad -aad -aaa -aaa -aaa -atX -atX -atX -atX -atX -atX -atX -aaa -aaa -aaa -aaa -aaa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +tX +tX +tX +aa +aa +aa +aa +aa +ad +ad +ad +ad +ad +aa +aa +aa +tX +tX +tX +tX +tX +tX +tX +aa +aa +aa +aa +aa "} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm index de8e02e9ab16..8dcb397ce7f3 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm @@ -2600,7 +2600,7 @@ /area/ruin/ancientstation/kitchen) "gu" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/ruin/ancientstation/sec) @@ -3354,11 +3354,11 @@ /area/ruin/ancientstation/kitchen) "ia" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -2; pixel_y = 2 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 5; pixel_y = -2 }, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm b/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm index 0cbdaba9c8e1..c6dd91f6414d 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm @@ -1321,8 +1321,8 @@ /obj/item/tank/internals/oxygen/red, /obj/item/clothing/mask/gas/syndicate, /obj/item/mod/control/pre_equipped/traitor, -/obj/item/reagent_containers/food/drinks/bottle/rum, -/obj/item/reagent_containers/food/drinks/bottle/rum, +/obj/item/reagent_containers/drinks/bottle/rum, +/obj/item/reagent_containers/drinks/bottle/rum, /obj/item/folder/syndicate/blue, /turf/simulated/floor/plating, /area/ruin/space/onehalf/abandonedbridge) diff --git a/_maps/map_files/RandomRuins/SpaceRuins/spacebar.dmm b/_maps/map_files/RandomRuins/SpaceRuins/spacebar.dmm index bbafdde4db70..ae4e3ab8bba3 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/spacebar.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/spacebar.dmm @@ -371,7 +371,7 @@ pixel_y = -3 }, /obj/item/clothing/suit/hgpirate, -/obj/item/reagent_containers/food/drinks/cans/beer/sleepy_beer, +/obj/item/reagent_containers/drinks/cans/beer/sleepy_beer, /obj/item/clothing/gloves/ring/gold, /obj/item/id_decal/gold, /obj/item/screwdriver, @@ -468,7 +468,7 @@ /area/space/nearstation) "mb" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /turf/simulated/floor/wood, /area/ruin/space/powered/bar) "mu" = ( @@ -544,7 +544,7 @@ /area/ruin/space/powered/bar) "vD" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/wood, /area/ruin/space/powered/bar) "vE" = ( diff --git a/_maps/map_files/RandomRuins/SpaceRuins/syndicatedruglab.dmm b/_maps/map_files/RandomRuins/SpaceRuins/syndicatedruglab.dmm index d0d197efa6fd..98c894eb5b5a 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/syndicatedruglab.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/syndicatedruglab.dmm @@ -328,7 +328,7 @@ /area/ruin/space/syndicate_druglab) "JP" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5; pixel_y = 7 }, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm b/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm index e67e39745952..3915eb5c6954 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm @@ -4010,8 +4010,8 @@ }, /obj/item/book/manual/barman_recipes, /obj/item/lighter/zippo, -/obj/item/reagent_containers/food/drinks/flask/barflask, -/obj/item/reagent_containers/food/drinks/flask/barflask, +/obj/item/reagent_containers/drinks/flask/barflask, +/obj/item/reagent_containers/drinks/flask/barflask, /obj/structure/table/wood, /obj/machinery/alarm/syndicate{ pixel_x = -24; @@ -4743,7 +4743,7 @@ /area/ruin/unpowered/syndicate_space_base/telecomms) "Af" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ layer = 5 }, /turf/simulated/floor/plasteel{ @@ -5181,7 +5181,7 @@ /area/ruin/unpowered/syndicate_space_base/service) "CC" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/machinery/light_switch{ dir = 4; pixel_x = -24; @@ -6072,7 +6072,7 @@ /area/ruin/unpowered/syndicate_space_base/arrivals) "HC" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -6096,7 +6096,7 @@ /area/ruin/unpowered/syndicate_space_base/atmos) "HO" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -7066,10 +7066,10 @@ /turf/simulated/floor/plating, /area/ruin/unpowered/syndicate_space_base/atmos) "Nm" = ( -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3 }, /obj/structure/table, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/syndiecakesfactory.dmm b/_maps/map_files/RandomRuins/SpaceRuins/syndiecakesfactory.dmm index e55572e89b67..4acca6b6d8fc 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/syndiecakesfactory.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/syndiecakesfactory.dmm @@ -16,7 +16,7 @@ /area/ruin/space/unpowered) "bk" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_y = 7 }, /obj/effect/decal/cleanable/dirt, @@ -111,11 +111,11 @@ /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = -32 }, -/obj/item/reagent_containers/food/snacks/donut/sprinkles{ +/obj/item/food/snacks/donut/sprinkles{ pixel_y = 8; pixel_x = -9 }, -/obj/item/reagent_containers/food/snacks/donut/sprinkles{ +/obj/item/food/snacks/donut/sprinkles{ pixel_y = -1; pixel_x = 5 }, @@ -123,8 +123,8 @@ /area/ruin/space/unpowered) "fq" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/meat/corgi, -/obj/item/reagent_containers/food/snacks/meat/corgi{ +/obj/item/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/corgi{ pixel_y = 6 }, /turf/simulated/floor/plasteel{ @@ -133,14 +133,14 @@ /area/ruin/space/unpowered) "fs" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_y = 7 }, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_x = 15; pixel_y = 7 }, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_y = -10 }, /obj/machinery/light/small{ @@ -152,7 +152,7 @@ /area/ruin/space/unpowered) "fE" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake, +/obj/item/food/snacks/syndicake, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -275,11 +275,11 @@ /area/ruin/space/unpowered) "ke" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_x = 15; pixel_y = 7 }, -/obj/item/reagent_containers/food/snacks/syndicake, +/obj/item/food/snacks/syndicake, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -369,11 +369,11 @@ /area/ruin/space/unpowered) "qd" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice{ +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice{ pixel_y = 4 }, -/obj/item/reagent_containers/food/snacks/breadslice{ +/obj/item/food/snacks/breadslice{ pixel_y = 8 }, /obj/machinery/light/small{ @@ -480,12 +480,12 @@ /area/ruin/space/unpowered) "tf" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake, +/obj/item/food/snacks/syndicake{ pixel_x = 15; pixel_y = 7 }, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_x = 15 }, /turf/simulated/floor/plasteel{ @@ -692,10 +692,10 @@ /area/ruin/space/unpowered) "Bh" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_y = 7 }, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_y = -10 }, /turf/simulated/floor/plasteel{ @@ -747,7 +747,7 @@ /area/ruin/space/unpowered) "Do" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/corgi, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -770,11 +770,11 @@ /area/ruin/space/unpowered) "DY" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/condiment/milk{ +/obj/item/reagent_containers/condiment/milk{ pixel_y = 5; pixel_x = 6 }, -/obj/item/reagent_containers/food/condiment/milk{ +/obj/item/reagent_containers/condiment/milk{ pixel_y = 5; pixel_x = -5 }, @@ -831,8 +831,8 @@ /area/ruin/space/unpowered) "Gn" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/syndicake, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake, +/obj/item/food/snacks/syndicake{ pixel_y = 7 }, /turf/simulated/floor/engine, @@ -876,7 +876,7 @@ /turf/simulated/floor/engine, /area/ruin/space/unpowered) "Iz" = ( -/obj/item/reagent_containers/food/snacks/meat/corgi{ +/obj/item/food/snacks/meat/corgi{ pixel_y = 6 }, /obj/effect/decal/cleanable/dirt, @@ -946,10 +946,10 @@ /area/ruin/space/unpowered) "Lt" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_y = 7 }, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_x = 15 }, /turf/simulated/floor/plasteel{ @@ -976,8 +976,8 @@ /area/ruin/space/unpowered) "Mw" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake, +/obj/item/food/snacks/syndicake{ pixel_x = 15; pixel_y = 7 }, @@ -1002,10 +1002,10 @@ /area/ruin/space/unpowered) "MY" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_y = 7 }, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_x = 15 }, /turf/simulated/floor/plasteel{ @@ -1034,21 +1034,21 @@ /area/template_noop) "Ov" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/donkpocket{ +/obj/item/food/snacks/donkpocket{ pixel_x = 8 }, -/obj/item/reagent_containers/food/snacks/donkpocket{ +/obj/item/food/snacks/donkpocket{ pixel_x = -8 }, -/obj/item/reagent_containers/food/snacks/donkpocket{ +/obj/item/food/snacks/donkpocket{ pixel_x = -8; pixel_y = 8 }, -/obj/item/reagent_containers/food/snacks/donkpocket{ +/obj/item/food/snacks/donkpocket{ pixel_x = 8; pixel_y = 8 }, -/obj/item/reagent_containers/food/snacks/birthdaycakeslice, +/obj/item/food/snacks/birthdaycakeslice, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -1115,12 +1115,12 @@ /area/ruin/space/unpowered) "QF" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake, +/obj/item/food/snacks/syndicake{ pixel_x = 15; pixel_y = 7 }, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_x = 15 }, /obj/machinery/light/small{ @@ -1161,7 +1161,7 @@ }, /area/ruin/space/unpowered) "SS" = ( -/obj/item/reagent_containers/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/corgi, /turf/simulated/floor/grass, /area/ruin/space/unpowered) "TG" = ( @@ -1193,8 +1193,8 @@ /area/ruin/space/unpowered) "Vt" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/peppermill{ pixel_y = 12 }, /turf/simulated/floor/plasteel{ @@ -1202,7 +1202,7 @@ }, /area/ruin/space/unpowered) "VI" = ( -/obj/item/reagent_containers/food/snacks/meat/corgi{ +/obj/item/food/snacks/meat/corgi{ pixel_y = 6 }, /turf/simulated/floor/plasteel{ @@ -1237,7 +1237,7 @@ /area/ruin/space/unpowered) "XZ" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_y = 10; pixel_x = 5 }, @@ -1288,14 +1288,14 @@ /turf/simulated/floor/grass, /area/ruin/space/unpowered) "Zs" = ( -/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/condiment/flour, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, /area/ruin/space/unpowered) "Zw" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/snacks/syndicake{ +/obj/item/food/snacks/syndicake{ pixel_y = 7 }, /turf/simulated/floor/plasteel{ diff --git a/_maps/map_files/RandomRuins/SpaceRuins/syndiedepot.dmm b/_maps/map_files/RandomRuins/SpaceRuins/syndiedepot.dmm index 6888c9dfd94d..c40f640d6c47 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/syndiedepot.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/syndiedepot.dmm @@ -53,7 +53,7 @@ }, /area/syndicate_depot/outer) "al" = ( -/obj/item/reagent_containers/food/snacks/monstermeat/spiderleg, +/obj/item/food/snacks/monstermeat/spiderleg, /obj/structure/spider, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -85,7 +85,7 @@ /area/syndicate_depot/outer) "ar" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -128,7 +128,7 @@ }, /area/syndicate_depot/core) "ay" = ( -/obj/item/reagent_containers/food/drinks/flask/barflask, +/obj/item/reagent_containers/drinks/flask/barflask, /obj/structure/table, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -614,7 +614,7 @@ /area/syndicate_depot/core) "bO" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/syndicake, +/obj/item/food/snacks/syndicake, /turf/simulated/floor/plasteel{ icon_state = "dark" }, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/turretedoutpost.dmm b/_maps/map_files/RandomRuins/SpaceRuins/turretedoutpost.dmm index d444f1809b69..1a6635990583 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/turretedoutpost.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/turretedoutpost.dmm @@ -231,11 +231,11 @@ /area/ruin/space/unpowered) "P" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/vodka{ +/obj/item/reagent_containers/drinks/bottle/vodka{ pixel_x = -4; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/bottle/vodka{ +/obj/item/reagent_containers/drinks/bottle/vodka{ pixel_x = 3 }, /turf/simulated/floor/plasteel, @@ -259,7 +259,7 @@ /area/ruin/space/unpowered) "S" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, /obj/machinery/light{ dir = 8 }, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm b/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm index b48172ed975b..5933202a8672 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm @@ -912,13 +912,13 @@ /area/ruin/space/derelict/bridge) "cr" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood, /area/ruin/space/derelict/bridge) "cs" = ( /obj/structure/rack, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood{ broken = 1; @@ -1160,7 +1160,7 @@ /area/ruin/space/derelict/bridge) "cV" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "darkblue" @@ -1843,7 +1843,7 @@ /area/space/nearstation) "eB" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/peanuts, +/obj/item/food/snacks/grown/peanuts, /obj/structure/sign/poster/contraband/random{ pixel_y = 32 }, @@ -2777,11 +2777,11 @@ /area/ruin/space/derelict/crew_quarters) "gI" = ( /obj/structure/closet/secure_closet/bar, -/obj/item/reagent_containers/food/drinks/bottle/vodka, -/obj/item/reagent_containers/food/drinks/bottle/vodka, -/obj/item/reagent_containers/food/drinks/bottle/vodka, -/obj/item/reagent_containers/food/drinks/bottle/rum, -/obj/item/reagent_containers/food/drinks/bottle/kahlua, +/obj/item/reagent_containers/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/rum, +/obj/item/reagent_containers/drinks/bottle/kahlua, /turf/simulated/floor/plasteel/grimy, /area/ruin/space/derelict/crew_quarters) "gJ" = ( @@ -3011,7 +3011,7 @@ /area/ruin/space/derelict/crew_quarters) "hn" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/plasteel/grimy, /area/ruin/space/derelict/crew_quarters) "ho" = ( @@ -5750,7 +5750,7 @@ /area/ruin/space/derelict/hallway/primary) "nS" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/soup/beetsoup, +/obj/item/food/snacks/soup/beetsoup, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -6025,8 +6025,8 @@ /area/ruin/space/derelict/hallway/primary) "oA" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, /turf/simulated/floor/plasteel/white, /area/ruin/space/derelict/hallway/primary) "oB" = ( @@ -6524,11 +6524,11 @@ layer = 2.9 }, /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, diff --git a/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm b/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm index a517eb1ceaec..9639069969d7 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm @@ -224,7 +224,7 @@ /turf/simulated/floor/wood, /area/ruin/space/unpowered) "aP" = ( -/obj/item/reagent_containers/food/drinks/oilcan, +/obj/item/reagent_containers/drinks/oilcan, /obj/structure/window/reinforced{ dir = 8 }, @@ -290,7 +290,7 @@ /area/ruin/space/unpowered) "bc" = ( /obj/effect/decal/remains/human, -/obj/item/reagent_containers/food/snacks/meat/monkey, +/obj/item/food/snacks/meat/monkey, /turf/simulated/floor/plating, /area/ruin/space/unpowered) "bd" = ( @@ -312,7 +312,7 @@ /turf/simulated/floor/plating, /area/ruin/space/unpowered) "bg" = ( -/obj/item/reagent_containers/food/snacks/meat/monkey, +/obj/item/food/snacks/meat/monkey, /turf/simulated/floor/plating, /area/ruin/space/unpowered) "bh" = ( @@ -328,7 +328,7 @@ }, /area/ruin/space/unpowered) "bj" = ( -/obj/item/reagent_containers/food/snacks/meat/human, +/obj/item/food/snacks/meat/human, /obj/effect/decal/cleanable/blood/old, /turf/simulated/floor/plasteel{ icon_state = "chapel" diff --git a/_maps/map_files/RandomRuins/SpaceRuins/wreckedcargoship.dmm b/_maps/map_files/RandomRuins/SpaceRuins/wreckedcargoship.dmm index 6314508d4d22..c34bd6c06e10 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/wreckedcargoship.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/wreckedcargoship.dmm @@ -225,8 +225,8 @@ /area/ruin/space/wreck_cargoship) "jm" = ( /obj/item/toy/plushie/ipcplushie, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, /obj/item/paper/crumpled{ name = "unintelligible scribbles"; info = "toast... i must... the plushie..." diff --git a/_maps/map_files/RandomZLevels/beach.dmm b/_maps/map_files/RandomZLevels/beach.dmm index ad143c5af716..93ebb4b20edb 100644 --- a/_maps/map_files/RandomZLevels/beach.dmm +++ b/_maps/map_files/RandomZLevels/beach.dmm @@ -474,7 +474,7 @@ /area/awaymission/beach) "cX" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /turf/simulated/floor/wood, /area/awaymission/beach) "cY" = ( @@ -827,7 +827,7 @@ /area/awaymission/beach) "ev" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/pie, +/obj/item/food/snacks/pie, /turf/simulated/floor/beach/away/sand, /area/awaymission/beach) "ew" = ( diff --git a/_maps/map_files/cerestation/cerestation.dmm b/_maps/map_files/cerestation/cerestation.dmm index d2d5c8bedf44..32326c179b0e 100644 --- a/_maps/map_files/cerestation/cerestation.dmm +++ b/_maps/map_files/cerestation/cerestation.dmm @@ -3900,7 +3900,7 @@ /area/station/turret_protected/aisat/interior) "axU" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mug/hos, +/obj/item/reagent_containers/drinks/mug/hos, /obj/item/radio{ pixel_x = 5 }, @@ -5510,7 +5510,7 @@ /area/station/supply/miningdock) "aJM" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /obj/item/reagent_containers/glass/beaker/waterbottle{ @@ -21848,7 +21848,7 @@ /area/station/service/hydroponics) "cld" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/peppermill, /turf/simulated/floor/wood, /area/station/maintenance/starboard) "clh" = ( @@ -23236,7 +23236,7 @@ /obj/item/reagent_containers/glass/beaker/waterbottle{ pixel_x = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /turf/simulated/floor/wood, @@ -26712,7 +26712,7 @@ /area/station/maintenance/port) "cNg" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/baguette, +/obj/item/food/snacks/baguette, /obj/structure/sign/poster/official/the_owl{ pixel_y = 32 }, @@ -38308,7 +38308,7 @@ /area/station/hallway/primary/port/south) "eZY" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/holywater, +/obj/item/reagent_containers/drinks/bottle/holywater, /obj/item/lighter/zippo/black, /turf/simulated/floor/carpet/black, /area/station/service/chapel) @@ -40919,10 +40919,10 @@ /area/station/hallway/primary/starboard/south) "fZO" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_x = 10 }, -/obj/item/reagent_containers/food/snacks/chips{ +/obj/item/food/snacks/chips{ pixel_x = -5 }, /obj/structure/railing, @@ -42459,7 +42459,7 @@ /area/station/hallway/primary/fore) "gDk" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/britcup, +/obj/item/reagent_containers/drinks/britcup, /obj/item/paper_bin, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" @@ -47664,7 +47664,7 @@ /area/station/turret_protected/aisat/interior/secondary) "ipE" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/mint, +/obj/item/food/snacks/mint, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -50351,7 +50351,7 @@ /area/space) "jgd" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 2; pixel_y = 6 }, @@ -51110,7 +51110,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/table, /obj/item/kitchen/knife, -/obj/item/reagent_containers/food/snacks/meat/human, +/obj/item/food/snacks/meat/human, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "jtF" = ( @@ -52067,9 +52067,9 @@ /area/station/command/office/blueshield) "jHz" = ( /obj/structure/closet/cabinet, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /obj/machinery/firealarm{ dir = 4; pixel_x = 24; @@ -53931,7 +53931,7 @@ "knI" = ( /obj/structure/table, /obj/item/book/manual/wiki/chef_recipes, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/peppermill, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -54244,7 +54244,7 @@ "ksD" = ( /obj/structure/safe, /obj/item/clothing/head/bearpelt, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, /obj/item/dice/d20{ desc = "A die with twenty sides. You feel absolutely normal while looking at this."; name = "Die of Mediocre Rolling Capability" @@ -54927,7 +54927,7 @@ "kCC" = ( /obj/structure/table, /obj/item/kitchen/knife, -/obj/item/reagent_containers/food/condiment/saltshaker, +/obj/item/reagent_containers/condiment/saltshaker, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -55639,12 +55639,12 @@ /area/station/engineering/control) "kNJ" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = 8; pixel_y = 6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/wood, /area/station/command/office/ntrep) "kOb" = ( @@ -56989,7 +56989,7 @@ }, /area/station/service/barber) "liT" = ( -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/structure/table/wood, /turf/simulated/floor/wood, /area/station/maintenance/gambling_den) @@ -57325,7 +57325,7 @@ pixel_x = 4; pixel_y = -4 }, -/obj/item/reagent_containers/food/drinks/trophy/bronze_cup{ +/obj/item/reagent_containers/drinks/trophy/bronze_cup{ name = "Rage Cage Champion" }, /turf/simulated/floor/plating/asteroid/ancient, @@ -59040,7 +59040,7 @@ "lPU" = ( /obj/structure/table, /obj/item/reagent_containers/glass/beaker, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/enzyme, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -59584,7 +59584,7 @@ /area/station/service/hydroponics) "lYT" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/fried_vox, +/obj/item/food/snacks/fried_vox, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "lYX" = ( @@ -61471,7 +61471,7 @@ dir = 4 }, /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -2; pixel_y = 4 }, @@ -62701,11 +62701,11 @@ dir = 1; layer = 2.9 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -2; pixel_y = 4 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 2; pixel_y = 6 }, @@ -68864,7 +68864,7 @@ "per" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, -/obj/item/reagent_containers/food/drinks/britcup, +/obj/item/reagent_containers/drinks/britcup, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "peB" = ( @@ -71589,7 +71589,7 @@ "pXp" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, -/obj/item/reagent_containers/food/snacks/donkpocket, +/obj/item/food/snacks/donkpocket, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "pXq" = ( @@ -72136,7 +72136,7 @@ }, /area/station/engineering/gravitygenerator) "qeX" = ( -/obj/item/reagent_containers/food/drinks/bottle/patron, +/obj/item/reagent_containers/drinks/bottle/patron, /obj/structure/table/wood, /obj/item/lighter/random, /obj/item/storage/fancy/cigarettes/cigpack_shadyjims, @@ -76573,7 +76573,7 @@ "rHk" = ( /obj/structure/table/wood, /obj/item/book/manual/wiki/security_space_law, -/obj/item/reagent_containers/food/drinks/flask/detflask, +/obj/item/reagent_containers/drinks/flask/detflask, /obj/structure/cable/orange{ d1 = 1; d2 = 4; @@ -79213,7 +79213,7 @@ dir = 4 }, /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -2; pixel_y = 4 }, @@ -81715,7 +81715,7 @@ "tnY" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/bananalamp, -/obj/item/reagent_containers/food/snacks/pie, +/obj/item/food/snacks/pie, /obj/machinery/light_switch{ dir = 8; pixel_x = 24; @@ -84107,11 +84107,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 2; pixel_y = 6 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -2; pixel_y = 4 }, @@ -87891,7 +87891,7 @@ /obj/structure/closet/wardrobe/white, /obj/item/clothing/shoes/jackboots, /obj/item/reagent_containers/iv_bag/blood/OMinus, -/obj/item/reagent_containers/food/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/badminbrew, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "vpt" = ( @@ -88853,7 +88853,7 @@ /area/station/medical/medbay) "vDS" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/britcup, +/obj/item/reagent_containers/drinks/britcup, /obj/machinery/door/window/classic/normal{ dir = 8; name = "Medical Reception" @@ -88992,8 +88992,8 @@ /area/station/hallway/primary/fore/east) "vFa" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/chili, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/chili, /obj/item/seeds/grape, /turf/simulated/floor/plasteel{ icon_state = "darkgreenfull" @@ -92096,7 +92096,7 @@ /area/station/public/storage/tools) "wzA" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 2; pixel_y = 6 }, @@ -94442,12 +94442,12 @@ pixel_x = -24; name = "west bump" }, -/obj/item/reagent_containers/food/drinks/flask/barflask, +/obj/item/reagent_containers/drinks/flask/barflask, /obj/item/clothing/head/that{ pixel_x = 4; pixel_y = 6 }, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/structure/table/wood, /turf/simulated/floor/wood, /area/station/service/bar) @@ -96143,7 +96143,7 @@ }, /obj/machinery/light, /obj/structure/table, -/obj/item/reagent_containers/food/drinks/britcup{ +/obj/item/reagent_containers/drinks/britcup{ pixel_x = 9; pixel_y = 9 }, diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 4fef82163bbe..46ac67854b3b 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -776,7 +776,7 @@ /area/station/security/main) "aeC" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mug/hos, +/obj/item/reagent_containers/drinks/mug/hos, /turf/simulated/floor/carpet, /area/station/command/office/hos) "aeD" = ( @@ -7302,7 +7302,7 @@ /obj/item/radio{ pixel_x = 5 }, -/obj/item/reagent_containers/food/drinks/mug/sec, +/obj/item/reagent_containers/drinks/mug/sec, /turf/simulated/floor/plating, /area/station/maintenance/fore) "axX" = ( @@ -7472,7 +7472,7 @@ pixel_y = 7 }, /obj/item/pen/multi, -/obj/item/reagent_containers/food/drinks/flask/detflask, +/obj/item/reagent_containers/drinks/flask/detflask, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -7563,7 +7563,7 @@ /obj/machinery/ai_status_display{ pixel_y = -32 }, -/obj/item/reagent_containers/food/drinks/mug/sec, +/obj/item/reagent_containers/drinks/mug/sec, /obj/structure/table, /turf/simulated/floor/plasteel{ dir = 8; @@ -9027,7 +9027,7 @@ /area/station/maintenance/abandonedbar) "aCW" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/patron, +/obj/item/reagent_containers/drinks/bottle/patron, /obj/item/storage/fancy/cigarettes/cigpack_shadyjims, /turf/simulated/floor/plating, /area/station/maintenance/abandonedbar) @@ -9282,7 +9282,7 @@ /obj/item/clothing/suit/wcoat, /obj/item/clothing/suit/blacktrenchcoat, /obj/item/clothing/under/suit/tan, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) "aDD" = ( @@ -9762,8 +9762,8 @@ /area/station/maintenance/abandonedbar) "aFb" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/peppermill, /turf/simulated/floor/plating, /area/station/maintenance/abandonedbar) "aFc" = ( @@ -10505,7 +10505,7 @@ /area/station/maintenance/fpmaint) "aHx" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /obj/item/radio/intercom{ name = "west bump"; pixel_x = -28 @@ -10991,7 +10991,7 @@ /obj/item/reagent_containers/glass/beaker/waterbottle{ pixel_x = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /obj/structure/window/reinforced, @@ -11806,7 +11806,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "aLG" = ( -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -12066,7 +12066,7 @@ /area/station/maintenance/fore) "aMl" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/donut, +/obj/item/food/snacks/donut, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "aMo" = ( @@ -12258,7 +12258,7 @@ /area/station/maintenance/fpmaint) "aMT" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, @@ -12307,7 +12307,7 @@ /area/station/legal/courtroom) "aNb" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /obj/item/reagent_containers/glass/beaker/waterbottle{ @@ -12672,7 +12672,7 @@ /area/station/maintenance/fpmaint2) "aOo" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -12728,7 +12728,7 @@ /obj/item/reagent_containers/glass/beaker/waterbottle{ pixel_x = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /obj/structure/window/reinforced{ @@ -12933,7 +12933,7 @@ "aPa" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random_spawners/blood_maybe, -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /obj/item/clothing/mask/face/fox, /turf/simulated/floor/plasteel, /area/station/maintenance/fpmaint2) @@ -14034,7 +14034,7 @@ /obj/structure/closet/wardrobe/white, /obj/item/clothing/shoes/jackboots, /obj/item/reagent_containers/iv_bag/blood/OMinus, -/obj/item/reagent_containers/food/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/badminbrew, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) "aSp" = ( @@ -14689,7 +14689,7 @@ /area/station/public/dorms) "aUe" = ( /obj/structure/closet, -/obj/item/reagent_containers/food/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/badminbrew, /obj/effect/landmark/spawner/nukedisc_respawn, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, @@ -14927,7 +14927,7 @@ /obj/item/roller{ pixel_y = 9 }, -/obj/item/reagent_containers/food/drinks/britcup, +/obj/item/reagent_containers/drinks/britcup, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitehall" @@ -16642,7 +16642,7 @@ }, /obj/item/clothing/head/bearpelt, /obj/item/folder/documents, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, /obj/item/lighter/zippo/nt_rep, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/stack/spacecash/c1000, @@ -16861,7 +16861,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "baa" = ( -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "bab" = ( @@ -17358,7 +17358,7 @@ /area/station/maintenance/fpmaint) "bbH" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/baguette, +/obj/item/food/snacks/baguette, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "bbI" = ( @@ -17379,7 +17379,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "bbJ" = ( -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /obj/item/storage/backpack/duffel/clown, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) @@ -17623,7 +17623,7 @@ "bcu" = ( /obj/structure/table/wood, /obj/item/pen, -/obj/item/reagent_containers/food/drinks/bottle/holywater, +/obj/item/reagent_containers/drinks/bottle/holywater, /obj/machinery/light{ dir = 1 }, @@ -17961,7 +17961,7 @@ "bdp" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/bananalamp, -/obj/item/reagent_containers/food/snacks/pie, +/obj/item/food/snacks/pie, /obj/machinery/alarm{ name = "north bump"; pixel_y = 24 @@ -19152,8 +19152,8 @@ /area/station/service/chapel) "bgj" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/chips, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/food/snacks/chips, +/obj/item/reagent_containers/drinks/cans/cola, /turf/simulated/floor/carpet, /area/station/hallway/secondary/entry) "bgk" = ( @@ -23881,7 +23881,7 @@ /area/station/maintenance/port) "bsS" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ layer = 5 }, /obj/item/stack/packageWrap, @@ -23904,10 +23904,10 @@ /area/station/service/kitchen) "bsU" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3 }, /turf/simulated/floor/plasteel{ @@ -24006,12 +24006,12 @@ /turf/simulated/floor/wood, /area/station/service/bar) "btg" = ( -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 2; pixel_y = 6 }, /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -2; pixel_y = 4 }, @@ -24454,7 +24454,7 @@ /area/station/service/kitchen) "bus" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/mint, +/obj/item/food/snacks/mint, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -24473,7 +24473,7 @@ /area/station/service/kitchen) "buu" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/bottle/cream, +/obj/item/reagent_containers/drinks/bottle/cream, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -27847,11 +27847,11 @@ /area/station/supply/office) "bHn" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_y = 8; pixel_x = -6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" @@ -28647,7 +28647,7 @@ /area/station/public/toilet/unisex) "bJV" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/item/gun/projectile/revolver/doublebarrel, /obj/item/stack/sheet/metal{ amount = 50 @@ -28695,7 +28695,7 @@ pixel_x = -30 }, /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/dr_gibb, +/obj/item/reagent_containers/drinks/cans/dr_gibb, /obj/item/storage/box/patch_packs, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" @@ -28749,7 +28749,7 @@ /area/station/science/robotics) "bKo" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "whitepurple" @@ -28863,8 +28863,8 @@ dir = 8; layer = 2.9 }, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 4; pixel_y = 4 }, @@ -30367,26 +30367,6 @@ "bQo" = ( /turf/simulated/wall, /area/station/command/office/hop) -"bQw" = ( -/obj/structure/table/wood, -/obj/item/radio/intercom{ - name = "south bump"; - pixel_y = -28 - }, -/obj/item/storage/fancy/matches, -/obj/item/reagent_containers/food/drinks/flask/gold, -/obj/item/clothing/mask/cigarette/cigar, -/obj/item/razor{ - pixel_x = -4; - pixel_y = 2 - }, -/obj/machinery/firealarm{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/carpet, -/area/station/command/office/captain/bedroom) "bQy" = ( /obj/machinery/door/airlock{ name = "Private Restroom" @@ -32449,7 +32429,7 @@ /area/station/maintenance/asmaint2) "bYm" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/wood, /area/station/maintenance/asmaint2) "bYr" = ( @@ -33244,7 +33224,7 @@ /area/station/command/office/cmo) "caR" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee, /obj/machinery/power/apc{ dir = 4; name = "east bump"; @@ -35235,9 +35215,9 @@ /area/station/medical/medbay2) "chH" = ( /obj/structure/closet/cabinet, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood, /area/station/command/office/blueshield) "chI" = ( @@ -35316,7 +35296,7 @@ c_tag = "Research Director's Office"; network = list("Research","SS13") }, -/obj/item/reagent_containers/food/drinks/mug/rd, +/obj/item/reagent_containers/drinks/mug/rd, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "darkpurple" @@ -35334,10 +35314,10 @@ pixel_y = 32 }, /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/bottler/glass_bottle{ +/obj/item/reagent_containers/drinks/cans/bottler/glass_bottle{ pixel_x = 4 }, -/obj/item/reagent_containers/food/drinks/cans/bottler/glass_bottle{ +/obj/item/reagent_containers/drinks/cans/bottler/glass_bottle{ pixel_x = -9 }, /turf/simulated/floor/wood, @@ -50017,14 +49997,14 @@ /area/station/maintenance/asmaint2) "dgz" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -8; pixel_y = 7 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = 10 }, /turf/simulated/floor/beach/sand, @@ -50042,7 +50022,7 @@ pixel_y = -28 }, /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /obj/machinery/power/apc{ name = "south bump"; pixel_y = -24 @@ -50134,7 +50114,7 @@ "dgY" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, -/obj/item/reagent_containers/food/snacks/donkpocket, +/obj/item/food/snacks/donkpocket, /turf/simulated/floor/plating, /area/station/maintenance/aft) "dgZ" = ( @@ -50199,7 +50179,7 @@ pixel_y = -24 }, /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 2; pixel_y = 6 }, @@ -50731,8 +50711,8 @@ dir = 4 }, /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/flask/barflask, -/obj/item/reagent_containers/food/drinks/flask/barflask, +/obj/item/reagent_containers/drinks/flask/barflask, +/obj/item/reagent_containers/drinks/flask/barflask, /obj/machinery/status_display{ pixel_y = 32 }, @@ -53944,19 +53924,19 @@ /area/station/maintenance/apmaint) "dEb" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "dEq" = ( /obj/structure/rack{ dir = 1 }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = -3; pixel_y = -3 }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = 3; pixel_y = 3 }, @@ -54387,7 +54367,7 @@ /area/station/maintenance/asmaint) "dOb" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/bottle/rum, +/obj/item/reagent_containers/drinks/bottle/rum, /obj/item/reagent_containers/glass/rag{ pixel_x = -7 }, @@ -55230,12 +55210,12 @@ /obj/structure/rack{ dir = 1 }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = -3; pixel_y = -3 }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = 3; pixel_y = 3 }, @@ -55934,11 +55914,11 @@ /area/station/maintenance/disposal) "esV" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8; pixel_y = 1 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 11 }, @@ -58186,7 +58166,7 @@ /area/station/science/hallway) "fxN" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood, /area/station/maintenance/asmaint) "fxP" = ( @@ -60177,8 +60157,8 @@ /area/station/security/prisonlockers) "guQ" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -7 }, /obj/effect/spawner/lootdrop/maintenance, @@ -60799,7 +60779,7 @@ "gMa" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, -/obj/item/reagent_containers/food/snacks/dough{ +/obj/item/food/snacks/dough{ desc = "A piece of dough. It looks moldy and is hard as a rock. Hope you're not planning on turning this into a pizza.."; name = "old dough" }, @@ -61067,7 +61047,7 @@ /area/station/medical/morgue) "gRe" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood, /area/station/maintenance/asmaint2) "gRg" = ( @@ -62603,7 +62583,7 @@ /area/station/command/meeting_room) "hDS" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/mug/sci, +/obj/item/reagent_containers/drinks/mug/sci, /obj/machinery/light{ dir = 8 }, @@ -67430,7 +67410,7 @@ "kdh" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small, -/obj/item/reagent_containers/food/snacks/grown/cannabis, +/obj/item/food/snacks/grown/cannabis, /turf/simulated/floor/carpet, /area/station/maintenance/asmaint) "kdk" = ( @@ -67533,7 +67513,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "kgc" = ( -/obj/item/reagent_containers/food/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/badminbrew, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "kgg" = ( @@ -68103,8 +68083,8 @@ }, /obj/item/clothing/mask/cigarette/random, /obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) @@ -71136,7 +71116,7 @@ known_by = list("captain") }, /obj/item/gun/projectile/revolver/russian, -/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, +/obj/item/reagent_containers/drinks/bottle/absinthe/premium, /obj/item/lighter/zippo/nt_rep, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/toy/figure/crew/captain, @@ -71651,7 +71631,7 @@ }, /area/station/command/server) "mdX" = ( -/obj/item/reagent_containers/food/snacks/grown/cannabis, +/obj/item/food/snacks/grown/cannabis, /obj/effect/decal/cleanable/dirt, /obj/item/clothing/mask/cigarette/medical_marijuana, /turf/simulated/floor/wood{ @@ -72440,7 +72420,7 @@ c_tag = "Medbay Reception Break Room"; dir = 4 }, -/obj/item/reagent_containers/food/drinks/mug/med, +/obj/item/reagent_containers/drinks/mug/med, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -79100,7 +79080,7 @@ /obj/structure/closet/wardrobe/white, /obj/item/clothing/shoes/jackboots, /obj/item/reagent_containers/iv_bag/blood/OMinus, -/obj/item/reagent_containers/food/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/badminbrew, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/aft) @@ -80251,8 +80231,8 @@ /area/station/engineering/atmos) "qpi" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -7 }, /turf/simulated/floor/plasteel, @@ -82248,7 +82228,7 @@ "rkL" = ( /obj/effect/decal/cleanable/dirt, /obj/item/seeds/cannabis, -/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, +/obj/item/food/snacks/grown/ambrosia/vulgaris, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "rkS" = ( @@ -87134,7 +87114,7 @@ /area/station/maintenance/starboardsolar) "tNc" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood, /area/station/maintenance/aft) "tNn" = ( @@ -87330,6 +87310,25 @@ icon_state = "vault" }, /area/station/maintenance/apmaint) +"tRF" = ( +/obj/structure/table/wood, +/obj/item/radio/intercom{ + name = "south bump"; + pixel_y = -28 + }, +/obj/item/reagent_containers/drinks/flask/gold, +/obj/item/clothing/mask/cigarette/cigar, +/obj/item/razor{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/machinery/firealarm{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/carpet, +/area/station/command/office/captain/bedroom) "tRO" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable{ @@ -87547,17 +87546,17 @@ /area/station/science/test_chamber) "tWD" = ( /obj/structure/closet/crate, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/onion, -/obj/item/reagent_containers/food/snacks/grown/onion, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/onion, +/obj/item/food/snacks/grown/onion, /obj/item/storage/box/donkpockets, /obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/rice, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -88124,8 +88123,8 @@ /area/station/medical/storage) "uls" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/wine, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/bottle/wine, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -5 }, /turf/simulated/floor/wood{ @@ -88899,7 +88898,7 @@ /area/station/engineering/atmos/distribution) "uGf" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/grilledcheese{ +/obj/item/food/snacks/grilledcheese{ pixel_y = 9 }, /turf/simulated/floor/wood, @@ -89210,7 +89209,7 @@ /area/station/maintenance/apmaint2) "uRK" = ( /obj/item/organ/internal/heart/vox, -/obj/item/reagent_containers/food/snacks/fried_vox, +/obj/item/food/snacks/fried_vox, /obj/structure/table, /obj/item/scalpel, /turf/simulated/floor/plating, @@ -94915,7 +94914,7 @@ /area/station/medical/surgery/observation) "xII" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/pistachios, +/obj/item/food/snacks/pistachios, /obj/item/poster/random_contraband, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) @@ -95796,7 +95795,7 @@ pixel_x = 3; pixel_y = -3 }, -/obj/item/reagent_containers/food/drinks/trophy/bronze_cup, +/obj/item/reagent_containers/drinks/trophy/bronze_cup, /obj/machinery/light/small{ dir = 1 }, @@ -122995,7 +122994,7 @@ qPl bOK kdk jdt -bQw +tRF oRE bTS tvD diff --git a/_maps/map_files/generic/Lavaland.dmm b/_maps/map_files/generic/Lavaland.dmm index 9ac44c603b06..ddbe009e3a37 100644 --- a/_maps/map_files/generic/Lavaland.dmm +++ b/_maps/map_files/generic/Lavaland.dmm @@ -972,7 +972,7 @@ /area/mine/outpost/storage) "cl" = ( /obj/structure/lattice/catwalk/mining, -/obj/item/reagent_containers/food/snacks/fortunecookie{ +/obj/item/food/snacks/fortunecookie{ pixel_y = -5; pixel_x = -6 }, @@ -1348,7 +1348,7 @@ "de" = ( /obj/structure/rack, /obj/item/storage/toolbox/emergency, -/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, /obj/item/radio/intercom{ name = "south bump"; pixel_y = -28 @@ -2206,22 +2206,22 @@ /area/mine/outpost/medbay) "eJ" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -1; pixel_y = 9 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -8 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 4; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -7 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 7; pixel_y = 5 }, @@ -2375,11 +2375,11 @@ /area/mine/outpost/hallway/west) "eW" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 2; pixel_y = 6 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -2; pixel_y = 4 }, @@ -6328,7 +6328,7 @@ /area/mine/outpost/production) "Bu" = ( /obj/structure/reagent_dispensers/oil, -/obj/item/reagent_containers/food/drinks/oilcan, +/obj/item/reagent_containers/drinks/oilcan, /turf/simulated/floor/plating, /area/mine/outpost/maintenance/south) "By" = ( diff --git a/_maps/map_files/generic/centcomm.dmm b/_maps/map_files/generic/centcomm.dmm index ab72f851ffb3..2e68f1a049da 100644 --- a/_maps/map_files/generic/centcomm.dmm +++ b/_maps/map_files/generic/centcomm.dmm @@ -855,7 +855,7 @@ /area/centcom) "du" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /turf/simulated/floor/plasteel/freezer, /area/ninja/holding) "dv" = ( @@ -876,7 +876,7 @@ /area/ninja/holding) "dy" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, /turf/simulated/floor/plasteel/freezer, /area/ninja/holding) "dz" = ( @@ -1099,7 +1099,7 @@ pixel_y = 5; pixel_x = -7 }, -/obj/item/reagent_containers/food/drinks/mugwort{ +/obj/item/reagent_containers/drinks/mugwort{ pixel_y = 6; pixel_x = 8 }, @@ -1413,7 +1413,7 @@ /area/ninja/holding) "fv" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mug/novelty, +/obj/item/reagent_containers/drinks/mug/novelty, /obj/item/candle/eternal/wizard{ pixel_y = 11 }, @@ -1449,24 +1449,24 @@ /area/shuttle/administration) "fF" = ( /obj/structure/closet/secure_closet/freezer/meat/open, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/spaghetti, -/obj/item/reagent_containers/food/snacks/spaghetti, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/sausage, +/obj/item/food/snacks/sausage, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/spaghetti, +/obj/item/food/snacks/spaghetti, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -2391,11 +2391,11 @@ /area/ghost_bar) "iv" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/tonic{ +/obj/item/reagent_containers/drinks/cans/tonic{ pixel_x = 7; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, /turf/simulated/floor/plasteel, /area/centcom/evac) "iw" = ( @@ -2634,7 +2634,7 @@ /area/syndicate_mothership) "jo" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/devilskiss, +/obj/item/reagent_containers/drinks/drinkingglass/devilskiss, /turf/simulated/floor/plasteel/dark, /area/syndicate_mothership) "jp" = ( @@ -3844,7 +3844,7 @@ /area/admin) "mV" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/trophy/bronze_cup/toolbox_win, +/obj/item/reagent_containers/drinks/trophy/bronze_cup/toolbox_win, /turf/simulated/floor/plasteel/dark, /area/tdome/tdomeobserve) "mW" = ( @@ -4105,7 +4105,7 @@ /area/shuttle/administration) "nI" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -2; pixel_y = 5 }, @@ -4218,7 +4218,7 @@ /area/centcom/suppy) "nY" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/mushroompizzaslice{ +/obj/item/food/snacks/mushroompizzaslice{ pixel_x = -5; pixel_y = 5 }, @@ -4233,7 +4233,7 @@ /area/admin) "ob" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 5; pixel_y = -2 }, @@ -4293,7 +4293,7 @@ /area/ghost_bar) "om" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/trophy/gold_cup, +/obj/item/reagent_containers/drinks/trophy/gold_cup, /turf/simulated/floor/plasteel/dark, /area/tdome/tdomeobserve) "on" = ( @@ -4398,11 +4398,11 @@ /area/shuttle/trade/sol) "oJ" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 5 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8 }, /obj/item/kitchen/knife, @@ -4411,7 +4411,7 @@ name = "west bump"; pixel_x = -28 }, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_y = 5 }, /obj/machinery/reagentgrinder{ @@ -4791,7 +4791,7 @@ /area/holodeck/source_thunderdomecourt) "ql" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/mug/med, +/obj/item/reagent_containers/drinks/mug/med, /obj/machinery/light{ dir = 8 }, @@ -4856,7 +4856,7 @@ /area/syndicate_mothership) "qw" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/item/reagent_containers/glass/rag, /obj/machinery/newscaster{ dir = 1; @@ -4976,7 +4976,7 @@ "qT" = ( /obj/structure/table/wood, /obj/item/storage/box/drinkingglasses, -/obj/item/reagent_containers/food/drinks/bottle/rum, +/obj/item/reagent_containers/drinks/bottle/rum, /turf/simulated/floor/wood, /area/syndicate_mothership) "qU" = ( @@ -5113,13 +5113,13 @@ /area/admin) "ro" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/grown/citrus/lemon, -/obj/item/reagent_containers/food/snacks/grown/berries, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/cherries, -/obj/item/reagent_containers/food/snacks/grown/citrus/orange, -/obj/item/reagent_containers/food/snacks/grown/corn, -/obj/item/reagent_containers/food/snacks/grown/mushroom/amanita, +/obj/item/food/snacks/grown/citrus/lemon, +/obj/item/food/snacks/grown/berries, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/cherries, +/obj/item/food/snacks/grown/citrus/orange, +/obj/item/food/snacks/grown/corn, +/obj/item/food/snacks/grown/mushroom/amanita, /turf/simulated/floor/plasteel/freezer, /area/admin) "rp" = ( @@ -5347,7 +5347,7 @@ "rT" = ( /obj/structure/table/wood/poker, /obj/item/clothing/mask/cigarette/cigar/havana, -/obj/item/reagent_containers/food/drinks/bottle/cognac, +/obj/item/reagent_containers/drinks/bottle/cognac, /turf/simulated/floor/transparent/glass, /area/tdome/tdomeobserve) "rU" = ( @@ -5514,7 +5514,7 @@ pixel_y = -32 }, /obj/structure/rack/skeletal_bar/left, -/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, /turf/simulated/floor/wood, /area/syndicate_mothership) "sD" = ( @@ -5522,7 +5522,7 @@ pixel_y = -32 }, /obj/structure/rack/skeletal_bar/right, -/obj/item/reagent_containers/food/drinks/bottle/gin, +/obj/item/reagent_containers/drinks/bottle/gin, /turf/simulated/floor/wood, /area/syndicate_mothership) "sE" = ( @@ -5536,7 +5536,7 @@ /area/syndicate_mothership) "sF" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/machinery/light{ dir = 4 }, @@ -6695,15 +6695,15 @@ /area/ghost_bar) "wN" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 5 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8 }, /obj/item/kitchen/knife, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_y = 5 }, /obj/machinery/reagentgrinder{ @@ -7163,22 +7163,22 @@ /area/holodeck/source_boxingcourt) "zj" = ( /obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/whitebeet, -/obj/item/reagent_containers/food/snacks/grown/whitebeet, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/rice, -/obj/item/reagent_containers/food/snacks/grown/rice, -/obj/item/reagent_containers/food/snacks/grown/icepepper, -/obj/item/reagent_containers/food/snacks/grown/icepepper, -/obj/item/reagent_containers/food/snacks/grown/citrus/lemon, -/obj/item/reagent_containers/food/snacks/grown/citrus/lime, -/obj/item/reagent_containers/food/snacks/grown/citrus/orange, -/obj/item/reagent_containers/food/snacks/grown/cherries, -/obj/item/reagent_containers/food/snacks/grown/apple, -/obj/item/reagent_containers/food/snacks/grown/ambrosia/deus, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/whitebeet, +/obj/item/food/snacks/grown/whitebeet, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/rice, +/obj/item/food/snacks/grown/rice, +/obj/item/food/snacks/grown/icepepper, +/obj/item/food/snacks/grown/icepepper, +/obj/item/food/snacks/grown/citrus/lemon, +/obj/item/food/snacks/grown/citrus/lime, +/obj/item/food/snacks/grown/citrus/orange, +/obj/item/food/snacks/grown/cherries, +/obj/item/food/snacks/grown/apple, +/obj/item/food/snacks/grown/ambrosia/deus, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -7458,7 +7458,7 @@ /area/admin) "As" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/devilskiss, +/obj/item/reagent_containers/drinks/drinkingglass/devilskiss, /turf/simulated/floor/wood, /area/admin) "At" = ( @@ -7536,9 +7536,9 @@ "AL" = ( /obj/structure/table, /obj/item/storage/fancy/cigarettes/syndicate, -/obj/item/reagent_containers/food/drinks/cans/adminbooze, -/obj/item/reagent_containers/food/drinks/cans/badminbrew, -/obj/item/reagent_containers/food/drinks/cans/madminmalt, +/obj/item/reagent_containers/drinks/cans/adminbooze, +/obj/item/reagent_containers/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/madminmalt, /turf/simulated/floor/plasteel, /area/admin) "AM" = ( @@ -7677,7 +7677,7 @@ "Bo" = ( /obj/structure/table/wood, /obj/item/storage/box/drinkingglasses, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_y = 5 }, /turf/simulated/floor/plasteel{ @@ -7901,7 +7901,7 @@ /area/centcom/suppy) "Cj" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/madminmalt{ +/obj/item/reagent_containers/drinks/cans/madminmalt{ pixel_y = 2 }, /turf/simulated/floor/plasteel, @@ -9895,22 +9895,22 @@ /area/shuttle/escape) "Jl" = ( /obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/whitebeet, -/obj/item/reagent_containers/food/snacks/grown/whitebeet, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/rice, -/obj/item/reagent_containers/food/snacks/grown/rice, -/obj/item/reagent_containers/food/snacks/grown/icepepper, -/obj/item/reagent_containers/food/snacks/grown/icepepper, -/obj/item/reagent_containers/food/snacks/grown/citrus/lemon, -/obj/item/reagent_containers/food/snacks/grown/citrus/lime, -/obj/item/reagent_containers/food/snacks/grown/citrus/orange, -/obj/item/reagent_containers/food/snacks/grown/cherries, -/obj/item/reagent_containers/food/snacks/grown/apple, -/obj/item/reagent_containers/food/snacks/grown/ambrosia/deus, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/whitebeet, +/obj/item/food/snacks/grown/whitebeet, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/rice, +/obj/item/food/snacks/grown/rice, +/obj/item/food/snacks/grown/icepepper, +/obj/item/food/snacks/grown/icepepper, +/obj/item/food/snacks/grown/citrus/lemon, +/obj/item/food/snacks/grown/citrus/lime, +/obj/item/food/snacks/grown/citrus/orange, +/obj/item/food/snacks/grown/cherries, +/obj/item/food/snacks/grown/apple, +/obj/item/food/snacks/grown/ambrosia/deus, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -9981,24 +9981,24 @@ /area/centcom/specops) "JB" = ( /obj/structure/closet/secure_closet/freezer/meat/open, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/spaghetti, -/obj/item/reagent_containers/food/snacks/spaghetti, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/sausage, +/obj/item/food/snacks/sausage, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/spaghetti, +/obj/item/food/snacks/spaghetti, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -10269,25 +10269,25 @@ /area/centcom/evac) "Kw" = ( /obj/structure/closet/secure_closet/freezer/kitchen, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/vanillapod, -/obj/item/reagent_containers/food/snacks/grown/vanillapod, -/obj/item/reagent_containers/food/snacks/grown/sugarcane, -/obj/item/reagent_containers/food/snacks/grown/sugarcane, -/obj/item/reagent_containers/food/snacks/grown/oat, -/obj/item/reagent_containers/food/snacks/grown/oat, -/obj/item/reagent_containers/food/snacks/grown/grapes, -/obj/item/reagent_containers/food/snacks/grown/grapes, -/obj/item/reagent_containers/food/snacks/grown/corn, -/obj/item/reagent_containers/food/snacks/grown/corn, -/obj/item/reagent_containers/food/snacks/grown/chili, -/obj/item/reagent_containers/food/snacks/grown/chili, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/apple, -/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/vanillapod, +/obj/item/food/snacks/grown/vanillapod, +/obj/item/food/snacks/grown/sugarcane, +/obj/item/food/snacks/grown/sugarcane, +/obj/item/food/snacks/grown/oat, +/obj/item/food/snacks/grown/oat, +/obj/item/food/snacks/grown/grapes, +/obj/item/food/snacks/grown/grapes, +/obj/item/food/snacks/grown/corn, +/obj/item/food/snacks/grown/corn, +/obj/item/food/snacks/grown/chili, +/obj/item/food/snacks/grown/chili, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/apple, +/obj/item/food/snacks/grown/ambrosia/vulgaris, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -10940,8 +10940,8 @@ /area/centcom/evac) "MF" = ( /obj/structure/table/wood/fancy/royalblack, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/bottle/cognac{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/bottle/cognac{ pixel_x = 10 }, /turf/simulated/floor/carpet/black, @@ -10954,7 +10954,7 @@ /area/centcom/specops) "MH" = ( /obj/structure/table/wood/fancy/royalblack, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/carpet/black, /area/centcom/evac) "MI" = ( @@ -11101,8 +11101,8 @@ /area/centcom/suppy) "MY" = ( /obj/structure/table/wood/fancy/royalblack, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka{ pixel_x = -12 }, /turf/simulated/floor/carpet/black, @@ -11350,11 +11350,11 @@ /area/centcom/gamma) "NT" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/sodawater{ +/obj/item/reagent_containers/drinks/cans/sodawater{ pixel_x = 6; pixel_y = -3 }, -/obj/item/reagent_containers/food/drinks/cans/starkist, +/obj/item/reagent_containers/drinks/cans/starkist, /turf/simulated/floor/plasteel, /area/centcom/evac) "NU" = ( @@ -11414,25 +11414,25 @@ /obj/structure/closet/secure_closet/freezer/kitchen{ req_access = null }, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/vanillapod, -/obj/item/reagent_containers/food/snacks/grown/vanillapod, -/obj/item/reagent_containers/food/snacks/grown/sugarcane, -/obj/item/reagent_containers/food/snacks/grown/sugarcane, -/obj/item/reagent_containers/food/snacks/grown/oat, -/obj/item/reagent_containers/food/snacks/grown/oat, -/obj/item/reagent_containers/food/snacks/grown/grapes, -/obj/item/reagent_containers/food/snacks/grown/grapes, -/obj/item/reagent_containers/food/snacks/grown/corn, -/obj/item/reagent_containers/food/snacks/grown/corn, -/obj/item/reagent_containers/food/snacks/grown/chili, -/obj/item/reagent_containers/food/snacks/grown/chili, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/apple, -/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/vanillapod, +/obj/item/food/snacks/grown/vanillapod, +/obj/item/food/snacks/grown/sugarcane, +/obj/item/food/snacks/grown/sugarcane, +/obj/item/food/snacks/grown/oat, +/obj/item/food/snacks/grown/oat, +/obj/item/food/snacks/grown/grapes, +/obj/item/food/snacks/grown/grapes, +/obj/item/food/snacks/grown/corn, +/obj/item/food/snacks/grown/corn, +/obj/item/food/snacks/grown/chili, +/obj/item/food/snacks/grown/chili, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/apple, +/obj/item/food/snacks/grown/ambrosia/vulgaris, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -11500,13 +11500,13 @@ /area/wizard_station) "Ov" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/madminmalt, +/obj/item/reagent_containers/drinks/cans/madminmalt, /turf/simulated/floor/wood, /area/centcom/evac) "Ow" = ( /obj/structure/table, /obj/item/lighter/zippo, -/obj/item/reagent_containers/food/drinks/cans/dr_gibb, +/obj/item/reagent_containers/drinks/cans/dr_gibb, /turf/simulated/floor/wood, /area/centcom/evac) "Ox" = ( @@ -11518,12 +11518,12 @@ /area/tdome/arena) "Oy" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, /turf/simulated/floor/wood, /area/centcom/evac) "Oz" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /turf/simulated/floor/wood, /area/centcom/evac) "OA" = ( @@ -11557,7 +11557,7 @@ /area/centcom/control) "OE" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind, +/obj/item/reagent_containers/drinks/cans/space_mountain_wind, /turf/simulated/floor/wood, /area/centcom/evac) "OF" = ( @@ -11846,7 +11846,7 @@ "Pw" = ( /obj/structure/table/wood, /obj/item/storage/box/drinkingglasses, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_y = 5 }, /turf/simulated/floor/plasteel/dark, @@ -13326,7 +13326,7 @@ /area/ghost_bar) "Vs" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/badminbrew, /turf/simulated/floor/wood, /area/centcom/evac) "Vt" = ( @@ -13344,7 +13344,7 @@ /area/tdome/tdomeadmin) "Vv" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/madminmalt, +/obj/item/reagent_containers/drinks/cans/madminmalt, /turf/simulated/floor/plasteel, /area/centcom/evac) "Vx" = ( @@ -13353,7 +13353,7 @@ "Vy" = ( /obj/structure/table/wood, /obj/item/storage/box/drinkingglasses, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_y = 5 }, /turf/simulated/floor/plasteel{ @@ -13391,7 +13391,7 @@ /area/centcom/evac) "VH" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/tonic, +/obj/item/reagent_containers/drinks/cans/tonic, /turf/simulated/floor/wood, /area/centcom/evac) "VI" = ( @@ -13566,14 +13566,14 @@ /area/shuttle/escape) "Wr" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 5 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8 }, -/obj/item/reagent_containers/food/drinks/britcup, +/obj/item/reagent_containers/drinks/britcup, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, diff --git a/_maps/map_files/shuttles/emergency_bar.dmm b/_maps/map_files/shuttles/emergency_bar.dmm index 3a9aeaf95116..96ee62dfcff4 100644 --- a/_maps/map_files/shuttles/emergency_bar.dmm +++ b/_maps/map_files/shuttles/emergency_bar.dmm @@ -45,7 +45,7 @@ /area/shuttle/escape) "an" = ( /obj/structure/table/wood/poker, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey, /turf/simulated/floor/carpet/red, /area/shuttle/escape) "ao" = ( @@ -245,7 +245,7 @@ "aU" = ( /obj/structure/table, /obj/item/storage/box/drinkingglasses, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -296,7 +296,7 @@ "bd" = ( /obj/structure/table, /obj/item/storage/box/drinkingglasses, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/item/clothing/mask/cigarette/cigar, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" diff --git a/_maps/map_files/shuttles/emergency_clown.dmm b/_maps/map_files/shuttles/emergency_clown.dmm index 4f474c5dda29..1aa2399414c1 100644 --- a/_maps/map_files/shuttles/emergency_clown.dmm +++ b/_maps/map_files/shuttles/emergency_clown.dmm @@ -148,7 +148,7 @@ icon_state = "greentext"; name = "greentext" }, -/obj/item/reagent_containers/food/condiment/saltshaker, +/obj/item/reagent_containers/condiment/saltshaker, /turf/simulated/floor/mineral/plastitanium/red/brig, /area/shuttle/escape) "aI" = ( diff --git a/_maps/map_files/shuttles/emergency_cyb.dmm b/_maps/map_files/shuttles/emergency_cyb.dmm index ffd77b68bc53..1532d0ee28d5 100644 --- a/_maps/map_files/shuttles/emergency_cyb.dmm +++ b/_maps/map_files/shuttles/emergency_cyb.dmm @@ -891,7 +891,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/item/reagent_containers/food/drinks/mug/med, +/obj/item/reagent_containers/drinks/mug/med, /turf/simulated/floor/plasteel{ icon_state = "cmo" }, diff --git a/_maps/map_files/shuttles/emergency_dept.dmm b/_maps/map_files/shuttles/emergency_dept.dmm index 1a170bf230c5..d6f6a2b87054 100644 --- a/_maps/map_files/shuttles/emergency_dept.dmm +++ b/_maps/map_files/shuttles/emergency_dept.dmm @@ -341,7 +341,7 @@ /area/shuttle/escape) "bd" = ( /obj/item/storage/box/drinkingglasses, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/structure/table/wood, /obj/machinery/light{ dir = 4 diff --git a/_maps/map_files/shuttles/emergency_jungle.dmm b/_maps/map_files/shuttles/emergency_jungle.dmm index 8f2900e751ad..13184bd06f12 100644 --- a/_maps/map_files/shuttles/emergency_jungle.dmm +++ b/_maps/map_files/shuttles/emergency_jungle.dmm @@ -607,7 +607,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/item/reagent_containers/food/drinks/mug/med, +/obj/item/reagent_containers/drinks/mug/med, /mob/living/carbon/human/monkey, /turf/simulated/floor/grass, /area/shuttle/escape) diff --git a/_maps/map_files/shuttles/ferry_meat.dmm b/_maps/map_files/shuttles/ferry_meat.dmm index 0d0a4f7fab4c..8a21a1c75e2d 100644 --- a/_maps/map_files/shuttles/ferry_meat.dmm +++ b/_maps/map_files/shuttles/ferry_meat.dmm @@ -36,13 +36,13 @@ /obj/structure/closet/secure_closet/freezer/meat, /obj/item/grenade/chem_grenade/meat, /obj/item/grenade/clusterbuster/meat, -/obj/item/reagent_containers/food/snacks/meat/corgi, -/obj/item/reagent_containers/food/snacks/meat/ham, -/obj/item/reagent_containers/food/snacks/meat/human, -/obj/item/reagent_containers/food/snacks/meat/monkey, -/obj/item/reagent_containers/food/snacks/meat/pug, -/obj/item/reagent_containers/food/snacks/meat/slab/meatproduct, -/obj/item/reagent_containers/food/snacks/meat/syntiflesh, +/obj/item/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/ham, +/obj/item/food/snacks/meat/human, +/obj/item/food/snacks/meat/monkey, +/obj/item/food/snacks/meat/pug, +/obj/item/food/snacks/meat/slab/meatproduct, +/obj/item/food/snacks/meat/syntiflesh, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, diff --git a/_maps/map_files/templates/biodome_beach.dmm b/_maps/map_files/templates/biodome_beach.dmm index 2f3f5db29c94..994144d3207e 100644 --- a/_maps/map_files/templates/biodome_beach.dmm +++ b/_maps/map_files/templates/biodome_beach.dmm @@ -110,8 +110,8 @@ /area/ruin/powered/beach) "au" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, /turf/simulated/floor/wood, /area/ruin/powered/beach) "av" = ( @@ -120,7 +120,7 @@ dir = 8; name = "Beach Bar Desk" }, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/item/reagent_containers/glass/rag, /obj/effect/mapping_helpers/airlock/windoor/access/any/service/bar{ dir = 8 @@ -363,7 +363,7 @@ /turf/simulated/floor/beach/sand, /area/ruin/powered/beach) "bP" = ( -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/beach/sand, /area/ruin/powered/beach) "bQ" = ( diff --git a/_maps/map_files/templates/shelter_2.dmm b/_maps/map_files/templates/shelter_2.dmm index a5d11498f77d..0ea165cfb5e2 100644 --- a/_maps/map_files/templates/shelter_2.dmm +++ b/_maps/map_files/templates/shelter_2.dmm @@ -165,16 +165,16 @@ /obj/machinery/light{ dir = 4 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 6; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/bottle/wine, +/obj/item/reagent_containers/drinks/bottle/wine, /turf/simulated/floor/carpet/black, /area/survivalpod) "B" = ( /obj/structure/table/wood/fancy/black, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -4; pixel_y = 1 }, diff --git a/_maps/map_files220/MetaStation/MetaStation.dmm b/_maps/map_files220/MetaStation/MetaStation.dmm index c74bb6a8c29d..4582c1cb5528 100644 --- a/_maps/map_files220/MetaStation/MetaStation.dmm +++ b/_maps/map_files220/MetaStation/MetaStation.dmm @@ -56,11 +56,11 @@ /area/space/nearstation) "abv" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8; pixel_y = 1 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 11 }, @@ -229,7 +229,7 @@ /area/station/security/detective) "adc" = ( /obj/structure/closet/secure_closet/clown, -/obj/item/reagent_containers/food/snacks/pie, +/obj/item/food/snacks/pie, /obj/machinery/newscaster/directional/south, /turf/simulated/floor/wood, /area/station/service/clown) @@ -551,7 +551,7 @@ /area/shuttle/pod_3) "afT" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = 5; pixel_y = 12 }, @@ -664,7 +664,7 @@ /obj/item/restraints/handcuffs, /obj/item/flash, /obj/machinery/alarm/directional/south, -/obj/item/reagent_containers/food/drinks/flask/detflask, +/obj/item/reagent_containers/drinks/flask/detflask, /obj/item/storage/lockbox/spy_kit, /turf/simulated/floor/plasteel{ icon_state = "grimy" @@ -750,20 +750,20 @@ /area/station/public/fitness) "aii" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/sillycup{ +/obj/item/reagent_containers/drinks/sillycup{ pixel_x = -5; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/sillycup, -/obj/item/reagent_containers/food/drinks/sillycup{ +/obj/item/reagent_containers/drinks/sillycup, +/obj/item/reagent_containers/drinks/sillycup{ pixel_x = 5; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/sillycup{ +/obj/item/reagent_containers/drinks/sillycup{ pixel_x = 5; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/sillycup{ +/obj/item/reagent_containers/drinks/sillycup{ pixel_x = 5; pixel_y = 3 }, @@ -4106,7 +4106,7 @@ /area/station/maintenance/fore) "axH" = ( /obj/structure/flora/ausbushes/lavendergrass, -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /turf/simulated/floor/grass/no_creep, /area/station/medical/virology) "axM" = ( @@ -9526,7 +9526,7 @@ /obj/item/reagent_containers/glass/beaker/waterbottle{ pixel_x = -5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 5 }, /obj/structure/window/reinforced{ @@ -10176,7 +10176,7 @@ /area/station/maintenance/fpmaint) "aUa" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 5 }, /obj/item/reagent_containers/glass/beaker/waterbottle{ @@ -13180,24 +13180,24 @@ /area/station/hallway/primary/central) "bcO" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -4; pixel_y = 6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 4; pixel_y = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5; pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 6; pixel_y = -1 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /obj/machinery/newscaster/directional/north, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) @@ -17069,7 +17069,7 @@ "bmV" = ( /obj/machinery/light_switch/south, /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/flask/gold, +/obj/item/reagent_containers/drinks/flask/gold, /obj/item/razor{ pixel_x = -4; pixel_y = 2 @@ -17229,7 +17229,7 @@ }, /obj/item/clothing/head/bearpelt, /obj/item/folder/documents, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, /obj/item/lighter/zippo/nt_rep, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/stack/spacecash/c1000, @@ -19272,7 +19272,7 @@ /area/station/hallway/primary/port) "btq" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/chips, +/obj/item/food/snacks/chips, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -21222,7 +21222,7 @@ known_by = list("captain") }, /obj/item/gun/projectile/revolver/russian, -/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, +/obj/item/reagent_containers/drinks/bottle/absinthe/premium, /obj/item/lighter/zippo/nt_rep, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/toy/figure/crew/captain, @@ -21997,7 +21997,7 @@ /area/station/turret_protected/aisat/interior) "bAB" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/pie, +/obj/item/food/snacks/pie, /obj/machinery/light/small/directional/north, /obj/structure/sign/poster/random{ pixel_y = 32 @@ -23217,7 +23217,7 @@ /area/station/command/office/captain) "bEl" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -26240,7 +26240,7 @@ /area/station/science/research) "bPB" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/ale, +/obj/item/reagent_containers/drinks/cans/ale, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) "bPE" = ( @@ -26272,9 +26272,9 @@ /area/station/public/vacant_office) "bPS" = ( /obj/structure/closet/secure_closet/blueshield, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood, /area/station/command/office/blueshield) "bPT" = ( @@ -26543,12 +26543,12 @@ /area/station/service/kitchen) "bQP" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/mint, +/obj/item/food/snacks/mint, /obj/item/kitchen/rollingpin, /obj/item/reagent_containers/glass/beaker{ pixel_x = 5 }, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/enzyme, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -27426,7 +27426,7 @@ pixel_x = 5; pixel_y = -1 }, -/obj/item/reagent_containers/food/drinks/mug{ +/obj/item/reagent_containers/drinks/mug{ pixel_x = -4; pixel_y = 4 }, @@ -30573,7 +30573,7 @@ /area/station/service/hydroponics) "cdJ" = ( /obj/structure/lattice, -/obj/item/reagent_containers/food/drinks/bottle/goldschlager, +/obj/item/reagent_containers/drinks/bottle/goldschlager, /turf/space, /area/space/nearstation) "cdM" = ( @@ -30897,7 +30897,7 @@ "ceW" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/gin, +/obj/item/reagent_containers/drinks/bottle/gin, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) "ceY" = ( @@ -31172,10 +31172,10 @@ }, /obj/structure/table/glass, /obj/structure/extinguisher_cabinet/directional/west, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/watermelon, -/obj/item/reagent_containers/food/snacks/grown/citrus/orange, -/obj/item/reagent_containers/food/snacks/grown/grapes, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/watermelon, +/obj/item/food/snacks/grown/citrus/orange, +/obj/item/food/snacks/grown/grapes, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "green" @@ -31707,9 +31707,9 @@ /obj/item/seeds/potato, /obj/item/seeds/apple, /obj/item/grown/corncob, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/pumpkin{ +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/pumpkin{ pixel_y = 5 }, /obj/machinery/light/directional/south, @@ -32761,7 +32761,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/rack, /obj/item/reagent_containers/iv_bag/blood/random, -/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -33999,7 +33999,7 @@ }, /obj/structure/flora/ausbushes/sparsegrass, /obj/structure/flora/ausbushes/ywflowers, -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, @@ -37360,11 +37360,11 @@ }, /obj/machinery/light/small/directional/north, /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, /turf/simulated/floor/carpet, /area/station/service/chapel) "cCu" = ( @@ -37898,7 +37898,7 @@ pixel_y = 2 }, /obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) "cEk" = ( @@ -38633,7 +38633,7 @@ dir = 4 }, /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, @@ -38969,10 +38969,10 @@ /area/station/science/research) "cHO" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3 }, /turf/simulated/floor/plating, @@ -39432,7 +39432,7 @@ "cJo" = ( /obj/machinery/hydroponics/soil, /obj/machinery/light/small/directional/north, -/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, /turf/simulated/floor/plasteel{ icon_state = "cult" }, @@ -40167,7 +40167,7 @@ /area/station/maintenance/portsolar) "cMF" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/holywater{ +/obj/item/reagent_containers/drinks/bottle/holywater{ pixel_x = -2; pixel_y = 2 }, @@ -40179,8 +40179,8 @@ /area/station/service/chapel/office) "cMK" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = 16; pixel_y = 6 }, @@ -40198,7 +40198,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/item/reagent_containers/food/drinks/bottle/tequila, +/obj/item/reagent_containers/drinks/bottle/tequila, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "cMP" = ( @@ -41704,11 +41704,11 @@ /area/station/maintenance/apmaint) "cSR" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, @@ -41874,7 +41874,7 @@ /area/station/security/interrogation) "cTz" = ( /obj/structure/lattice/catwalk, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ pixel_x = -7; pixel_y = 2 }, @@ -49620,7 +49620,7 @@ /area/station/engineering/control) "fCn" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /obj/item/reagent_containers/glass/beaker/waterbottle{ @@ -53628,20 +53628,20 @@ /area/station/maintenance/starboard) "htP" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/milk{ +/obj/item/reagent_containers/condiment/milk{ pixel_x = 6; pixel_y = 8 }, -/obj/item/reagent_containers/food/condiment/soymilk{ +/obj/item/reagent_containers/condiment/soymilk{ pixel_x = -6; pixel_y = 8 }, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/drinks/bottle/cream{ +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/drinks/bottle/cream{ pixel_x = 6; pixel_y = -2 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = -5; pixel_y = -2 }, @@ -54538,11 +54538,11 @@ /area/station/turret_protected/ai) "hLT" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/harebell, -/obj/item/reagent_containers/food/snacks/grown/harebell, -/obj/item/reagent_containers/food/snacks/grown/harebell, -/obj/item/reagent_containers/food/snacks/grown/harebell, -/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, /turf/simulated/floor/plasteel{ icon_state = "darkneutralfull" }, @@ -57672,7 +57672,7 @@ pixel_y = -1 }, /obj/structure/table, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = -6 }, /obj/machinery/requests_console{ @@ -57988,7 +57988,7 @@ }, /area/station/engineering/control) "jxj" = ( -/obj/item/reagent_containers/food/snacks/monkeycube, +/obj/item/food/snacks/monkeycube, /turf/simulated/floor/grass, /area/station/maintenance/aft2) "jyP" = ( @@ -61078,7 +61078,7 @@ /area/station/maintenance/aft2) "kQv" = ( /obj/structure/grille/broken, -/obj/item/reagent_containers/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy, /turf/simulated/floor/plating/airless, /area/space/nearstation) "kQx" = ( @@ -62328,15 +62328,15 @@ "lpp" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced, -/obj/item/reagent_containers/food/snacks/muffin{ +/obj/item/food/snacks/muffin{ pixel_x = -4; pixel_y = 8 }, -/obj/item/reagent_containers/food/snacks/carrotcakeslice{ +/obj/item/food/snacks/carrotcakeslice{ pixel_x = 8; pixel_y = -2 }, -/obj/item/reagent_containers/food/snacks/poppypretzel{ +/obj/item/food/snacks/poppypretzel{ pixel_x = -8; pixel_y = -3 }, @@ -65987,11 +65987,11 @@ /area/shuttle/arrival/station) "mXE" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = 5; pixel_y = 12 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = -3; pixel_y = 9 }, @@ -66401,7 +66401,7 @@ /area/station/public/construction) "nfj" = ( /obj/structure/closet, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ desc = "Takes you to a whole new level of thinking."; name = "Meta-Cider" }, @@ -68961,10 +68961,10 @@ /area/station/public/locker) "orV" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3 }, /obj/machinery/door/window/classic/reversed{ @@ -73333,21 +73333,21 @@ "qvp" = ( /obj/structure/closet/crate, /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/onion, -/obj/item/reagent_containers/food/snacks/grown/onion, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/onion, +/obj/item/food/snacks/grown/onion, /obj/item/storage/box/donkpockets, /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 1 }, /obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/rice, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, /obj/machinery/light/directional/north, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -74670,7 +74670,7 @@ /obj/structure/rack, /obj/item/clothing/mask/gas, /obj/item/storage/box/lights/mixed, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/item/cultivator, /obj/item/clothing/head/chefhat, /obj/effect/spawner/lootdrop/maintenance, @@ -75363,7 +75363,7 @@ /area/station/engineering/engine/supermatter) "rwj" = ( /obj/structure/safe/floor, -/obj/item/reagent_containers/food/snacks/fortunecookie, +/obj/item/food/snacks/fortunecookie, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "rwk" = ( @@ -76743,7 +76743,7 @@ /area/station/public/mrchangs) "sdj" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/britcup, +/obj/item/reagent_containers/drinks/britcup, /obj/effect/turf_decal/tile/purple{ dir = 1 }, @@ -78601,7 +78601,7 @@ "sXU" = ( /obj/machinery/light/directional/north, /mob/living/carbon/human/monkey, -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /turf/simulated/floor/grass/no_creep, /area/station/science/genetics) "sXZ" = ( @@ -80524,12 +80524,12 @@ /area/station/security/permabrig) "tYV" = ( /obj/structure/rack, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ pixel_x = -7; pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/bottle/vodka, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/cans/beer, /obj/machinery/economy/vending/wallmed/directional/north, /turf/simulated/floor/wood, /area/station/maintenance/apmaint) @@ -83333,15 +83333,15 @@ /area/station/security/detective) "voT" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 4; pixel_y = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 6; pixel_y = -1 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -4; pixel_y = 6 }, @@ -83354,7 +83354,7 @@ /area/station/maintenance/starboard2) "voV" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/pie, +/obj/item/food/snacks/pie, /obj/machinery/door/window/classic/normal{ name = "Kitchen" }, @@ -83672,10 +83672,10 @@ /area/station/engineering/atmos) "vwA" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/chips{ +/obj/item/food/snacks/chips{ pixel_x = 8 }, -/obj/item/reagent_containers/food/drinks/cans/thirteenloko{ +/obj/item/reagent_containers/drinks/cans/thirteenloko{ pixel_x = -6; pixel_y = 6 }, @@ -84338,15 +84338,15 @@ "vSE" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced, -/obj/item/reagent_containers/food/drinks/tea{ +/obj/item/reagent_containers/drinks/tea{ pixel_x = 7; pixel_y = 1 }, -/obj/item/reagent_containers/food/drinks/tea{ +/obj/item/reagent_containers/drinks/tea{ pixel_x = -5; pixel_y = 9 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = -5 }, /turf/simulated/floor/plasteel/dark, @@ -85105,7 +85105,7 @@ /area/station/security/prisonlockers) "wnD" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 1 @@ -87843,10 +87843,10 @@ /area/station/hallway/primary/central) "xFW" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 }, /obj/machinery/door/window/classic/reversed{ @@ -87975,11 +87975,11 @@ /area/station/engineering/atmos) "xIx" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8; pixel_y = 1 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 11 }, @@ -88070,10 +88070,10 @@ /area/station/service/bar) "xLw" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3 }, /obj/structure/window/reinforced{ diff --git a/_maps/map_files220/RandomRuins/LavaRuins/scp_facility.dmm b/_maps/map_files220/RandomRuins/LavaRuins/scp_facility.dmm index e1b05fa340bd..18ee3af06a63 100644 --- a/_maps/map_files220/RandomRuins/LavaRuins/scp_facility.dmm +++ b/_maps/map_files220/RandomRuins/LavaRuins/scp_facility.dmm @@ -23,7 +23,7 @@ "bp" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, -/obj/item/reagent_containers/food/drinks/britcup, +/obj/item/reagent_containers/drinks/britcup, /turf/simulated/floor/plating/lavaland_air, /area/ruin/unpowered/misc_lavaruin) "bx" = ( @@ -787,7 +787,7 @@ /area/ruin/unpowered/misc_lavaruin) "Hl" = ( /obj/structure/table/glass/plasma, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 6 }, /obj/effect/decal/cleanable/dust, diff --git a/_maps/map_files220/RandomRuins/SpaceRuins/convoy_ambush.dmm b/_maps/map_files220/RandomRuins/SpaceRuins/convoy_ambush.dmm index 4c13408974c2..1f45a5027cc6 100644 --- a/_maps/map_files220/RandomRuins/SpaceRuins/convoy_ambush.dmm +++ b/_maps/map_files220/RandomRuins/SpaceRuins/convoy_ambush.dmm @@ -435,8 +435,8 @@ /area/ruin/space/unpowered/unpowered_structures) "uW" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 5; pixel_y = -2 }, @@ -728,9 +728,9 @@ /obj/machinery/light/small/directional/east, /obj/effect/turf_decal/delivery/white, /obj/structure/closet/cardboard, -/obj/item/reagent_containers/food/snacks/chinese/chowmein, -/obj/item/reagent_containers/food/snacks/chinese/chowmein, -/obj/item/reagent_containers/food/snacks/chinese/rice, +/obj/item/food/snacks/chinese/chowmein, +/obj/item/food/snacks/chinese/chowmein, +/obj/item/food/snacks/chinese/rice, /obj/item/stack/spacecash/c20, /obj/item/stack/spacecash/c10, /turf/simulated/floor/plasteel/airless{ @@ -791,8 +791,8 @@ "HA" = ( /obj/effect/turf_decal/delivery/white, /obj/structure/closet/cardboard, -/obj/item/reagent_containers/food/snacks/chinese/rice, -/obj/item/reagent_containers/food/snacks/chinese/chowmein, +/obj/item/food/snacks/chinese/rice, +/obj/item/food/snacks/chinese/chowmein, /obj/item/reagent_containers/pill/methamphetamine, /obj/item/reagent_containers/pill/methamphetamine, /obj/item/reagent_containers/pill/methamphetamine, @@ -1155,10 +1155,10 @@ "UE" = ( /obj/effect/turf_decal/delivery/white, /obj/structure/closet/cardboard, -/obj/item/reagent_containers/food/snacks/chinese/rice, -/obj/item/reagent_containers/food/snacks/chinese/chowmein, -/obj/item/reagent_containers/food/snacks/chinese/chowmein, -/obj/item/reagent_containers/food/snacks/chinese/rice, +/obj/item/food/snacks/chinese/rice, +/obj/item/food/snacks/chinese/chowmein, +/obj/item/food/snacks/chinese/chowmein, +/obj/item/food/snacks/chinese/rice, /obj/item/stack/spacecash/c100, /turf/simulated/floor/plasteel/airless{ icon_state = "dark" diff --git a/_maps/map_files220/RandomRuins/SpaceRuins/infected_ship.dmm b/_maps/map_files220/RandomRuins/SpaceRuins/infected_ship.dmm index 3ca5f9dda489..37ae9e4d34f5 100644 --- a/_maps/map_files220/RandomRuins/SpaceRuins/infected_ship.dmm +++ b/_maps/map_files220/RandomRuins/SpaceRuins/infected_ship.dmm @@ -375,7 +375,7 @@ name = "microwave"; pixel_y = 9 }, -/obj/item/reagent_containers/food/snacks/syndidonkpocket{ +/obj/item/food/snacks/syndidonkpocket{ pixel_x = -7 }, /turf/simulated/floor/plasteel{ @@ -801,8 +801,8 @@ /area/ruin/space/powered/requires_power_space) "rG" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -5; pixel_y = 9 }, @@ -832,8 +832,8 @@ /area/ruin/space/powered/requires_power_space) "sj" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat/corgi, -/obj/item/reagent_containers/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/corgi, /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel/freezer, /area/ruin/space/powered/requires_power_space) @@ -1226,7 +1226,7 @@ "Ge" = ( /obj/structure/table/wood, /obj/item/trash/plate, -/obj/item/reagent_containers/food/snacks/syndidonkpocket{ +/obj/item/food/snacks/syndidonkpocket{ pixel_y = 14; pixel_x = 6 }, @@ -1467,7 +1467,7 @@ /turf/simulated/floor/plating, /area/ruin/space/powered/requires_power_space) "NP" = ( -/obj/item/reagent_containers/food/drinks/oilcan, +/obj/item/reagent_containers/drinks/oilcan, /obj/item/wrench, /turf/simulated/floor/plating, /area/ruin/space/powered/requires_power_space) diff --git a/_maps/map_files220/RandomRuins/SpaceRuins/mechtransport_new.dmm b/_maps/map_files220/RandomRuins/SpaceRuins/mechtransport_new.dmm index 422477455600..c7f36b0f18a0 100644 --- a/_maps/map_files220/RandomRuins/SpaceRuins/mechtransport_new.dmm +++ b/_maps/map_files220/RandomRuins/SpaceRuins/mechtransport_new.dmm @@ -375,7 +375,7 @@ /area/ruin/space/powered) "jq" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -4; pixel_y = 6 }, @@ -771,7 +771,7 @@ /area/ruin/space/powered) "rZ" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 4; pixel_y = 4; volume = 0 @@ -906,7 +906,7 @@ /turf/simulated/floor/plating, /area/ruin/space/powered) "vo" = ( -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 4; pixel_y = 4 }, @@ -1516,7 +1516,7 @@ /obj/machinery/light/spot{ dir = 1 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ list_reagents = list("coffee"=0); pixel_x = 10; pixel_y = 7 @@ -2091,7 +2091,7 @@ /turf/simulated/floor/plating, /area/ruin/space/powered) "QS" = ( -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 4; pixel_y = 4; volume = 0 @@ -2121,8 +2121,8 @@ /area/ruin/space/powered) "RM" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0); pixel_x = 9; pixel_y = -3 @@ -2346,17 +2346,17 @@ "VB" = ( /obj/effect/turf_decal/delivery, /obj/structure/closet/cardboard, -/obj/item/reagent_containers/food/snacks/baguette, -/obj/item/reagent_containers/food/snacks/baguette, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans, -/obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/candy/candybar, -/obj/item/reagent_containers/food/snacks/candy/candybar, -/obj/item/reagent_containers/food/snacks/candy/candybar, -/obj/item/reagent_containers/food/snacks/candy/taffy, +/obj/item/food/snacks/baguette, +/obj/item/food/snacks/baguette, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans, +/obj/effect/decal/cleanable/dirt, +/obj/item/food/snacks/candy/candybar, +/obj/item/food/snacks/candy/candybar, +/obj/item/food/snacks/candy/candybar, +/obj/item/food/snacks/candy/taffy, /turf/simulated/floor/mineral/titanium, /area/ruin/space/powered) "VF" = ( @@ -2522,7 +2522,7 @@ /area/template_noop) "ZS" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/flask/barflask, +/obj/item/reagent_containers/drinks/flask/barflask, /turf/simulated/floor/carpet/blue, /area/ruin/space/powered) "ZT" = ( diff --git a/_maps/map_files220/RandomRuins/SpaceRuins/spacehotel.dmm b/_maps/map_files220/RandomRuins/SpaceRuins/spacehotel.dmm index 1cf285cb94ac..1571d4c3f6fc 100644 --- a/_maps/map_files220/RandomRuins/SpaceRuins/spacehotel.dmm +++ b/_maps/map_files220/RandomRuins/SpaceRuins/spacehotel.dmm @@ -38,11 +38,11 @@ /obj/item/candle/eternal{ pixel_y = 4 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = 9; pixel_y = 12 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 9; pixel_y = 6 }, @@ -165,11 +165,11 @@ /obj/item/candle/eternal{ pixel_y = 4 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -9; pixel_y = 12 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -9; pixel_y = 6 }, @@ -430,27 +430,27 @@ /obj/effect/turf_decal/delivery, /obj/structure/closet/crate/freezer, /obj/item/storage/box/monkeycubes, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, /turf/simulated/floor/plating, /area/ruin/space/spacehotelv1/cargostorage) "do" = ( @@ -1179,7 +1179,7 @@ /area/ruin/space/spacehotelv1/forehallway) "jb" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = -5; pixel_y = 5 }, @@ -1589,7 +1589,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/carpet/royalblack, /area/ruin/space/spacehotelv1/guestroom6) "lS" = ( @@ -1603,36 +1603,36 @@ dir = 8 }, /obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/reagent_containers/food/snacks/grown/meatwheat, -/obj/item/reagent_containers/food/snacks/grown/meatwheat, -/obj/item/reagent_containers/food/snacks/grown/meatwheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/whitebeet, -/obj/item/reagent_containers/food/snacks/grown/whitebeet, -/obj/item/reagent_containers/food/snacks/grown/whitebeet, -/obj/item/reagent_containers/food/snacks/grown/redbeet, -/obj/item/reagent_containers/food/snacks/grown/redbeet, -/obj/item/reagent_containers/food/snacks/grown/redbeet, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/rice, -/obj/item/reagent_containers/food/snacks/grown/rice, -/obj/item/reagent_containers/food/snacks/grown/rice, -/obj/item/reagent_containers/food/snacks/grown/rice, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/soymilk, -/obj/item/reagent_containers/food/condiment/soymilk, -/obj/item/reagent_containers/food/condiment/soymilk, +/obj/item/food/snacks/grown/meatwheat, +/obj/item/food/snacks/grown/meatwheat, +/obj/item/food/snacks/grown/meatwheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/whitebeet, +/obj/item/food/snacks/grown/whitebeet, +/obj/item/food/snacks/grown/whitebeet, +/obj/item/food/snacks/grown/redbeet, +/obj/item/food/snacks/grown/redbeet, +/obj/item/food/snacks/grown/redbeet, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/rice, +/obj/item/food/snacks/grown/rice, +/obj/item/food/snacks/grown/rice, +/obj/item/food/snacks/grown/rice, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/soymilk, /turf/simulated/floor/plasteel/freezer, /area/ruin/space/spacehotelv1/kitchen) "lU" = ( @@ -1806,7 +1806,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/carpet/blue, /area/ruin/space/spacehotelv1/guestroom3) "nj" = ( @@ -1940,11 +1940,11 @@ /area/ruin/space/spacehotelv1/restoraunt3) "oa" = ( /obj/structure/table/wood/fancy/red, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3; pixel_y = 16 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3; pixel_y = 16 }, @@ -2272,11 +2272,11 @@ /obj/item/candle/eternal{ pixel_y = 4 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3; pixel_y = 2 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3; pixel_y = 2 }, @@ -2308,11 +2308,11 @@ /obj/item/candle/eternal{ pixel_y = 4 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = 9; pixel_y = 12 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 9; pixel_y = 6 }, @@ -2717,10 +2717,10 @@ /obj/machinery/door/window/reinforced/normal{ dir = 8 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = 3 }, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/peppermill, /turf/simulated/floor/plasteel, /area/ruin/space/spacehotelv1/kitchen) "tI" = ( @@ -2819,7 +2819,7 @@ /area/ruin/space/spacehotelv1/reception) "uu" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/meatballspaghetti, +/obj/item/food/snacks/meatballspaghetti, /obj/item/kitchen/utensil/fork, /turf/simulated/floor/plating, /area/ruin/space/spacehotelv1/forestarboardmaints) @@ -2845,7 +2845,7 @@ pixel_y = 6 }, /obj/item/kitchen/rollingpin, -/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/condiment/flour, /turf/simulated/floor/plasteel, /area/ruin/space/spacehotelv1/kitchen) "uB" = ( @@ -2960,11 +2960,11 @@ /obj/item/candle/eternal{ pixel_y = 4 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -9; pixel_y = 12 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -9; pixel_y = 6 }, @@ -3070,11 +3070,11 @@ icon_state = "4-8" }, /obj/structure/table/wood/fancy/red, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3; pixel_y = 16 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3; pixel_y = 16 }, @@ -3121,7 +3121,7 @@ /area/ruin/space/spacehotelv1/bar) "wC" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/item/reagent_containers/glass/rag, /obj/item/book/manual/barman_recipes, /obj/item/lighter/zippo/engraved, @@ -3574,11 +3574,11 @@ pixel_y = -1; pixel_x = -9 }, -/obj/item/reagent_containers/food/condiment/mushroom_sauce{ +/obj/item/reagent_containers/condiment/mushroom_sauce{ pixel_x = 10; pixel_y = 5 }, -/obj/item/reagent_containers/food/condiment/garlic_sauce{ +/obj/item/reagent_containers/condiment/garlic_sauce{ pixel_x = 6; pixel_y = 3 }, @@ -4509,7 +4509,7 @@ dir = 8 }, /obj/structure/table/reinforced/brass, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/carpet/black, /area/ruin/space/spacehotelv1/guestroom1) "FS" = ( @@ -4921,11 +4921,11 @@ /area/ruin/space/spacehotelv1/barber) "IW" = ( /obj/structure/table/wood/fancy/red, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3; pixel_y = 16 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3; pixel_y = 16 }, @@ -5042,11 +5042,11 @@ /obj/item/candle/eternal{ pixel_y = 4 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -9; pixel_y = 12 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -9; pixel_y = 6 }, @@ -5900,11 +5900,11 @@ /obj/item/candle/eternal{ pixel_y = 4 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = 9; pixel_y = 12 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 9; pixel_y = 6 }, @@ -6473,7 +6473,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/carpet/red, /area/ruin/space/spacehotelv1/guestroom4) "UL" = ( @@ -6556,11 +6556,11 @@ /obj/item/candle/eternal{ pixel_y = 4 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = 9; pixel_y = 12 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 9; pixel_y = 6 }, @@ -6658,31 +6658,31 @@ /area/ruin/space/spacehotelv1/engi2) "VM" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/carpmeat, -/obj/item/reagent_containers/food/snacks/carpmeat, -/obj/item/reagent_containers/food/snacks/carpmeat, -/obj/item/reagent_containers/food/snacks/carpmeat, -/obj/item/reagent_containers/food/snacks/cutlet, -/obj/item/reagent_containers/food/snacks/cutlet, -/obj/item/reagent_containers/food/snacks/cutlet, -/obj/item/reagent_containers/food/snacks/cutlet, -/obj/item/reagent_containers/food/snacks/cutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/smokedsausage, -/obj/item/reagent_containers/food/snacks/smokedsausage, -/obj/item/reagent_containers/food/snacks/smokedsausage, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/carpmeat, +/obj/item/food/snacks/carpmeat, +/obj/item/food/snacks/carpmeat, +/obj/item/food/snacks/carpmeat, +/obj/item/food/snacks/cutlet, +/obj/item/food/snacks/cutlet, +/obj/item/food/snacks/cutlet, +/obj/item/food/snacks/cutlet, +/obj/item/food/snacks/cutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/sausage, +/obj/item/food/snacks/sausage, +/obj/item/food/snacks/sausage, +/obj/item/food/snacks/sausage, +/obj/item/food/snacks/smokedsausage, +/obj/item/food/snacks/smokedsausage, +/obj/item/food/snacks/smokedsausage, /obj/item/fish/salmon, /obj/item/fish/salmon, /obj/item/fish/salmon, @@ -6923,7 +6923,7 @@ dir = 4 }, /obj/structure/table/wood/fancy/black, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/carpet/arcade, /area/ruin/space/spacehotelv1/guestroom2) "XV" = ( diff --git a/_maps/map_files220/RandomRuins/SpaceRuins/transit_bar.dmm b/_maps/map_files220/RandomRuins/SpaceRuins/transit_bar.dmm index b5282e591432..aeff84dbaac9 100644 --- a/_maps/map_files220/RandomRuins/SpaceRuins/transit_bar.dmm +++ b/_maps/map_files220/RandomRuins/SpaceRuins/transit_bar.dmm @@ -18,7 +18,7 @@ pixel_y = -2; pixel_x = 6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 5; pixel_x = -2 }, @@ -80,8 +80,8 @@ /area/ruin/space/powered) "r" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0); pixel_x = 9; pixel_y = -3 @@ -175,7 +175,7 @@ /area/ruin/space/powered) "G" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_y = 8; pixel_x = -7 }, @@ -202,7 +202,7 @@ /obj/item/reagent_containers/glass/rag{ pixel_x = -7 }, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = 7; pixel_y = 5 }, @@ -236,7 +236,7 @@ /obj/structure/table/wood, /obj/machinery/light/small/directional/east, /obj/item/ashtray/bronze, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_y = 12; pixel_x = 7; list_reagents = list("innocent_erp = 50") diff --git a/_maps/map_files220/RandomRuins/SpaceRuins/voxraiders_1.dmm b/_maps/map_files220/RandomRuins/SpaceRuins/voxraiders_1.dmm index 06dffdcb7476..21e525bca515 100644 --- a/_maps/map_files220/RandomRuins/SpaceRuins/voxraiders_1.dmm +++ b/_maps/map_files220/RandomRuins/SpaceRuins/voxraiders_1.dmm @@ -538,7 +538,7 @@ pixel_x = 8 }, /obj/item/toy/plushie/voxplushie, -/obj/item/reagent_containers/food/snacks/cheesepizzaslice{ +/obj/item/food/snacks/cheesepizzaslice{ pixel_y = -2; pixel_x = -7 }, diff --git a/_maps/map_files220/RandomRuins/SpaceRuins/whiteship.dmm b/_maps/map_files220/RandomRuins/SpaceRuins/whiteship.dmm index 0a4f029ba84e..efed88d8467d 100644 --- a/_maps/map_files220/RandomRuins/SpaceRuins/whiteship.dmm +++ b/_maps/map_files220/RandomRuins/SpaceRuins/whiteship.dmm @@ -159,7 +159,7 @@ /obj/machinery/light_construct/directional/west, /obj/structure/table, /obj/item/trash/plate, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ desc = "It's cold as dead body."; pixel_x = 8; pixel_y = 8; @@ -639,7 +639,7 @@ /area/shuttle/abandoned) "oB" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ desc = "It's cold as dead body."; pixel_x = 8; pixel_y = 8; @@ -1445,7 +1445,7 @@ "Jn" = ( /obj/structure/table/glass, /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/drinks/mug/cmo, +/obj/item/reagent_containers/drinks/mug/cmo, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkbluefull" @@ -1505,7 +1505,7 @@ }, /obj/item/clothing/accessory/stethoscope, /obj/item/flashlight/pen, -/obj/item/reagent_containers/food/snacks/grown/apple{ +/obj/item/food/snacks/grown/apple{ desc = "An apple a day - keeps doctor away..."; pixel_x = 2; pixel_y = 6 diff --git a/_maps/map_files220/RandomZLevels/beach.dmm b/_maps/map_files220/RandomZLevels/beach.dmm index 1b137e8c3416..56f26f41ebc2 100644 --- a/_maps/map_files220/RandomZLevels/beach.dmm +++ b/_maps/map_files220/RandomZLevels/beach.dmm @@ -52,7 +52,7 @@ /obj/structure/chair/plastic{ dir = 8 }, -/obj/item/reagent_containers/food/drinks/cans/thirteenloko{ +/obj/item/reagent_containers/drinks/cans/thirteenloko{ pixel_x = -18; pixel_y = 8 }, @@ -357,19 +357,19 @@ /area/awaymission/beach) "ew" = ( /obj/structure/table/wood/fancy, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_y = 16; pixel_x = -4 }, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_y = 14; pixel_x = 8 }, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_y = 9; pixel_x = -2 }, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_y = 5; pixel_x = 11 }, @@ -407,7 +407,7 @@ /area/awaymission/beach) "eT" = ( /obj/structure/fluff/beach_umbrella/syndi, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_x = -6; pixel_y = -6 }, @@ -444,11 +444,11 @@ /obj/structure/table/wood{ color = "#ffcc33" }, -/obj/item/reagent_containers/food/condiment/capsaicin{ +/obj/item/reagent_containers/condiment/capsaicin{ pixel_y = 8; pixel_x = -4 }, -/obj/item/reagent_containers/food/condiment/bbqsauce{ +/obj/item/reagent_containers/condiment/bbqsauce{ pixel_x = 8; pixel_y = 4 }, @@ -518,10 +518,10 @@ /obj/structure/table/wood{ color = "#ffcc33" }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_y = 8 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_y = 4; pixel_x = -8 }, @@ -732,15 +732,15 @@ /area/awaymission/beach) "iy" = ( /obj/structure/table/wood/fancy/orange, -/obj/item/reagent_containers/food/drinks/bottle/wine{ +/obj/item/reagent_containers/drinks/bottle/wine{ pixel_y = 20; pixel_x = -4 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 6; pixel_x = -6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 14; pixel_x = 8 }, @@ -936,7 +936,7 @@ /obj/structure/chair/plastic{ dir = 8 }, -/obj/item/reagent_containers/food/drinks/cans/space_up{ +/obj/item/reagent_containers/drinks/cans/space_up{ pixel_y = 12; pixel_x = -8 }, @@ -960,15 +960,15 @@ /area/awaymission/beach) "lM" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 7; pixel_x = -7 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 15; pixel_x = 2 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 5; pixel_x = 7 }, @@ -1051,7 +1051,7 @@ pixel_y = 7; pixel_x = 11 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 12; pixel_x = -8 }, @@ -1062,11 +1062,11 @@ /area/awaymission/beach) "nb" = ( /obj/structure/table/wood/fancy, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_y = 8; pixel_x = 7 }, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_y = 13; pixel_x = -11 }, @@ -1217,7 +1217,7 @@ "pm" = ( /obj/item/storage/bag/tray, /obj/effect/turf_decal/stripes/red/box, -/obj/item/reagent_containers/food/snacks/grown/watermelon{ +/obj/item/food/snacks/grown/watermelon{ pixel_y = 2; pixel_x = 1 }, @@ -1235,7 +1235,7 @@ /area/awaymission/beach) "pp" = ( /obj/structure/chair/plastic, -/obj/item/reagent_containers/food/drinks/cans/dr_gibb{ +/obj/item/reagent_containers/drinks/cans/dr_gibb{ pixel_x = 20; pixel_y = -4 }, @@ -1257,7 +1257,7 @@ /obj/structure/chair/plastic{ dir = 4 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 16; pixel_y = -16 }, @@ -1317,7 +1317,7 @@ /obj/structure/table/wood{ color = "#ffcc33" }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -8; pixel_y = 8 }, @@ -1340,7 +1340,7 @@ /area/awaymission/beach) "qB" = ( /obj/structure/fluff/beach_umbrella/science, -/obj/item/reagent_containers/food/drinks/cans/starkist{ +/obj/item/reagent_containers/drinks/cans/starkist{ pixel_x = 11; pixel_y = -2 }, @@ -1407,7 +1407,7 @@ /area/awaymission/beach) "rI" = ( /obj/structure/chair/plastic, -/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind{ +/obj/item/reagent_containers/drinks/cans/space_mountain_wind{ pixel_x = 18; pixel_y = 4 }, @@ -1429,7 +1429,7 @@ pixel_y = 18; pixel_x = -5 }, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = -6; pixel_y = 2 }, @@ -1552,21 +1552,21 @@ /area/awaymission/beach) "va" = ( /obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/salmonmeat, /turf/simulated/floor/wood/fancy/cherry, /area/awaymission/beach) "vq" = ( /obj/structure/chair/plastic, -/obj/item/reagent_containers/food/drinks/cans/starkist{ +/obj/item/reagent_containers/drinks/cans/starkist{ pixel_x = 20; pixel_y = -8 }, @@ -1594,7 +1594,7 @@ pixel_x = -6; pixel_y = -5 }, -/obj/item/reagent_containers/food/snacks/donut{ +/obj/item/food/snacks/donut{ pixel_x = 13 }, /obj/item/folder/blue{ @@ -1623,7 +1623,7 @@ }, /area/awaymission/beach) "vR" = ( -/obj/item/reagent_containers/food/drinks/cans/tonic{ +/obj/item/reagent_containers/drinks/cans/tonic{ pixel_x = -12; pixel_y = 2 }, @@ -1827,7 +1827,7 @@ pixel_x = -2 }, /obj/machinery/cell_charger, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 12; pixel_x = 6 }, @@ -2109,11 +2109,11 @@ /area/awaymission/beach) "Cf" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/watermelon{ +/obj/item/food/snacks/grown/watermelon{ pixel_y = 8; pixel_x = 5 }, -/obj/item/reagent_containers/food/snacks/grown/watermelon{ +/obj/item/food/snacks/grown/watermelon{ pixel_y = 3; pixel_x = -3 }, @@ -2176,7 +2176,7 @@ /area/awaymission/beach) "Dg" = ( /obj/structure/chair/plastic, -/obj/item/reagent_containers/food/drinks/cans/dr_gibb{ +/obj/item/reagent_containers/drinks/cans/dr_gibb{ pixel_x = -16; pixel_y = -6 }, @@ -2205,11 +2205,11 @@ /area/awaymission/beach) "DH" = ( /obj/structure/fluff/beach_umbrella/syndi, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_x = -10; pixel_y = -6 }, -/obj/item/reagent_containers/food/drinks/cans/dr_gibb{ +/obj/item/reagent_containers/drinks/cans/dr_gibb{ pixel_x = 12 }, /turf/simulated/floor/beach/away/sand_alternative, @@ -2238,7 +2238,7 @@ "Eg" = ( /obj/structure/table/wood, /obj/machinery/recharger, -/obj/item/reagent_containers/food/drinks/mug{ +/obj/item/reagent_containers/drinks/mug{ pixel_x = -9; pixel_y = 13 }, @@ -2252,7 +2252,7 @@ /area/awaymission/beach) "Ek" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = 4; pixel_y = 4 }, @@ -2271,15 +2271,15 @@ /area/awaymission/beach) "Ez" = ( /obj/structure/table/holotable, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_y = 8; pixel_x = -8 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = 6; pixel_y = 8 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_y = 4; pixel_x = -1 }, @@ -2460,7 +2460,7 @@ pixel_y = 10; pixel_x = 11 }, -/obj/item/reagent_containers/food/snacks/donut/sprinkles{ +/obj/item/food/snacks/donut/sprinkles{ pixel_x = -8; pixel_y = 4 }, @@ -2503,7 +2503,7 @@ /area/awaymission/beach) "Hg" = ( /obj/structure/chair/plastic, -/obj/item/reagent_containers/food/drinks/cans/lemon_lime{ +/obj/item/reagent_containers/drinks/cans/lemon_lime{ pixel_y = -6; pixel_x = 16 }, @@ -2706,7 +2706,7 @@ /obj/structure/chair/plastic{ dir = 4 }, -/obj/item/reagent_containers/food/drinks/cans/lemon_lime{ +/obj/item/reagent_containers/drinks/cans/lemon_lime{ pixel_x = 14; pixel_y = -12 }, @@ -2805,7 +2805,7 @@ /area/awaymission/beach) "KB" = ( /obj/structure/fluff/beach_umbrella/syndi, -/obj/item/reagent_containers/food/drinks/cans/dr_gibb{ +/obj/item/reagent_containers/drinks/cans/dr_gibb{ pixel_x = -6; pixel_y = -6 }, @@ -2814,7 +2814,7 @@ "KE" = ( /obj/structure/table, /obj/item/storage/belt/utility, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 16; pixel_x = -7 }, @@ -2829,15 +2829,15 @@ /area/awaymission/beach) "KK" = ( /obj/structure/table/wood/fancy/orange, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_y = 8; pixel_x = -4 }, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_y = 6; pixel_x = -1 }, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_y = 4; pixel_x = 3 }, @@ -2893,13 +2893,13 @@ /area/awaymission/beach) "LI" = ( /obj/structure/closet/crate/hydroponics, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/rice, -/obj/item/reagent_containers/food/condiment/rice, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, +/obj/item/reagent_containers/condiment/rice, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /turf/simulated/floor/beach/away/sand_alternative, /area/awaymission/beach) "LM" = ( @@ -3032,7 +3032,7 @@ /area/awaymission/beach) "Ne" = ( /obj/structure/fluff/beach_umbrella/syndi, -/obj/item/reagent_containers/food/drinks/cans/space_up{ +/obj/item/reagent_containers/drinks/cans/space_up{ pixel_x = 11; pixel_y = -2 }, @@ -3130,11 +3130,11 @@ color = "#ffcc33" }, /obj/machinery/light/directional/east, -/obj/item/reagent_containers/food/condiment/ketchup{ +/obj/item/reagent_containers/condiment/ketchup{ pixel_y = 8; pixel_x = -2 }, -/obj/item/reagent_containers/food/condiment/mayonnaise{ +/obj/item/reagent_containers/condiment/mayonnaise{ pixel_x = 6; pixel_y = 6 }, @@ -3222,18 +3222,18 @@ /area/awaymission/beach) "QH" = ( /obj/structure/fluff/beach_umbrella/science, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_x = -10; pixel_y = -6 }, -/obj/item/reagent_containers/food/drinks/cans/space_up{ +/obj/item/reagent_containers/drinks/cans/space_up{ pixel_x = 12 }, /turf/simulated/floor/beach/away/sand_alternative, /area/awaymission/beach) "QJ" = ( /obj/structure/chair/plastic, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_x = 18; pixel_y = -3 }, @@ -3381,7 +3381,7 @@ /turf/simulated/floor/wood/fancy, /area/awaymission/beach) "Ss" = ( -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_y = 16; pixel_x = -8 }, @@ -3415,7 +3415,7 @@ pixel_y = 4; pixel_x = -4 }, -/obj/item/reagent_containers/food/condiment/soymilk{ +/obj/item/reagent_containers/condiment/soymilk{ pixel_y = 8; pixel_x = 8 }, @@ -3471,7 +3471,7 @@ /turf/simulated/floor/wood/fancy, /area/awaymission/beach) "Us" = ( -/obj/item/reagent_containers/food/drinks/cans/starkist{ +/obj/item/reagent_containers/drinks/cans/starkist{ pixel_x = -6 }, /turf/simulated/floor/beach/away/sand_alternative, @@ -3552,7 +3552,7 @@ pixel_y = 6; pixel_x = 4 }, -/obj/item/reagent_containers/food/drinks/cans/grape_juice{ +/obj/item/reagent_containers/drinks/cans/grape_juice{ pixel_x = -8; pixel_y = 9 }, @@ -3816,12 +3816,12 @@ /area/awaymission/beach) "XW" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/salmonmeat, /turf/simulated/floor/beach/away/sand_alternative, /area/awaymission/beach) "Ya" = ( @@ -3894,11 +3894,11 @@ /area/awaymission/beach) "Ze" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/watermelon{ +/obj/item/food/snacks/grown/watermelon{ pixel_y = 6; pixel_x = 6 }, -/obj/item/reagent_containers/food/snacks/watermelonslice{ +/obj/item/food/snacks/watermelonslice{ pixel_x = -6 }, /turf/simulated/floor/beach/away/sand_alternative, diff --git a/_maps/map_files220/RandomZLevels/blackmarketpackers.dmm b/_maps/map_files220/RandomZLevels/blackmarketpackers.dmm index a6b5ebb46218..66c94a714fc2 100644 --- a/_maps/map_files220/RandomZLevels/blackmarketpackers.dmm +++ b/_maps/map_files220/RandomZLevels/blackmarketpackers.dmm @@ -269,8 +269,8 @@ /area/awaymission/BMPship/Gate) "bi" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -290,7 +290,7 @@ /area/awaymission/BMPship/Fore) "bl" = ( /obj/structure/table/wood/fancy/royalblack, -/obj/item/reagent_containers/food/drinks/bottle/patron, +/obj/item/reagent_containers/drinks/bottle/patron, /obj/item/flashlight/lamp/green{ pixel_x = -5; pixel_y = 12; @@ -580,7 +580,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/obj/item/reagent_containers/food/drinks/sillycup, +/obj/item/reagent_containers/drinks/sillycup, /obj/item/reagent_containers/pill/methamphetamine, /turf/simulated/floor/wood/fancy/oak, /area/awaymission/BMPship/CommonArea) @@ -722,10 +722,10 @@ dir = 2 }, /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/monstermeat/bearmeat, -/obj/item/reagent_containers/food/snacks/monstermeat/bearmeat, -/obj/item/reagent_containers/food/snacks/monstermeat/bearmeat, -/obj/item/reagent_containers/food/snacks/monstermeat/bearmeat, +/obj/item/food/snacks/monstermeat/bearmeat, +/obj/item/food/snacks/monstermeat/bearmeat, +/obj/item/food/snacks/monstermeat/bearmeat, +/obj/item/food/snacks/monstermeat/bearmeat, /obj/item/clothing/gloves/furgloves, /obj/item/clothing/head/furcap, /obj/item/clothing/shoes/furboots, @@ -776,7 +776,7 @@ "cB" = ( /obj/structure/alien/weeds, /obj/effect/decal/cleanable/greenglow, -/obj/item/reagent_containers/food/snacks/monstermeat/spiderleg, +/obj/item/food/snacks/monstermeat/spiderleg, /turf/simulated/floor/plating/airless, /area/awaymission/BMPship/Fore) "cC" = ( @@ -831,7 +831,7 @@ "cH" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light_construct/small/south, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/structure/spider/stickyweb, /obj/structure/spider/cocoon, /turf/simulated/floor/plating, @@ -899,7 +899,7 @@ "cR" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light_construct/small/south, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/engine, /area/awaymission/BMPship/Containment) "cS" = ( @@ -958,8 +958,8 @@ /area/awaymission/BMPship/Fore) "cZ" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat, -/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat, +/obj/item/food/snacks/monstermeat/lizardmeat, +/obj/item/food/snacks/monstermeat/lizardmeat, /obj/item/stack/sheet/animalhide/lizard, /obj/effect/spawner/lootdrop/lizardboots, /obj/effect/decal/cleanable/dirt, @@ -1139,8 +1139,8 @@ /area/awaymission/BMPship/Engines) "dA" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -1242,7 +1242,7 @@ /obj/item/kitchen/utensil/fork{ pixel_x = 7 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_y = 15 }, /turf/simulated/floor/plasteel{ @@ -1258,11 +1258,11 @@ /obj/item/clothing/glasses/sunglasses/noir{ pixel_y = -3 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = 10; pixel_y = 8 }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_y = 10; layer = 2.9 }, @@ -1319,7 +1319,7 @@ /turf/simulated/floor/mineral/plastitanium/red, /area/awaymission/BMPship/Containment) "dU" = ( -/obj/item/reagent_containers/food/drinks/sillycup, +/obj/item/reagent_containers/drinks/sillycup, /obj/effect/landmark/damageturf, /turf/simulated/floor/wood/fancy/oak, /area/awaymission/BMPship/CommonArea) @@ -1513,7 +1513,7 @@ "ey" = ( /obj/structure/table, /obj/item/kitchen/knife/butcher, -/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat, +/obj/item/food/snacks/monstermeat/lizardmeat, /obj/item/trash/plate{ pixel_x = -5; pixel_y = -1; @@ -1619,7 +1619,7 @@ layer = 2.9 }, /obj/item/kitchen/utensil/fork, -/obj/item/reagent_containers/food/drinks/britcup{ +/obj/item/reagent_containers/drinks/britcup{ pixel_x = 8 }, /turf/simulated/floor/plasteel{ @@ -1643,7 +1643,7 @@ color = "yellow"; layer = 2.9 }, -/obj/item/reagent_containers/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, /turf/simulated/floor/grass, /area/awaymission/BMPship/Kitchen) "eR" = ( @@ -1902,7 +1902,7 @@ "fy" = ( /obj/structure/table, /obj/item/storage/box/donkpockets, -/obj/item/reagent_containers/food/snacks/fried_vox{ +/obj/item/food/snacks/fried_vox{ pixel_x = 4; pixel_y = 12; layer = 2.9 @@ -2250,7 +2250,7 @@ /area/space) "gv" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread, +/obj/item/food/snacks/sliceable/xenomeatbread, /obj/item/kitchen/knife, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" @@ -2352,7 +2352,7 @@ }, /area/awaymission/BMPship/Kitchen) "gM" = ( -/obj/item/reagent_containers/food/snacks/hugemushroomslice, +/obj/item/food/snacks/hugemushroomslice, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/awaymission/BMPship/Kitchen) @@ -2561,7 +2561,7 @@ icon_state = "4-8" }, /obj/effect/decal/cleanable/greenglow, -/obj/item/reagent_containers/food/snacks/monstermeat/spiderleg, +/obj/item/food/snacks/monstermeat/spiderleg, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/mineral/plastitanium/red, /area/awaymission/BMPship/Containment) @@ -2787,12 +2787,12 @@ /area/awaymission/BMPship/Kitchen) "it" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/hugemushroomslice, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/hugemushroomslice, /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/obj/item/reagent_containers/food/snacks/monstermeat/spidermeat, +/obj/item/food/snacks/monstermeat/spidermeat, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/awaymission/BMPship/Gate) @@ -2902,7 +2902,7 @@ /area/awaymission/BMPship/ChemLab) "iL" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /obj/item/grenade/chem_grenade/drugs, /turf/simulated/floor/plating, /area/awaymission/BMPship/ChemLab) @@ -2978,7 +2978,7 @@ /turf/simulated/floor/plating, /area/awaymission/BMPship/ChemLab) "iZ" = ( -/obj/item/reagent_containers/food/snacks/chips, +/obj/item/food/snacks/chips, /turf/simulated/floor/plating, /area/awaymission/BMPship/ChemLab) "ja" = ( @@ -3040,7 +3040,7 @@ /obj/item/kitchen/utensil/fork{ pixel_x = -2 }, -/obj/item/reagent_containers/food/snacks/pastatomato, +/obj/item/food/snacks/pastatomato, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -3099,9 +3099,9 @@ "jB" = ( /obj/structure/window/reinforced, /obj/structure/table, -/obj/item/reagent_containers/food/snacks/candy/candycane, -/obj/item/reagent_containers/food/snacks/candy/confectionery/caramel_nougat, -/obj/item/reagent_containers/food/snacks/candy/confectionery/toffee, +/obj/item/food/snacks/candy/candycane, +/obj/item/food/snacks/candy/confectionery/caramel_nougat, +/obj/item/food/snacks/candy/confectionery/toffee, /turf/simulated/floor/plasteel{ icon_state = "barber"; tag = "icon-barber" @@ -3114,7 +3114,7 @@ /area/space) "jF" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/xenomeatbreadslice{ +/obj/item/food/snacks/xenomeatbreadslice{ pixel_x = -8 }, /obj/item/trash/plate{ @@ -3134,7 +3134,7 @@ "jG" = ( /obj/effect/decal/cleanable/blood/gibs/xeno, /obj/structure/alien/weeds, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/machinery/light_construct/small/north, /turf/simulated/floor/engine, /area/awaymission/BMPship/Containment) @@ -3227,7 +3227,7 @@ "kx" = ( /obj/structure/table/survival_pod, /obj/item/reagent_containers/glass/beaker/drugs/meth, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ pixel_x = -3; pixel_y = 4; layer = 2.9 @@ -3360,7 +3360,7 @@ /obj/structure/closet/critter{ opened = 1 }, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/engine, /area/awaymission/BMPship/Containment) "lL" = ( @@ -3696,7 +3696,7 @@ icon_state = "small" }, /obj/structure/table/wood/fancy/royalblack, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = 11; pixel_y = 13 }, @@ -3730,12 +3730,12 @@ /turf/space, /area/space) "pc" = ( -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana{ pixel_x = -6; pixel_y = 3 }, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_x = 7; pixel_y = 3 }, @@ -3832,14 +3832,14 @@ /area/awaymission/BMPship/Dormitories) "pG" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 3; pixel_y = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -3; pixel_y = 5; layer = 2.9 @@ -4604,7 +4604,7 @@ /area/awaymission/BMPship/CommonArea) "wG" = ( /obj/effect/decal/cleanable/greenglow, -/obj/item/reagent_containers/food/snacks/monstermeat/spiderleg, +/obj/item/food/snacks/monstermeat/spiderleg, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/mineral/plastitanium/red, /area/awaymission/BMPship/Containment) @@ -4800,7 +4800,7 @@ /turf/simulated/wall/indestructible/whiteshuttle/nodiagonal, /area/awaymission/BMPship/Fore) "yu" = ( -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/effect/decal/cleanable/dirt, /obj/machinery/light_construct/small/north, /mob/living/simple_animal/hostile/poison/giant_spider/hunter{ @@ -4916,7 +4916,7 @@ opened = 1 }, /obj/structure/spider/stickyweb, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/engine, /area/awaymission/BMPship/Containment) @@ -4999,7 +4999,7 @@ /obj/item/shard{ icon_state = "small" }, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/engine, /area/awaymission/BMPship/Containment) "Aw" = ( @@ -5076,7 +5076,7 @@ /obj/structure/table, /obj/item/kitchen/utensil/fork, /obj/item/trash/snack_bowl, -/obj/item/reagent_containers/food/drinks/mug/cap{ +/obj/item/reagent_containers/drinks/mug/cap{ pixel_x = 5; pixel_y = 6 }, @@ -5235,7 +5235,7 @@ /area/awaymission/BMPship/Buffer) "CI" = ( /obj/structure/alien/weeds, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 8; pixel_y = 2 }, @@ -5304,7 +5304,7 @@ /turf/simulated/floor/engine, /area/awaymission/BMPship/Containment) "Dr" = ( -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/engine, /area/awaymission/BMPship/Containment) @@ -5489,7 +5489,7 @@ /turf/simulated/wall/indestructible/whiteshuttle/nodiagonal, /area/awaymission/BMPship/Kitchen) "EO" = ( -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/effect/decal/cleanable/dirt, /obj/structure/spider/stickyweb, /turf/simulated/floor/engine, @@ -5651,7 +5651,7 @@ /area/awaymission/BMPship/Containment) "Gu" = ( /obj/item/assembly/mousetrap/armed, -/obj/item/reagent_containers/food/snacks/breadslice{ +/obj/item/food/snacks/breadslice{ pixel_y = 3 }, /obj/effect/decal/cleanable/dirt, @@ -6171,7 +6171,7 @@ /area/awaymission/BMPship/Gate) "Md" = ( /obj/structure/alien/weeds, -/obj/item/reagent_containers/food/drinks/mug/novelty{ +/obj/item/reagent_containers/drinks/mug/novelty{ pixel_y = 10; pixel_x = 10 }, @@ -6496,12 +6496,12 @@ /area/awaymission/BMPship/CommonArea) "Qi" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/engine, /area/awaymission/BMPship/Containment) "Qj" = ( /obj/structure/alien/weeds, -/obj/item/reagent_containers/food/snacks/monstermeat/spiderleg, +/obj/item/food/snacks/monstermeat/spiderleg, /obj/effect/decal/cleanable/greenglow, /turf/simulated/floor/plating/airless, /area/awaymission/BMPship/Fore) @@ -6556,7 +6556,7 @@ /area/awaymission/BMPship/Containment) "QT" = ( /obj/structure/rack, -/obj/item/reagent_containers/food/drinks/trophy/gold_cup, +/obj/item/reagent_containers/drinks/trophy/gold_cup, /obj/item/storage/box/flashbangs, /obj/item/fluff/dogwhistle, /obj/structure/alien/weeds, @@ -6748,16 +6748,16 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/item/reagent_containers/food/snacks/meat/corgi, -/obj/item/reagent_containers/food/snacks/meat/corgi, -/obj/item/reagent_containers/food/snacks/meat/corgi, -/obj/item/reagent_containers/food/snacks/meat/corgi, -/obj/item/reagent_containers/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/corgi, +/obj/item/food/snacks/meat/corgi, /turf/simulated/floor/plating, /area/awaymission/BMPship/Gate) "Tv" = ( /mob/living/simple_animal/hostile/retaliate/poison/snake, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/item/shard, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/engine, @@ -6876,7 +6876,7 @@ /area/awaymission/BMPship/Engines) "UI" = ( /obj/structure/alien/weeds, -/obj/item/reagent_containers/food/drinks/mug{ +/obj/item/reagent_containers/drinks/mug{ pixel_x = -8 }, /turf/simulated/floor/plating/airless, @@ -6969,7 +6969,7 @@ /area/awaymission/BMPship/CommonArea) "VG" = ( /obj/effect/decal/cleanable/greenglow, -/obj/item/reagent_containers/food/snacks/monstermeat/spiderleg, +/obj/item/food/snacks/monstermeat/spiderleg, /obj/structure/spider/stickyweb, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/mineral/plastitanium/red, @@ -7219,7 +7219,7 @@ "Yh" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light_construct/small/south, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/structure/spider/stickyweb, /obj/structure/spider/cocoon, /turf/simulated/floor/engine, @@ -7318,7 +7318,7 @@ "Zg" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb2, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/engine, /area/awaymission/BMPship/Containment) "Zj" = ( diff --git a/_maps/map_files220/RandomZLevels/blackmesa.dmm b/_maps/map_files220/RandomZLevels/blackmesa.dmm index 964617f6404f..e1eab762b339 100644 --- a/_maps/map_files220/RandomZLevels/blackmesa.dmm +++ b/_maps/map_files220/RandomZLevels/blackmesa.dmm @@ -44,7 +44,7 @@ /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/lambda_hallway) "aez" = ( -/obj/item/reagent_containers/food/snacks/choccherrycakeslice, +/obj/item/food/snacks/choccherrycakeslice, /obj/structure/table/wood, /turf/simulated/floor/wood/fancy/cherry, /area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) @@ -1226,8 +1226,8 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/item/reagent_containers/food/drinks/coffee, -/obj/item/reagent_containers/food/drinks/tea{ +/obj/item/reagent_containers/drinks/coffee, +/obj/item/reagent_containers/drinks/tea{ pixel_x = 5; pixel_y = 10 }, @@ -1992,8 +1992,8 @@ pixel_x = 3; pixel_y = 3 }, -/obj/item/reagent_containers/food/snacks/grown/coffee/robusta, -/obj/item/reagent_containers/food/snacks/grown/coffee{ +/obj/item/food/snacks/grown/coffee/robusta, +/obj/item/food/snacks/grown/coffee{ pixel_x = -3; pixel_y = -3 }, @@ -2024,7 +2024,7 @@ /area/awaymission/black_mesa/xen/vortigaunt_village) "cvC" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread, +/obj/item/food/snacks/sliceable/xenomeatbread, /turf/simulated/floor/wood/fancy/cherry, /area/awaymission/black_mesa/xen/vortigaunt_village) "cwd" = ( @@ -2467,7 +2467,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/black_ops_entrance) "cZn" = ( -/obj/item/reagent_containers/food/snacks/beans, +/obj/item/food/snacks/beans, /turf/simulated/floor/plating/xen, /area/awaymission/black_mesa/xen/freeman_puzzle) "cZp" = ( @@ -2626,7 +2626,7 @@ /area/awaymission/black_mesa/equipment_room) "dko" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/tea, +/obj/item/reagent_containers/drinks/tea, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/entrance_lobby) "dkq" = ( @@ -2716,7 +2716,7 @@ /turf/simulated/floor/beach/away/coastline/xen, /area/awaymission/black_mesa/xen/entering_zone) "dpl" = ( -/obj/item/reagent_containers/food/snacks/popcorn, +/obj/item/food/snacks/popcorn, /turf/simulated/floor/wood, /area/awaymission/black_mesa/employee_dorm_room) "dpo" = ( @@ -2977,12 +2977,12 @@ /area/awaymission/black_mesa/black_ops_armory) "dGp" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/candy/candybar, -/obj/item/reagent_containers/food/snacks/candy/confectionery{ +/obj/item/food/snacks/candy/candybar, +/obj/item/food/snacks/candy/confectionery{ pixel_x = 3; pixel_y = 3 }, -/obj/item/reagent_containers/food/snacks/candy/confectionery{ +/obj/item/food/snacks/candy/confectionery{ pixel_x = 6; pixel_y = 6 }, @@ -3002,7 +3002,7 @@ /area/awaymission/black_mesa/entrance_internal_hall) "dGU" = ( /obj/structure/alien/xenoweeds, -/obj/item/reagent_containers/food/drinks/cans/sodawater, +/obj/item/reagent_containers/drinks/cans/sodawater, /turf/simulated/floor/plating/ironsand, /area/awaymission/black_mesa) "dGY" = ( @@ -3677,7 +3677,7 @@ /area/awaymission/black_mesa/high_security_hallway) "ewJ" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/xenomeatbreadslice, +/obj/item/food/snacks/xenomeatbreadslice, /turf/simulated/floor/wood/fancy/cherry, /area/awaymission/black_mesa/xen/vortigaunt_village) "ewP" = ( @@ -3820,15 +3820,15 @@ /area/awaymission/black_mesa/entrance_internal_hall) "eHp" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/soymilk{ +/obj/item/reagent_containers/condiment/soymilk{ pixel_x = 4; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/bottle/cream{ +/obj/item/reagent_containers/drinks/bottle/cream{ pixel_y = 4; pixel_x = -4 }, -/obj/item/reagent_containers/food/condiment/milk, +/obj/item/reagent_containers/condiment/milk, /obj/machinery/light/directional/east, /turf/simulated/floor/plasteel/dark{ icon_state = "dark" @@ -4256,7 +4256,7 @@ /area/awaymission/black_mesa/entrance_lobby) "fiC" = ( /obj/structure/closet/crate/wooden/wooden_crate, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/wood/fancy/cherry, /area/awaymission/black_mesa/xen/vortigaunt_village) "fje" = ( @@ -4373,7 +4373,7 @@ /area/awaymission/black_mesa/xen/freeman_hallway) "frM" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/doshik_spicy, +/obj/item/food/snacks/doshik_spicy, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel/dark, /area/awaymission/black_mesa/xen/lost_camp) @@ -5749,7 +5749,7 @@ /area/awaymission/black_mesa/xen/lost_camp) "han" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat, +/obj/item/food/snacks/monstermeat/xenomeat, /turf/simulated/floor/wood/fancy/cherry, /area/awaymission/black_mesa/xen/vortigaunt_village) "haK" = ( @@ -6269,7 +6269,7 @@ /obj/item/storage/fancy/cigarettes/cigpack_uplift{ pixel_x = 10 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_y = 10; pixel_x = -9 }, @@ -6525,7 +6525,7 @@ /area/awaymission/black_mesa/xen/nihilanth_computer) "ieG" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/tea, +/obj/item/reagent_containers/drinks/tea, /turf/simulated/floor/plasteel{ icon_state = "green"; dir = 4 @@ -6588,7 +6588,7 @@ /area/awaymission/black_mesa/black_ops_armory) "ikb" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_y = 3 }, /turf/simulated/floor/plasteel, @@ -6788,7 +6788,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/entrance_lobby) "ixB" = ( -/obj/item/reagent_containers/food/snacks/beans, +/obj/item/food/snacks/beans, /turf/simulated/floor/plating/xen, /area/awaymission/black_mesa/xen/nihilanth_computer) "iyO" = ( @@ -6866,13 +6866,13 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/item/reagent_containers/food/snacks/muffin, -/obj/item/reagent_containers/food/snacks/muffin{ +/obj/item/food/snacks/muffin, +/obj/item/food/snacks/muffin{ pixel_x = 3; pixel_y = 3 }, -/obj/item/reagent_containers/food/snacks/poppypretzel, -/obj/item/reagent_containers/food/snacks/plum_pie, +/obj/item/food/snacks/poppypretzel, +/obj/item/food/snacks/plum_pie, /turf/simulated/floor/plasteel/dark{ icon_state = "dark" }, @@ -7438,7 +7438,7 @@ /area/awaymission/black_mesa/xen/acid_lake_building) "jka" = ( /obj/structure/closet/crate/wooden/wooden_crate, -/obj/item/reagent_containers/food/snacks/doshik_spicy, +/obj/item/food/snacks/doshik_spicy, /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/deep_sci_storage) "jkk" = ( @@ -7748,11 +7748,11 @@ /area/awaymission/black_mesa/dorm_computers) "jFG" = ( /obj/structure/closet, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/plasteel{ icon_state = "brownfull" }, @@ -8382,7 +8382,7 @@ /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/hecu_zone_external_hall) "kqh" = ( -/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, /turf/simulated/floor/plating, /area/awaymission/black_mesa/security_outpost) "kqI" = ( @@ -8805,19 +8805,19 @@ /area/awaymission/black_mesa/resonant_chamber) "kRb" = ( /obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/bbqsauce, -/obj/item/reagent_containers/food/condiment/diablo_sauce, -/obj/item/reagent_containers/food/condiment/tomato_sauce, -/obj/item/reagent_containers/food/condiment/garlic_sauce, -/obj/item/reagent_containers/food/drinks/chicken_soup, -/obj/item/reagent_containers/food/drinks/chicken_soup, -/obj/item/reagent_containers/food/drinks/chicken_soup, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/bbqsauce, +/obj/item/reagent_containers/condiment/diablo_sauce, +/obj/item/reagent_containers/condiment/tomato_sauce, +/obj/item/reagent_containers/condiment/garlic_sauce, +/obj/item/reagent_containers/drinks/chicken_soup, +/obj/item/reagent_containers/drinks/chicken_soup, +/obj/item/reagent_containers/drinks/chicken_soup, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -9699,7 +9699,7 @@ /area/awaymission/black_mesa/science_labs) "lTy" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/doshik, +/obj/item/food/snacks/doshik, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel/dark, /area/awaymission/black_mesa/xen/lost_camp) @@ -9730,7 +9730,7 @@ /area/awaymission/black_mesa/xen/vortigaunt_village) "lWK" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_y = 10; pixel_x = 9 }, @@ -9772,7 +9772,7 @@ /area/awaymission/black_mesa/xen/nihilanth_computer) "lZi" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee, /turf/simulated/floor/plasteel/dark{ icon_state = "dark" }, @@ -9863,10 +9863,10 @@ /area/awaymission/black_mesa/entrance_large_office) "mdX" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/pack/ketchup, -/obj/item/reagent_containers/food/condiment/pack/hotsauce, -/obj/item/reagent_containers/food/condiment/pack/hotsauce, -/obj/item/reagent_containers/food/condiment/pack/ketchup, +/obj/item/reagent_containers/condiment/pack/ketchup, +/obj/item/reagent_containers/condiment/pack/hotsauce, +/obj/item/reagent_containers/condiment/pack/hotsauce, +/obj/item/reagent_containers/condiment/pack/ketchup, /obj/item/trash/plate, /turf/simulated/floor/plasteel/dark, /area/awaymission/black_mesa/hecu_zone_camp) @@ -10257,7 +10257,7 @@ /area/awaymission/black_mesa/security_outpost) "mHz" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee, /obj/structure/alien/xenoweeds, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/entrance_large_office) @@ -10692,12 +10692,12 @@ /area/awaymission/black_mesa/xen/vortigaunt_village) "ncG" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/beans, +/obj/item/food/snacks/beans, /turf/simulated/floor/plasteel/dark, /area/awaymission/black_mesa/xen/lost_camp) "ncU" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/wood/fancy/cherry, /area/awaymission/black_mesa/xen/vortigaunt_village) "ndr" = ( @@ -12132,12 +12132,12 @@ /area/awaymission/black_mesa/hecu_zone_camp) "oNw" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana{ pixel_x = 3; pixel_y = 3 }, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_x = 6; pixel_y = 6 }, @@ -12567,7 +12567,7 @@ /area/awaymission/black_mesa/entrance_large_office) "pnW" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/wood/fancy/cherry, /area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) "ppc" = ( @@ -12793,7 +12793,7 @@ /area/awaymission/black_mesa/deep_sci_turret) "pDq" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/donut/sprinkles, +/obj/item/food/snacks/donut/sprinkles, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/entrance_lobby) "pDE" = ( @@ -13190,7 +13190,7 @@ /area/awaymission/black_mesa/hecu_zone_camp) "qeH" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/doshik_spicy, +/obj/item/food/snacks/doshik_spicy, /turf/simulated/floor/plasteel/dark, /area/awaymission/black_mesa/xen/acid_lake_building) "qfg" = ( @@ -13834,7 +13834,7 @@ /area/awaymission/black_mesa/entrance_large_office) "qPE" = ( /obj/structure/closet/crate/wooden/wooden_crate, -/obj/item/reagent_containers/food/snacks/doshik, +/obj/item/food/snacks/doshik, /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/deep_sci_storage) "qPF" = ( @@ -14665,7 +14665,7 @@ /area/awaymission/black_mesa/hecu_zone_external_hall) "rSI" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/beans, +/obj/item/food/snacks/beans, /turf/simulated/floor/plating/xen, /area/awaymission/black_mesa/xen/vortigaunt_village) "rSN" = ( @@ -15146,11 +15146,11 @@ /area/awaymission/black_mesa/black_ops_turret_blockade) "swo" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/coffee, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee{ pixel_x = 10 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ desc = "Its cold like the space outside noo!"; pixel_x = -6; pixel_y = 8; @@ -15187,22 +15187,22 @@ /area/awaymission/black_mesa/hecu_zone_infirmary) "szl" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/drinks/cans/sodawater, -/obj/item/reagent_containers/food/drinks/cans/sodawater, -/obj/item/reagent_containers/food/drinks/cans/sodawater, -/obj/item/reagent_containers/food/drinks/cans/sodawater, -/obj/item/reagent_containers/food/drinks/cans/sodawater, -/obj/item/reagent_containers/food/drinks/cans/lemon_lime, -/obj/item/reagent_containers/food/drinks/cans/lemon_lime, -/obj/item/reagent_containers/food/drinks/cans/lemon_lime, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/grape_juice, -/obj/item/reagent_containers/food/drinks/cans/grape_juice, -/obj/item/reagent_containers/food/drinks/cans/grape_juice, -/obj/item/reagent_containers/food/drinks/cans/dr_gibb, -/obj/item/reagent_containers/food/drinks/cans/dr_gibb, +/obj/item/reagent_containers/drinks/cans/sodawater, +/obj/item/reagent_containers/drinks/cans/sodawater, +/obj/item/reagent_containers/drinks/cans/sodawater, +/obj/item/reagent_containers/drinks/cans/sodawater, +/obj/item/reagent_containers/drinks/cans/sodawater, +/obj/item/reagent_containers/drinks/cans/lemon_lime, +/obj/item/reagent_containers/drinks/cans/lemon_lime, +/obj/item/reagent_containers/drinks/cans/lemon_lime, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/grape_juice, +/obj/item/reagent_containers/drinks/cans/grape_juice, +/obj/item/reagent_containers/drinks/cans/grape_juice, +/obj/item/reagent_containers/drinks/cans/dr_gibb, +/obj/item/reagent_containers/drinks/cans/dr_gibb, /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -15438,7 +15438,7 @@ /area/awaymission/black_mesa/entrance_lobby) "sNn" = ( /obj/structure/closet/crate/can, -/obj/item/reagent_containers/food/snacks/donut/sprinkles, +/obj/item/food/snacks/donut/sprinkles, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/gas_emitter_chamber) "sNG" = ( @@ -16055,7 +16055,7 @@ "tGv" = ( /obj/structure/table, /obj/item/clothing/glasses/regular, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = 10; pixel_y = 10 }, @@ -16424,7 +16424,7 @@ /area/awaymission/black_mesa/entrance_lobby) "uhs" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/candy/taffy, +/obj/item/food/snacks/candy/taffy, /turf/simulated/floor/plasteel, /area/awaymission/black_mesa/hecu_zone_infirmary) "uhN" = ( @@ -17431,7 +17431,7 @@ /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/entrance_internal_hall) "vrW" = ( -/obj/item/reagent_containers/food/snacks/donut/sprinkles, +/obj/item/food/snacks/donut/sprinkles, /obj/structure/table/wood, /turf/simulated/floor/wood/fancy/cherry, /area/awaymission/black_mesa/xen/vortigaunt_village_nihilanth) @@ -17807,8 +17807,8 @@ /area/awaymission/black_mesa/xen/village_hallway) "vPn" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, /obj/machinery/light/directional/west, /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -17948,7 +17948,7 @@ /obj/structure/table, /obj/item/paper, /obj/item/pen, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = 10 }, /turf/simulated/floor/plasteel, @@ -18140,11 +18140,11 @@ /area/awaymission/black_mesa/xen/acid_lake_building) "wnV" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 8; pixel_y = 2 }, -/obj/item/reagent_containers/food/snacks/chips, +/obj/item/food/snacks/chips, /turf/simulated/floor/plating/ironsand, /area/awaymission/black_mesa/hecu_zone_camp) "woi" = ( @@ -19351,7 +19351,7 @@ /area/awaymission/black_mesa/employee_dorm_room) "xKX" = ( /obj/structure/closet/crate/wooden/wooden_crate, -/obj/item/reagent_containers/food/snacks/beans, +/obj/item/food/snacks/beans, /turf/simulated/floor/plasteel/smooth, /area/awaymission/black_mesa/deep_sci_storage) "xMb" = ( diff --git a/_maps/map_files220/RandomZLevels/caves.dmm b/_maps/map_files220/RandomZLevels/caves.dmm index 46aaff30be53..7e188fad7bd8 100644 --- a/_maps/map_files220/RandomZLevels/caves.dmm +++ b/_maps/map_files220/RandomZLevels/caves.dmm @@ -458,7 +458,7 @@ pixel_y = 10 }, /obj/effect/spawner/random_spawners/dirt_often, -/obj/item/reagent_containers/food/snacks/grown/apple/poisoned, +/obj/item/food/snacks/grown/apple/poisoned, /turf/simulated/floor/wood/lavaland_air, /area/awaymission/caves) "bY" = ( @@ -1790,7 +1790,7 @@ /turf/simulated/floor/plating/lavaland_air, /area/awaymission/caves) "iy" = ( -/obj/item/reagent_containers/food/snacks/grown/poppy{ +/obj/item/food/snacks/grown/poppy{ pixel_y = -15; pixel_x = -5 }, @@ -2185,7 +2185,7 @@ /area/awaymission/caves/build) "kC" = ( /obj/effect/decal/remains/human, -/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, /obj/item/clothing/suit/armor/riot/knight/red, /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/awaymission/caves) @@ -2348,13 +2348,13 @@ /area/awaymission/caves/build/reqpower_build) "lw" = ( /obj/structure/table/wood/fancy/red, -/obj/item/reagent_containers/food/snacks/candy/cotton/poison, -/obj/item/reagent_containers/food/snacks/candy/jellybean/poison{ +/obj/item/food/snacks/candy/cotton/poison, +/obj/item/food/snacks/candy/jellybean/poison{ pixel_x = -5; pixel_y = 4 }, -/obj/item/reagent_containers/food/snacks/candy/gummyworm/poison, -/obj/item/reagent_containers/food/snacks/candy/gummybear/poison{ +/obj/item/food/snacks/candy/gummyworm/poison, +/obj/item/food/snacks/candy/gummybear/poison{ pixel_x = 5; pixel_y = 5 }, @@ -9360,8 +9360,8 @@ /area/awaymission/caves) "Wr" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 5; pixel_y = 7 }, @@ -9996,8 +9996,8 @@ "Zz" = ( /obj/structure/closet/crate/wooden/wooden_crate, /obj/structure/stone_tile/slab, -/obj/item/reagent_containers/food/drinks/trophy/bronze_cup, -/obj/item/reagent_containers/food/drinks/bottle/wine{ +/obj/item/reagent_containers/drinks/trophy/bronze_cup, +/obj/item/reagent_containers/drinks/bottle/wine{ name = "Thousand-year-old wine"; icon_state = "patronbottle" }, diff --git a/_maps/map_files220/RandomZLevels/gate_lizard.dmm b/_maps/map_files220/RandomZLevels/gate_lizard.dmm index 541121815f81..c85ab049a4b6 100644 --- a/_maps/map_files220/RandomZLevels/gate_lizard.dmm +++ b/_maps/map_files220/RandomZLevels/gate_lizard.dmm @@ -150,7 +150,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/inside/complex) "ajt" = ( -/obj/item/reagent_containers/food/drinks/oilcan, +/obj/item/reagent_containers/drinks/oilcan, /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/inside/complex) @@ -309,7 +309,7 @@ /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave/pirate) "ati" = ( -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, /obj/effect/spawner/random_spawners/dirt_maybe, /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/inside/complex) @@ -324,7 +324,7 @@ "atT" = ( /obj/structure/table/reinforced, /obj/item/storage/fancy/donut_box/empty, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_y = 9; pixel_x = 13 }, @@ -1005,9 +1005,9 @@ /area/awaymission/jungle_planet/outside/river) "bru" = ( /obj/structure/closet/crate/wooden/barrel, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave) "brT" = ( @@ -1219,13 +1219,13 @@ }, /area/awaymission/jungle_planet/outside) "bBR" = ( -/obj/item/reagent_containers/food/snacks/grown/chili, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle, -/obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle, -/obj/item/reagent_containers/food/snacks/grown/onion, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, +/obj/item/food/snacks/grown/chili, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/mushroom/chanterelle, +/obj/item/food/snacks/grown/mushroom/chanterelle, +/obj/item/food/snacks/grown/onion, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, /obj/structure/closet/crate/wooden/wooden_crate, /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave/small) @@ -1411,7 +1411,7 @@ }, /area/awaymission/jungle_planet/inside/complex) "bNN" = ( -/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, /obj/structure/stone_tile/slab/cracked{ dir = 4 }, @@ -1574,7 +1574,7 @@ /area/awaymission/jungle_planet/outside/waterfall) "caT" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /obj/effect/spawner/random_spawners/dirt_frequent, @@ -1607,7 +1607,7 @@ /area/awaymission/jungle_planet/outside) "ccc" = ( /obj/structure/closet/crate/wooden/barrel, -/obj/item/reagent_containers/food/snacks/monkeykabob, +/obj/item/food/snacks/monkeykabob, /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave) "cco" = ( @@ -2613,7 +2613,7 @@ /area/awaymission/jungle_planet/outside) "dpL" = ( /obj/structure/closet, -/obj/item/reagent_containers/food/snacks/candy/candybar, +/obj/item/food/snacks/candy/candybar, /obj/item/stack/spacecash/c10, /obj/item/flashlight/seclite, /obj/item/clothing/shoes/combat, @@ -3130,7 +3130,7 @@ /obj/structure/table/reinforced, /obj/item/trash/chips, /obj/item/stack/tape_roll, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ desc = "Its cold like the space outside noo!"; list_reagents = list("coffee" = 0) }, @@ -3168,7 +3168,7 @@ /area/awaymission/jungle_planet/inside/complex) "efS" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave/pirate) "egj" = ( @@ -3588,9 +3588,9 @@ name = "kitchen Cabinet"; req_access = list(201) }, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/sugar, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/sugar, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -3623,7 +3623,7 @@ /area/awaymission/jungle_planet/outside/river) "eJx" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ list_reagents = list("rum" = 50) }, /obj/item/clothing/mask/cigarette/pipe, @@ -4124,7 +4124,7 @@ /turf/simulated/floor/beach/away/water/deep/dense_canpass, /area/awaymission/jungle_planet/outside/river) "frZ" = ( -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0) }, /turf/simulated/floor/plating/asteroid/ancient{ @@ -4305,12 +4305,12 @@ icon_state = "telescreen_console"; pixel_x = -32 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/inside/complex) "fFa" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/oilcan, +/obj/item/reagent_containers/drinks/oilcan, /obj/structure/reagent_dispensers/fueltank/chem{ pixel_y = 30 }, @@ -4599,7 +4599,7 @@ /area/awaymission/jungle_planet/outside/river) "fYG" = ( /obj/effect/spawner/random_spawners/dirt_often, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ list_reagents = list("rum" = 0) }, /obj/effect/landmark/damageturf, @@ -4623,11 +4623,11 @@ /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave/small) "gaG" = ( -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0); pixel_x = 9 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0) }, /turf/simulated/floor/wood/oak, @@ -4822,7 +4822,7 @@ /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "gpD" = ( -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ layer = 5; pixel_y = 14 }, @@ -4964,7 +4964,7 @@ /area/awaymission/jungle_planet/inside/complex) "gAD" = ( /obj/structure/curtain/black, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ list_reagents = list("rum" = 0) }, /obj/effect/mob_spawn/human/corpse/skeleton, @@ -5296,8 +5296,8 @@ /area/awaymission/jungle_planet/inside/complex) "gYH" = ( /obj/structure/stone_tile/slab/cracked, -/obj/item/reagent_containers/food/snacks/grown/poppy/lily, -/obj/item/reagent_containers/food/snacks/grown/moonflower, +/obj/item/food/snacks/grown/poppy/lily, +/obj/item/food/snacks/grown/moonflower, /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) "gZm" = ( @@ -5755,10 +5755,10 @@ /area/awaymission/jungle_planet/outside/abandoned) "hws" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave) "hwW" = ( @@ -6008,11 +6008,11 @@ /area/awaymission/jungle_planet/outside/cave) "hOx" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mushroom_bowl{ +/obj/item/reagent_containers/drinks/mushroom_bowl{ pixel_y = -23; pixel_x = 9 }, -/obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle, +/obj/item/food/snacks/grown/mushroom/chanterelle, /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) "hPx" = ( @@ -7149,7 +7149,7 @@ /area/awaymission/jungle_planet/outside/waterfall) "jie" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mushroom_bowl, +/obj/item/reagent_containers/drinks/mushroom_bowl, /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) "jiu" = ( @@ -7590,8 +7590,8 @@ /obj/item/reagent_containers/glass/beaker/waterbottle/large, /obj/item/reagent_containers/glass/beaker/waterbottle/large, /obj/item/reagent_containers/glass/beaker/waterbottle/large, -/obj/item/reagent_containers/food/drinks/cans/cola, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/inside/complex) "jIo" = ( @@ -8182,10 +8182,10 @@ /turf/simulated/floor/plating, /area/awaymission/jungle_planet/inside/complex) "kvb" = ( -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -3 }, /obj/structure/table, @@ -8392,7 +8392,7 @@ /area/awaymission/jungle_planet/inside/complex) "kHh" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/monkeysdelight, +/obj/item/food/snacks/monkeysdelight, /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave) "kHP" = ( @@ -8616,7 +8616,7 @@ }, /area/awaymission/jungle_planet/inside/complex) "kUl" = ( -/obj/item/reagent_containers/food/drinks/bottle/tequila, +/obj/item/reagent_containers/drinks/bottle/tequila, /obj/effect/spawner/random_spawners/dirt_often, /obj/structure/closet/crate/wooden/wooden_crate, /turf/simulated/floor/wood/oak, @@ -8805,12 +8805,12 @@ "lfb" = ( /obj/effect/turf_decal/delivery/white, /obj/structure/closet/cardboard, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/beans, -/obj/item/reagent_containers/food/snacks/candy/donor, -/obj/item/reagent_containers/food/snacks/candy/donor, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/beans, +/obj/item/food/snacks/candy/donor, +/obj/item/food/snacks/candy/donor, /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/inside/complex) "lfj" = ( @@ -8876,19 +8876,19 @@ /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/outside) "liO" = ( -/obj/item/reagent_containers/food/drinks/mushroom_bowl{ +/obj/item/reagent_containers/drinks/mushroom_bowl{ pixel_y = -11; pixel_x = -11 }, -/obj/item/reagent_containers/food/drinks/mushroom_bowl{ +/obj/item/reagent_containers/drinks/mushroom_bowl{ pixel_y = -23; pixel_x = 9 }, -/obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap, -/obj/item/reagent_containers/food/snacks/grown/mushroom/reishi{ +/obj/item/food/snacks/grown/mushroom/libertycap, +/obj/item/food/snacks/grown/mushroom/reishi{ pixel_x = -7 }, -/obj/item/reagent_containers/food/snacks/grown/mushroom/amanita, +/obj/item/food/snacks/grown/mushroom/amanita, /obj/structure/stone_tile/block/cracked, /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) @@ -9991,7 +9991,7 @@ /area/awaymission/jungle_planet/inside/complex) "mBN" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/plating/asteroid/ancient{ name = "ground" }, @@ -10197,8 +10197,8 @@ /area/awaymission/jungle_planet/outside/cave) "mMo" = ( /obj/structure/closet/crate/wooden/barrel, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/effect/landmark/damageturf, /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave) @@ -10306,7 +10306,7 @@ /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "mSW" = ( -/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey, /obj/effect/spawner/random_spawners/dirt_often, /obj/structure/closet/crate/wooden/wooden_crate, /obj/effect/landmark/damageturf, @@ -10613,7 +10613,7 @@ /area/awaymission/jungle_planet/outside/abandoned) "njL" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/monkeysdelight, +/obj/item/food/snacks/monkeysdelight, /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) "njP" = ( @@ -10630,8 +10630,8 @@ /area/awaymission/jungle_planet/outside/river) "nok" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mushroom_bowl, -/obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle, +/obj/item/reagent_containers/drinks/mushroom_bowl, +/obj/item/food/snacks/grown/mushroom/chanterelle, /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) "nou" = ( @@ -11118,7 +11118,7 @@ /turf/simulated/floor/mineral/plastitanium, /area/awaymission/jungle_planet/outside/abandoned) "nZe" = ( -/obj/item/reagent_containers/food/drinks/trophy/silver_cup, +/obj/item/reagent_containers/drinks/trophy/silver_cup, /obj/item/clothing/gloves/ring/gold, /obj/effect/spawner/random_spawners/dirt_often, /obj/structure/closet/crate/wooden/wooden_crate, @@ -11269,7 +11269,7 @@ /turf/simulated/floor/beach/away/sand, /area/awaymission/jungle_planet/outside/waterfall) "oke" = ( -/obj/item/reagent_containers/food/drinks/oilcan, +/obj/item/reagent_containers/drinks/oilcan, /turf/simulated/floor/beach/away/sand, /area/awaymission/jungle_planet/outside/river) "okx" = ( @@ -11299,11 +11299,11 @@ "omT" = ( /obj/effect/decal/cleanable/cobweb, /obj/structure/closet/crate/wooden/wooden_crate, -/obj/item/reagent_containers/food/snacks/grown/cannabis, -/obj/item/reagent_containers/food/snacks/grown/cannabis, -/obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate, -/obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate, -/obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate, +/obj/item/food/snacks/grown/cannabis, +/obj/item/food/snacks/grown/cannabis, +/obj/item/food/snacks/grown/cannabis/ultimate, +/obj/item/food/snacks/grown/cannabis/ultimate, +/obj/item/food/snacks/grown/cannabis/ultimate, /obj/effect/landmark/damageturf, /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave) @@ -11736,7 +11736,7 @@ "oMg" = ( /obj/structure/table/wood, /obj/item/storage/fancy/cigarettes/cigpack_robust, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer" = 0); pixel_x = -11; pixel_y = 2 @@ -11877,7 +11877,7 @@ /area/awaymission/jungle_planet/inside/complex) "oTJ" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mushroom_bowl{ +/obj/item/reagent_containers/drinks/mushroom_bowl{ pixel_y = -11; pixel_x = -11 }, @@ -12205,7 +12205,7 @@ /obj/structure/table, /obj/item/wrench, /obj/item/screwdriver, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ desc = "Its cold like the space outside noo!"; pixel_x = -6; pixel_y = 8; @@ -12632,7 +12632,7 @@ /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/inside/complex) "pZY" = ( -/obj/item/reagent_containers/food/drinks/oilcan, +/obj/item/reagent_containers/drinks/oilcan, /turf/simulated/floor/plating, /area/awaymission/jungle_planet/inside/complex) "qaT" = ( @@ -12715,11 +12715,11 @@ /area/awaymission/jungle_planet/outside/cave) "qgA" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, /obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/food/drinks/bottle/cream, +/obj/item/reagent_containers/drinks/bottle/cream, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -13291,11 +13291,11 @@ /area/awaymission/jungle_planet/inside/complex) "qOH" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/meat{ +/obj/item/food/snacks/meat{ pixel_y = -22; pixel_x = -7 }, -/obj/item/reagent_containers/food/snacks/monkeysdelight, +/obj/item/food/snacks/monkeysdelight, /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) "qOM" = ( @@ -13438,7 +13438,7 @@ /area/awaymission/jungle_planet/inside/complex) "qVY" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) "qVZ" = ( @@ -13580,7 +13580,7 @@ }, /obj/item/coin/gold, /obj/item/clothing/mask/cigarette/pipe/cobpipe, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ list_reagents = list("rum" = 0) }, /turf/simulated/floor/wood/oak, @@ -14011,7 +14011,7 @@ /area/awaymission/jungle_planet/outside/abandoned) "rHT" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /obj/item/storage/fancy/matches, /obj/effect/decal/cleanable/cobweb2, /obj/item/clothing/mask/cigarette/pipe, @@ -14846,8 +14846,8 @@ /area/awaymission/jungle_planet/inside/complex) "sDQ" = ( /obj/structure/stone_tile/slab/cracked, -/obj/item/reagent_containers/food/snacks/grown/poppy, -/obj/item/reagent_containers/food/snacks/grown/poppy/geranium, +/obj/item/food/snacks/grown/poppy, +/obj/item/food/snacks/grown/poppy/geranium, /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) "sFa" = ( @@ -14884,8 +14884,8 @@ /area/awaymission/jungle_planet/outside/cave/pirate) "sIz" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/shaker, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/shaker, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -4 }, /obj/effect/spawner/random_spawners/dirt_maybe, @@ -15220,13 +15220,13 @@ }, /area/awaymission/jungle_planet/outside/river) "tey" = ( -/obj/item/reagent_containers/food/snacks/grown/chili, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle, -/obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle, -/obj/item/reagent_containers/food/snacks/grown/onion, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, +/obj/item/food/snacks/grown/chili, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/mushroom/chanterelle, +/obj/item/food/snacks/grown/mushroom/chanterelle, +/obj/item/food/snacks/grown/onion, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, /obj/effect/decal/cleanable/cobweb2, /obj/structure/closet/crate/wooden/wooden_crate, /turf/simulated/floor/wood/oak, @@ -17310,7 +17310,7 @@ /area/awaymission/jungle_planet/outside/cave) "vCb" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/fried_vox{ +/obj/item/food/snacks/fried_vox{ pixel_y = 5 }, /turf/simulated/floor/wood/oak, @@ -17409,7 +17409,7 @@ pixel_x = -3; pixel_y = 18 }, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/plating, /area/awaymission/jungle_planet/inside/complex) "vHh" = ( @@ -18249,7 +18249,7 @@ /area/awaymission/jungle_planet/inside) "wMk" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ list_reagents = list("rum" = 50) }, /turf/simulated/floor/wood/oak, @@ -18702,8 +18702,8 @@ /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/inside/complex) "xmJ" = ( -/obj/item/reagent_containers/food/drinks/mushroom_bowl, -/obj/item/reagent_containers/food/snacks/badrecipe, +/obj/item/reagent_containers/drinks/mushroom_bowl, +/obj/item/food/snacks/badrecipe, /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) "xmQ" = ( @@ -19184,7 +19184,7 @@ /obj/structure/table/wood, /obj/item/flashlight/lamp, /obj/item/pen/fancy, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ list_reagents = list("whiskey" = 0); pixel_x = -9 }, @@ -19192,8 +19192,8 @@ /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/inside/complex) "xSz" = ( -/obj/item/reagent_containers/food/drinks/bottle/rum, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum, +/obj/item/reagent_containers/drinks/bottle/rum{ list_reagents = list("rum" = 0) }, /obj/structure/closet/crate/wooden/wooden_crate, diff --git a/_maps/map_files220/RandomZLevels/wildwest.dmm b/_maps/map_files220/RandomZLevels/wildwest.dmm index 4721a0588752..8f44a39289b2 100644 --- a/_maps/map_files220/RandomZLevels/wildwest.dmm +++ b/_maps/map_files220/RandomZLevels/wildwest.dmm @@ -130,7 +130,7 @@ /area/awaymission/wildwest/wildwest_refine) "bd" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/snacks/mint, +/obj/item/food/snacks/mint, /obj/item/kitchen/utensil/fork, /turf/simulated/floor/wood/oak, /area/awaymission/wildwest/wildwest_mines) @@ -783,7 +783,7 @@ /obj/structure/table, /obj/item/megaphone, /obj/structure/extinguisher_cabinet/directional/east, -/obj/item/reagent_containers/food/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee, /obj/item/folder/yellow{ pixel_x = 2; pixel_y = 2 @@ -1006,7 +1006,7 @@ /area/awaymission/wildwest/wildwest_refine) "jM" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/wood/oak, /area/awaymission/wildwest/wildwest_mines) "jP" = ( @@ -1156,16 +1156,16 @@ /area/awaymission/wildwest/wildwest_vault) "ll" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ layer = 5; pixel_x = 8; pixel_y = 6 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 11 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8; pixel_y = 1 }, @@ -1608,8 +1608,8 @@ /area/awaymission/wildwest/wildwest_vault) "oR" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/soda, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/drinkingglass/soda, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -7 }, /turf/simulated/floor/wood/oak, @@ -1641,11 +1641,11 @@ "ps" = ( /obj/structure/table/holotable/wood, /obj/item/reagent_containers/glass/rag, -/obj/item/reagent_containers/food/drinks/shaker, -/obj/item/reagent_containers/food/drinks/drinkingglass/soda{ +/obj/item/reagent_containers/drinks/shaker, +/obj/item/reagent_containers/drinks/drinkingglass/soda{ pixel_x = 6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/soda{ +/obj/item/reagent_containers/drinks/drinkingglass/soda{ pixel_x = 11; pixel_y = 3 }, @@ -2288,7 +2288,7 @@ /area/awaymission/wildwest/wildwest_mines) "vL" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/syndicake, +/obj/item/food/snacks/syndicake, /turf/simulated/floor/mineral/plastitanium/red, /area/awaymission/wildwest/wildwest_refine) "wh" = ( @@ -2305,7 +2305,7 @@ /turf/simulated/wall/mineral/sandstone, /area/awaymission/wildwest/wildwest_mines) "wk" = ( -/obj/item/reagent_containers/food/drinks/oilcan, +/obj/item/reagent_containers/drinks/oilcan, /obj/effect/decal/cleanable/blood/oil, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -2515,7 +2515,7 @@ /area/awaymission/wildwest/wildwest_mines) "yH" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/wood/oak, /area/awaymission/wildwest/wildwest_mines) "yK" = ( @@ -2525,7 +2525,7 @@ /area/awaymission/wildwest/wildwest_mines) "yP" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/soda{ +/obj/item/reagent_containers/drinks/drinkingglass/soda{ pixel_x = 6 }, /obj/effect/decal/cleanable/dirt, @@ -2890,7 +2890,7 @@ /area/awaymission/wildwest/wildwest_vault) "Cw" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/soda{ +/obj/item/reagent_containers/drinks/drinkingglass/soda{ pixel_x = 11 }, /obj/structure/sign/poster/official/random/south, @@ -3401,7 +3401,7 @@ /area/awaymission/wildwest/wildwest_mines) "Hj" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/snacks/mint, +/obj/item/food/snacks/mint, /turf/simulated/floor/wood/oak, /area/awaymission/wildwest/wildwest_mines) "Hm" = ( @@ -4150,7 +4150,7 @@ /area/awaymission/wildwest/wildwest_mines) "Pz" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/snacks/mint, +/obj/item/food/snacks/mint, /obj/item/kitchen/utensil/spoon, /obj/item/kitchen/utensil/fork{ pixel_x = 6 @@ -4419,10 +4419,10 @@ /area/awaymission/wildwest/wildwest_mines) "Sq" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -7 }, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/wood/oak, /area/awaymission/wildwest/wildwest_mines) "Sr" = ( @@ -4732,7 +4732,7 @@ /area/awaymission/wildwest/wildwest_mines) "VG" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/snacks/mint, +/obj/item/food/snacks/mint, /obj/item/kitchen/utensil/fork, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood/oak, @@ -4769,7 +4769,7 @@ "VW" = ( /obj/structure/table/holotable/wood, /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/soda{ +/obj/item/reagent_containers/drinks/drinkingglass/soda{ pixel_x = 6 }, /turf/simulated/floor/wood/oak, @@ -5094,7 +5094,7 @@ /area/awaymission/wildwest/wildwest_mines) "ZG" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood/oak, /area/awaymission/wildwest/wildwest_mines) diff --git a/_maps/map_files220/cyberiad/cyberiad.dmm b/_maps/map_files220/cyberiad/cyberiad.dmm index a2bb6ee16d4a..38bb65fe4284 100644 --- a/_maps/map_files220/cyberiad/cyberiad.dmm +++ b/_maps/map_files220/cyberiad/cyberiad.dmm @@ -756,7 +756,7 @@ /area/station/security/main) "aeC" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mug/hos, +/obj/item/reagent_containers/drinks/mug/hos, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -5904,7 +5904,7 @@ /obj/item/radio{ pixel_x = 5 }, -/obj/item/reagent_containers/food/drinks/mug/sec, +/obj/item/reagent_containers/drinks/mug/sec, /turf/simulated/floor/plating, /area/station/maintenance/fore) "axX" = ( @@ -6140,7 +6140,7 @@ "ayM" = ( /obj/machinery/light/directional/south, /obj/machinery/ai_status_display/south, -/obj/item/reagent_containers/food/drinks/mug/sec, +/obj/item/reagent_containers/drinks/mug/sec, /obj/structure/table, /turf/simulated/floor/plasteel{ icon_state = "redcorner" @@ -7592,7 +7592,7 @@ /area/station/maintenance/abandonedbar) "aCW" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/patron, +/obj/item/reagent_containers/drinks/bottle/patron, /obj/item/storage/fancy/cigarettes/cigpack_shadyjims, /obj/machinery/light_construct/small/east, /turf/simulated/floor/plating, @@ -7718,7 +7718,7 @@ "aDq" = ( /obj/effect/decal/cleanable/dust, /obj/structure/table, -/obj/item/reagent_containers/food/snacks/cheesewedge, +/obj/item/food/snacks/cheesewedge, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "aDr" = ( @@ -7826,7 +7826,7 @@ /obj/item/clothing/suit/wcoat, /obj/item/clothing/suit/blacktrenchcoat, /obj/item/clothing/under/suit/tan, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) "aDD" = ( @@ -8221,7 +8221,7 @@ /obj/structure/sign/poster/contraband/random/east, /obj/structure/sink/kitchen/east, /obj/structure/closet/walllocker/medlocker/south, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = -8; pixel_y = 2 }, @@ -8230,8 +8230,8 @@ /area/station/maintenance/abandonedbar) "aFb" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/peppermill, /turf/simulated/floor/plating, /area/station/maintenance/abandonedbar) "aFc" = ( @@ -8372,7 +8372,7 @@ /obj/item/clothing/glasses/sunglasses{ pixel_y = 6 }, -/obj/item/reagent_containers/food/drinks/flask/detflask{ +/obj/item/reagent_containers/drinks/flask/detflask{ pixel_x = 16; pixel_y = 4 }, @@ -8994,7 +8994,7 @@ /area/station/legal/courtroom) "aHx" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /obj/item/radio/intercom/directional/west, /obj/structure/window/reinforced, /turf/simulated/floor/plasteel{ @@ -9411,7 +9411,7 @@ /obj/item/reagent_containers/glass/beaker/waterbottle{ pixel_x = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /obj/structure/window/basic, @@ -9721,7 +9721,7 @@ /area/station/maintenance/fpmaint) "aKl" = ( /obj/structure/table/wood/fancy/royalblack, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /obj/item/reagent_containers/glass/beaker/waterbottle{ @@ -10056,7 +10056,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "aLG" = ( -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -10663,7 +10663,7 @@ /area/station/maintenance/fpmaint2) "aOo" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -10708,7 +10708,7 @@ /obj/item/reagent_containers/glass/beaker/waterbottle{ pixel_x = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5 }, /obj/structure/cable{ @@ -10765,7 +10765,7 @@ }, /area/station/security/interrogation) "aOF" = ( -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "aOI" = ( @@ -10856,7 +10856,7 @@ "aPa" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random_spawners/blood_maybe, -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /obj/item/clothing/mask/face/fox, /turf/simulated/floor/plasteel, /area/station/maintenance/fpmaint2) @@ -11533,7 +11533,7 @@ /obj/machinery/computer/mob_healer_terminal{ pixel_y = 30 }, -/obj/item/reagent_containers/food/drinks/britcup{ +/obj/item/reagent_containers/drinks/britcup{ list_reagents = list("tea"=15); pixel_x = 4; pixel_y = 2 @@ -11852,7 +11852,7 @@ /obj/structure/closet/wardrobe/white, /obj/item/clothing/shoes/jackboots, /obj/item/reagent_containers/iv_bag/blood/OMinus, -/obj/item/reagent_containers/food/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/badminbrew, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint2) "aSp" = ( @@ -13916,7 +13916,7 @@ /obj/machinery/light_switch/south, /obj/item/clothing/head/bearpelt, /obj/item/folder/documents, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, /obj/item/lighter/zippo/nt_rep, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/stack/spacecash/c1000, @@ -14083,7 +14083,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "baa" = ( -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "bab" = ( @@ -14464,7 +14464,7 @@ /area/station/maintenance/fpmaint) "bbH" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/baguette, +/obj/item/food/snacks/baguette, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "bbI" = ( @@ -14485,7 +14485,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "bbJ" = ( -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /obj/item/storage/backpack/duffel/clown, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) @@ -14720,7 +14720,7 @@ "bcu" = ( /obj/structure/table/wood, /obj/item/pen, -/obj/item/reagent_containers/food/drinks/bottle/holywater, +/obj/item/reagent_containers/drinks/bottle/holywater, /obj/machinery/light/directional/north, /turf/simulated/floor/carpet/black, /area/station/service/chapel/office) @@ -15700,8 +15700,8 @@ /area/station/service/chapel) "bgj" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/chips, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/food/snacks/chips, +/obj/item/reagent_containers/drinks/cans/cola, /turf/simulated/floor/carpet, /area/station/hallway/secondary/entry) "bgk" = ( @@ -16509,7 +16509,7 @@ }, /obj/machinery/alarm/directional/north, /obj/structure/table, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = 8; pixel_y = 8 }, @@ -19271,7 +19271,7 @@ /area/station/maintenance/port) "bwA" = ( /obj/effect/decal/cleanable/dust, -/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, /obj/effect/decal/cleanable/glass, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 9 @@ -21677,11 +21677,11 @@ /area/station/supply/office) "bHn" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/cola{ +/obj/item/reagent_containers/drinks/cans/cola{ pixel_x = -6; pixel_y = 8 }, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "arrival" @@ -21742,7 +21742,7 @@ /area/station/medical/reception) "bHJ" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mug/med{ +/obj/item/reagent_containers/drinks/mug/med{ pixel_x = 7; pixel_y = -10 }, @@ -21752,7 +21752,7 @@ /obj/item/storage/fancy/donut_box{ pixel_y = 5 }, -/obj/item/reagent_containers/food/drinks/cans/dr_gibb{ +/obj/item/reagent_containers/drinks/cans/dr_gibb{ pixel_y = -15; pixel_x = -5 }, @@ -22003,7 +22003,7 @@ /obj/structure/table/wood, /obj/item/radio/intercom/directional/south, /obj/item/storage/fancy/matches, -/obj/item/reagent_containers/food/drinks/flask/gold, +/obj/item/reagent_containers/drinks/flask/gold, /obj/item/clothing/mask/cigarette/cigar, /obj/item/razor{ pixel_x = -4; @@ -22125,36 +22125,36 @@ }, /area/station/medical/patients_rooms) "bJc" = ( -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0); pixel_x = -11; pixel_y = 6 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0); pixel_x = -3; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0); pixel_x = 11; pixel_y = 9 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0); pixel_x = 5; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0); pixel_x = -8 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0); pixel_x = -1; pixel_y = -4 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ list_reagents = list("beer"=0); pixel_x = 9; pixel_y = -3 @@ -22388,7 +22388,7 @@ /area/station/science/robotics) "bKo" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "whitepurple" @@ -22458,8 +22458,8 @@ /area/station/command/office/hop) "bKQ" = ( /obj/structure/rack, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 4; pixel_y = 4 }, @@ -25402,7 +25402,7 @@ /area/station/science/robotics) "bYm" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /turf/simulated/floor/wood/oak, /area/station/maintenance/asmaint2) "bYr" = ( @@ -27868,7 +27868,7 @@ c_tag = "Research Director's Office"; network = list("Research","SS13") }, -/obj/item/reagent_containers/food/drinks/mug/rd, +/obj/item/reagent_containers/drinks/mug/rd, /obj/item/taperecorder{ pixel_x = -3 }, @@ -27901,10 +27901,10 @@ "chU" = ( /obj/structure/sign/poster/contraband/random/north, /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/bottler/glass_bottle{ +/obj/item/reagent_containers/drinks/cans/bottler/glass_bottle{ pixel_x = 4 }, -/obj/item/reagent_containers/food/drinks/cans/bottler/glass_bottle{ +/obj/item/reagent_containers/drinks/cans/bottler/glass_bottle{ pixel_x = -9 }, /turf/simulated/floor/wood/oak, @@ -29126,10 +29126,10 @@ /turf/simulated/wall, /area/station/service/janitor) "cmT" = ( -/obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass, /obj/structure/closet/cabinet, /obj/machinery/light/directional/east, /turf/simulated/floor/wood/oak, @@ -30030,9 +30030,9 @@ icon_state = "0-4" }, /obj/structure/closet/secure_closet/psychiatrist, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass/soda, -/obj/item/reagent_containers/food/drinks/drinkingglass/soda, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass/soda, +/obj/item/reagent_containers/drinks/drinkingglass/soda, /turf/simulated/floor/carpet, /area/station/medical/psych) "cre" = ( @@ -31617,7 +31617,7 @@ pixel_y = -4 }, /obj/machinery/light/directional/north, -/obj/item/reagent_containers/food/drinks/mug/sci{ +/obj/item/reagent_containers/drinks/mug/sci{ desc = "A purple mug with a small piece of duct tape on it that has 'Janitor's' written on it in sharpie. Looks a bit too.. scientific to belong to the Janitor."; name = "Janitor's mug"; pixel_x = 6; @@ -32161,7 +32161,7 @@ dir = 1 }, /obj/machinery/light/directional/south, -/obj/item/reagent_containers/food/drinks/britcup{ +/obj/item/reagent_containers/drinks/britcup{ list_reagents = list("tea"=15); pixel_x = 4; pixel_y = 2 @@ -38839,7 +38839,7 @@ }, /area/station/engineering/hallway) "cWL" = ( -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/plating, /area/station/command/office/blueshield) "cWM" = ( @@ -39155,7 +39155,7 @@ /area/station/engineering/supermatter_room) "cXV" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -6; pixel_y = 3 }, @@ -41338,7 +41338,7 @@ /area/station/engineering/engine/supermatter) "dfr" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/cans/sodawater, +/obj/item/reagent_containers/drinks/cans/sodawater, /turf/simulated/floor/plasteel{ icon_state = "darkyellowfull" }, @@ -41655,14 +41655,14 @@ /area/station/maintenance/asmaint2) "dgz" = ( /obj/structure/table/holotable/wood, -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -8; pixel_y = 7 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = 10 }, /turf/simulated/floor/beach/sand, @@ -41675,7 +41675,7 @@ /area/shuttle/pod_4) "dgH" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mug, +/obj/item/reagent_containers/drinks/mug, /obj/machinery/power/apc/directional/south, /obj/structure/cable, /turf/simulated/floor/wood/oak, @@ -41814,7 +41814,7 @@ /area/station/engineering/ai_transit_tube) "dhp" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 2; pixel_y = 6 }, @@ -42247,7 +42247,7 @@ /obj/structure/railing{ dir = 8 }, -/obj/item/reagent_containers/food/drinks/mug/eng{ +/obj/item/reagent_containers/drinks/mug/eng{ pixel_x = 5; pixel_y = 5 }, @@ -45432,7 +45432,7 @@ /area/station/engineering/utility) "dEb" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) "dEc" = ( @@ -45461,12 +45461,12 @@ /area/station/security/lobby) "dEq" = ( /obj/structure/rack, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = -3; pixel_y = -3 }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = 3; pixel_y = 3 }, @@ -46017,7 +46017,7 @@ /area/station/engineering/hallway) "dOb" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/bottle/rum, +/obj/item/reagent_containers/drinks/bottle/rum, /obj/item/reagent_containers/glass/rag{ pixel_x = -7 }, @@ -46854,11 +46854,11 @@ /area/station/maintenance/portsolar) "eeF" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = -8; pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/flask/barflask{ +/obj/item/reagent_containers/drinks/flask/barflask{ pixel_x = 6; pixel_y = 6 }, @@ -46894,12 +46894,12 @@ /area/station/medical/reception) "efk" = ( /obj/structure/rack, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = -3; pixel_y = -3 }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = 3; pixel_y = 3 }, @@ -47688,11 +47688,11 @@ /area/station/engineering/atmos) "esV" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8; pixel_y = 1 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 11 }, @@ -48127,15 +48127,15 @@ /area/station/security/permabrig) "eBE" = ( /obj/structure/table/glass/reinforced/plastitanium, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka{ +/obj/item/reagent_containers/drinks/bottle/vodka/badminka{ pixel_y = 12; pixel_x = 6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 8; pixel_x = -1 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 2; pixel_x = -1 }, @@ -48301,7 +48301,7 @@ /obj/effect/decal/cleanable/dust, /obj/item/lighter/random, /obj/item/rollingpaper, -/obj/item/reagent_containers/food/snacks/grown/cannabis, +/obj/item/food/snacks/grown/cannabis, /obj/item/ashtray/plastic, /turf/simulated/floor/carpet/orange, /area/station/maintenance/fsmaint) @@ -49555,7 +49555,7 @@ "feq" = ( /obj/effect/decal/cleanable/dust, /obj/effect/spawner/random_spawners/blood_maybe, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/enzyme, /turf/simulated/floor/plating, /area/station/maintenance/abandonedbar) "fes" = ( @@ -50517,7 +50517,7 @@ /area/station/science/hallway) "fxN" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood/oak, /area/station/maintenance/asmaint) "fxP" = ( @@ -52983,7 +52983,7 @@ "gsd" = ( /obj/structure/table/wood, /obj/machinery/light/small/directional/south, -/obj/item/reagent_containers/food/drinks/mug/novelty, +/obj/item/reagent_containers/drinks/mug/novelty, /obj/effect/spawner/lootdrop/officetoys, /turf/simulated/floor/wood/oak, /area/station/command/office/ntrep) @@ -53161,8 +53161,8 @@ /area/station/maintenance/fsmaint) "guQ" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -7 }, /obj/effect/spawner/lootdrop/maintenance, @@ -53997,7 +53997,7 @@ "gMa" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, -/obj/item/reagent_containers/food/snacks/dough{ +/obj/item/food/snacks/dough{ desc = "A piece of dough. It looks moldy and is hard as a rock. Hope you're not planning on turning this into a pizza.."; name = "old dough" }, @@ -54387,7 +54387,7 @@ /area/station/maintenance/fsmaint) "gRe" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood/oak, /area/station/maintenance/asmaint2) "gRp" = ( @@ -56633,7 +56633,7 @@ /area/station/command/bridge) "hDS" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/mug/sci, +/obj/item/reagent_containers/drinks/mug/sci, /obj/machinery/light/directional/west, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -56789,7 +56789,7 @@ pixel_y = 10; pixel_x = 4 }, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_x = -4; pixel_y = -6 }, @@ -57746,7 +57746,7 @@ /area/station/security/processing) "hYo" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -4; pixel_y = 6 }, @@ -58105,7 +58105,7 @@ /area/station/maintenance/asmaint2) "ifV" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/drinks/bottle/wine, +/obj/item/reagent_containers/drinks/bottle/wine, /turf/simulated/floor/plasteel{ icon_state = "cult" }, @@ -59780,12 +59780,12 @@ "iOY" = ( /obj/structure/table/wood, /obj/structure/sign/poster/official/random/north, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = 5; pixel_y = 6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -8; pixel_y = 7 }, @@ -61252,8 +61252,8 @@ /area/station/public/toilet) "jsv" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/disk, -/obj/item/reagent_containers/food/snacks/disk{ +/obj/item/food/snacks/disk, +/obj/item/food/snacks/disk{ pixel_y = -6; pixel_x = 5 }, @@ -62979,7 +62979,7 @@ "kdh" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/south, -/obj/item/reagent_containers/food/snacks/grown/cannabis, +/obj/item/food/snacks/grown/cannabis, /turf/simulated/floor/carpet, /area/station/maintenance/asmaint) "kdx" = ( @@ -63121,7 +63121,7 @@ }, /area/station/engineering/hallway) "kgc" = ( -/obj/item/reagent_containers/food/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/badminbrew, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "kgg" = ( @@ -63765,8 +63765,8 @@ /obj/structure/sign/poster/contraband/random/north, /obj/item/clothing/mask/cigarette/random, /obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) @@ -63891,7 +63891,7 @@ "kua" = ( /obj/structure/table/wood, /obj/machinery/power/apc/directional/west, -/obj/item/reagent_containers/food/snacks/baguette, +/obj/item/food/snacks/baguette, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -67322,7 +67322,7 @@ pixel_y = 6; pixel_x = 4 }, -/obj/item/reagent_containers/food/drinks/bottle/holywater{ +/obj/item/reagent_containers/drinks/bottle/holywater{ pixel_y = 4; pixel_x = -8 }, @@ -68606,7 +68606,7 @@ /turf/simulated/floor/plasteel, /area/station/supply/miningdock) "mdX" = ( -/obj/item/reagent_containers/food/snacks/grown/cannabis, +/obj/item/food/snacks/grown/cannabis, /obj/effect/decal/cleanable/dirt, /obj/item/clothing/mask/cigarette/medical_marijuana, /obj/effect/landmark/damageturf, @@ -69091,7 +69091,7 @@ /area/station/telecomms/chamber) "mll" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/meat/slab, +/obj/item/food/snacks/meat/slab, /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, @@ -69627,7 +69627,7 @@ /area/station/supply/storage) "mwO" = ( /obj/effect/decal/cleanable/dust, -/obj/item/reagent_containers/food/drinks/cans/badminbrew, +/obj/item/reagent_containers/drinks/cans/badminbrew, /turf/simulated/floor/plasteel{ icon_state = "redyellowfull" }, @@ -69732,8 +69732,8 @@ /area/station/security/brig) "mze" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/food/snacks/breadslice, +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 11 }, @@ -74363,8 +74363,8 @@ /area/station/security/warden) "okb" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/vodka, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /obj/effect/turf_decal/siding/wood{ dir = 6 }, @@ -76339,7 +76339,7 @@ /area/station/security/permabrig) "oUP" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ list_reagents = list("coffee"=0); pixel_x = 6; pixel_y = 4 @@ -76637,7 +76637,7 @@ known_by = list("captain") }, /obj/item/gun/projectile/revolver/russian, -/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, +/obj/item/reagent_containers/drinks/bottle/absinthe/premium, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/toy/figure/crew/captain, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -77864,7 +77864,7 @@ /turf/simulated/floor/wood/fancy/oak, /area/station/service/bar) "pvM" = ( -/obj/item/reagent_containers/food/drinks/mug/med{ +/obj/item/reagent_containers/drinks/mug/med{ pixel_y = 10 }, /obj/structure/table/glass, @@ -80198,8 +80198,8 @@ /area/station/engineering/break_room) "qpi" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -7 }, /turf/simulated/floor/plasteel, @@ -82054,11 +82054,11 @@ /area/space/nearstation) "qTQ" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 4; pixel_y = 6 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -4; pixel_y = 6 }, @@ -82862,7 +82862,7 @@ "rkL" = ( /obj/effect/decal/cleanable/dirt, /obj/item/seeds/cannabis, -/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, +/obj/item/food/snacks/grown/ambrosia/vulgaris, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) "rkR" = ( @@ -83624,7 +83624,7 @@ /area/space/nearstation) "rDV" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/bottle/cream{ +/obj/item/reagent_containers/drinks/bottle/cream{ pixel_y = 8 }, /turf/simulated/floor/plasteel{ @@ -86405,7 +86405,7 @@ "sDr" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, -/obj/item/reagent_containers/food/snacks/donkpocket, +/obj/item/food/snacks/donkpocket, /turf/simulated/floor/plating, /area/station/maintenance/aft) "sDy" = ( @@ -89615,7 +89615,7 @@ /area/station/service/library) "tNc" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/wood/oak, /area/station/maintenance/aft) "tNg" = ( @@ -90163,17 +90163,17 @@ /area/station/science/test_chamber) "tWD" = ( /obj/structure/closet/crate, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/onion, -/obj/item/reagent_containers/food/snacks/grown/onion, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/onion, +/obj/item/food/snacks/grown/onion, /obj/item/storage/box/donkpockets, /obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/rice, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -91003,8 +91003,8 @@ /area/station/medical/medbay2) "uls" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/wine, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/bottle/wine, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -5 }, /obj/effect/landmark/damageturf, @@ -91424,7 +91424,7 @@ /area/station/security/permabrig) "utP" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/pie{ +/obj/item/food/snacks/pie{ pixel_y = 2 }, /obj/machinery/power/apc/directional/east, @@ -92128,7 +92128,7 @@ /area/station/security/permabrig) "uGf" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/grilledcheese{ +/obj/item/food/snacks/grilledcheese{ pixel_y = 9 }, /turf/simulated/floor/wood/oak, @@ -92681,7 +92681,7 @@ /area/station/engineering/supermatter_room) "uRK" = ( /obj/item/organ/internal/heart/vox, -/obj/item/reagent_containers/food/snacks/fried_vox, +/obj/item/food/snacks/fried_vox, /obj/structure/table, /obj/item/scalpel, /turf/simulated/floor/plating, @@ -99994,7 +99994,7 @@ "xEb" = ( /obj/effect/decal/cleanable/dust, /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/muffin{ +/obj/item/food/snacks/muffin{ pixel_x = -5; pixel_y = 9 }, @@ -100142,10 +100142,10 @@ /area/station/maintenance/abandonedbar) "xHy" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/disk{ +/obj/item/food/snacks/disk{ pixel_x = -6 }, -/obj/item/reagent_containers/food/snacks/disk{ +/obj/item/food/snacks/disk{ pixel_y = 10; pixel_x = 8 }, @@ -100235,7 +100235,7 @@ /area/station/medical/surgery/secondary) "xII" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/pistachios, +/obj/item/food/snacks/pistachios, /obj/item/poster/random_contraband, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) @@ -100912,7 +100912,7 @@ /area/station/maintenance/fpmaint2) "xSF" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 8; pixel_x = -6 }, @@ -101300,7 +101300,7 @@ pixel_x = 3; pixel_y = -3 }, -/obj/item/reagent_containers/food/drinks/trophy/bronze_cup, +/obj/item/reagent_containers/drinks/trophy/bronze_cup, /obj/machinery/light/small/directional/north, /turf/simulated/floor/plating, /area/station/maintenance/aft) diff --git a/_maps/map_files220/delta/delta.dmm b/_maps/map_files220/delta/delta.dmm index 66d9440030eb..0392321909a9 100644 --- a/_maps/map_files220/delta/delta.dmm +++ b/_maps/map_files220/delta/delta.dmm @@ -23,7 +23,7 @@ dir = 9 }, /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_x = 6; pixel_y = 4 }, @@ -1485,17 +1485,17 @@ "alR" = ( /obj/structure/closet/secure_closet/freezer/fridge/open, /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/condiment/soymilk, -/obj/item/reagent_containers/food/condiment/soymilk, -/obj/item/reagent_containers/food/condiment/soymilk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, /obj/item/storage/fancy/egg_box, /obj/item/storage/fancy/egg_box, /turf/simulated/floor/plasteel{ @@ -3776,7 +3776,7 @@ /area/station/maintenance/fore) "att" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -4566,11 +4566,11 @@ "aws" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -7; pixel_y = 7 }, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/peppermill, /obj/item/radio/intercom/directional/west, /turf/simulated/floor/plasteel{ dir = 8; @@ -5392,7 +5392,7 @@ pixel_x = 4; pixel_y = 4 }, -/obj/item/reagent_containers/food/snacks/baguette, +/obj/item/food/snacks/baguette, /obj/item/flashlight/lamp/green{ pixel_x = 6; pixel_y = 16 @@ -5774,7 +5774,7 @@ /area/station/maintenance/fore) "aAk" = ( /obj/structure/rack, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fore) @@ -6886,16 +6886,16 @@ pixel_x = 6; pixel_y = 16 }, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_x = 6 }, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_y = 4 }, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_x = -6 }, -/obj/item/reagent_containers/food/snacks/pie, +/obj/item/food/snacks/pie, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -12759,11 +12759,11 @@ /area/station/service/kitchen) "bdQ" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -4; pixel_y = 2 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -7; pixel_y = 7 }, @@ -13800,12 +13800,12 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/obj/item/reagent_containers/food/snacks/dough, -/obj/item/reagent_containers/food/snacks/dough{ +/obj/item/food/snacks/dough, +/obj/item/food/snacks/dough{ pixel_x = 2; pixel_y = 2 }, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/enzyme, /turf/simulated/floor/plasteel/white, /area/station/service/kitchen) "bhK" = ( @@ -15905,7 +15905,7 @@ /obj/structure/table/reinforced, /obj/item/folder, /obj/item/pen, -/obj/item/reagent_containers/food/snacks/grown/apple, +/obj/item/food/snacks/grown/apple, /obj/machinery/door/window/classic/normal{ dir = 8; name = "Hydroponics Desk" @@ -16342,9 +16342,9 @@ /obj/item/seeds/lime, /obj/item/seeds/watermelon, /obj/item/seeds/grape, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/watermelon, -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/watermelon, +/obj/item/food/snacks/grown/banana, /obj/machinery/door/window/classic/reversed{ dir = 8; name = "Hydroponics Desk" @@ -19927,7 +19927,7 @@ /area/station/engineering/gravitygenerator) "bGD" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/cans/starkist, +/obj/item/reagent_containers/drinks/cans/starkist, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -26612,8 +26612,8 @@ /area/station/command/office/ntrep) "cca" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/wood/oak, /area/station/command/office/ntrep) "ccb" = ( @@ -27105,7 +27105,7 @@ /area/station/command/office/ntrep) "cdN" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /obj/item/storage/fancy/donut_box, /turf/simulated/floor/wood/oak, /area/station/command/office/ntrep) @@ -27179,7 +27179,7 @@ /area/station/command/office/blueshield) "cdT" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/flask/gold, +/obj/item/reagent_containers/drinks/flask/gold, /obj/item/razor, /turf/simulated/floor/carpet/black, /area/station/command/office/captain/bedroom) @@ -28000,9 +28000,9 @@ /area/station/command/office/blueshield) "chs" = ( /obj/structure/closet/cabinet, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, -/obj/item/reagent_containers/food/drinks/drinkingglass, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /obj/effect/turf_decal/siding/wood{ dir = 4 }, @@ -31698,8 +31698,8 @@ /area/station/service/expedition) "cxf" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/mint, -/obj/item/reagent_containers/food/drinks/bottle/cream, +/obj/item/food/snacks/mint, +/obj/item/reagent_containers/drinks/bottle/cream, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -32217,8 +32217,8 @@ /area/station/hallway/primary/fore) "cyU" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 4; pixel_x = -6 }, @@ -32494,7 +32494,7 @@ /area/station/science/robotics/showroom) "czO" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey, /turf/simulated/floor/carpet, /area/station/science/robotics/showroom) "czP" = ( @@ -34532,11 +34532,11 @@ /area/station/medical/virology/lab) "cJm" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 4; pixel_x = -6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = 6 }, /obj/effect/decal/cleanable/dirt, @@ -40330,7 +40330,7 @@ /area/station/maintenance/apmaint) "dka" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 4; pixel_x = -6 }, @@ -42032,7 +42032,7 @@ /area/station/supply/miningdock) "dsI" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -45216,7 +45216,7 @@ "dMg" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/friedegg, +/obj/item/food/snacks/friedegg, /turf/simulated/floor/wood/oak, /area/station/maintenance/starboard) "dMh" = ( @@ -46186,7 +46186,7 @@ /obj/structure/table/reinforced, /obj/item/stack/packageWrap, /obj/item/hand_labeler, -/obj/item/reagent_containers/food/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee, /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) @@ -46350,7 +46350,7 @@ /obj/item/clothing/gloves/color/black, /obj/item/clothing/suit/storage/hazardvest, /obj/item/clothing/mask/breath, -/obj/item/reagent_containers/food/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee, /obj/machinery/newscaster/directional/east, /turf/simulated/floor/plasteel/dark, /area/station/maintenance/apmaint) @@ -46817,7 +46817,7 @@ /obj/structure/table/reinforced, /obj/item/storage/toolbox/emergency, /obj/item/wrench, -/obj/item/reagent_containers/food/drinks/coffee, +/obj/item/reagent_containers/drinks/coffee, /turf/simulated/floor/plasteel/dark, /area/station/maintenance/apmaint) "dTg" = ( @@ -47070,7 +47070,7 @@ /area/station/service/chapel/office) "dUf" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/holywater, +/obj/item/reagent_containers/drinks/bottle/holywater, /turf/simulated/floor/carpet, /area/station/service/chapel/office) "dUg" = ( @@ -47280,8 +47280,8 @@ /area/station/service/chapel/office) "dUK" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/poppy/geranium, -/obj/item/reagent_containers/food/snacks/grown/poppy/lily{ +/obj/item/food/snacks/grown/poppy/geranium, +/obj/item/food/snacks/grown/poppy/lily{ pixel_x = 4; pixel_y = 5 }, @@ -49357,7 +49357,7 @@ /area/station/legal/courtroom) "eoB" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -4; pixel_y = 2 }, @@ -50582,7 +50582,7 @@ /area/station/hallway/primary/central/east) "eJW" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/redbeet, +/obj/item/food/snacks/grown/redbeet, /obj/item/clothing/head/ushanka, /turf/simulated/floor/plating, /area/station/maintenance/old_kitchen) @@ -51364,8 +51364,8 @@ /area/station/medical/medbay2) "eUZ" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/random_drink, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/bottle/random_drink, +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 5 }, /obj/machinery/light/small/directional/north, @@ -51737,14 +51737,14 @@ /area/station/public/fitness) "fdo" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/bottleofbanana{ +/obj/item/reagent_containers/drinks/bottle/bottleofbanana{ pixel_y = 16 }, -/obj/item/reagent_containers/food/drinks/bottle/milk{ +/obj/item/reagent_containers/drinks/bottle/milk{ pixel_y = 2; pixel_x = -6 }, -/obj/item/reagent_containers/food/drinks/bottle/orangejuice{ +/obj/item/reagent_containers/drinks/bottle/orangejuice{ pixel_y = 4; pixel_x = 6 }, @@ -55412,7 +55412,7 @@ /area/station/engineering/controlroom) "glD" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /obj/effect/decal/cleanable/dirt, /obj/item/gun/projectile/revolver/russian{ pixel_y = 12 @@ -55707,8 +55707,8 @@ /area/station/security/checkpoint/south) "grj" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_y = 4; pixel_x = -6 }, @@ -56243,8 +56243,8 @@ /area/station/service/theatre) "gAT" = ( /obj/effect/spawner/random_spawners/blood_maybe, -/obj/item/reagent_containers/food/snacks/meat/human, -/obj/item/reagent_containers/food/snacks/meat/human, +/obj/item/food/snacks/meat/human, +/obj/item/food/snacks/meat/human, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" @@ -57121,7 +57121,7 @@ /area/station/medical/virology) "gOz" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/disk, +/obj/item/food/snacks/disk, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkbluecorners" @@ -57862,7 +57862,7 @@ /obj/item/toy/figure/crew/captain, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/lighter/zippo/nt_rep, -/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, +/obj/item/reagent_containers/drinks/bottle/absinthe/premium, /turf/simulated/floor/carpet/black, /area/station/command/office/captain/bedroom) "hbH" = ( @@ -59274,7 +59274,7 @@ /area/station/engineering/break_room) "hzw" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/disk{ +/obj/item/food/snacks/disk{ pixel_x = -6 }, /turf/simulated/floor/plasteel{ @@ -61306,7 +61306,7 @@ pixel_x = -4; pixel_y = -4 }, -/obj/item/reagent_containers/food/drinks/flask/detflask, +/obj/item/reagent_containers/drinks/flask/detflask, /obj/item/radio/intercom/directional/west, /turf/simulated/floor/carpet, /area/station/security/detective) @@ -61658,8 +61658,8 @@ /area/station/ai_monitored/storage/eva) "ikQ" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 7 }, /obj/effect/decal/cleanable/dirt, @@ -63789,7 +63789,7 @@ /area/station/maintenance/medmaint) "iSe" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/vodka{ +/obj/item/reagent_containers/drinks/bottle/vodka{ pixel_y = 10 }, /obj/effect/decal/cleanable/dirt, @@ -69249,7 +69249,7 @@ "kDl" = ( /obj/structure/table/reinforced, /obj/item/trash/plate, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/enzyme, /turf/simulated/floor/plasteel{ icon_state = "redyellowfull" }, @@ -69570,7 +69570,7 @@ /area/station/service/hydroponics) "kHq" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/candy/caramel, +/obj/item/food/snacks/candy/caramel, /obj/structure/window/reinforced{ dir = 8 }, @@ -69806,7 +69806,7 @@ /area/station/science/toxins/mixing) "kME" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/mug/sci, +/obj/item/reagent_containers/drinks/mug/sci, /turf/simulated/floor/plasteel/white, /area/station/science/break_room) "kMH" = ( @@ -71077,8 +71077,8 @@ "lhR" = ( /obj/structure/table/reinforced, /obj/machinery/light/directional/west, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour{ +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour{ pixel_x = 2; pixel_y = 2 }, @@ -71155,20 +71155,20 @@ /area/station/maintenance/old_kitchen) "ljm" = ( /obj/structure/safe/floor, -/obj/item/reagent_containers/food/drinks/bottle/cognac, -/obj/item/reagent_containers/food/drinks/bottle/cognac, -/obj/item/reagent_containers/food/drinks/bottle/cognac, -/obj/item/reagent_containers/food/drinks/bottle/goldschlager, -/obj/item/reagent_containers/food/drinks/bottle/goldschlager, -/obj/item/reagent_containers/food/drinks/bottle/goldschlager, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, -/obj/item/reagent_containers/food/drinks/bottle/random_drink, -/obj/item/reagent_containers/food/drinks/bottle/random_drink, -/obj/item/reagent_containers/food/drinks/bottle/random_drink, -/obj/item/reagent_containers/food/drinks/bottle/random_drink, -/obj/item/reagent_containers/food/drinks/bottle/random_drink, +/obj/item/reagent_containers/drinks/bottle/cognac, +/obj/item/reagent_containers/drinks/bottle/cognac, +/obj/item/reagent_containers/drinks/bottle/cognac, +/obj/item/reagent_containers/drinks/bottle/goldschlager, +/obj/item/reagent_containers/drinks/bottle/goldschlager, +/obj/item/reagent_containers/drinks/bottle/goldschlager, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/random_drink, +/obj/item/reagent_containers/drinks/bottle/random_drink, +/obj/item/reagent_containers/drinks/bottle/random_drink, +/obj/item/reagent_containers/drinks/bottle/random_drink, +/obj/item/reagent_containers/drinks/bottle/random_drink, /turf/simulated/floor/wood/oak, /area/station/maintenance/old_kitchen) "ljq" = ( @@ -71297,14 +71297,14 @@ /area/station/maintenance/old_kitchen) "lkZ" = ( /obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/reagent_containers/food/snacks/frozen/icecream/icecreamcone, -/obj/item/reagent_containers/food/snacks/frozen/icecream/icecreamcone, -/obj/item/reagent_containers/food/snacks/frozen/icecream/icecreamcone, -/obj/item/reagent_containers/food/snacks/frozen/icecream/icecreamcone, -/obj/item/reagent_containers/food/snacks/frozen/icecream, -/obj/item/reagent_containers/food/snacks/frozen/icecream, -/obj/item/reagent_containers/food/snacks/frozen/icecreamsandwich, -/obj/item/reagent_containers/food/snacks/frozen/icecreamsandwich, +/obj/item/food/snacks/frozen/icecream/icecreamcone, +/obj/item/food/snacks/frozen/icecream/icecreamcone, +/obj/item/food/snacks/frozen/icecream/icecreamcone, +/obj/item/food/snacks/frozen/icecream/icecreamcone, +/obj/item/food/snacks/frozen/icecream, +/obj/item/food/snacks/frozen/icecream, +/obj/item/food/snacks/frozen/icecreamsandwich, +/obj/item/food/snacks/frozen/icecreamsandwich, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "redyellowfull" @@ -72981,16 +72981,16 @@ /area/station/maintenance/starboard2) "lLS" = ( /obj/structure/closet/crate, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/breadslice, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/onion, -/obj/item/reagent_containers/food/snacks/grown/onion, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/breadslice, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/onion, +/obj/item/food/snacks/grown/onion, /obj/item/storage/box/donkpockets, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/rice, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "bar" @@ -73444,11 +73444,11 @@ /area/station/science/test_chamber) "lSB" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -7; pixel_y = 7 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -4; pixel_y = 2 }, @@ -74427,8 +74427,8 @@ name = "Kitchen Shutters" }, /obj/machinery/door/firedoor, -/obj/item/reagent_containers/food/snacks/burrito, -/obj/item/reagent_containers/food/snacks/burrito{ +/obj/item/food/snacks/burrito, +/obj/item/food/snacks/burrito{ pixel_x = 5; pixel_y = 5 }, @@ -74550,10 +74550,10 @@ /area/station/security/warden) "mng" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/candy/cotton/blue, -/obj/item/reagent_containers/food/snacks/candy/cotton/pink, -/obj/item/reagent_containers/food/snacks/candy/cotton/rainbow, -/obj/item/reagent_containers/food/snacks/candy/cotton/yellow, +/obj/item/food/snacks/candy/cotton/blue, +/obj/item/food/snacks/candy/cotton/pink, +/obj/item/food/snacks/candy/cotton/rainbow, +/obj/item/food/snacks/candy/cotton/yellow, /obj/structure/sign/poster/official/random/north, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -75263,15 +75263,15 @@ /area/station/service/library) "mzE" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/meat, -/obj/item/reagent_containers/food/snacks/meat{ +/obj/item/food/snacks/meat, +/obj/item/food/snacks/meat{ pixel_x = 4 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -7; pixel_y = 7 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -4; pixel_y = 2 }, @@ -77372,11 +77372,11 @@ /area/station/security/warden) "njV" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing{ +/obj/item/reagent_containers/drinks/bottle/bottleofnothing{ pixel_y = 19 }, /obj/item/grown/bananapeel, -/obj/item/reagent_containers/food/drinks/bottle/cream{ +/obj/item/reagent_containers/drinks/bottle/cream{ pixel_x = -9 }, /turf/simulated/floor/plating, @@ -77700,7 +77700,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/grown/pineapple{ +/obj/item/food/snacks/grown/pineapple{ name = "Старый ананас"; desc = "Довольно старый ананас. Интересно как он тут оказался и почему он так странно пахнет..." }, @@ -79003,12 +79003,12 @@ "nHK" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 6; pixel_x = -6; volume = 0 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 6; pixel_x = 8; volume = 0 @@ -80464,13 +80464,13 @@ /obj/item/toy/minimeteor{ pixel_y = 6 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 6; pixel_x = 8; initialized = 1; volume = 0 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 6; pixel_x = -6; initialized = 1; @@ -80571,7 +80571,7 @@ /area/station/engineering/atmos) "oeG" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/bottle/holywater{ +/obj/item/reagent_containers/drinks/bottle/holywater{ pixel_y = 4; pixel_x = -8; initialized = 1 @@ -81350,7 +81350,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/item/reagent_containers/food/snacks/grown/redbeet, +/obj/item/food/snacks/grown/redbeet, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/wood/oak, @@ -82794,13 +82794,13 @@ "oSD" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 6; pixel_x = -6; initialized = 1; volume = 0 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 6; pixel_x = 8; initialized = 1; @@ -83411,14 +83411,14 @@ /area/station/service/library) "pbY" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/vodka{ +/obj/item/reagent_containers/drinks/bottle/vodka{ pixel_y = 10 }, -/obj/item/reagent_containers/food/drinks/bottle/vermouth{ +/obj/item/reagent_containers/drinks/bottle/vermouth{ pixel_x = -6; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/bottle/tequila{ +/obj/item/reagent_containers/drinks/bottle/tequila{ pixel_x = 6; pixel_y = 6 }, @@ -85275,7 +85275,7 @@ "pER" = ( /obj/structure/table/wood, /obj/item/book/manual/barman_recipes, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/structure/sign/poster/official/high_class_martini{ pixel_y = 32 }, @@ -85890,11 +85890,11 @@ /area/station/engineering/controlroom) "pOp" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/food/snacks/disk{ +/obj/item/food/snacks/disk{ pixel_y = 10; pixel_x = 8 }, -/obj/item/reagent_containers/food/snacks/disk{ +/obj/item/food/snacks/disk{ pixel_y = -6; pixel_x = 5 }, @@ -86540,7 +86540,7 @@ }, /obj/item/clothing/head/bearpelt, /obj/item/folder/documents, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, +/obj/item/reagent_containers/drinks/bottle/vodka/badminka, /obj/item/lighter/zippo/nt_rep, /obj/item/storage/fancy/cigarettes/cigpack_robustgold, /obj/item/stack/spacecash/c1000, @@ -88548,14 +88548,14 @@ }, /obj/structure/table/wood, /obj/machinery/light/directional/west, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5; pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 5 }, -/obj/item/reagent_containers/food/drinks/bottle/wine{ +/obj/item/reagent_containers/drinks/bottle/wine{ pixel_y = 5 }, /turf/simulated/floor/plasteel/dark, @@ -89372,7 +89372,7 @@ /turf/simulated/floor/plasteel/white, /area/station/science/storage) "qTe" = ( -/obj/item/reagent_containers/food/snacks/candy/gummyworm/green, +/obj/item/food/snacks/candy/gummyworm/green, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 8; @@ -90342,7 +90342,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/enzyme, /turf/simulated/floor/plasteel{ icon_state = "bar" }, @@ -91080,7 +91080,7 @@ /area/station/security/podpilot) "ruI" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 8; pixel_x = -6; initialized = 1 @@ -92102,7 +92102,7 @@ /area/station/medical/storage) "rMZ" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/beans, +/obj/item/food/snacks/beans, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -92494,7 +92494,7 @@ dir = 5 }, /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/grown/banana{ +/obj/item/food/snacks/grown/banana{ pixel_x = 6; pixel_y = 4 }, @@ -92537,11 +92537,11 @@ pixel_y = 3 }, /obj/item/storage/fancy/donut_box, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = 3; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -92785,7 +92785,7 @@ /area/station/command/bridge) "rYu" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/britcup{ +/obj/item/reagent_containers/drinks/britcup{ pixel_y = 2 }, /obj/machinery/newscaster/directional/south, @@ -92934,7 +92934,7 @@ pixel_x = -14; pixel_y = 8 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 6; pixel_x = -6; initialized = 1 @@ -96971,7 +96971,7 @@ /area/station/maintenance/starboard2) "tnj" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -7; pixel_y = 7 }, @@ -97949,7 +97949,7 @@ pixel_x = 2; pixel_y = 7 }, -/obj/item/reagent_containers/food/drinks/mug/hos, +/obj/item/reagent_containers/drinks/mug/hos, /obj/machinery/camera{ c_tag = "Brig Head of Security's Bedroom"; dir = 1 @@ -98500,13 +98500,13 @@ /area/station/command/office/hos) "tOf" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = 6 }, -/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/drinks/bottle/vodka, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/siding/blue{ dir = 6 @@ -98733,11 +98733,11 @@ /area/station/hallway/secondary/entry) "tSt" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -5; pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = 5 }, /turf/simulated/floor/plasteel/white, @@ -101295,7 +101295,7 @@ /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "uKR" = ( -/obj/item/reagent_containers/food/snacks/candy/gummybear/green, +/obj/item/food/snacks/candy/gummybear/green, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/east, /turf/simulated/floor/plasteel{ @@ -101802,7 +101802,7 @@ /area/station/service/bar/atrium) "uQQ" = ( /obj/structure/table/wood/fancy, -/obj/item/reagent_containers/food/condiment/saltshaker, +/obj/item/reagent_containers/condiment/saltshaker, /obj/item/kitchen/utensil/fork{ pixel_x = -5 }, @@ -102426,7 +102426,7 @@ "uYg" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dust, -/obj/item/reagent_containers/food/snacks/meat, +/obj/item/food/snacks/meat, /obj/effect/decal/cleanable/blood/old, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" @@ -102534,7 +102534,7 @@ "vaT" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/fries{ +/obj/item/food/snacks/fries{ pixel_y = 2 }, /turf/simulated/floor/plating, @@ -102745,7 +102745,7 @@ /area/station/legal/lawoffice) "veB" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/grown/poppy/geranium, +/obj/item/food/snacks/grown/poppy/geranium, /obj/item/soap/deluxe, /obj/machinery/power/apc{ cell_type = 25000; @@ -103192,11 +103192,11 @@ /area/station/service/library) "vlR" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = -6; pixel_y = 10 }, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_x = 6; pixel_y = 10 }, @@ -103708,7 +103708,7 @@ "vvS" = ( /obj/structure/table/wood, /obj/item/picket_sign, -/obj/item/reagent_containers/food/condiment/saltshaker, +/obj/item/reagent_containers/condiment/saltshaker, /turf/simulated/floor/wood/oak, /area/station/maintenance/old_kitchen) "vwk" = ( @@ -104214,7 +104214,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, /obj/machinery/recharger, -/obj/item/reagent_containers/food/drinks/bottle/random_drink, +/obj/item/reagent_containers/drinks/bottle/random_drink, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "vEN" = ( @@ -105880,7 +105880,7 @@ "weH" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/birthdaycakeslice, +/obj/item/food/snacks/birthdaycakeslice, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "weO" = ( @@ -106077,7 +106077,7 @@ /obj/item/clothing/mask/cigarette/pipe, /obj/item/clothing/accessory/holster, /obj/item/clothing/suit/jacket/leather/overcoat, -/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/drinks/bottle/whiskey, /obj/item/clothing/head/fedora/brownfedora, /turf/simulated/floor/plating, /area/station/maintenance/old_detective) @@ -107629,7 +107629,7 @@ /obj/item/stack/packageWrap{ pixel_y = 7 }, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/enzyme, /obj/item/reagent_containers/glass/bucket{ pixel_x = 6 }, @@ -108747,9 +108747,9 @@ /area/station/medical/virology/lab) "xcg" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat/human, -/obj/item/reagent_containers/food/snacks/meat/human, -/obj/item/reagent_containers/food/snacks/meat/human, +/obj/item/food/snacks/meat/human, +/obj/item/food/snacks/meat/human, +/obj/item/food/snacks/meat/human, /obj/machinery/alarm/directional/south, /turf/simulated/floor/plasteel{ dir = 10; @@ -109083,7 +109083,7 @@ }, /obj/effect/landmark/spawner/rev, /obj/machinery/light/small/directional/south, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 6; pixel_x = 8; volume = 0 @@ -110782,7 +110782,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/item/reagent_containers/food/drinks/drinkingglass, +/obj/item/reagent_containers/drinks/drinkingglass, /turf/simulated/floor/plating, /area/station/maintenance/disposal/east) "xJH" = ( diff --git a/_maps/map_files220/generic/Admin_Zone.dmm b/_maps/map_files220/generic/Admin_Zone.dmm index c794f3ba7784..cb4a80df0e1e 100644 --- a/_maps/map_files220/generic/Admin_Zone.dmm +++ b/_maps/map_files220/generic/Admin_Zone.dmm @@ -691,13 +691,13 @@ /area/admin) "kQ" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/grown/citrus/lemon, -/obj/item/reagent_containers/food/snacks/grown/berries, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/cherries, -/obj/item/reagent_containers/food/snacks/grown/citrus/orange, -/obj/item/reagent_containers/food/snacks/grown/corn, -/obj/item/reagent_containers/food/snacks/grown/mushroom/amanita, +/obj/item/food/snacks/grown/citrus/lemon, +/obj/item/food/snacks/grown/berries, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/cherries, +/obj/item/food/snacks/grown/citrus/orange, +/obj/item/food/snacks/grown/corn, +/obj/item/food/snacks/grown/mushroom/amanita, /turf/simulated/floor/wood/oak, /area/admin) "kT" = ( @@ -3247,7 +3247,7 @@ "Vh" = ( /obj/structure/table/wood, /obj/item/storage/box/drinkingglasses, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_y = 5 }, /turf/simulated/floor/plasteel{ diff --git a/_maps/map_files220/generic/Lavaland.dmm b/_maps/map_files220/generic/Lavaland.dmm index f05615226571..4a3f257705ef 100644 --- a/_maps/map_files220/generic/Lavaland.dmm +++ b/_maps/map_files220/generic/Lavaland.dmm @@ -674,22 +674,22 @@ /area/shuttle/mining) "bG" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -1; pixel_y = 9 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -8 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 4; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -7 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 7; pixel_y = 5 }, @@ -974,7 +974,7 @@ /area/mine/outpost/storage) "cl" = ( /obj/structure/lattice/catwalk/mining, -/obj/item/reagent_containers/food/snacks/fortunecookie{ +/obj/item/food/snacks/fortunecookie{ pixel_y = -5; pixel_x = -6 }, @@ -2388,11 +2388,11 @@ /area/mine/outpost/hallway/west) "eW" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 2; pixel_y = 6 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -2; pixel_y = 4 }, @@ -2438,7 +2438,7 @@ /area/mine/outpost/hallway/west) "fb" = ( /obj/structure/reagent_dispensers/oil, -/obj/item/reagent_containers/food/drinks/oilcan, +/obj/item/reagent_containers/drinks/oilcan, /turf/simulated/floor/plating, /area/mine/outpost/maintenance/south) "fc" = ( @@ -5301,7 +5301,7 @@ "oB" = ( /obj/structure/rack, /obj/item/storage/toolbox/emergency, -/obj/item/reagent_containers/food/snacks/grown/harebell, +/obj/item/food/snacks/grown/harebell, /obj/item/radio/intercom/directional/south, /turf/simulated/floor/plating, /area/mine/outpost/maintenance/east) diff --git a/_maps/map_files220/generic/centcomm.dmm b/_maps/map_files220/generic/centcomm.dmm index e0c7dae5ffc1..b5777d63a4bd 100644 --- a/_maps/map_files220/generic/centcomm.dmm +++ b/_maps/map_files220/generic/centcomm.dmm @@ -385,15 +385,15 @@ /area/centcom/ss220/admin3) "anM" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 5 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8 }, /obj/item/kitchen/knife, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_y = 5 }, /obj/machinery/reagentgrinder{ @@ -1122,7 +1122,7 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/lemoncakeslice, +/obj/item/food/snacks/lemoncakeslice, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin1) "aMw" = ( @@ -1386,7 +1386,7 @@ /area/ghost_bar) "aXh" = ( /obj/structure/table/wood/poker, -/obj/item/reagent_containers/food/drinks/bottle/vodka{ +/obj/item/reagent_containers/drinks/bottle/vodka{ pixel_x = -5; pixel_y = 9 }, @@ -1669,13 +1669,13 @@ /area/shuttle/trade/sol) "bjU" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = 10 }, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = 5 }, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/enzyme, /turf/simulated/floor/plating{ icon = 'icons/turf/floors.dmi'; icon_state = "elevatorshaft"; @@ -2662,7 +2662,7 @@ /area/syndicate_mothership) "bUl" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/bottle/vermouth, +/obj/item/reagent_containers/drinks/bottle/vermouth, /turf/simulated/floor/carpet/black, /area/syndicate_mothership/elite_squad) "bUU" = ( @@ -3792,7 +3792,7 @@ /turf/simulated/floor/grass/jungle/no_creep, /area/centcom/ss220/admin1) "cHl" = ( -/obj/item/reagent_containers/food/drinks/bottle/rum{ +/obj/item/reagent_containers/drinks/bottle/rum{ pixel_x = 6; pixel_y = 2 }, @@ -3806,7 +3806,7 @@ pixel_x = -7; pixel_y = 5 }, -/obj/item/reagent_containers/food/drinks/mugwort{ +/obj/item/reagent_containers/drinks/mugwort{ pixel_x = 8; pixel_y = 6 }, @@ -3883,15 +3883,15 @@ /area/wizard_station) "cKt" = ( /obj/machinery/economy/vending/boozeomat, -/obj/item/reagent_containers/food/drinks/bottle/cognac{ +/obj/item/reagent_containers/drinks/bottle/cognac{ pixel_x = 9; pixel_y = 23 }, -/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium{ +/obj/item/reagent_containers/drinks/bottle/absinthe/premium{ pixel_x = -8; pixel_y = 25 }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_y = 23 }, /turf/simulated/floor/carpet/red, @@ -3938,7 +3938,7 @@ /area/syndicate_mothership/elite_squad) "cLC" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/burger/bigbite{ +/obj/item/food/snacks/burger/bigbite{ pixel_y = 4 }, /turf/simulated/floor/carpet/black, @@ -4617,11 +4617,11 @@ /area/centcom/ss220/admin3) "djm" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = 6; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = -6; pixel_y = 4 }, @@ -4764,7 +4764,7 @@ }, /area/syndicate_mothership/jail) "doZ" = ( -/obj/item/reagent_containers/food/drinks/bottle/goldschlager, +/obj/item/reagent_containers/drinks/bottle/goldschlager, /obj/structure/table/wood/fancy/black, /turf/simulated/floor/plating{ icon = 'icons/turf/floors.dmi'; @@ -4775,13 +4775,13 @@ /area/syndicate_mothership/elite_squad) "dpf" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/bottle/cream{ +/obj/item/reagent_containers/drinks/bottle/cream{ pixel_y = 8 }, -/obj/item/reagent_containers/food/condiment/soysauce{ +/obj/item/reagent_containers/condiment/soysauce{ pixel_x = 12 }, -/obj/item/reagent_containers/food/condiment/sugar{ +/obj/item/reagent_containers/condiment/sugar{ pixel_x = -9; pixel_y = -4 }, @@ -4889,7 +4889,7 @@ /area/ninja/holding) "dsw" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/mug/med, +/obj/item/reagent_containers/drinks/mug/med, /obj/machinery/light/directional/west, /turf/simulated/floor/plasteel{ icon_state = "cmo" @@ -5104,7 +5104,7 @@ /area/syndicate_mothership/cargo) "dzI" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/sliceable/chocolatecake, +/obj/item/food/snacks/sliceable/chocolatecake, /turf/simulated/floor/wood/oak, /area/syndicate_mothership/elite_squad) "dzJ" = ( @@ -5418,11 +5418,11 @@ /area/shuttle/syndicate) "dIR" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 4; pixel_y = 6 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -4; pixel_y = 6 }, @@ -5756,7 +5756,7 @@ "dSq" = ( /obj/structure/window/reinforced, /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -6; pixel_y = 4 }, @@ -6524,24 +6524,24 @@ /area/shuttle/syndicate_elite) "eyi" = ( /obj/structure/closet/secure_closet/freezer/meat/open, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/raw_bacon, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/rawcutlet, -/obj/item/reagent_containers/food/snacks/spaghetti, -/obj/item/reagent_containers/food/snacks/spaghetti, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/raw_bacon, +/obj/item/food/snacks/sausage, +/obj/item/food/snacks/sausage, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/rawcutlet, +/obj/item/food/snacks/spaghetti, +/obj/item/food/snacks/spaghetti, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -7141,11 +7141,11 @@ /obj/structure/table/reinforced{ color = "#996633" }, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = -8; pixel_y = 2 }, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = 4; pixel_y = 2 }, @@ -7510,7 +7510,7 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/sliceable/pizza/diablo, +/obj/item/food/snacks/sliceable/pizza/diablo, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin1) "fbl" = ( @@ -7628,19 +7628,19 @@ /area/syndicate_mothership/cargo) "fgh" = ( /obj/structure/table/wood/fancy/black, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 8; pixel_y = 10 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 8; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -2; pixel_y = 10 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -2; pixel_y = 4 }, @@ -7835,25 +7835,25 @@ /obj/structure/closet/secure_closet/freezer/kitchen{ req_access = null }, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/wheat, -/obj/item/reagent_containers/food/snacks/grown/vanillapod, -/obj/item/reagent_containers/food/snacks/grown/vanillapod, -/obj/item/reagent_containers/food/snacks/grown/sugarcane, -/obj/item/reagent_containers/food/snacks/grown/sugarcane, -/obj/item/reagent_containers/food/snacks/grown/oat, -/obj/item/reagent_containers/food/snacks/grown/oat, -/obj/item/reagent_containers/food/snacks/grown/grapes, -/obj/item/reagent_containers/food/snacks/grown/grapes, -/obj/item/reagent_containers/food/snacks/grown/corn, -/obj/item/reagent_containers/food/snacks/grown/corn, -/obj/item/reagent_containers/food/snacks/grown/chili, -/obj/item/reagent_containers/food/snacks/grown/chili, -/obj/item/reagent_containers/food/snacks/grown/carrot, -/obj/item/reagent_containers/food/snacks/grown/apple, -/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/wheat, +/obj/item/food/snacks/grown/vanillapod, +/obj/item/food/snacks/grown/vanillapod, +/obj/item/food/snacks/grown/sugarcane, +/obj/item/food/snacks/grown/sugarcane, +/obj/item/food/snacks/grown/oat, +/obj/item/food/snacks/grown/oat, +/obj/item/food/snacks/grown/grapes, +/obj/item/food/snacks/grown/grapes, +/obj/item/food/snacks/grown/corn, +/obj/item/food/snacks/grown/corn, +/obj/item/food/snacks/grown/chili, +/obj/item/food/snacks/grown/chili, +/obj/item/food/snacks/grown/carrot, +/obj/item/food/snacks/grown/apple, +/obj/item/food/snacks/grown/ambrosia/vulgaris, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -8295,7 +8295,7 @@ /area/syndicate_mothership) "fAT" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/birthdaycakeslice, +/obj/item/food/snacks/birthdaycakeslice, /obj/item/kitchen/utensil/fork{ pixel_x = 11; pixel_y = 8 @@ -8760,7 +8760,7 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/onionrings, +/obj/item/food/snacks/onionrings, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin1) "fTe" = ( @@ -9047,10 +9047,10 @@ /area/ghost_bar) "gff" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_y = 6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/bluespace{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/bluespace{ pixel_x = 16; pixel_y = 9 }, @@ -9379,27 +9379,27 @@ /area/syndicate_mothership) "gtk" = ( /obj/structure/table/wood/fancy/black, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -14; pixel_y = 10 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 6; pixel_y = 10 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 6; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -4; pixel_y = 10 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -4; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -14; pixel_y = 4 }, @@ -9526,7 +9526,7 @@ pixel_x = -18; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -6; pixel_y = 4 }, @@ -9576,9 +9576,9 @@ /turf/simulated/floor/carpet/black, /area/ghost_bar) "gyx" = ( -/obj/item/reagent_containers/food/snacks/grown/cannabis/rainbow, -/obj/item/reagent_containers/food/snacks/grown/cannabis/rainbow, -/obj/item/reagent_containers/food/snacks/grown/cannabis/rainbow, +/obj/item/food/snacks/grown/cannabis/rainbow, +/obj/item/food/snacks/grown/cannabis/rainbow, +/obj/item/food/snacks/grown/cannabis/rainbow, /turf/simulated/floor/wood/fancy/cherry, /area/trader_station/sol) "gzd" = ( @@ -9755,22 +9755,22 @@ /area/centcom/ss220/bar) "gDl" = ( /obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/potato, -/obj/item/reagent_containers/food/snacks/grown/whitebeet, -/obj/item/reagent_containers/food/snacks/grown/whitebeet, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/tomato, -/obj/item/reagent_containers/food/snacks/grown/rice, -/obj/item/reagent_containers/food/snacks/grown/rice, -/obj/item/reagent_containers/food/snacks/grown/icepepper, -/obj/item/reagent_containers/food/snacks/grown/icepepper, -/obj/item/reagent_containers/food/snacks/grown/citrus/lemon, -/obj/item/reagent_containers/food/snacks/grown/citrus/lime, -/obj/item/reagent_containers/food/snacks/grown/citrus/orange, -/obj/item/reagent_containers/food/snacks/grown/cherries, -/obj/item/reagent_containers/food/snacks/grown/apple, -/obj/item/reagent_containers/food/snacks/grown/ambrosia/deus, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/potato, +/obj/item/food/snacks/grown/whitebeet, +/obj/item/food/snacks/grown/whitebeet, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/tomato, +/obj/item/food/snacks/grown/rice, +/obj/item/food/snacks/grown/rice, +/obj/item/food/snacks/grown/icepepper, +/obj/item/food/snacks/grown/icepepper, +/obj/item/food/snacks/grown/citrus/lemon, +/obj/item/food/snacks/grown/citrus/lime, +/obj/item/food/snacks/grown/citrus/orange, +/obj/item/food/snacks/grown/cherries, +/obj/item/food/snacks/grown/apple, +/obj/item/food/snacks/grown/ambrosia/deus, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -10441,7 +10441,7 @@ /area/syndicate_mothership) "gXA" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/mug/novelty, +/obj/item/reagent_containers/drinks/mug/novelty, /obj/item/candle/eternal/wizard{ pixel_y = 11 }, @@ -10841,7 +10841,7 @@ /obj/item/ashtray/glass{ pixel_x = 16 }, -/obj/item/reagent_containers/food/snacks/sliceable/turkey{ +/obj/item/food/snacks/sliceable/turkey{ pixel_y = 6 }, /turf/simulated/floor/carpet/red, @@ -10914,7 +10914,7 @@ /area/centcom/ss220/admin3) "hqi" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/holywater/hell{ +/obj/item/reagent_containers/drinks/bottle/holywater/hell{ pixel_y = 2 }, /turf/simulated/floor/carpet, @@ -11940,7 +11940,7 @@ /area/syndicate_mothership) "hTA" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/benedict{ +/obj/item/food/snacks/benedict{ pixel_y = 6 }, /obj/item/kitchen/utensil/fork{ @@ -12002,7 +12002,7 @@ /area/space/centcomm) "hVt" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ layer = 5; pixel_x = 12; pixel_y = 8 @@ -12710,11 +12710,11 @@ /area/centcom/ss220/admin3) "iuR" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = 6; pixel_y = 4 }, -/obj/item/reagent_containers/food/drinks/cans/beer{ +/obj/item/reagent_containers/drinks/cans/beer{ pixel_x = -6; pixel_y = 4 }, @@ -12747,18 +12747,18 @@ /area/abductor_ship) "ivy" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -8; pixel_y = -6 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = 11; pixel_y = 13 }, -/obj/item/reagent_containers/food/drinks/bottle/vodka{ +/obj/item/reagent_containers/drinks/bottle/vodka{ pixel_x = 4; pixel_y = 7 }, @@ -12803,7 +12803,7 @@ /area/shuttle/syndicate) "iwf" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/chocolatecakeslice, +/obj/item/food/snacks/chocolatecakeslice, /turf/simulated/floor/wood/oak, /area/syndicate_mothership/elite_squad) "iwk" = ( @@ -13381,7 +13381,7 @@ dir = 1; name = "Стойка выдачи" }, -/obj/item/reagent_containers/food/snacks/sliceable/braincake{ +/obj/item/food/snacks/sliceable/braincake{ pixel_y = 4 }, /turf/simulated/floor/plasteel{ @@ -14226,7 +14226,7 @@ /area/centcom/ss220/supply) "jAn" = ( /obj/machinery/kitchen_machine/oven, -/obj/item/reagent_containers/food/snacks/rawcookies/chocochips{ +/obj/item/food/snacks/rawcookies/chocochips{ pixel_x = -1; pixel_y = 6 }, @@ -14573,11 +14573,11 @@ /obj/item/stack/spacecash/c10000, /obj/item/stack/spacecash/c10000, /obj/item/stack/spacecash/c10000, -/obj/item/reagent_containers/food/drinks/bottle/goldschlager, +/obj/item/reagent_containers/drinks/bottle/goldschlager, /obj/item/coin/gold, /obj/item/toy/plushie/corgi, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin2) "jNJ" = ( @@ -14792,10 +14792,10 @@ /area/centcom/ss220/admin1) "jZg" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/tofukabob, -/obj/item/reagent_containers/food/snacks/tofukabob, -/obj/item/reagent_containers/food/snacks/tofukabob, -/obj/item/reagent_containers/food/snacks/tofukabob, +/obj/item/food/snacks/tofukabob, +/obj/item/food/snacks/tofukabob, +/obj/item/food/snacks/tofukabob, +/obj/item/food/snacks/tofukabob, /turf/simulated/floor/plasteel{ icon_state = "darkyellowfull" }, @@ -16255,7 +16255,7 @@ /area/centcom/ss220/command) "liv" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/applepie, +/obj/item/food/snacks/applepie, /obj/item/kitchen/utensil/fork{ pixel_x = -12; pixel_y = 8 @@ -16270,7 +16270,7 @@ /area/syndicate_mothership/jail) "liW" = ( /obj/structure/table/wood/fancy/black, -/obj/item/reagent_containers/food/drinks/trophy/gold_cup, +/obj/item/reagent_containers/drinks/trophy/gold_cup, /obj/effect/turf_decal/siding/wood{ dir = 1 }, @@ -16739,7 +16739,7 @@ pixel_x = 18; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -6; pixel_y = 4 }, @@ -18610,7 +18610,7 @@ /area/syndicate_mothership/elite_squad) "mIR" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/bananacakeslice{ +/obj/item/food/snacks/bananacakeslice{ pixel_y = 4 }, /obj/item/kitchen/utensil/fork{ @@ -18958,7 +18958,7 @@ amount = 115; desc = null }, -/obj/item/reagent_containers/food/snacks/soup/beetsoup{ +/obj/item/food/snacks/soup/beetsoup{ desc = "Со вкусом политических убийств"; name = "Борщ"; pixel_y = 16 @@ -19280,11 +19280,11 @@ /area/shuttle/syndicate) "nkM" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/burger/superbite, -/obj/item/reagent_containers/food/snacks/burger/superbite, -/obj/item/reagent_containers/food/snacks/burger/superbite, -/obj/item/reagent_containers/food/snacks/burger/superbite, -/obj/item/reagent_containers/food/snacks/burger/superbite, +/obj/item/food/snacks/burger/superbite, +/obj/item/food/snacks/burger/superbite, +/obj/item/food/snacks/burger/superbite, +/obj/item/food/snacks/burger/superbite, +/obj/item/food/snacks/burger/superbite, /turf/simulated/floor/plasteel{ icon_state = "darkyellowfull" }, @@ -19610,7 +19610,7 @@ /area/centcom/ss220/command) "nvT" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /obj/structure/light_fake{ dir = 4 }, @@ -19874,7 +19874,7 @@ /area/centcom/ss220/jail) "nES" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_y = 6 }, /turf/simulated/floor/plasteel/dark, @@ -20447,7 +20447,7 @@ /obj/structure/light_fake/spot{ dir = 8 }, -/obj/item/reagent_containers/food/snacks/sliceable/limecake{ +/obj/item/food/snacks/sliceable/limecake{ pixel_y = 2 }, /turf/simulated/floor/plasteel{ @@ -20617,7 +20617,7 @@ /turf/simulated/floor/plating, /area/shuttle/administration) "oiT" = ( -/obj/item/reagent_containers/food/drinks/bottle/vodka{ +/obj/item/reagent_containers/drinks/bottle/vodka{ pixel_x = -8; pixel_y = 4 }, @@ -20664,7 +20664,7 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/sliceable/pizza/bacon, +/obj/item/food/snacks/sliceable/pizza/bacon, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin1) "olA" = ( @@ -21247,7 +21247,7 @@ /obj/structure/table/holotable/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/burger/cheese, +/obj/item/food/snacks/burger/cheese, /turf/simulated/floor/carpet/black, /area/trader_station/sol) "oGr" = ( @@ -21782,7 +21782,7 @@ /area/centcom/ss220/general) "oYY" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/burger/cheese{ +/obj/item/food/snacks/burger/cheese{ pixel_y = 3 }, /turf/simulated/floor/carpet/black, @@ -22164,11 +22164,11 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/drinks/bottle/wine, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/bottle/wine, +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = 8 }, -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ +/obj/item/reagent_containers/drinks/drinkingglass/shotglass{ pixel_x = -5 }, /turf/simulated/floor/plating{ @@ -23151,7 +23151,7 @@ /area/centcom/ss220/admin2) "qbf" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/cola, +/obj/item/reagent_containers/drinks/cans/cola, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -24779,7 +24779,7 @@ /area/ghost_bar) "rjq" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/watermelonslice, +/obj/item/food/snacks/watermelonslice, /obj/effect/decal/syndie_logo{ icon_state = "logo11" }, @@ -24945,7 +24945,7 @@ "rqA" = ( /obj/structure/table/wood/fancy, /obj/effect/spawner/lootdrop{ - loot = list(/obj/item/reagent_containers/food/snacks/baguette=10,/obj/item/reagent_containers/food/snacks/applepie=10,/obj/item/reagent_containers/food/snacks/applepie=10,/obj/item/reagent_containers/food/snacks/soup/bloodsoup=10,/obj/item/reagent_containers/food/snacks/boiledrice=10,/obj/item/reagent_containers/food/snacks/carrotfries=10,/obj/item/reagent_containers/food/drinks/cans/cola=10,""=70); + loot = list(/obj/item/food/snacks/baguette=10,/obj/item/food/snacks/applepie=10,/obj/item/food/snacks/applepie=10,/obj/item/food/snacks/soup/bloodsoup=10,/obj/item/food/snacks/boiledrice=10,/obj/item/food/snacks/carrotfries=10,/obj/item/reagent_containers/drinks/cans/cola=10,""=70); name = "Food CC Spawner #1" }, /turf/simulated/floor/wood, @@ -25228,7 +25228,7 @@ /area/centcom/ss220/supply) "rtF" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/drinks/shaker, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -25738,7 +25738,7 @@ /area/centcom/ss220/court) "rOo" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/boiledbuckwheat{ +/obj/item/food/snacks/boiledbuckwheat{ pixel_y = 2 }, /obj/item/kitchen/utensil/spoon{ @@ -25994,7 +25994,7 @@ /area/ghost_bar) "rVg" = ( /obj/structure/table/wood/fancy/black, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = -8; pixel_y = 4 }, @@ -26818,11 +26818,11 @@ /area/syndicate_mothership/infteam) "sDS" = ( /obj/structure/table/glass, -/obj/item/reagent_containers/food/snacks/appletart{ +/obj/item/food/snacks/appletart{ pixel_x = -16; pixel_y = -10 }, -/obj/item/reagent_containers/food/snacks/applecakeslice{ +/obj/item/food/snacks/applecakeslice{ pixel_y = 4 }, /obj/item/kitchen/utensil/fork{ @@ -26947,7 +26947,7 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/meatsteak, +/obj/item/food/snacks/meatsteak, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin1) "sIn" = ( @@ -27695,7 +27695,7 @@ /obj/structure/table/holotable/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/sliceable/turkey, +/obj/item/food/snacks/sliceable/turkey, /turf/simulated/floor/carpet/black, /area/trader_station/sol) "thG" = ( @@ -28041,7 +28041,7 @@ /turf/simulated/floor/mineral/plastitanium, /area/shuttle/syndicate) "tuO" = ( -/obj/item/reagent_containers/food/snacks/pie{ +/obj/item/food/snacks/pie{ pixel_x = -8; pixel_y = 13 }, @@ -28474,7 +28474,7 @@ pixel_x = 5; pixel_y = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -6; pixel_y = 4 }, @@ -28675,7 +28675,7 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/sliceable/pizza/macpizza, +/obj/item/food/snacks/sliceable/pizza/macpizza, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin1) "tQU" = ( @@ -28701,12 +28701,12 @@ }, /obj/item/stack/cable_coil/random, /obj/item/stack/cable_coil/random, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana, -/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, +/obj/item/food/snacks/grown/banana, /turf/simulated/floor/wood/oak, /area/syndicate_mothership/infteam) "tSu" = ( @@ -29063,7 +29063,7 @@ /area/shuttle/gamma/space) "ued" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/coffee{ +/obj/item/reagent_containers/drinks/coffee{ pixel_y = 8 }, /turf/simulated/floor/plasteel/dark, @@ -29421,7 +29421,7 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/salad/herb, +/obj/item/food/snacks/salad/herb, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin1) "utb" = ( @@ -29930,10 +29930,10 @@ /area/centcom/ss220/admin1) "uMM" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = 7 }, -/obj/item/reagent_containers/food/drinks/bottle/whiskey{ +/obj/item/reagent_containers/drinks/bottle/whiskey{ pixel_x = -7; pixel_y = 7 }, @@ -30776,7 +30776,7 @@ pixel_x = 5; pixel_y = 5 }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ +/obj/item/reagent_containers/drinks/drinkingglass{ pixel_x = -6; pixel_y = 4 }, @@ -30941,7 +30941,7 @@ /obj/structure/sign/poster/contraband/random{ pixel_x = 30 }, -/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/drinks/cans/beer, /turf/simulated/floor/wood/oak, /area/syndicate_mothership) "vwP" = ( @@ -32386,7 +32386,7 @@ /area/shuttle/syndicate) "wBj" = ( /obj/structure/table, -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka{ +/obj/item/reagent_containers/drinks/bottle/vodka/badminka{ pixel_x = 8; pixel_y = 7 }, @@ -32454,7 +32454,7 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/drinks/shaker{ +/obj/item/reagent_containers/drinks/shaker{ pixel_x = -7 }, /obj/structure/curtain/black{ @@ -32761,9 +32761,9 @@ /obj/structure/closet/secure_closet/freezer/kitchen{ req_access = null }, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, /obj/structure/curtain/black{ pixel_y = 32; anchored = 1 @@ -33035,7 +33035,7 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/hotdog, +/obj/item/food/snacks/hotdog, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin1) "wVB" = ( @@ -33778,7 +33778,7 @@ /obj/structure/table/wood{ color = "#996633" }, -/obj/item/reagent_containers/food/snacks/sliceable/birthdaycake, +/obj/item/food/snacks/sliceable/birthdaycake, /turf/simulated/floor/wood/parquet/tile, /area/centcom/ss220/admin1) "xpi" = ( @@ -33969,7 +33969,7 @@ /area/centcom/ss220/command) "xtE" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/wine{ +/obj/item/reagent_containers/drinks/bottle/wine{ pixel_x = -5; pixel_y = 6 }, diff --git a/code/__DEFINES/asset_defines.dm b/code/__DEFINES/asset_defines.dm new file mode 100644 index 000000000000..6ec6d6052691 --- /dev/null +++ b/code/__DEFINES/asset_defines.dm @@ -0,0 +1,8 @@ +/// Get html to load a url. +/// for use inside of browse() calls to html assets that might be loaded on a cdn. +#define URL2HTMLLOADER(url) {""} + +/// Generate a filename for this asset +/// The same asset will always lead to the same asset name +/// Generated names do not include file extension. +#define GENERATE_ASSET_NAME(file) "asset.[md5(fcopy_rsc(file))]" diff --git a/code/__DEFINES/chat.dm b/code/__DEFINES/chat.dm new file mode 100644 index 000000000000..149f5d856988 --- /dev/null +++ b/code/__DEFINES/chat.dm @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/// How many chat payloads to keep in history +#define CHAT_RELIABILITY_HISTORY_SIZE 5 +/// How many resends to allow before giving up +#define CHAT_RELIABILITY_MAX_RESENDS 3 + +#define MESSAGE_TYPE_SYSTEM "system" +#define MESSAGE_TYPE_LOCALCHAT "localchat" +#define MESSAGE_TYPE_RADIO "radio" +#define MESSAGE_TYPE_INFO "info" +#define MESSAGE_TYPE_WARNING "warning" +#define MESSAGE_TYPE_DEADCHAT "deadchat" +#define MESSAGE_TYPE_OOC "ooc" +#define MESSAGE_TYPE_ADMINPM "adminpm" +#define MESSAGE_TYPE_COMBAT "combat" +#define MESSAGE_TYPE_ADMINCHAT "adminchat" +#define MESSAGE_TYPE_MENTORCHAT "mentorchat" +#define MESSAGE_TYPE_EVENTCHAT "eventchat" +#define MESSAGE_TYPE_ADMINLOG "adminlog" +#define MESSAGE_TYPE_ATTACKLOG "attacklog" +#define MESSAGE_TYPE_DEBUG "debug" diff --git a/code/__DEFINES/chat_box_defines.dm b/code/__DEFINES/chat_box_defines.dm index f2ffff8aa07c..40a1c491cf37 100644 --- a/code/__DEFINES/chat_box_defines.dm +++ b/code/__DEFINES/chat_box_defines.dm @@ -2,6 +2,7 @@ #define chat_box_examine(str) ("
" + str + "
") #define chat_box_red(str) ("
" + str + "
") #define chat_box_green(str) ("
" + str + "
") +#define chat_box_purple(str) ("
" + str + "
") #define chat_box_notice(str) ("
" + str + "
") #define chat_box_healthscan(str) ("
" + str + "
") #define chat_box_notice_thick(str) ("
" + str + "
") diff --git a/code/__DEFINES/construction_defines.dm b/code/__DEFINES/construction_defines.dm index 9612ed7f2c1f..86be91003162 100644 --- a/code/__DEFINES/construction_defines.dm +++ b/code/__DEFINES/construction_defines.dm @@ -59,19 +59,19 @@ #define FULLTILE_WINDOW_DIR NORTHEAST //Material defines, for determining how much of a given material an item contains -#define MAT_METAL "$metal" -#define MAT_GLASS "$glass" -#define MAT_SILVER "$silver" -#define MAT_GOLD "$gold" -#define MAT_DIAMOND "$diamond" -#define MAT_URANIUM "$uranium" -#define MAT_PLASMA "$plasma" -#define MAT_BLUESPACE "$bluespace" -#define MAT_BANANIUM "$bananium" -#define MAT_TRANQUILLITE "$tranquillite" -#define MAT_TITANIUM "$titanium" -#define MAT_BIOMASS "$biomass" -#define MAT_PLASTIC "$plastic" +#define MAT_METAL "metal" +#define MAT_GLASS "glass" +#define MAT_SILVER "silver" +#define MAT_GOLD "gold" +#define MAT_DIAMOND "diamond" +#define MAT_URANIUM "uranium" +#define MAT_PLASMA "plasma" +#define MAT_BLUESPACE "bluespace" +#define MAT_BANANIUM "bananium" +#define MAT_TRANQUILLITE "tranquillite" +#define MAT_TITANIUM "titanium" +#define MAT_BIOMASS "biomass" +#define MAT_PLASTIC "plastic" //The amount of materials you get from a sheet of mineral like iron/diamond/glass etc #define MINERAL_MATERIAL_AMOUNT 2000 //The maximum size of a stack object. diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index a64306a38d1d..81b33c55517b 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -796,7 +796,7 @@ //Food -///from base of obj/item/reagent_containers/food/snacks/attack(): (mob/living/eater, mob/feeder) +///from base of obj/item/food/snacks/attack(): (mob/living/eater, mob/feeder) #define COMSIG_FOOD_EATEN "food_eaten" //Reagent diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 3242f672b982..e73af05c7d61 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -119,7 +119,7 @@ GLOBAL_LIST_INIT(glass_sheet_types, typecacheof(list( #define isradio(A) istype(A, /obj/item/radio) #define ispill(A) istype(A, /obj/item/reagent_containers/pill) #define ispatch(A) istype(A, /obj/item/reagent_containers/patch) -#define isfood(A) istype(A, /obj/item/reagent_containers/food) +#define isfood(A) istype(A, /obj/item/food) // Modsuits #define ismodcontrol(A) istype(A, /obj/item/mod/control) diff --git a/code/__DEFINES/misc_defines.dm b/code/__DEFINES/misc_defines.dm index 482bc95f622c..712284f69e82 100644 --- a/code/__DEFINES/misc_defines.dm +++ b/code/__DEFINES/misc_defines.dm @@ -313,6 +313,23 @@ #define TRIGGER_GUARD_NONE 0 #define TRIGGER_GUARD_NORMAL 1 +// These comments mirror the below define in the order of operations to help you understand what it is doing + // Check if datum I is a mob + // If I is a mob, return the client of mob I + // Else, check to see if I is a client + // If I is a client, return I + // Else, check to see if I is a mind + // If I is a mind, try and return the mind's current mob's client + +/// Return a Client +#define CLIENT_FROM_VAR(I) (ismob(I) \ + ? I:client \ + : istype(I, /client) \ + ? I \ + : istype(I, /datum/mind \ + ? I:current?:client \ + : null)) + // Macro to get the current elapsed round time, rather than total world runtime #define ROUND_TIME (SSticker.time_game_started ? (world.time - SSticker.time_game_started) : 0) diff --git a/code/__DEFINES/stat.dm b/code/__DEFINES/stat.dm index addf59e2f02e..ac824022f6cf 100644 --- a/code/__DEFINES/stat.dm +++ b/code/__DEFINES/stat.dm @@ -3,12 +3,6 @@ #define UNCONSCIOUS 1 #define DEAD 2 -// TGUI flags -#define STATUS_INTERACTIVE 2 // GREEN Visability -#define STATUS_UPDATE 1 // ORANGE Visability -#define STATUS_DISABLED 0 // RED Visability -#define STATUS_CLOSE -1 // Close the interface - /* Shuttles */ diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 19a59ed2faf6..53962a8ee9a1 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -84,10 +84,12 @@ #define INIT_ORDER_LATE_MAPPING -40 #define INIT_ORDER_PATH -50 #define INIT_ORDER_PERSISTENCE -95 +#define INIT_ORDER_CHAT -100 // Should be last to ensure chat remains smooth during init. // Subsystem fire priority, from lowest to highest priority // If the subsystem isn't listed here it's either DEFAULT or PROCESS (if it's a processing subsystem child) +#define FIRE_PRIORITY_PING 10 #define FIRE_PRIORITY_NANOMOB 10 #define FIRE_PRIORITY_NIGHTSHIFT 10 #define FIRE_PRIORITY_IDLE_NPC 10 @@ -112,6 +114,7 @@ #define FIRE_PRIORITY_MOBS 100 #define FIRE_PRIORITY_TGUI 110 #define FIRE_PRIORITY_TICKER 200 +#define FIRE_PRIORITY_CHAT 400 #define FIRE_PRIORITY_RUNECHAT 410 // I hate how high the fire priority on this is -aa #define FIRE_PRIORITY_OVERLAYS 500 #define FIRE_PRIORITY_DELAYED_VERBS 950 diff --git a/code/__DEFINES/tgui_defines.dm b/code/__DEFINES/tgui_defines.dm index 6257e24d9f8c..ccd8d25f6f70 100644 --- a/code/__DEFINES/tgui_defines.dm +++ b/code/__DEFINES/tgui_defines.dm @@ -1,4 +1,4 @@ -// TGUI defines +// TGUI Modal defines #define UI_MODAL_INPUT_MAX_LENGTH 1024 #define UI_MODAL_INPUT_MAX_LENGTH_NAME 64 // Names for generally anything don't go past 32, let alone 64. @@ -6,3 +6,41 @@ #define UI_MODAL_DELEGATE 2 #define UI_MODAL_ANSWER 3 #define UI_MODAL_CLOSE 4 + +/// Green eye; fully interactive +#define UI_INTERACTIVE 2 +/// Orange eye; updates but is not interactive +#define UI_UPDATE 1 +/// Red eye; disabled, does not update +#define UI_DISABLED 0 +/// UI Should close +#define UI_CLOSE -1 + +/// Maximum number of windows that can be suspended/reused +#define TGUI_WINDOW_SOFT_LIMIT 5 +/// Maximum number of open windows +#define TGUI_WINDOW_HARD_LIMIT 9 + +/// Maximum ping timeout allowed to detect zombie windows +#define TGUI_PING_TIMEOUT (4 SECONDS) +/// Used for rate-limiting to prevent DoS by excessively refreshing a TGUI window +#define TGUI_REFRESH_FULL_UPDATE_COOLDOWN (1 SECONDS) + +/// Window does not exist +#define TGUI_WINDOW_CLOSED 0 +/// Window was just opened, but is still not ready to be sent data +#define TGUI_WINDOW_LOADING 1 +/// Window is free and ready to receive data +#define TGUI_WINDOW_READY 2 + +/// Get a window id based on the provided pool index +#define TGUI_WINDOW_ID(index) "tgui-window-[index]" +/// Get a pool index of the provided window id +#define TGUI_WINDOW_INDEX(window_id) text2num(copytext(window_id, 13)) + +/// Creates a message packet for sending via output() +#define TGUI_CREATE_MESSAGE(type, payload) ( \ + url_encode(json_encode(list( \ + "type" = type, \ + "payload" = payload, \ + )))) diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index de2800a7ccc8..c1d4dde450ca 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -40,7 +40,10 @@ GLOBAL_PROTECT(log_end) for(var/client/C in GLOB.admins) if(check_rights(R_DEBUG | R_VIEWRUNTIMES, FALSE, C.mob) && (C.prefs.toggles & PREFTOGGLE_CHAT_DEBUGLOGS)) - to_chat(C, "DEBUG: [text]") + to_chat(C, + type = MESSAGE_TYPE_DEBUG, + html = "DEBUG: [text]", + confidential = TRUE) /proc/log_game(text) if(GLOB.configuration.logging.game_logging) @@ -149,8 +152,19 @@ GLOBAL_PROTECT(log_end) /proc/log_runtime_summary(text) rustg_log_write(GLOB.runtime_summary_log, "[text][GLOB.log_end]") -/proc/log_tgui(text) - rustg_log_write(GLOB.tgui_log, "[text][GLOB.log_end]") +/proc/log_tgui(user_or_client, text) + var/list/messages = list() + if(!user_or_client) + messages.Add("no user") + else if(ismob(user_or_client)) + var/mob/user = user_or_client + messages.Add("[user.ckey] (as [user])") + else if(isclient(user_or_client)) + var/client/client = user_or_client + messages.Add("[client.ckey]") + messages.Add(": [text]") + messages.Add("[GLOB.log_end]") + rustg_log_write(GLOB.tgui_log, messages.Join()) #ifdef REFERENCE_TRACKING /proc/log_gc(text) diff --git a/code/__HELPERS/files.dm b/code/__HELPERS/files.dm index 397c05c466c8..114bd52c7b4a 100644 --- a/code/__HELPERS/files.dm +++ b/code/__HELPERS/files.dm @@ -33,11 +33,6 @@ return text -//Sends resource files to client cache -/client/proc/getFiles() - for(var/file in args) - src << browse_rsc(file) - /client/proc/browse_files(root="data/logs/", max_iterations=10, list/valid_extensions=list("txt", "log", "htm", "json")) // wow why was this ever a parameter root = "data/logs/" diff --git a/code/__HELPERS/iconprocs.dm b/code/__HELPERS/iconprocs.dm index eb86df49e86d..067aabb188d3 100644 --- a/code/__HELPERS/iconprocs.dm +++ b/code/__HELPERS/iconprocs.dm @@ -299,3 +299,44 @@ world M.Blend("#ffffff", ICON_SUBTRACT) // apply mask Blend(M, ICON_ADD) + +// Converts an icon to base64. Operates by putting the icon in the iconCache savefile, +// exporting it as text, and then parsing the base64 from that. +// (This relies on byond automatically storing icons in savefiles as base64) +GLOBAL_DATUM_INIT(iconCache, /savefile, new /savefile("data/iconCache.sav")) + +GLOBAL_LIST_EMPTY(bicon_cache) + +/proc/icon2base64(icon/icon, iconKey = "misc") + if(!isicon(icon)) return 0 + + GLOB.iconCache[iconKey] << icon + var/iconData = GLOB.iconCache.ExportText(iconKey) + var/list/partial = splittext(iconData, "{") + return replacetext(copytext(partial[2], 3, -5), "\n", "") + +/proc/bicon(obj, use_class = 1) + var/class = use_class ? "class='icon misc'" : null + if(!obj) + return + + if(isicon(obj)) + if(!GLOB.bicon_cache["\ref[obj]"]) // Doesn't exist yet, make it. + GLOB.bicon_cache["\ref[obj]"] = icon2base64(obj) + + return "" + + // Either an atom or somebody fucked up and is gonna get a runtime, which I'm fine with. + var/atom/A = obj + var/key = "[istype(A.icon, /icon) ? "\ref[A.icon]" : A.icon]:[A.icon_state]" + if(!GLOB.bicon_cache[key]) // Doesn't exist, make it. + var/icon/I = icon(A.icon, A.icon_state, SOUTH, 1) + if(ishuman(obj)) // Shitty workaround for a BYOND issue. + var/icon/temp = I + I = icon() + I.Insert(temp, dir = SOUTH) + GLOB.bicon_cache[key] = icon2base64(I, key) + if(use_class) + class = "class='icon [A.icon_state]'" + + return "" diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index c4f932574a6e..cf6642875ffa 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -410,13 +410,6 @@ var/middle = L.len / 2 + 1 // Copy is first,second-1 return mergeLists(sortList(L.Copy(0,middle)), sortList(L.Copy(middle))) //second parameter null = to end of list -//Mergsorge: uses sortAssoc() but uses the var's name specifically. This should probably be using mergeAtom() instead -/proc/sortNames(list/L) - var/list/Q = new() - for(var/atom/x in L) - Q[x.name] = x - return sortAssoc(Q) - /proc/mergeLists(list/L, list/R) var/Li=1 var/Ri=1 diff --git a/code/__HELPERS/name_helpers.dm b/code/__HELPERS/name_helpers.dm index 5f97da0fd55a..389d8a9759db 100644 --- a/code/__HELPERS/name_helpers.dm +++ b/code/__HELPERS/name_helpers.dm @@ -108,6 +108,10 @@ GLOBAL_VAR(syndicate_name) GLOBAL_VAR(syndicate_code_phrase) //Code phrase for traitors. GLOBAL_VAR(syndicate_code_response) //Code response for traitors. +//Cached regex search - for checking if codewords are used. +GLOBAL_DATUM(syndicate_code_phrase_regex, /regex) +GLOBAL_DATUM(syndicate_code_response_regex, /regex) + /* Should be expanded. How this works: @@ -122,9 +126,12 @@ GLOBAL_VAR(syndicate_code_response) //Code response for traitors. /N */ -/proc/generate_code_phrase()//Proc is used for phrase and response in master_controller.dm +/proc/generate_code_phrase(return_list = FALSE) // Proc is used for phrase and response in master_controller.dm - var/code_phrase = ""//What is returned when the proc finishes. + if(!return_list) + . = "" + else + . = list() var/words = pick(//How many words there will be. Minimum of two. 2, 4 and 5 have a lesser chance of being selected. 3 is the most likely. 50; 2, 200; 3, @@ -152,34 +159,34 @@ GLOBAL_VAR(syndicate_code_response) //Code response for traitors. switch(pick(safety))//Chance based on the safety list. if(1)//1 and 2 can only be selected once each to prevent more than two specific names/places/etc. - switch(rand(1,2))//Mainly to add more options later. + switch(rand(1, 2)) // Mainly to add more options later. if(1) - if(names.len) - code_phrase += pick(names) + if(length(names)) + . += pick(names) if(2) - code_phrase += pick(GLOB.jobs)//Returns a job. // SS220 EDIT - ORIGINAL: (GLOB.joblist) + . += pick(GLOB.jobs)//Returns a job. // SS220 EDIT - ORIGINAL: (GLOB.joblist) safety -= 1 if(2) switch(rand(1,2))//Places or things. if(1) - code_phrase += pick(GLOB.cocktails) // SS220 EDIT - ORIGINAL: (drinks) + . += pick(GLOB.cocktails) // SS220 EDIT - ORIGINAL: (drinks) if(2) - code_phrase += pick(GLOB.locations) // SS220 EDIT - ORIGINAL: (locations) + . += pick(GLOB.locations) // SS220 EDIT - ORIGINAL: (locations) safety -= 2 if(3) - switch(rand(1,3))//Nouns, adjectives, verbs. Can be selected more than once. + switch(rand(1, 3)) // Nouns, adjectives, verbs. Can be selected more than once. if(1) - code_phrase += pick(GLOB.nouns) // SS220 EDIT - ORIGINAL: (nouns) + . += pick(GLOB.nouns) // SS220 EDIT - ORIGINAL: (nouns) if(2) - code_phrase += pick(GLOB.adjectives) + . += pick(GLOB.adjectives) if(3) - code_phrase += pick(GLOB.verbs) - if(words==1) - code_phrase += "." - else - code_phrase += ", " + . += pick(GLOB.verbs) - return code_phrase + if(!return_list) + if(words == 1) + . += "." + else + . += ", " /proc/GenerateKey() var/newKey @@ -187,89 +194,3 @@ GLOBAL_VAR(syndicate_code_response) //Code response for traitors. newKey += pick("diamond", "beer", "mushroom", "assistant", "clown", "captain", "twinkie", "security", "nuke", "small", "big", "escape", "yellow", "gloves", "monkey", "engine", "nuclear", "ai") newKey += pick("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") return newKey - -/* -//This proc tests the gen above. -/client/verb/test_code_phrase() - set name = "Generate Code Phrase" - set category = "Debug" - - to_chat(world, "Code Phrase is: [generate_code_phrase()]") - return - - - This was an earlier attempt at code phrase system, aside from an even earlier attempt (and failure). - This system more or less works as intended--aside from being unfinished--but it's still very predictable. - Particularly, the phrase opening statements are pretty easy to recognize and identify when metagaming. - I think the above-used method solves this issue by using words in a sequence, providing for much greater flexibility. - /N - - switch(choice) - if(1) - syndicate_code_phrase += pick("I'm looking for","Have you seen","Maybe you've seen","I'm trying to find","I'm tracking") - syndicate_code_phrase += " " - syndicate_code_phrase += pick(pick(GLOB.first_names_male,GLOB.first_names_female)) - syndicate_code_phrase += " " - syndicate_code_phrase += pick(GLOB.last_names) - syndicate_code_phrase += "." - if(2) - syndicate_code_phrase += pick("How do I get to","How do I find","Where is","Where do I find") - syndicate_code_phrase += " " - syndicate_code_phrase += pick("Escape","Engineering","Atmos","the bridge","the brig","CentComm","the library","the chapel","a bathroom","Med Bay","Tool Storage","the escape shuttle","Robotics","a locker room","the living quarters","the gym","the autolathe","QM","the bar","the theater","the derelict") - syndicate_code_phrase += "?" - if(3) - if(prob(70)) - syndicate_code_phrase += pick("Get me","I want","I'd like","Make me") - syndicate_code_phrase += " a " - else - syndicate_code_phrase += pick("One") - syndicate_code_phrase += " " - syndicate_code_phrase += pick("vodka and tonic","gin fizz","bahama mama","manhattan","black Russian","whiskey soda","long island tea","margarita","Irish coffee"," manly dwarf","Irish cream","doctor's delight","Beepksy Smash","tequila sunrise","brave bull","gargle blaster","bloody mary","whiskey cola","white Russian","vodka martini","martini","Cuba libre","kahlua","vodka","wine","moonshine") - syndicate_code_phrase += "." - if(4) - syndicate_code_phrase += pick("I wish I was","My dad was","His mom was","Where do I find","The hero this station needs is","I'd fuck","I wouldn't trust","Someone caught","HoS caught","Someone found","I'd wrestle","I wanna kill") - syndicate_code_phrase += " [pick("a","the")] " - syndicate_code_phrase += pick("wizard","ninja","xeno","lizard","slime","monkey","syndicate","cyborg","clown","space carp","singularity","singulo","mime") - syndicate_code_phrase += "." - if(5) - syndicate_code_phrase += pick("Do we have","Is there","Where is","Where's","Who's") - syndicate_code_phrase += " " - syndicate_code_phrase += "[pick(GLOB.joblist)]" - syndicate_code_phrase += "?" - - switch(choice) - if(1) - if(prob(80)) - syndicate_code_response += pick("Try looking for them near","I they ran off to","Yes. I saw them near","Nope. I'm heading to","Try searching") - syndicate_code_response += " " - syndicate_code_response += pick("Escape","Engineering","Atmos","the bridge","the brig","CentComm","the library","the chapel","a bathroom","Med Bay","Tool Storage","the escape shuttle","Robotics","a locker room","the living quarters","the gym","the autolathe","QM","the bar","the theater","the derelict") - syndicate_code_response += "." - else if(prob(60)) - syndicate_code_response += pick("No. I'm busy, sorry.","I don't have the time.","Not sure, maybe?","There is no time.") - else - syndicate_code_response += pick("*shrug*","*smile*","*blink*","*sigh*","*laugh*","*nod*","*giggle*") - if(2) - if(prob(80)) - syndicate_code_response += pick("Go to","Navigate to","Try","Sure, run to","Try searching","It's near","It's around") - syndicate_code_response += " the " - syndicate_code_response += pick("[pick("south","north","east","west")] maitenance door","nearby maitenance","teleporter","[pick("cold","dead")] space","morgue","vacuum","[pick("south","north","east","west")] hall ","[pick("south","north","east","west")] hallway","[pick("white","black","red","green","blue","pink","purple")] [pick("rabbit","frog","lion","tiger","panther","snake","facehugger")]") - syndicate_code_response += "." - else if(prob(60)) - syndicate_code_response += pick("Try asking","Ask","Talk to","Go see","Follow","Hunt down") - syndicate_code_response += " " - if(prob(50)) - syndicate_code_response += pick(pick(GLOB.first_names_male,GLOB.first_names_female)) - syndicate_code_response += " " - syndicate_code_response += pick(GLOB.last_names) - else - syndicate_code_response += " the " - syndicate_code_response += "[pic(GLOB.joblist)]" - syndicate_code_response += "." - else - syndicate_code_response += pick("*shrug*","*smile*","*blink*","*sigh*","*laugh*","*nod*","*giggle*") - if(3) - if(4) - if(5) - - return -*/ diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 751daeca3ac8..0fa6df637dae 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1667,8 +1667,8 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) /obj/item/reagent_containers/glass/bottle = "BOTTLE", /obj/item/reagent_containers/patch = "PATCH", /obj/item/reagent_containers/pill = "PILL", - /obj/item/reagent_containers/food/drinks = "DRINK", - /obj/item/reagent_containers/food = "FOOD", + /obj/item/reagent_containers/drinks = "DRINK", + /obj/item/food = "FOOD", /obj/item/reagent_containers/syringe = "SYRINGE", /obj/item/reagent_containers = "REAGENT_CONTAINERS", /obj/item/robot_parts = "ROBOT_PARTS", diff --git a/code/_onclick/click_override.dm b/code/_onclick/click_override.dm index c3044a480b40..c53bbb3d2f8e 100644 --- a/code/_onclick/click_override.dm +++ b/code/_onclick/click_override.dm @@ -33,7 +33,7 @@ to_chat(user, "You draw a bit of power from [src], you can use middle click or alt click to release the power!") /datum/middleClickOverride/badminClicker - var/summon_path = /obj/item/reagent_containers/food/snacks/cookie + var/summon_path = /obj/item/food/snacks/cookie /datum/middleClickOverride/badminClicker/onClick(atom/A, mob/living/user) var/atom/movable/newObject = new summon_path diff --git a/code/controllers/configuration/configuration_core.dm b/code/controllers/configuration/configuration_core.dm index 26d3647ae7ee..0ace31c5bd89 100644 --- a/code/controllers/configuration/configuration_core.dm +++ b/code/controllers/configuration/configuration_core.dm @@ -46,6 +46,8 @@ GLOBAL_DATUM_INIT(configuration, /datum/server_configuration, new()) var/datum/configuration_section/url_configuration/url /// Holder for the voting configuration datum var/datum/configuration_section/vote_configuration/vote + /// Holder for the asset cache configuration datum + var/datum/configuration_section/asset_cache_configuration/asset_cache /// Raw data. Stored here to avoid passing data between procs constantly var/list/raw_data = list() @@ -92,6 +94,7 @@ GLOBAL_DATUM_INIT(configuration, /datum/server_configuration, new()) system = new() url = new() vote = new() + asset_cache = new() // Load our stuff up var/config_file = "config/config.toml" @@ -129,6 +132,7 @@ GLOBAL_DATUM_INIT(configuration, /datum/server_configuration, new()) safe_load(system, "system_configuration") safe_load(url, "url_configuration") safe_load(vote, "voting_configuration") + safe_load(asset_cache, "asset_cache_configuration") // Proc to load up instance-specific overrides /datum/server_configuration/proc/load_overrides() diff --git a/code/controllers/configuration/sections/asset_cache_configuration.dm b/code/controllers/configuration/sections/asset_cache_configuration.dm new file mode 100644 index 000000000000..35fa4fef85d5 --- /dev/null +++ b/code/controllers/configuration/sections/asset_cache_configuration.dm @@ -0,0 +1,23 @@ +/datum/configuration_section/asset_cache_configuration + /// Type of asset transport that will be used for asset delivery. + /// Available options are "simple" or "webroot". + var/asset_transport = "simple" + /// Whether to make server passively send all browser assets to each client in the background + /// (instead of waiting for them to be needed) + var/asset_simple_preload = TRUE + /// Local folder to save assets to. + /// Assets will be saved in the format of asset.MD5HASH.EXT or in namespaces/hash/ + /// as ASSET_FILE_NAME or asset.MD5HASH.EXT + var/asset_cdn_webroot = "data/asset-store/" + /// URL the `asset_cdn_webroot` can be accessed from. + /// For best results the webserver powering this should return a long cache validity time, + /// as all assets sent via this transport use hash based urls + /// if you want to test this locally, you simpily run the `localhost-asset-webroot-server.py` python3 script + /// to host assets stored in `data/asset-store/` via http://localhost:58715/ + var/asset_cdn_url = "http://localhost:58715/" + +/datum/configuration_section/asset_cache_configuration/load_data(list/data) + CONFIG_LOAD_STR(asset_transport, data["asset_transport"]) + CONFIG_LOAD_BOOL(asset_simple_preload, data["asset_simple_preload"]) + CONFIG_LOAD_STR(asset_cdn_webroot, data["asset_cdn_webroot"]) + CONFIG_LOAD_STR(asset_cdn_url, data["asset_cdn_url"]) diff --git a/code/controllers/controller.dm b/code/controllers/controller.dm index 3645cea82e83..93c78e915bf9 100644 --- a/code/controllers/controller.dm +++ b/code/controllers/controller.dm @@ -23,5 +23,8 @@ */ /datum/controller/proc/log_startup_progress(message) Master.last_init_info = "([name]): [message]" - to_chat(world, "\[[name]] [message]") + to_chat(world, + type = MESSAGE_TYPE_DEBUG, + html = "\[[name]] [message]", + confidential = TRUE) log_world("\[[name]] [message]") diff --git a/code/controllers/subsystem/SSchat.dm b/code/controllers/subsystem/SSchat.dm new file mode 100644 index 000000000000..604f18c2d7c4 --- /dev/null +++ b/code/controllers/subsystem/SSchat.dm @@ -0,0 +1,99 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +SUBSYSTEM_DEF(chat) + name = "Chat" + flags = SS_TICKER|SS_NO_INIT + wait = 1 + priority = FIRE_PRIORITY_CHAT + init_order = INIT_ORDER_CHAT + offline_implications = "Chat will no longer function correctly. Immediate server restart recommended." + + /// Associates a ckey with a list of messages to send to them. + var/list/list/datum/chat_payload/client_to_payloads = list() + + /// Associates a ckey with an associative list of their last CHAT_RELIABILITY_HISTORY_SIZE messages. + var/list/list/datum/chat_payload/client_to_reliability_history = list() + + /// Associates a ckey with their next sequence number. + var/list/client_to_sequence_number = list() + +/datum/controller/subsystem/chat/proc/generate_payload(client/target, message_data) + var/sequence = client_to_sequence_number[target.ckey] + client_to_sequence_number[target.ckey] += 1 + + var/datum/chat_payload/payload = new + payload.sequence = sequence + payload.content = message_data + + if(!(target.ckey in client_to_reliability_history)) + client_to_reliability_history[target.ckey] = list() + var/list/client_history = client_to_reliability_history[target.ckey] + client_history["[sequence]"] = payload + + if(length(client_history) > CHAT_RELIABILITY_HISTORY_SIZE) + var/oldest = text2num(client_history[1]) + for(var/index in 2 to length(client_history)) + var/test = text2num(client_history[index]) + if(test < oldest) + oldest = test + client_history -= "[oldest]" + return payload + +/datum/controller/subsystem/chat/proc/send_payload_to_client(client/target, datum/chat_payload/payload) + target.tgui_panel.window.send_message("chat/message", payload.into_message()) + SEND_TEXT(target, payload.get_content_as_html()) + +/datum/controller/subsystem/chat/fire() + for(var/ckey in client_to_payloads) + var/client/target = GLOB.directory[ckey] + if(isnull(target)) // verify client still exists + LAZYREMOVE(client_to_payloads, ckey) + continue + + for(var/datum/chat_payload/payload as anything in client_to_payloads[ckey]) + send_payload_to_client(target, payload) + LAZYREMOVE(client_to_payloads, ckey) + + if(MC_TICK_CHECK) + return + +/datum/controller/subsystem/chat/proc/queue(queue_target, list/message_data) + var/list/targets = islist(queue_target) ? queue_target : list(queue_target) + for(var/target in targets) + var/client/client = CLIENT_FROM_VAR(target) + if(isnull(client)) + continue + LAZYADDASSOC(client_to_payloads, client.ckey, generate_payload(client, message_data)) + +/datum/controller/subsystem/chat/proc/send_immediate(send_target, list/message_data) + var/list/targets = islist(send_target) ? send_target : list(send_target) + for(var/target in targets) + var/client/client = CLIENT_FROM_VAR(target) + if(isnull(client)) + continue + send_payload_to_client(client, generate_payload(client, message_data)) + +/datum/controller/subsystem/chat/proc/handle_resend(client/client, sequence) + var/list/client_history = client_to_reliability_history[client.ckey] + sequence = "[sequence]" + if(isnull(client_history) || !(sequence in client_history)) + return + + var/datum/chat_payload/payload = client_history[sequence] + if(payload.resends > CHAT_RELIABILITY_MAX_RESENDS) + return // we tried but byond said no + + payload.resends += 1 + send_payload_to_client(client, client_history[sequence]) + SSblackbox.record_feedback( + "nested tally", + "chat_resend_byond_version", + 1, + list( + "[client.byond_version]", + "[client.byond_build]", + ), + ) diff --git a/code/controllers/subsystem/SSchat_pings.dm b/code/controllers/subsystem/SSchat_pings.dm deleted file mode 100644 index 24fb85d0bd87..000000000000 --- a/code/controllers/subsystem/SSchat_pings.dm +++ /dev/null @@ -1,17 +0,0 @@ -SUBSYSTEM_DEF(chat_pings) - name = "Chat Pings" - flags = SS_NO_INIT - runlevels = RUNLEVEL_INIT | RUNLEVEL_LOBBY | RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME // ALL OF THEM - wait = 30 SECONDS // Chat pings every 30 seconds - cpu_display = SS_CPUDISPLAY_LOW - /// List of all held chat datums - var/list/datum/chatOutput/chat_datums = list() // Do NOT put this in Initialize(). You will cause issues. - -/datum/controller/subsystem/chat_pings/fire(resumed) - for(var/datum/chatOutput/CO as anything in chat_datums) - CO.updatePing() - if(MC_TICK_CHECK) - return - -/datum/controller/subsystem/chat_pings/get_stat_details() - return "P: [length(chat_datums)]" diff --git a/code/controllers/subsystem/SSdbcore.dm b/code/controllers/subsystem/SSdbcore.dm index e0dfe5c1067a..de652c3faf4d 100644 --- a/code/controllers/subsystem/SSdbcore.dm +++ b/code/controllers/subsystem/SSdbcore.dm @@ -386,7 +386,10 @@ SUBSYSTEM_DEF(dbcore) if(!.) SSdbcore.total_errors++ if(usr) - to_chat(usr, "A SQL error occurred during this operation, please inform an admin or a coder.") + to_chat(usr, + type = MESSAGE_TYPE_ADMINLOG, + html = "A SQL error occurred during this operation, please inform an admin or a coder.", + confidential = TRUE) message_admins("An SQL error has occurred. Please check the server logs, with the following timestamp ID: \[[time_stamp()]]") /** diff --git a/code/controllers/subsystem/SSdebugview.dm b/code/controllers/subsystem/SSdebugview.dm index 6b145b416be3..0f973a5deb21 100644 --- a/code/controllers/subsystem/SSdebugview.dm +++ b/code/controllers/subsystem/SSdebugview.dm @@ -31,7 +31,7 @@ SUBSYSTEM_DEF(debugview) entries += "\[Processing] Cost: [round(SSprocessing.cost, 1)]ms | P: [length(SSprocessing.processing)]" entries += "\[Projectiles] Cost: [round(SSprojectiles.cost, 1)]ms | P: [length(SSprojectiles.processing)]" entries += "\[Runechat] Cost: [round(SSrunechat.cost, 1)]ms | AM: [SSrunechat.bucket_count] | SQ: [length(SSrunechat.second_queue)]" - entries += "\[TGUI] Cost: [round(SStgui.cost, 1)]ms | P: [length(SStgui.processing_uis)]" + entries += "\[TGUI] Cost: [round(SStgui.cost, 1)]ms | P: [length(SStgui.open_uis)]]" entries += "\[Timer] Cost: [round(SStimer.cost, 1)]ms | B: [SStimer.bucket_count] | P: [length(SStimer.second_queue)] | RST: [SStimer.bucket_reset_count]" // Do some parsing to format it properly diff --git a/code/controllers/subsystem/SSping.dm b/code/controllers/subsystem/SSping.dm new file mode 100644 index 000000000000..d8fda04bddd6 --- /dev/null +++ b/code/controllers/subsystem/SSping.dm @@ -0,0 +1,41 @@ +/*! + * Copyright (c) 2022 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +SUBSYSTEM_DEF(ping) + name = "Ping" + priority = FIRE_PRIORITY_PING + wait = 4 SECONDS + flags = SS_NO_INIT + runlevels = RUNLEVEL_LOBBY | RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME + offline_implications = "Chat ping system will no longer function correctly. No immediate action is needed." + + /// List used each time SS fires to track which clients have been processed so far + var/list/current_run = list() + +/datum/controller/subsystem/ping/stat_entry() + ..("P:[length(GLOB.clients)]") + +/datum/controller/subsystem/ping/fire(resumed = FALSE) + // Prepare the new batch of clients + if(!resumed) + src.current_run = GLOB.clients.Copy() + + // De-reference the list for sanic speeds + var/list/current_run = src.current_run + + while(length(current_run)) + var/client/client = current_run[current_run.len] + current_run.len-- + + if(client?.tgui_panel?.is_ready()) + // Send a soft ping + client.tgui_panel.window.send_message("ping/soft", list( + // Slightly less than the subsystem timer (somewhat arbitrary) + // to prevent incoming pings from resetting the afk state + "afk" = client.is_afk(3.5 SECONDS), + )) + + if(MC_TICK_CHECK) + return diff --git a/code/controllers/subsystem/SStgui.dm b/code/controllers/subsystem/SStgui.dm index 8ef9384f09c3..924a5f02919b 100644 --- a/code/controllers/subsystem/SStgui.dm +++ b/code/controllers/subsystem/SStgui.dm @@ -1,311 +1,357 @@ - /** - * tgui subsystem - * - * Contains all tgui state and subsystem code. - **/ - +/** + * tgui subsystem + * + * Contains all tgui state and subsystem code. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ SUBSYSTEM_DEF(tgui) - name = "TGUI" + name = "tgui" wait = 9 flags = SS_NO_INIT priority = FIRE_PRIORITY_TGUI runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT - offline_implications = "All TGUIs will no longer process. Shuttle call recommended." - var/list/currentrun = list() - var/list/open_uis = list() // A list of open UIs, grouped by src_object and ui_key. - var/list/processing_uis = list() // A list of processing UIs, ungrouped. - var/basehtml // The HTML base used for all UIs. + /// A list of UIs scheduled to process + var/list/current_run = list() + /// A list of open UIs + var/list/open_uis = list() + /// A list of open UIs, grouped by src_object. + var/list/open_uis_by_src = list() + /// The HTML base used for all UIs. + var/basehtml /datum/controller/subsystem/tgui/PreInit() - basehtml = file2text('tgui/packages/tgui/public/tgui.html') + basehtml = file2text('tgui/public/tgui.html') + // Inject inline polyfills + var/polyfill = file2text('tgui/public/tgui-polyfill.min.js') + polyfill = "" + basehtml = replacetextEx(basehtml, "", polyfill) /datum/controller/subsystem/tgui/Shutdown() close_all_uis() -/datum/controller/subsystem/tgui/get_stat_details() - return "P:[length(processing_uis)]" - -/datum/controller/subsystem/tgui/get_metrics() - . = ..() - var/list/cust = list() - cust["processing"] = length(processing_uis) - .["custom"] = cust +/datum/controller/subsystem/tgui/stat_entry(msg) + msg = "P:[length(open_uis)]" + return ..() - -/datum/controller/subsystem/tgui/fire(resumed = 0) +/datum/controller/subsystem/tgui/fire(resumed = FALSE) if(!resumed) - src.currentrun = processing_uis.Copy() - //cache for sanic speed (lists are references anyways) - var/list/currentrun = src.currentrun - - while(currentrun.len) - var/datum/tgui/ui = currentrun[currentrun.len] - currentrun.len-- + src.current_run = open_uis.Copy() + // Cache for sanic speed (lists are references anyways) + var/list/current_run = src.current_run + while(current_run.len) + var/datum/tgui/ui = current_run[current_run.len] + current_run.len-- + // TODO: Move user/src_object check to process() if(ui && ui.user && ui.src_object) ui.process() else - processing_uis.Remove(ui) + open_uis.Remove(ui) if(MC_TICK_CHECK) return /** * public * - * Get an open UI given a user, src_object, and ui_key and try to update it with data. - * Returns the found UI. + * Requests a usable tgui window from the pool. + * Returns null if pool was exhausted. * - * * mob/user - The mob who opened/is using the UI. (REQUIRED) - * * datum/src_object - The object/datum which owns the UI. (REQUIRED) - * * ui_key - The ui_key of the UI. (REQUIRED) - * * datum/tgui/ui - The UI to be updated, if it exists. (OPTIONAL) - * * force_open - If the UI should be re-opened instead of updated. (OPTIONAL) + * required user mob + * return datum/tgui */ -/datum/controller/subsystem/tgui/proc/try_update_ui(mob/user, datum/src_object, ui_key, datum/tgui/ui, force_open = FALSE) - if(isnull(ui)) // No UI was passed, so look for one. - ui = get_open_ui(user, src_object, ui_key) - - if(!isnull(ui)) - var/data = src_object.ui_data(user) // Get data from the src_object. - if(!force_open) // UI is already open; update it. - ui.push_data(data) - else // Re-open it anyways. - ui.reinitialize(null, data) - return ui // We found the UI, return it. - else - return null // We couldn't find a UI. +/datum/controller/subsystem/tgui/proc/request_pooled_window(mob/user) + if(!user.client) + return + var/list/windows = user.client.tgui_windows + var/window_id + var/datum/tgui_window/window + var/window_found = FALSE + // Find a usable window + for(var/i in 1 to TGUI_WINDOW_HARD_LIMIT) + window_id = TGUI_WINDOW_ID(i) + window = windows[window_id] + // As we are looping, create missing window datums + if(!window) + window = new(user.client, window_id, pooled = TRUE) + // Skip windows with acquired locks + if(window.locked) + continue + if(window.status == TGUI_WINDOW_READY) + return window + if(window.status == TGUI_WINDOW_CLOSED) + window.status = TGUI_WINDOW_LOADING + window_found = TRUE + break + if(!window_found) + log_tgui(user, "Error: Pool exhausted") + return + return window /** - * private + * public * - * Get an open UI given a user, src_object, and ui_key. - * Returns the found UI. + * Force closes all tgui windows. * - * * mob/user - The mob who opened/is using the UI. (REQUIRED) - * * datum/src_object - The object/datum which owns the UI. (REQUIRED) - * * ui_key - The ui_key of the UI. (REQUIRED) + * required user mob */ -/datum/controller/subsystem/tgui/proc/get_open_ui(mob/user, datum/src_object, ui_key) - var/src_object_key = "[src_object.UID()]" - if(isnull(open_uis[src_object_key]) || !islist(open_uis[src_object_key])) - return null // No UIs open. - else if(isnull(open_uis[src_object_key][ui_key]) || !islist(open_uis[src_object_key][ui_key])) - return null // No UIs open for this object. - - for(var/datum/tgui/ui in open_uis[src_object_key][ui_key]) // Find UIs for this object. - if(ui.user == user) // Make sure we have the right user - return ui - - return null // Couldn't find a UI! +/datum/controller/subsystem/tgui/proc/force_close_all_windows(mob/user) + log_tgui(user, "force_close_all_windows") + if(user.client) + user.client.tgui_windows = list() + for(var/i in 1 to TGUI_WINDOW_HARD_LIMIT) + var/window_id = TGUI_WINDOW_ID(i) + user << browse(null, "window=[window_id]") /** - * private + * public * - * Update all UIs attached to src_object. - * Returns the number of UIs updated. + * Force closes the tgui window by window_id. * - * * datum/src_object - The object/datum which owns the UIs. - * * update_static_data - If the static data of the `src_object` should be updated for every viewing user. + * required user mob + * required window_id string */ -/datum/controller/subsystem/tgui/proc/update_uis(datum/src_object, update_static_data = FALSE) - var/src_object_key = "[src_object.UID()]" - if(isnull(open_uis[src_object_key]) || !islist(open_uis[src_object_key])) - return 0 // Couldn't find any UIs for this object. - - var/update_count = 0 - for(var/ui_key in open_uis[src_object_key]) - for(var/datum/tgui/ui in open_uis[src_object_key][ui_key]) - if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user)) // Check the UI is valid. - if(update_static_data) - src_object.update_static_data(ui.user, ui, ui_key) - ui.process(force = 1) // Update the UI. - update_count++ // Count each UI we update. - return update_count +/datum/controller/subsystem/tgui/proc/force_close_window(mob/user, window_id) + log_tgui(user, "force_close_window") + // Close all tgui datums based on window_id. + for(var/datum/tgui/ui in user.tgui_open_uis) + if(ui.window && ui.window.id == window_id) + ui.close(can_be_suspended = FALSE) + // Unset machine just to be sure. + user.unset_machine() + // Close window directly just to be sure. + user << browse(null, "window=[window_id]") /** - * private + * public * - * Close all UIs attached to src_object. - * Returns the number of UIs closed. + * Try to find an instance of a UI, and push an update to it. + * + * required user mob The mob who opened/is using the UI. + * required src_object datum The object/datum which owns the UI. + * optional ui datum/tgui The UI to be updated, if it exists. + * optional force_open bool If the UI should be re-opened instead of updated. * - * * datum/src_object - The object/datum which owns the UIs. + * return datum/tgui The found UI. */ -/datum/controller/subsystem/tgui/proc/close_uis(datum/src_object) - if(!src_object.unique_datum_id) // First check if the datum has an UID set - return 0 - var/src_object_key = "[src_object.UID()]" - if(isnull(open_uis[src_object_key]) || !islist(open_uis[src_object_key])) - return 0 // Couldn't find any UIs for this object. - - var/close_count = 0 - for(var/ui_key in open_uis[src_object_key]) - for(var/datum/tgui/ui in open_uis[src_object_key][ui_key]) - if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user)) // Check the UI is valid. - ui.close() // Close the UI. - close_count++ // Count each UI we close. - return close_count +/datum/controller/subsystem/tgui/proc/try_update_ui(mob/user, datum/src_object, datum/tgui/ui, force_open = FALSE) + // Look up a UI if it wasn't passed + if(isnull(ui)) + ui = get_open_ui(user, src_object) + // Couldn't find a UI. + if(isnull(ui)) + return + var/data = src_object.ui_data(user) // Get data from the src_object. + if(force_open) // UI is already open; update it. + ui.send_full_update(data, TRUE) + return ui // We found the UI, return it + ui.process_status() + // UI ended up with the closed status + // or is actively trying to close itself. + // FIXME: Doesn't actually fix the paper bug. + if(ui.status <= UI_CLOSE) + ui.close() + return + ui.send_update() + return ui /** + * public + * + * Get a open UI given a user and src_object. * - * Gets the amount of open UIs on an object - * Returns the number of UIs open. + * required user mob The mob who opened/is using the UI. + * required src_object datum The object/datum which owns the UI. * - * * datum/src_object - The object/datum which owns the UIs. + * return datum/tgui The found UI. */ -/datum/controller/subsystem/tgui/proc/get_open_ui_count(datum/src_object) - if(!src_object.unique_datum_id) // First check if the datum has an UID set - return 0 - var/src_object_key = "[src_object.UID()]" - if(isnull(open_uis[src_object_key]) || !islist(open_uis[src_object_key])) - return 0 // Couldn't find any UIs for this object. - - var/open_count = 0 - for(var/ui_key in open_uis[src_object_key]) - for(var/datum/tgui/ui in open_uis[src_object_key][ui_key]) - if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user)) // Check the UI is valid. - open_count++ // Count each UI thats open +/datum/controller/subsystem/tgui/proc/get_open_ui(mob/user, datum/src_object) + var/key = "[src_object.UID()]" + // No UIs opened for this src_object + if(isnull(open_uis_by_src[key]) || !islist(open_uis_by_src[key])) + return + for(var/datum/tgui/ui in open_uis_by_src[key]) + // Make sure we have the right user + if(ui.user == user) + return ui + return - return open_count +/** + * public + * + * Update all UIs attached to src_object. + * + * required src_object datum The object/datum which owns the UIs. + * + * return int The number of UIs updated. + */ +/datum/controller/subsystem/tgui/proc/update_uis(datum/src_object) + var/count = 0 + var/key = "[src_object.UID()]" + // No UIs opened for this src_object + if(isnull(open_uis_by_src[key]) || !islist(open_uis_by_src[key])) + return count + for(var/datum/tgui/ui in open_uis_by_src[key]) + // Check if UI is valid. + if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user)) + ui.process(force = TRUE) + count++ + return count +/** + * public + * + * Close all UIs attached to src_object. + * + * required src_object datum The object/datum which owns the UIs. + * + * return int The number of UIs closed. + */ +/datum/controller/subsystem/tgui/proc/close_uis(datum/src_object) + . = 0 + var/key = "[src_object.UID()]" + // No UIs opened for this src_object + if(isnull(open_uis_by_src[key]) || !islist(open_uis_by_src[key])) + return + for(var/datum/tgui/ui in open_uis_by_src[key]) + // Check if UI is valid. + if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user)) + ui.close() + .++ + return /** - * private + * public + * + * Close all UIs regardless of their attachment to src_object. * - * Close *ALL* UIs - * Returns the number of UIs closed. + * return int The number of UIs closed. */ /datum/controller/subsystem/tgui/proc/close_all_uis() - var/close_count = 0 - for(var/src_object_key in open_uis) - for(var/ui_key in open_uis[src_object_key]) - for(var/datum/tgui/ui in open_uis[src_object_key][ui_key]) - if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user)) // Check the UI is valid. - ui.close() // Close the UI. - close_count++ // Count each UI we close. - return close_count + var/count = 0 + for(var/key in open_uis_by_src) + for(var/datum/tgui/ui in open_uis_by_src[key]) + // Check if UI is valid. + if(ui && ui.src_object && ui.user && ui.src_object.ui_host(ui.user)) + ui.close() + count++ + return count /** - * private + * public * * Update all UIs belonging to a user. - * Returns the number of UIs updated. * - * * mob/user - The mob who opened/is using the UI. (REQUIRED) - * * datum/src_object - If provided, only update UIs belonging this src_object. (OPTIONAL) - * * ui_key - If provided, only update UIs with this UI key. (OPTIONAL) + * required user mob The mob who opened/is using the UI. + * optional src_object datum If provided, only update UIs belonging this src_object. + * + * return int The number of UIs updated. */ -/datum/controller/subsystem/tgui/proc/update_user_uis(mob/user, datum/src_object = null, ui_key = null) - if(isnull(user.open_uis) || !islist(user.open_uis) || open_uis.len == 0) - return 0 // Couldn't find any UIs for this user. - - var/update_count = 0 - for(var/datum/tgui/ui in user.open_uis) - if((isnull(src_object) || !isnull(src_object) && ui.src_object == src_object) && (isnull(ui_key) || !isnull(ui_key) && ui.ui_key == ui_key)) - ui.process(force = 1) // Update the UI. - update_count++ // Count each UI we upadte. - return update_count +/datum/controller/subsystem/tgui/proc/update_user_uis(mob/user, datum/src_object) + var/count = 0 + if(length(user?.tgui_open_uis) == 0) + return count + for(var/datum/tgui/ui in user.tgui_open_uis) + if(isnull(src_object) || ui.src_object == src_object) + ui.process(force = TRUE) + count++ + return count /** - * private + * public * * Close all UIs belonging to a user. - * Returns the number of UIs closed. * - * * mob/user - The mob who opened/is using the UI. (REQUIRED) - * * datum/src_object - If provided, only close UIs belonging this src_object. (OPTIONAL) - * * ui_key - If provided, only close UIs with this UI key. (OPTIONAL) + * required user mob The mob who opened/is using the UI. + * optional src_object datum If provided, only close UIs belonging this src_object. + * + * return int The number of UIs closed. */ -/datum/controller/subsystem/tgui/proc/close_user_uis(mob/user, datum/src_object = null, ui_key = null) - if(isnull(user.open_uis) || !islist(user.open_uis) || open_uis.len == 0) - return 0 // Couldn't find any UIs for this user. - - var/close_count = 0 - for(var/datum/tgui/ui in user.open_uis) - if((isnull(src_object) || !isnull(src_object) && ui.src_object == src_object) && (isnull(ui_key) || !isnull(ui_key) && ui.ui_key == ui_key)) - ui.close() // Close the UI. - close_count++ // Count each UI we close. - return close_count +/datum/controller/subsystem/tgui/proc/close_user_uis(mob/user, datum/src_object) + var/count = 0 + if(length(user?.tgui_open_uis) == 0) + return count + for(var/datum/tgui/ui in user.tgui_open_uis) + if(isnull(src_object) || ui.src_object == src_object) + ui.close() + count++ + return count /** * private * * Add a UI to the list of open UIs. * - * * datum/tgui/ui - The UI to be added. + * required ui datum/tgui The UI to be added. */ /datum/controller/subsystem/tgui/proc/on_open(datum/tgui/ui) - var/src_object_key = "[ui.src_object.UID()]" - if(isnull(open_uis[src_object_key]) || !islist(open_uis[src_object_key])) - open_uis[src_object_key] = list(ui.ui_key = list()) // Make a list for the ui_key and src_object. - else if(isnull(open_uis[src_object_key][ui.ui_key]) || !islist(open_uis[src_object_key][ui.ui_key])) - open_uis[src_object_key][ui.ui_key] = list() // Make a list for the ui_key. - - // Append the UI to all the lists. - ui.user.open_uis |= ui - var/list/uis = open_uis[src_object_key][ui.ui_key] + var/key = "[ui.src_object.UID()]" + if(isnull(open_uis_by_src[key]) || !islist(open_uis_by_src[key])) + open_uis_by_src[key] = list() + ui.user.tgui_open_uis |= ui + var/list/uis = open_uis_by_src[key] uis |= ui - processing_uis |= ui + open_uis |= ui /** * private * * Remove a UI from the list of open UIs. - * Returns TRUE if removed, and FALSE if not. * - * * datum/tgui/ui - The UI to be removed. + * required ui datum/tgui The UI to be removed. + * + * return bool If the UI was removed or not. */ /datum/controller/subsystem/tgui/proc/on_close(datum/tgui/ui) - var/src_object_key = "[ui.src_object.UID()]" - if(isnull(open_uis[src_object_key]) || !islist(open_uis[src_object_key])) - return FALSE // It wasn't open. - else if(isnull(open_uis[src_object_key][ui.ui_key]) || !islist(open_uis[src_object_key][ui.ui_key])) - return FALSE // It wasn't open. - - processing_uis.Remove(ui) // Remove it from the list of processing UIs. - if(ui.user) // If the user exists, remove it from them too. - ui.user.open_uis.Remove(ui) - var/Ukey = ui.ui_key - var/list/uis = open_uis[src_object_key][Ukey] // Remove it from the list of open UIs. + var/key = "[ui.src_object.UID()]" + if(isnull(open_uis_by_src[key]) || !islist(open_uis_by_src[key])) + return FALSE + // Remove it from the list of processing UIs. + open_uis.Remove(ui) + // If the user exists, remove it from them too. + if(ui.user) + ui.user.tgui_open_uis.Remove(ui) + var/list/uis = open_uis_by_src[key] uis.Remove(ui) - if(!uis.len) - var/list/uiobj = open_uis[src_object_key] - uiobj.Remove(Ukey) - if(!uiobj.len) - open_uis.Remove(src_object_key) - - return TRUE // Let the caller know we did it. + if(length(uis) == 0) + open_uis_by_src.Remove(key) + return TRUE /** * private * * Handle client logout, by closing all their UIs. - * Returns the number of UIs closed. * - * * mob/user - The mob which logged out. + * required user mob The mob which logged out. + * + * return int The number of UIs closed. */ /datum/controller/subsystem/tgui/proc/on_logout(mob/user) - return close_user_uis(user) + close_user_uis(user) /** * private * * Handle clients switching mobs, by transferring their UIs. - * Returns TRUE if the UIs were transferred, and FALSE if not. * - * * mob/source - The client's original mob. - * * mob/target - The client's new mob. + * required user source The client's original mob. + * required user target The client's new mob. + * + * return bool If the UIs were transferred. */ /datum/controller/subsystem/tgui/proc/on_transfer(mob/source, mob/target) - if(!source || isnull(source.open_uis) || !islist(source.open_uis) || open_uis.len == 0) - return FALSE // The old mob had no open UIs. - - if(isnull(target.open_uis) || !islist(target.open_uis)) - target.open_uis = list() // Create a list for the new mob if needed. - - for(var/datum/tgui/ui in source.open_uis) - ui.user = target // Inform the UIs of their new owner. - target.open_uis.Add(ui) // Transfer all the UIs. - - source.open_uis.Cut() // Clear the old list. - return TRUE // Let the caller know we did it. + // The old mob had no open UIs. + if(length(source?.tgui_open_uis) == 0) + return FALSE + if(isnull(target.tgui_open_uis) || !istype(target.tgui_open_uis, /list)) + target.tgui_open_uis = list() + // Transfer all the UIs. + for(var/datum/tgui/ui in source.tgui_open_uis) + // Inform the UIs of their new owner. + ui.user = target + target.tgui_open_uis.Add(ui) + // Clear the old list. + source.tgui_open_uis.Cut() + return TRUE diff --git a/code/controllers/subsystem/SSticker.dm b/code/controllers/subsystem/SSticker.dm index 0e99b37bcd5d..101de6720822 100644 --- a/code/controllers/subsystem/SSticker.dm +++ b/code/controllers/subsystem/SSticker.dm @@ -296,9 +296,25 @@ SUBSYSTEM_DEF(ticker) // Generate code phrases and responses if(!GLOB.syndicate_code_phrase) - GLOB.syndicate_code_phrase = generate_code_phrase() + var/temp_syndicate_code_phrase = generate_code_phrase(return_list = TRUE) + + var/codewords = jointext(temp_syndicate_code_phrase, "|") + var/regex/codeword_match = new("([codewords])", "ig") + + GLOB.syndicate_code_phrase_regex = codeword_match + temp_syndicate_code_phrase = jointext(temp_syndicate_code_phrase, ", ") + GLOB.syndicate_code_phrase = temp_syndicate_code_phrase + + if(!GLOB.syndicate_code_response) - GLOB.syndicate_code_response = generate_code_phrase() + var/temp_syndicate_code_response = generate_code_phrase(return_list = TRUE) + + var/codewords = jointext(temp_syndicate_code_response, "|") + var/regex/codeword_match = new("([codewords])", "ig") + + GLOB.syndicate_code_response_regex = codeword_match + temp_syndicate_code_response = jointext(temp_syndicate_code_response, ", ") + GLOB.syndicate_code_response = temp_syndicate_code_response // Run post setup stuff mode.post_setup() diff --git a/code/controllers/subsystem/non_firing/SSassets.dm b/code/controllers/subsystem/non_firing/SSassets.dm index d2c9a90217df..83bd6b5b9b5b 100644 --- a/code/controllers/subsystem/non_firing/SSassets.dm +++ b/code/controllers/subsystem/non_firing/SSassets.dm @@ -2,15 +2,38 @@ SUBSYSTEM_DEF(assets) name = "Assets" init_order = INIT_ORDER_ASSETS flags = SS_NO_FIRE + /// Contains /datum/asset_cache_item var/list/cache = list() var/list/preload = list() + var/datum/asset_transport/transport = new() -/datum/controller/subsystem/assets/Initialize() - for(var/type in typesof(/datum/asset) - list(/datum/asset, /datum/asset/simple)) - var/datum/asset/A = new type() - A.register() +/datum/controller/subsystem/assets/Initialize(timeofday) + load_assets() + apply_configuration() - preload = cache.Copy() //don't preload assets generated during the round +/datum/controller/subsystem/assets/Recover() + cache = SSassets.cache + preload = SSassets.preload - for(var/client/C in GLOB.clients) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(getFilesSlow), C, preload, FALSE), 10) +/datum/controller/subsystem/assets/proc/apply_configuration(initialize_transport = TRUE) + var/newtransporttype = /datum/asset_transport + switch(GLOB.configuration.asset_cache.asset_transport) + if("webroot") + newtransporttype = /datum/asset_transport/webroot + + if(newtransporttype == transport.type) + return + + var/datum/asset_transport/newtransport = new newtransporttype + if(newtransport.validate_config()) + transport = newtransport + + if(initialize_transport) + transport.Initialize(cache) + +/datum/controller/subsystem/assets/proc/load_assets() + for(var/datum/asset/asset_to_load as anything in typesof(/datum/asset)) + if(initial(asset_to_load._abstract)) + continue + + get_asset_datum(type) diff --git a/code/controllers/subsystem/non_firing/SSchangelog.dm b/code/controllers/subsystem/non_firing/SSchangelog.dm index cfff6afee409..d72b78c09cac 100644 --- a/code/controllers/subsystem/non_firing/SSchangelog.dm +++ b/code/controllers/subsystem/non_firing/SSchangelog.dm @@ -53,12 +53,6 @@ SUBSYSTEM_DEF(changelog) if(!ss_ready) return // Only return here, we dont have to worry about a queue list because this will be called from ShowChangelog() - if(C.prefs.toggles & PREFTOGGLE_UI_DARKMODE) - winset(C, "rpane.changelog", "background-color=#40628a;font-color=#ffffff;font-style=none") - else - winset(C, "rpane.changelog", "background-color=none;font-style=none") - - C.prefs.lastchangelog = current_cl_timestamp var/datum/db_query/updatePlayerCLTime = SSdbcore.NewQuery( @@ -76,22 +70,12 @@ SUBSYSTEM_DEF(changelog) /datum/controller/subsystem/changelog/proc/UpdatePlayerChangelogButton(client/C) // If SQL aint even enabled, or we aint ready just set the button to default style if(!SSdbcore.IsConnected() || !ss_ready) - if(C.prefs.toggles & PREFTOGGLE_UI_DARKMODE) - winset(C, "rpane.changelog", "background-color=#40628a;text-color=#FFFFFF") - else - winset(C, "rpane.changelog", "background-color=none;text-color=#000000") return // If we are ready, process the button style if(C.prefs.lastchangelog != current_cl_timestamp) - winset(C, "rpane.changelog", "background-color=#bb7700;text-color=#FFFFFF;font-style=bold") + winset(C, "rpane.changelog", "border=line;font-style=bold") to_chat(C, "Changelog has changed since your last visit.") - else - if(C.prefs.toggles & PREFTOGGLE_UI_DARKMODE) - winset(C, "rpane.changelog", "background-color=#40628a;text-color=#FFFFFF") - else - winset(C, "rpane.changelog", "background-color=none;text-color=#000000") - /datum/controller/subsystem/changelog/proc/OpenChangelog(client/C) // If SQL isnt enabled, dont even queue them, just tell them it wont work @@ -204,10 +188,13 @@ SUBSYSTEM_DEF(changelog) return data -/datum/controller/subsystem/changelog/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/controller/subsystem/changelog/ui_state(mob/user) + return GLOB.always_state + +/datum/controller/subsystem/changelog/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ChangelogView", name, 750, 800, master_ui, state) + ui = new(user, src, "ChangelogView", name) ui.set_autoupdate(FALSE) ui.open() diff --git a/code/datums/browser.dm b/code/datums/browser.dm index 24d324d6e77f..e48861f533fd 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -1,24 +1,29 @@ /datum/browser var/mob/user var/title - var/window_id // window_id is used as the window name for browse and onclose + /// window_id is used as the window name for browse and onclose calls + var/window_id var/width = 0 var/height = 0 - var/atom/ref = null - var/window_options = "focus=0;can_close=1;can_minimize=1;can_maximize=0;can_resize=1;titlebar=1;" // window option is set using window_id + /// UID of the host atom + var/atom_uid = null + /// Various options to control elements such as titlebar buttons for the window + var/list/window_options = list("focus=0;can_close=1;can_minimize=1;can_maximize=0;can_resize=1;titlebar=1;") // window option is set using window_id + /// Assoc list of stylesheets for use by the datum var/stylesheets[0] + /// Assoc list of script files for use by the datum var/scripts[0] - var/title_image - var/head_elements - var/body_elements - var/head_content = "" - var/content = "" - var/title_buttons = "" + /// Should default stylesheets be loaded + var/include_default_stylesheet = TRUE + /// Header HTML content of the browser datum + var/list/head_content = list() + /// HTML content of the browser datum + var/list/content = list() -/datum/browser/New(nuser, nwindow_id, ntitle = 0, nwidth = 0, nheight = 0, atom/nref = null) - +/datum/browser/New(nuser, nwindow_id, ntitle = 0, nwidth = 0, nheight = 0, atom/atom = null) user = nuser + RegisterSignal(user, COMSIG_PARENT_QDELETING, PROC_REF(user_deleted)) window_id = nwindow_id if(ntitle) title = format_text(ntitle) @@ -26,64 +31,71 @@ width = nwidth if(nheight) height = nheight - if(nref) - ref = nref - add_stylesheet("common", 'html/browser/common.css') // this CSS sheet is common to all UIs + if(atom) + atom_uid = atom.UID() + +/datum/browser/proc/user_deleted(datum/source) + SIGNAL_HANDLER + user = null /datum/browser/proc/set_title(ntitle) - title = format_text(ntitle) + title = islist(ntitle) ? ntitle : list(ntitle) /datum/browser/proc/add_head_content(nhead_content) - head_content = nhead_content - -/datum/browser/proc/set_title_buttons(ntitle_buttons) - title_buttons = ntitle_buttons + head_content = islist(nhead_content) ? nhead_content : list(nhead_content) /datum/browser/proc/set_window_options(nwindow_options) - window_options = nwindow_options - -/datum/browser/proc/set_title_image(ntitle_image) - //title_image = ntitle_image + window_options = islist(nwindow_options) ? nwindow_options : list(nwindow_options) /datum/browser/proc/add_stylesheet(name, file) - stylesheets[name] = file + if(istype(name, /datum/asset/spritesheet)) + var/datum/asset/spritesheet/sheet = name + stylesheets["spritesheet_[sheet.name].css"] = "data/spritesheets/[sheet.name]" + else + var/asset_name = "[name].css" + + stylesheets[asset_name] = file + + if(!SSassets.cache[asset_name]) + SSassets.transport.register_asset(asset_name, file) + +/datum/browser/proc/add_scss_stylesheet(name, file) + var/asset_name = "[name].scss" + stylesheets[asset_name] = file + + if(!SSassets.cache[asset_name]) + SSassets.transport.register_asset(asset_name, file) /datum/browser/proc/add_script(name, file) - scripts[name] = file + scripts["[ckey(name)].js"] = file + SSassets.transport.register_asset("[ckey(name)].js", file) /datum/browser/proc/set_content(ncontent) - content = ncontent + content = islist(ncontent) ? ncontent : list(ncontent) /datum/browser/proc/add_content(ncontent) content += ncontent /datum/browser/proc/get_header() - var/key - var/filename - for(key in stylesheets) - filename = "[ckey(key)].css" - user << browse_rsc(stylesheets[key], filename) - head_content += "" - - for(key in scripts) - filename = "[ckey(key)].js" - user << browse_rsc(scripts[key], filename) - head_content += "" - - var/title_attributes = "class='uiTitle'" - if(title_image) - title_attributes = "class='uiTitle icon' style='background-image: url([title_image]);'" - - return {" + if(include_default_stylesheet) + head_content += "" + + for(var/file in stylesheets) + head_content += "" + + for(var/file in scripts) + head_content += "" + + return {" - - - [head_content] + + + [head_content.Join("")]
- [title ? "
[title]
[title_buttons]
" : ""] + [title ? "
[title]
" : ""]
"} @@ -97,86 +109,60 @@ /datum/browser/proc/get_content() return {" [get_header()] - [content] + [content.Join("")] [get_footer()] "} -/datum/browser/proc/open(use_onclose = 1) +/datum/browser/proc/open(use_onclose = TRUE) + if(isnull(window_id)) //null check because this can potentially nuke goonchat + WARNING("Browser [title] tried to open with a null ID") + to_chat(user, "The [title] browser you tried to open failed a sanity check! Please report this on github!") + return + var/window_size = "" if(width && height) window_size = "size=[width]x[height];" - user << browse(get_content(), "window=[window_id];[window_size][window_options]") + if(include_default_stylesheet) + var/datum/asset/simple/common/common_asset = get_asset_datum(/datum/asset/simple/common) + common_asset.send(user) + if(length(stylesheets)) + SSassets.transport.send_assets(user, stylesheets) + if(length(scripts)) + SSassets.transport.send_assets(user, scripts) + user << browse(get_content(), "window=[window_id];[window_size][window_options.Join("")]") if(use_onclose) - onclose(user, window_id, ref) + onclose(user, window_id, atom_uid) /datum/browser/proc/close() - user << browse(null, "window=[window_id]") - -// This will allow you to show an icon in the browse window -// This is added to mob so that it can be used without a reference to the browser object -// There is probably a better place for this... -/mob/proc/browse_rsc_icon(icon, icon_state, dir = -1) - /* - var/icon/I - if(dir >= 0) - I = new /icon(icon, icon_state, dir) + if(!isnull(window_id))//null check because this can potentially nuke goonchat + user << browse(null, "window=[window_id]") else - I = new /icon(icon, icon_state) - dir = "default" - - var/filename = "[ckey("[icon]_[icon_state]_[dir]")].png" - src << browse_rsc(I, filename) - return filename - */ - - -// Registers the on-close verb for a browse window (client/verb/.windowclose) -// this will be called when the close-button of a window is pressed. -// -// This is usually only needed for devices that regularly update the browse window, -// e.g. canisters, timers, etc. -// -// windowid should be the specified window name -// e.g. code is : user << browse(text, "window=fred") -// then use : onclose(user, "fred") -// -// Optionally, specify the "ref" parameter as the controlled atom (usually src) -// to pass a "close=1" parameter to the atom's Topic() proc for special handling. -// Otherwise, the user mob's machine var will be reset directly. -// - -/proc/onclose(mob/user, windowid, atom/ref=null) - if(!user || !user.client) return - var/param = "null" - if(ref) - param = "\ref[ref]" - - winset(user, windowid, "on-close=\".windowclose [param]\"") + WARNING("Browser [title] tried to close with a null ID") -// to_chat(world, "OnClose [user]: [windowid] : ["on-close=\".windowclose [param]\""]") +/proc/onclose(mob/user, windowid, atom_uid) + if(!user?.client) + return + winset(user, windowid, "on-close=\".windowclose [atom_uid || "null"]\"") // the on-close client verb // called when a browser popup window is closed after registering with proc/onclose() -// if a valid atom reference is supplied, call the atom's Topic() with "close=1" +// if a valid atom uid is supplied, call the atom's Topic() with "close=1" // otherwise, just reset the client mob's machine var. // -/client/verb/windowclose(atomref as text) - set hidden = 1 // hide this verb from the user's panel - set name = ".windowclose" // no autocomplete on cmd line +/client/verb/windowclose(atom_uid as text) + set hidden = TRUE // hide this verb from the user's panel + set name = ".windowclose" // no autocomplete on cmd line -// to_chat(world, "windowclose: [atomref]") - if(atomref!="null") // if passed a real atomref - var/hsrc = locate(atomref) // find the reffed atom + if(atom_uid != "null") // if passed a real atom_uid + var/hsrc = locateUID(atom_uid) // find the reffed atom if(hsrc) -// to_chat(world, "[src] Topic [href] [hsrc]") + var/href = "close=1" usr = src.mob - src.Topic("close=1", list("close"="1"), hsrc) // this will direct to the atom's - return // Topic() proc via client.Topic() + src.Topic(href, params2list(href), hsrc) // this will direct to the atom's + return // Topic() proc via client.Topic() - // no atomref specified (or not found) + // no atom_uid specified (or not found) // so just reset the user mob's machine var - if(src && src.mob) -// to_chat(world, "[src] was [src.mob.machine], setting to null") + if(src?.mob) src.mob.unset_machine() - return diff --git a/code/datums/callback.dm b/code/datums/callback.dm index 9f2c8d0cd5fa..1179480781b4 100644 --- a/code/datums/callback.dm +++ b/code/datums/callback.dm @@ -22,17 +22,17 @@ global proc: GLOBAL_PROC_REF(procname) Example: - CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(some_proc_here)) + CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(some_proc_here), args) proc defined on current(src) object: PROC_REF(procname) Example: - CALLBACK(src, PROC_REF(some_proc_here)) + CALLBACK(src, PROC_REF(some_proc_here), args) proc defined on some other type: TYPE_PROC_REF(some_type, procname) Example: - CALLBACK(other_atom, TYPE_PROC_REF(other_atom_type, procname) + CALLBACK(other_atom, TYPE_PROC_REF(other_atom_type, procname), args) */ diff --git a/code/datums/chat_payload.dm b/code/datums/chat_payload.dm new file mode 100644 index 000000000000..fd35bbc4eecf --- /dev/null +++ b/code/datums/chat_payload.dm @@ -0,0 +1,16 @@ +/// Stores information about a chat payload +/datum/chat_payload + /// Sequence number of this payload + var/sequence = 0 + /// Message we are sending + var/list/content + /// Resend count + var/resends = 0 + +/// Converts the chat payload into a JSON string +/datum/chat_payload/proc/into_message() + return "{\"sequence\":[sequence],\"content\":[json_encode(content)]}" + +/// Returns an HTML-encoded message from our contents. +/datum/chat_payload/proc/get_content_as_html() + return message_to_html(content) diff --git a/code/datums/components/codeword_hearing.dm b/code/datums/components/codeword_hearing.dm new file mode 100644 index 000000000000..8e9ee833ec74 --- /dev/null +++ b/code/datums/components/codeword_hearing.dm @@ -0,0 +1,47 @@ +/** + * Component that allows for highlighting of words or phrases in chat based on regular expressions. + * + * Hooks into /mob/proc/combine_message to wrap every regex match in the message + * between tags with the provided span class. This modifies the output that + * is sent to the parent's chat window. + * + * Removal of this component should be done by calling [GetComponents(/datum/component/codeword_hearing)] + * on the parent and then iterating through all components calling [delete_if_from_source(source)]. + */ +/datum/component/codeword_hearing + dupe_mode = COMPONENT_DUPE_ALLOWED + + /// Regex for matching words or phrases you want highlighted. + var/regex/replace_regex + /// The to use for highlighting matches. + var/span_class + /// The source of this component. Used to identify the source in delete_if_from_source since this component is COMPONENT_DUPE_ALLOWED. + var/source + +/datum/component/codeword_hearing/Initialize(regex/codeword_regex, highlight_span_class, component_source) + if(!ismovable(parent)) + return COMPONENT_INCOMPATIBLE + + replace_regex = codeword_regex + span_class = highlight_span_class + source = component_source + return ..() + +/datum/component/codeword_hearing/proc/handle_hearing(message) + var/mob/living/owner = parent + if(!istype(owner)) + return + + // don't skip codewords when owner speaks + if(!owner.can_hear()) + return + + return replace_regex.Replace(message, "$1") + +/// Since a parent can have multiple of these components on them simultaneously, this allows a datum to delete components from a specific source. +/datum/component/codeword_hearing/proc/delete_if_from_source(component_source) + if(source == component_source) + qdel(src) + return TRUE + + return FALSE diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 582366258b0d..718e0e60cfd4 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -128,7 +128,7 @@ GLOBAL_LIST_EMPTY(PDA_Manifest) is_custom_job = FALSE break - if(is_custom_job) + if(is_custom_job && foundrecord) real_title = foundrecord.fields["real_rank"] if(foundrecord) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 796072c95465..4cdee93d0ba6 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -22,7 +22,7 @@ /client/can_vv_get(var_name) var/static/list/protected_vars = list( - "address", "chatOutput", "computer_id", "connection", "jbh", "pm_tracker", "related_accounts_cid", "related_accounts_ip", "watchlisted" + "address", "computer_id", "connection", "jbh", "pm_tracker", "related_accounts_cid", "related_accounts_ip", "watchlisted" ) if(!check_rights(R_ADMIN, FALSE, usr) && (var_name in protected_vars)) return FALSE diff --git a/code/datums/log_viewer.dm b/code/datums/log_viewer.dm index 9433683a5ec6..33d6f3a92ece 100644 --- a/code/datums/log_viewer.dm +++ b/code/datums/log_viewer.dm @@ -251,13 +251,13 @@ if(!result || result.ckey != __ckey){\ return if(href_list["add_mob"]) var/list/mobs = getpois(TRUE, TRUE) - var/datum/async_input/A = input_autocomplete_async(usr, "Please, select a mob: ", mobs) - A.on_close(CALLBACK(src, PROC_REF(add_mob), usr)) + var/mob_choice = tgui_input_list(usr, "Please, select a mob: ", "Mob selector", mobs) + add_mob(usr, mobs[mob_choice]) return if(href_list["add_ckey"]) var/list/ckeys = GLOB.logging.get_ckeys_logged() - var/datum/async_input/A = input_autocomplete_async(usr, "Please, select a ckey: ", ckeys) - A.on_close(CALLBACK(src, PROC_REF(add_ckey), usr)) + var/ckey_choice = tgui_input_list(usr, "Please, select a ckey: ", "Ckey selector", ckeys) + add_ckey(usr, ckey_choice) return if(href_list["remove_mob"]) var/mob/M = locate(href_list["remove_mob"]) diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index 8136bf81c680..b9384b9b571c 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -50,7 +50,7 @@ /obj/item/storage/box/engineer = 1, /obj/item/flashlight = 1, /obj/item/card/emag = 1, - /obj/item/reagent_containers/food/snacks/syndidonkpocket = 1 + /obj/item/food/snacks/syndidonkpocket = 1 ) var/id_icon = "syndie" @@ -103,7 +103,7 @@ /obj/item/ammo_box/magazine/m10mm = 1, /obj/item/crowbar/red = 1, /obj/item/grenade/plastic/c4 = 1, - /obj/item/reagent_containers/food/snacks/syndidonkpocket = 1, + /obj/item/food/snacks/syndidonkpocket = 1, /obj/item/flashlight = 1, /obj/item/clothing/shoes/combat = 1 ) @@ -381,13 +381,13 @@ l_ear = /obj/item/radio/headset glasses = /obj/item/clothing/glasses/thermal/monocle id = /obj/item/card/id - l_pocket = /obj/item/reagent_containers/food/snacks/grown/banana + l_pocket = /obj/item/food/snacks/grown/banana r_pocket = /obj/item/bikehorn r_hand = /obj/item/fireaxe backpack_contents = list( /obj/item/storage/box/survival = 1, /obj/item/flashlight = 1, - /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana = 1, + /obj/item/reagent_containers/drinks/bottle/bottleofbanana = 1, /obj/item/grenade/clown_grenade = 1, /obj/item/melee/baton/cattleprod = 1, /obj/item/stock_parts/cell/super = 1, @@ -420,14 +420,14 @@ pda = /obj/item/pda/mime backpack_contents = list( /obj/item/storage/box/survival = 1, - /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing = 1, + /obj/item/reagent_containers/drinks/bottle/bottleofnothing = 1, /obj/item/toy/crayon/mime = 1, /obj/item/gun/projectile/automatic/pistol = 1, /obj/item/ammo_box/magazine/m10mm = 1, /obj/item/suppressor = 1, /obj/item/card/emag = 1, /obj/item/radio/uplink = 1, - /obj/item/reagent_containers/food/snacks/syndidonkpocket = 1, + /obj/item/food/snacks/syndidonkpocket = 1, /obj/item/flashlight = 1 ) @@ -1311,7 +1311,7 @@ /obj/item/stamp/clown = 1, /obj/item/toy/crayon/rainbow = 1, /obj/item/reagent_containers/spray/waterflower = 1, - /obj/item/reagent_containers/food/snacks/grown/banana = 1, + /obj/item/food/snacks/grown/banana = 1, ) shoes = /obj/item/clothing/shoes/clown_shoes diff --git a/code/datums/outfits/outfit_debug.dm b/code/datums/outfits/outfit_debug.dm index 28460989c297..32183aa50ade 100644 --- a/code/datums/outfits/outfit_debug.dm +++ b/code/datums/outfits/outfit_debug.dm @@ -313,7 +313,7 @@ // put cool admin-only shit here :) /obj/item/storage/box/debug/misc_debug/populate_contents() new /obj/item/badminBook(src) - new /obj/item/reagent_containers/food/drinks/bottle/vodka/badminka(src) + new /obj/item/reagent_containers/drinks/bottle/vodka/badminka(src) new /obj/item/crowbar/power(src) // >admin only lol new /obj/item/clothing/gloves/fingerless/rapid/admin(src) new /obj/item/clothing/under/misc/acj(src) diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm index 484b8d5bc50e..3582772446ae 100644 --- a/code/datums/recipe.dm +++ b/code/datums/recipe.dm @@ -36,7 +36,7 @@ /datum/recipe var/list/reagents // example: = list("berryjuice" = 5) // do not list same reagent twice var/list/items // example: =list(/obj/item/crowbar, /obj/item/welder) // place /foo/bar before /foo - var/result //example: = /obj/item/reagent_containers/food/snacks/donut + var/result //example: = /obj/item/food/snacks/donut var/time = 100 // 1/10 part of second /// Whether or not an upgraded kitchen machine will create more products using the same amount of ingredients var/duplicate = TRUE diff --git a/code/datums/spawners_menu.dm b/code/datums/spawners_menu.dm index af4b272b4d1a..83c2b9ef7b2c 100644 --- a/code/datums/spawners_menu.dm +++ b/code/datums/spawners_menu.dm @@ -6,10 +6,13 @@ qdel(src) owner = new_owner -/datum/spawners_menu/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/ui_state/state = GLOB.observer_state, datum/tgui/master_ui = null) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/spawners_menu/ui_state(mob/user) + return GLOB.observer_state + +/datum/spawners_menu/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SpawnersMenu", "Spawners Menu", 700, 600, master_ui, state = state) + ui = new(user, src, "SpawnersMenu", "Spawners Menu") ui.open() /datum/spawners_menu/ui_data(mob/user) @@ -43,8 +46,9 @@ /datum/spawners_menu/ui_act(action, params) if(..()) return - var/spawners = replacetext(params["ID"], ",", ";") - var/list/possible_spawners = params2list(spawners) + var/list/possible_spawners = params["ID"] + if(!length(possible_spawners)) + return var/obj/effect/mob_spawn/MS = locate(pick(possible_spawners)) if(!MS || !istype(MS)) CRASH("A ghost tried to interact with an invalid spawner, or the spawner didn't exist.") diff --git a/code/datums/station_traits/admin_panel.dm b/code/datums/station_traits/admin_panel.dm index 27c16dd2909d..9e088d8ea610 100644 --- a/code/datums/station_traits/admin_panel.dm +++ b/code/datums/station_traits/admin_panel.dm @@ -80,10 +80,8 @@ var/list/new_future_traits = list() var/list/station_trait_names = list() - var/station_trait_text = params["station_traits"] - var/list/temp_list = splittext(station_trait_text, ",") - for(var/thing in temp_list) //TODO QWERTY / HI REVIEWERS NAME THIS BETTER BUT ITS ALMOST MIDNIGHT AND i HATE MYSELF - var/datum/station_trait/station_trait_path = text2path(thing) + for(var/station_trait_text in params["station_traits"]) + var/datum/station_trait/station_trait_path = text2path(station_trait_text) if(!ispath(station_trait_path, /datum/station_trait) || station_trait_path == /datum/station_trait) log_admin("[key_name(ui.user)] tried to set an invalid future station trait: [station_trait_text]") to_chat(ui.user, "Invalid future station trait: [station_trait_text]") @@ -126,8 +124,11 @@ /datum/ui_module/station_traits_panel/proc/too_late_to_revert() return SSticker.current_state >= GAME_STATE_PLAYING -/datum/ui_module/station_traits_panel/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.admin_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/station_traits_panel/ui_state(mob/user) + return GLOB.admin_state + +/datum/ui_module/station_traits_panel/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "StationTraitsPanel", "Station Traits Panel", 700, 600, master_ui, state = state) + ui = new(user, src, "StationTraitsPanel") ui.open() diff --git a/code/datums/uplink_items/uplink_traitor.dm b/code/datums/uplink_items/uplink_traitor.dm index 241069ebbd07..b2a6d7c70b86 100644 --- a/code/datums/uplink_items/uplink_traitor.dm +++ b/code/datums/uplink_items/uplink_traitor.dm @@ -91,7 +91,7 @@ name = "Chef Excellence's Special Sauce" desc = "A custom sauce made from the highly poisonous fly amanita mushrooms. Anyone who ingests it will take variable toxin damage depending on how long it has been in their system, with a higher dosage taking longer to metabolize." reference = "CESS" - item = /obj/item/reagent_containers/food/condiment/syndisauce + item = /obj/item/reagent_containers/condiment/syndisauce cost = 10 job = list("Chef") surplus = 0 // Far too specific in its use. diff --git a/code/datums/wires/airlock_wires.dm b/code/datums/wires/airlock_wires.dm index 9fe15e604505..d87cc86d2e9a 100644 --- a/code/datums/wires/airlock_wires.dm +++ b/code/datums/wires/airlock_wires.dm @@ -7,8 +7,6 @@ holder_type = /obj/machinery/door/airlock wire_count = 12 // 10 actual, 2 duds. proper_name = "Airlock" - window_x = 400 - window_y = 101 /datum/wires/airlock/New(atom/_holder) wires = list( diff --git a/code/datums/wires/alarm.dm b/code/datums/wires/alarm.dm index b4dcd8bd001f..8660a8e64219 100644 --- a/code/datums/wires/alarm.dm +++ b/code/datums/wires/alarm.dm @@ -2,8 +2,6 @@ /datum/wires/alarm holder_type = /obj/machinery/alarm wire_count = 5 - window_x = 385 - window_y = 90 proper_name = "Air alarm" /datum/wires/alarm/New(atom/_holder) diff --git a/code/datums/wires/apc_wires.dm b/code/datums/wires/apc_wires.dm index 3c322ff37772..ca1167c28206 100644 --- a/code/datums/wires/apc_wires.dm +++ b/code/datums/wires/apc_wires.dm @@ -2,8 +2,6 @@ holder_type = /obj/machinery/power/apc wire_count = 4 proper_name = "APC" - window_x = 355 - window_y = 97 /datum/wires/apc/New(atom/_holder) wires = list(WIRE_IDSCAN, WIRE_MAIN_POWER1, WIRE_MAIN_POWER2, WIRE_AI_CONTROL) diff --git a/code/datums/wires/autolathe_wires.dm b/code/datums/wires/autolathe_wires.dm index 5339121c85a8..c0b7e14cea03 100644 --- a/code/datums/wires/autolathe_wires.dm +++ b/code/datums/wires/autolathe_wires.dm @@ -2,8 +2,6 @@ holder_type = /obj/machinery/autolathe wire_count = 10 proper_name = "Autolathe" - window_x = 340 - window_y = 55 /datum/wires/autolathe/New(atom/_holder) wires = list(WIRE_AUTOLATHE_HACK, WIRE_ELECTRIFY, WIRE_AUTOLATHE_DISABLE) diff --git a/code/datums/wires/camera_wires.dm b/code/datums/wires/camera_wires.dm index 39e0cb2c3e11..2bcdfb2ff606 100644 --- a/code/datums/wires/camera_wires.dm +++ b/code/datums/wires/camera_wires.dm @@ -4,8 +4,6 @@ holder_type = /obj/machinery/camera wire_count = 2 proper_name = "Camera" - window_x = 350 - window_y = 95 /datum/wires/camera/New(atom/_holder) wires = list(WIRE_FOCUS, WIRE_MAIN_POWER1) diff --git a/code/datums/wires/explosive.dm b/code/datums/wires/explosive.dm index acabe00ccaf6..4d68b3fda552 100644 --- a/code/datums/wires/explosive.dm +++ b/code/datums/wires/explosive.dm @@ -1,8 +1,6 @@ /datum/wires/explosive wire_count = 1 proper_name = "Explosive" - window_x = 320 - window_y = 50 /datum/wires/explosive/New(atom/_holder) wires = list(WIRE_EXPLODE) diff --git a/code/datums/wires/mod_wires.dm b/code/datums/wires/mod_wires.dm index d63c1162eda1..ba83886fb3e9 100644 --- a/code/datums/wires/mod_wires.dm +++ b/code/datums/wires/mod_wires.dm @@ -3,8 +3,6 @@ randomize = TRUE //Every modsuit is personalised wire_count = 6 // 4 actual, 2 duds proper_name = "MOD control unit" - window_x = 345 - window_y = 90 /datum/wires/mod/New(atom/holder) wires = list(WIRE_HACK, WIRE_DISABLE, WIRE_ELECTRIFY, WIRE_INTERFACE) diff --git a/code/datums/wires/mulebot_wires.dm b/code/datums/wires/mulebot_wires.dm index cb13b0d67184..437b32bc211f 100644 --- a/code/datums/wires/mulebot_wires.dm +++ b/code/datums/wires/mulebot_wires.dm @@ -3,8 +3,6 @@ holder_type = /mob/living/simple_animal/bot/mulebot wire_count = 10 proper_name = "Mulebot" - window_x = 370 - window_y = -12 /datum/wires/mulebot/New(atom/_holder) wires = list( diff --git a/code/datums/wires/nuclearbomb_wires.dm b/code/datums/wires/nuclearbomb_wires.dm index b3627ca091c0..6282f8904668 100644 --- a/code/datums/wires/nuclearbomb_wires.dm +++ b/code/datums/wires/nuclearbomb_wires.dm @@ -3,8 +3,6 @@ randomize = TRUE wire_count = 7 // 3 actual, 4 duds. proper_name = "Nuclear bomb" - window_x = 345 - window_y = 75 /datum/wires/nuclearbomb/New(atom/_holder) wires = list(WIRE_BOMB_LIGHT, WIRE_BOMB_TIMING, WIRE_BOMB_SAFETY) diff --git a/code/datums/wires/particle_accelerator_wires.dm b/code/datums/wires/particle_accelerator_wires.dm index e285f4cf8988..526ffd802700 100644 --- a/code/datums/wires/particle_accelerator_wires.dm +++ b/code/datums/wires/particle_accelerator_wires.dm @@ -2,8 +2,6 @@ wire_count = 5 holder_type = /obj/machinery/particle_accelerator/control_box proper_name = "Particle accelerator control" - window_x = 361 - window_y = 22 /datum/wires/particle_acc/control_box/New(atom/_holder) wires = list(WIRE_PARTICLE_POWER, WIRE_PARTICLE_STRENGTH, WIRE_PARTICLE_INTERFACE, WIRE_PARTICLE_POWER_LIMIT) diff --git a/code/datums/wires/radio_wires.dm b/code/datums/wires/radio_wires.dm index 1efee71692d8..2932ca3118af 100644 --- a/code/datums/wires/radio_wires.dm +++ b/code/datums/wires/radio_wires.dm @@ -2,8 +2,6 @@ holder_type = /obj/item/radio wire_count = 3 proper_name = "Radio" - window_x = 330 - window_y = 37 /datum/wires/radio/New(atom/_holder) wires = list(WIRE_RADIO_SIGNAL, WIRE_RADIO_RECEIVER, WIRE_RADIO_TRANSMIT) diff --git a/code/datums/wires/robot_wires.dm b/code/datums/wires/robot_wires.dm index 927980c57fa9..cde2d653a7c9 100644 --- a/code/datums/wires/robot_wires.dm +++ b/code/datums/wires/robot_wires.dm @@ -2,8 +2,6 @@ randomize = TRUE holder_type = /mob/living/silicon/robot wire_count = 5 - window_x = 340 - window_y = 106 proper_name = "Cyborg" /datum/wires/robot/New(atom/_holder) diff --git a/code/datums/wires/smartfridge_wires.dm b/code/datums/wires/smartfridge_wires.dm index 3955b1849b0d..78b82939e26d 100644 --- a/code/datums/wires/smartfridge_wires.dm +++ b/code/datums/wires/smartfridge_wires.dm @@ -2,8 +2,6 @@ holder_type = /obj/machinery/smartfridge wire_count = 3 proper_name = "Smartfridge" - window_x = 340 - window_y = 103 /datum/wires/smartfridge/New(atom/_holder) wires = list(WIRE_ELECTRIFY, WIRE_IDSCAN, WIRE_THROW_ITEM) @@ -12,7 +10,6 @@ /datum/wires/smartfridge/secure randomize = TRUE wire_count = 4 // 3 actual, 1 dud. - window_y = 97 /datum/wires/smartfridge/interactable(mob/user) var/obj/machinery/smartfridge/S = holder diff --git a/code/datums/wires/suitstorage.dm b/code/datums/wires/suitstorage.dm index d9df0399dd42..c9fd548f0a63 100644 --- a/code/datums/wires/suitstorage.dm +++ b/code/datums/wires/suitstorage.dm @@ -2,8 +2,6 @@ holder_type = /obj/machinery/suit_storage_unit wire_count = 8 proper_name = "Suit storage unit" - window_x = 350 - window_y = 85 /datum/wires/suitstorage/New(atom/_holder) wires = list(WIRE_IDSCAN, WIRE_ELECTRIFY, WIRE_SAFETY, WIRE_SSU_UV) diff --git a/code/datums/wires/syndicatebomb_wires.dm b/code/datums/wires/syndicatebomb_wires.dm index bd996f72fccd..e8cb953f43b7 100644 --- a/code/datums/wires/syndicatebomb_wires.dm +++ b/code/datums/wires/syndicatebomb_wires.dm @@ -3,8 +3,6 @@ holder_type = /obj/machinery/syndicatebomb wire_count = 5 proper_name = "Syndicate bomb" - window_x = 320 - window_y = 22 /datum/wires/syndicatebomb/New(atom/_holder) wires = list(WIRE_BOMB_DELAY, WIRE_EXPLODE, WIRE_BOMB_UNBOLT,WIRE_BOMB_PROCEED, WIRE_BOMB_ACTIVATE) diff --git a/code/datums/wires/tesla_coil.dm b/code/datums/wires/tesla_coil.dm index f4dbf39017a1..30f15539b7ed 100644 --- a/code/datums/wires/tesla_coil.dm +++ b/code/datums/wires/tesla_coil.dm @@ -2,8 +2,6 @@ wire_count = 1 holder_type = /obj/machinery/power/tesla_coil proper_name = "Tesla coil" - window_x = 320 - window_y = 50 /datum/wires/tesla_coil/New(atom/_holder) wires = list(WIRE_TESLACOIL_ZAP) diff --git a/code/datums/wires/vending_wires.dm b/code/datums/wires/vending_wires.dm index 8fe759af72ef..0d591ca15a36 100644 --- a/code/datums/wires/vending_wires.dm +++ b/code/datums/wires/vending_wires.dm @@ -1,8 +1,6 @@ /datum/wires/vending holder_type = /obj/machinery/economy/vending wire_count = 4 - window_y = 112 - window_x = 350 proper_name = "Vending machine" /datum/wires/vending/New(atom/_holder) diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index 896be0f2c908..58fc524c8c0a 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -19,10 +19,6 @@ var/list/colors /// An associative list of signalers attached to the wires. The wire color is the key, and the signaler object reference is the value. var/list/assemblies - /// The width of the wire TGUI window. - var/window_x = 300 - /// The height of the wire TGUI window. Will get longer as needed, based on the `wire_count`. - var/window_y = 100 /datum/wires/New(atom/_holder) ..() @@ -92,10 +88,13 @@ /datum/wires/ui_host() return holder -/datum/wires/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/wires/ui_state(mob/user) + return GLOB.physical_state + +/datum/wires/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Wires", "[proper_name] wires", window_x, window_y + wire_count * 30, master_ui, state) + ui = new(user, src, "Wires", "[proper_name] wires") ui.open() /datum/wires/ui_data(mob/user) diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 7fb1115727fb..1b60bd3a5193 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -398,13 +398,16 @@ ui_interact(user) -/obj/machinery/computer/scan_consolenew/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/computer/scan_consolenew/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/scan_consolenew/ui_interact(mob/user, datum/tgui/ui = null) if(user == connected.occupant) return - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "DNAModifier", name, 660, 700, master_ui, state) + ui = new(user, src, "DNAModifier", name) ui.open() /obj/machinery/computer/scan_consolenew/ui_data(mob/user) diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index a09ad19b1ab3..e015a7e007d8 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -260,7 +260,7 @@ to_chat(user, "[src] crumbles to ashes.") qdel(src) -/obj/item/reagent_containers/food/drinks/bottle/unholywater +/obj/item/reagent_containers/drinks/bottle/unholywater name = "flask of unholy water" desc = "Toxic to nonbelievers; this water renews and reinvigorates the faithful of a cult." icon_state = "holyflask" diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index 7db14947e373..efd2e7a02b51 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -145,7 +145,7 @@ selection_prompt = "You study the rituals on the altar..." selection_title = "Altar" creation_message = "You kneel before the altar and your faith is rewarded with a %ITEM%!" - choosable_items = list("Eldritch Whetstone" = /obj/item/whetstone/cult, "Flask of Unholy Water" = /obj/item/reagent_containers/food/drinks/bottle/unholywater, + choosable_items = list("Eldritch Whetstone" = /obj/item/whetstone/cult, "Flask of Unholy Water" = /obj/item/reagent_containers/drinks/bottle/unholywater, "Construct Shell" = /obj/structure/constructshell) /obj/structure/cult/functional/altar/Initialize(mapload) diff --git a/code/game/gamemodes/miniantags/abduction/gland.dm b/code/game/gamemodes/miniantags/abduction/gland.dm index 0cb5317bb8a6..917b73b48d6d 100644 --- a/code/game/gamemodes/miniantags/abduction/gland.dm +++ b/code/game/gamemodes/miniantags/abduction/gland.dm @@ -265,7 +265,7 @@ /obj/item/organ/internal/heart/gland/egg/activate() owner.visible_message("[owner] [pick(EGG_LAYING_MESSAGES)]") - new /obj/item/reagent_containers/food/snacks/egg/gland(get_turf(owner)) + new /obj/item/food/snacks/egg/gland(get_turf(owner)) /obj/item/organ/internal/heart/gland/electric cooldown_low = 800 diff --git a/code/game/gamemodes/miniantags/abduction/machinery/console.dm b/code/game/gamemodes/miniantags/abduction/machinery/console.dm index 3946527036b7..e5f4a64c7156 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/console.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/console.dm @@ -102,7 +102,6 @@ dat += "NO AGENT VEST DETECTED" var/datum/browser/popup = new(user, "computer", "Abductor Console", 400, 500) popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.open() /obj/machinery/abductor/console/Topic(href, href_list) diff --git a/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm b/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm index 8d490c75109e..0370c73435df 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm @@ -40,10 +40,13 @@ if(!length(colors)) colors = shuffle(color_pool) -/obj/machinery/abductor/gland_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/abductor/gland_dispenser/ui_state(mob/user) + return GLOB.physical_state + +/obj/machinery/abductor/gland_dispenser/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "GlandDispenser", name, 300, 338, master_ui, state) + ui = new(user, src, "GlandDispenser", name) ui.open() /obj/machinery/abductor/gland_dispenser/ui_data(mob/user) diff --git a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm index e23b5075a55b..0b83da81f333 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm @@ -9,7 +9,7 @@ var/credits = 0 var/list/history = list() var/list/abductee_minds = list() - var/flash = " - || - " + var/flash = "Idle." var/obj/machinery/abductor/console/console var/mob/living/carbon/human/occupant @@ -40,15 +40,16 @@ target.forceMove(src) occupant = target + flash = "Machine ready." update_icon(UPDATE_ICON_STATE) add_fingerprint(user) return TRUE /obj/machinery/abductor/experiment/attack_hand(mob/user) - if(..()) + if(!isabductor(user)) + to_chat(user, "You don't understand any of the alien writing!") return - - experimentUI(user) + ui_interact(user) /obj/machinery/abductor/experiment/proc/dissection_icon(mob/living/carbon/human/H) var/icon/I = icon(H.stand_icon) @@ -60,75 +61,62 @@ return I -/obj/machinery/abductor/experiment/proc/experimentUI(mob/user) - var/dat - dat += "

Experiment

" +/obj/machinery/abductor/experiment/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/abductor/experiment/attack_ghost(mob/user) + ui_interact(user) + +/obj/machinery/abductor/experiment/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ExperimentConsole", name) + ui.open() + +/obj/machinery/abductor/experiment/ui_data(mob/user) + var/list/data = list() + data["open"] = occupant ? TRUE : FALSE + data["feedback"] = flash + data["occupant"] = occupant ? TRUE : FALSE + data["occupant_name"] = null + data["occupant_status"] = null if(occupant) - var/icon/H = icon(dissection_icon(occupant), dir = SOUTH) - if(H) - user << browse_rsc(H, "dissection_img.png") - dat += "
" - dat += "" - dat += "" - else - dat += "ERR: Unable to retrieve image data for occupant." - dat += "Probe
" - dat += "Dissect
" - dat += "Analyze
" - dat += "
" - else - dat += "Experiment " - - if(!occupant) - dat += "

Machine Unoccupied

" - else - dat += "

Subject Status :

" - dat += "[occupant.name] => " - switch(occupant.stat) - if(0) - dat += "Conscious" - if(1) - dat += "Unconscious" - else - dat += "Deceased" - dat += "
" - dat += "[flash]" - dat += "
" - dat += "Scan" - dat += "Eject Occupant" : "unoccupied=1'>Unoccupied"]" - var/datum/browser/popup = new(user, "experiment", "Probing Console", 300, 300) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - popup.set_content(dat) - popup.open() - -/obj/machinery/abductor/experiment/Topic(href, href_list) - if(..() || usr == occupant) - return - usr.set_machine(src) - if(href_list["refresh"]) - updateUsrDialog() + var/mob/living/mob_occupant = occupant + data["occupant_name"] = mob_occupant.name + data["occupant_status"] = mob_occupant.stat + return data + +/obj/machinery/abductor/experiment/ui_act(action, list/params) + . = ..() + if(.) return - if(href_list["eject"]) - eject_abductee() - return - if(occupant && occupant.stat != DEAD) - if(href_list["experiment"]) - flash = Experiment(occupant,href_list["experiment"]) - updateUsrDialog() - add_fingerprint(usr) -/obj/machinery/abductor/experiment/proc/Experiment(mob/occupant,type) + switch(action) + if("door") + eject_abductee() + flash = "Specimen ejected!" + + if("experiment") + if(!occupant) + return + var/mob/living/mob_occupant = occupant + if(mob_occupant.stat == DEAD) + return + flash = experiment(mob_occupant, params["experiment_type"], usr) + return TRUE + +/obj/machinery/abductor/experiment/proc/experiment(mob/occupant,type) var/mob/living/carbon/human/H = occupant var/point_reward = 0 if(H in history) - return "Specimen already in database." + return "Specimen already in database." if(H.stat == DEAD) atom_say("Specimen deceased - please provide fresh sample.") - return "Specimen deceased." + return "Specimen deceased." var/obj/item/organ/internal/heart/gland/GlandTest = locate() in H.internal_organs if(!GlandTest) atom_say("Experimental dissection not detected!") - return "No glands detected!" + return "No glands detected!" if(H.mind != null && H.ckey != null) history += H abductee_minds += H.mind @@ -158,22 +146,22 @@ point_reward++ if(point_reward > 0) eject_abductee() - SendBack(H) - playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) + send_back(H) + playsound(src.loc, 'sound/machines/ding.ogg', 50, TRUE) points += point_reward credits += point_reward - return "Experiment successful! [point_reward] new data-points collected." + return "Experiment successful! [point_reward] new data-points collected." else - playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 1) - return "Experiment failed! No replacement organ detected." + playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, TRUE) + return "Experiment failed! No replacement organ detected." else atom_say("Brain activity nonexistent - disposing sample...") eject_abductee() - SendBack(H) - return "Specimen braindead - disposed." + send_back(H) + return "Specimen braindead - disposed." -/obj/machinery/abductor/experiment/proc/SendBack(mob/living/carbon/human/H) +/obj/machinery/abductor/experiment/proc/send_back(mob/living/carbon/human/H) H.Sleeping(16 SECONDS) if(console && console.pad && console.pad.teleport_target) H.forceMove(console.pad.teleport_target) @@ -201,6 +189,7 @@ var/mob/living/carbon/human/H = grabbed.affecting H.forceMove(src) occupant = H + flash = "Machine ready." update_icon(UPDATE_ICON_STATE) add_fingerprint(user) qdel(G) diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm index bf2cc95482d2..c0cbe14476bd 100644 --- a/code/game/gamemodes/miniantags/guardian/guardian.dm +++ b/code/game/gamemodes/miniantags/guardian/guardian.dm @@ -29,7 +29,7 @@ melee_damage_lower = 15 melee_damage_upper = 15 AIStatus = AI_OFF - butcher_results = list(/obj/item/reagent_containers/food/snacks/ectoplasm = 1) + butcher_results = list(/obj/item/food/snacks/ectoplasm = 1) var/summoned = FALSE var/cooldown = 0 var/damage_transfer = 1 //how much damage from each attack we transfer to the owner diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm index be867dcdab5b..312117880f09 100644 --- a/code/game/gamemodes/miniantags/morph/morph.dm +++ b/code/game/gamemodes/miniantags/morph/morph.dm @@ -34,7 +34,7 @@ wander = FALSE attacktext = "glomps" attack_sound = 'sound/effects/blobattack.ogg' - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2) + butcher_results = list(/obj/item/food/snacks/meat/slab = 2) /// If the morph is disguised or not var/morphed = FALSE diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index f20e122a817f..1d649cf290fb 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -335,7 +335,7 @@ GLOBAL_VAR(bomb_set) /obj/machinery/nuclearbomb/attack_ghost(mob/user as mob) if(!panel_open) - return ui_interact(user, state = GLOB.viewer_state) + return ui_interact(user) if(removal_stage != NUKE_CORE_FULLY_EXPOSED || !core) return wires.Interact(user) @@ -356,10 +356,13 @@ GLOBAL_VAR(bomb_set) core = null update_icon(UPDATE_OVERLAYS) -/obj/machinery/nuclearbomb/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/nuclearbomb/ui_state(mob/user) + return GLOB.physical_state + +/obj/machinery/nuclearbomb/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "NuclearBomb", name, 450, 300, master_ui, state) + ui = new(user, src, "NuclearBomb", name) ui.open() /obj/machinery/nuclearbomb/ui_data(mob/user) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index bc74e2c07754..21606dda4309 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -10,10 +10,13 @@ w_class = WEIGHT_CLASS_TINY var/used = FALSE -/obj/item/contract/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/contract/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/contract/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "WizardApprenticeContract", name, 400, 600, master_ui, state) + ui = new(user, src, "WizardApprenticeContract", name) ui.open() /obj/item/contract/ui_data(mob/user) @@ -877,12 +880,12 @@ GLOBAL_LIST_EMPTY(multiverse) heal_burn = 25 heal_oxy = 25 -/obj/item/reagent_containers/food/drinks/everfull +/obj/item/reagent_containers/drinks/everfull name = "everfull mug" desc = "An enchanted mug which can be filled with any of various liquids on command." icon_state = "evermug" -/obj/item/reagent_containers/food/drinks/everfull/attack_self(mob/user) +/obj/item/reagent_containers/drinks/everfull/attack_self(mob/user) var/static/list/options = list("Omnizine" = image(icon = 'icons/obj/storage.dmi', icon_state = "firstaid"), "Ale" = image(icon = 'icons/obj/drinks.dmi', icon_state = "alebottle"), "Wine" = image(icon = 'icons/obj/drinks.dmi', icon_state = "wineglass"), @@ -908,7 +911,7 @@ GLOBAL_LIST_EMPTY(multiverse) to_chat(user, "The [name] fills to brimming with [options_to_descriptions[choice]].") magic_fill(options_to_reagent[choice]) -/obj/item/reagent_containers/food/drinks/everfull/proc/magic_fill(reagent_choice) +/obj/item/reagent_containers/drinks/everfull/proc/magic_fill(reagent_choice) reagents.clear_reagents() reagents.add_reagent(reagent_choice, volume) diff --git a/code/game/gamemodes/wizard/raginmages.dm b/code/game/gamemodes/wizard/raginmages.dm index 434059436730..e710e0241471 100644 --- a/code/game/gamemodes/wizard/raginmages.dm +++ b/code/game/gamemodes/wizard/raginmages.dm @@ -127,7 +127,7 @@ if(harry) var/mob/living/carbon/human/new_character = makeBody(harry) new_character.mind.make_Wizard() // This puts them at the wizard spawn, worry not - new_character.equip_to_slot_or_del(new /obj/item/reagent_containers/food/drinks/mugwort(harry), SLOT_HUD_IN_BACKPACK) + new_character.equip_to_slot_or_del(new /obj/item/reagent_containers/drinks/mugwort(harry), SLOT_HUD_IN_BACKPACK) // The first wiznerd can get their mugwort from the wizard's den, new ones will also need mugwort! mages_made++ dust_if_respawnable(harry) diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index a0849e4c800c..0d31ce60e1d6 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -469,7 +469,7 @@ /datum/spellbook_entry/item/everfull_mug name = "Everfull Mug" desc = "A magical mug that can be filled with omnizine at will, though beware of addiction! It can also produce alchohol and other less useful substances." - item_path = /obj/item/reagent_containers/food/drinks/everfull + item_path = /obj/item/reagent_containers/drinks/everfull cost = 1 category = "Artefacts" diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm index 1e34bbe593bc..3d3ed6b14fea 100644 --- a/code/game/jobs/job/support.dm +++ b/code/game/jobs/job/support.dm @@ -281,12 +281,12 @@ id = /obj/item/card/id/clown pda = /obj/item/pda/clown backpack_contents = list( - /obj/item/reagent_containers/food/snacks/grown/banana = 1, + /obj/item/food/snacks/grown/banana = 1, /obj/item/stamp/clown = 1, /obj/item/toy/crayon/rainbow = 1, /obj/item/storage/fancy/crayons = 1, /obj/item/reagent_containers/spray/waterflower = 1, - /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana = 1, + /obj/item/reagent_containers/drinks/bottle/bottleofbanana = 1, /obj/item/instrument/bikehorn = 1 ) @@ -377,7 +377,7 @@ pda = /obj/item/pda/mime backpack_contents = list( /obj/item/toy/crayon/mime = 1, - /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing = 1, + /obj/item/reagent_containers/drinks/bottle/bottleofnothing = 1, /obj/item/cane = 1 ) diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index d3e46ed83290..f5ef17c1d15a 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -98,10 +98,10 @@ ui_interact(user) -/obj/machinery/pdapainter/ui_interact(mob/user, ui_key, datum/tgui/ui, force_open, datum/tgui/master_ui, datum/ui_state/state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/pdapainter/ui_interact(mob/user, datum/tgui/ui, datum/ui_state/state) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PdaPainter", "PDA Painter", 510, 510) + ui = new(user, src, "PdaPainter", "PDA Painter") ui.open() /obj/machinery/pdapainter/ui_data(mob/user) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 452deb3105d8..e14110c44de4 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -157,10 +157,13 @@ ui_interact(user) -/obj/machinery/sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/sleeper/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/sleeper/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Sleeper", "Sleeper", 550, 775) + ui = new(user, src, "Sleeper", "Sleeper") ui.open() /obj/machinery/sleeper/ui_data(mob/user) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index cf281ed1577b..17dd6bb2863f 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -218,10 +218,13 @@ new /obj/effect/gibspawner/generic(get_turf(loc)) //I REPLACE YOUR TECHNOLOGY WITH FLESH! qdel(src) -/obj/machinery/bodyscanner/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/bodyscanner/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/bodyscanner/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BodyScanner", "Body Scanner", 690, 600) + ui = new(user, src, "BodyScanner", "Body Scanner") ui.open() /obj/machinery/bodyscanner/ui_data(mob/user) diff --git a/code/game/machinery/airlock_control/airlock_controllers.dm b/code/game/machinery/airlock_control/airlock_controllers.dm index 4d7a59cf4d14..935a7619307a 100644 --- a/code/game/machinery/airlock_control/airlock_controllers.dm +++ b/code/game/machinery/airlock_control/airlock_controllers.dm @@ -345,10 +345,13 @@ send an additional command to open the door again. else icon_state = "access_control_off" -/obj/machinery/airlock_controller/access_controller/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/airlock_controller/access_controller/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/airlock_controller/access_controller/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AirlockAccessController", name, 470, 290, master_ui, state) + ui = new(user, src, "AirlockAccessController", name) ui.open() /obj/machinery/airlock_controller/access_controller/ui_data(mob/user) @@ -378,10 +381,13 @@ send an additional command to open the door again. stack_trace("[src] at [x],[y],[z] didnt setup any vents! Please double check the IDs!") -/obj/machinery/airlock_controller/air_cycler/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/airlock_controller/air_cycler/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/airlock_controller/air_cycler/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ExternalAirlockController", name, 470, 290, master_ui, state) + ui = new(user, src, "ExternalAirlockController", name) ui.open() /obj/machinery/airlock_controller/air_cycler/ui_data(mob/user) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 9b342c5ba041..252aca6b6dc5 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -98,10 +98,13 @@ else if(!disabled) ui_interact(user) -/obj/machinery/autolathe/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/autolathe/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/autolathe/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Autolathe", name, 750, 700, master_ui, state) + ui = new(user, src, "Autolathe", name) ui.open() @@ -191,10 +194,10 @@ return var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) var/coeff = get_coeff(design_last_ordered) - if(design_last_ordered.materials["$metal"] / coeff > materials.amount(MAT_METAL)) + if(design_last_ordered.materials[MAT_METAL] / coeff > materials.amount(MAT_METAL)) to_chat(usr, "Invalid design (not enough metal)") return - if(design_last_ordered.materials["$glass"] / coeff > materials.amount(MAT_GLASS)) + if(design_last_ordered.materials[MAT_GLASS] / coeff > materials.amount(MAT_GLASS)) to_chat(usr, "Invalid design (not enough glass)") return if(!hacked && ("hacked" in design_last_ordered.category)) @@ -220,7 +223,7 @@ busy = FALSE /obj/machinery/autolathe/ui_status(mob/user, datum/ui_state/state) - . = disabled ? STATUS_DISABLED : STATUS_INTERACTIVE + . = disabled ? UI_DISABLED : UI_INTERACTIVE return min(..(), .) diff --git a/code/game/machinery/clonepod.dm b/code/game/machinery/clonepod.dm index 1a1eaa0e5ba2..9a0b0b34589d 100644 --- a/code/game/machinery/clonepod.dm +++ b/code/game/machinery/clonepod.dm @@ -10,12 +10,12 @@ // Not a comprehensive list: Further PRs should add appropriate items here. // Meat as usual, monstermeat covers goliath, xeno, spider, bear meat GLOBAL_LIST_INIT(cloner_biomass_items, list(\ -/obj/item/reagent_containers/food/snacks/meat,\ -/obj/item/reagent_containers/food/snacks/monstermeat, -/obj/item/reagent_containers/food/snacks/carpmeat, -/obj/item/reagent_containers/food/snacks/salmonmeat, -/obj/item/reagent_containers/food/snacks/catfishmeat, -/obj/item/reagent_containers/food/snacks/tofurkey)) +/obj/item/food/snacks/meat,\ +/obj/item/food/snacks/monstermeat, +/obj/item/food/snacks/carpmeat, +/obj/item/food/snacks/salmonmeat, +/obj/item/food/snacks/catfishmeat, +/obj/item/food/snacks/tofurkey)) #define MINIMUM_HEAL_LEVEL 40 #define CLONE_INITIAL_DAMAGE 190 diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index b20a4969e1de..76910a29bf4d 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -143,10 +143,13 @@ return FALSE return TRUE -/obj/machinery/computer/HolodeckControl/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/HolodeckControl/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/HolodeckControl/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Holodeck", name, 400, 500, master_ui, state) + ui = new(user, src, "Holodeck", name) ui.autoupdate = TRUE ui.open() diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index 79fd1330e8ac..89704896dc41 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -59,10 +59,13 @@ add_fingerprint(user) ui_interact(user) -/obj/machinery/computer/operating/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/operating/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/operating/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "OperatingComputer", "Patient Monitor", 650, 455, master_ui, state) + ui = new(user, src, "OperatingComputer", "Patient Monitor") ui.open() /obj/machinery/computer/operating/ui_data(mob/user) diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index eae21415780b..d8a84b696208 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -28,10 +28,13 @@ /obj/machinery/computer/aifixer/attack_hand(mob/user as mob) ui_interact(user) -/obj/machinery/computer/aifixer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/aifixer/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/aifixer/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AIFixer", name, 550, 500, master_ui, state) + ui = new(user, src, "AIFixer", name) ui.open() /obj/machinery/computer/aifixer/ui_data(mob/user) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 70d9b710d2a2..f701cb32c341 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -101,7 +101,6 @@ //onclose(user, "arcade") var/datum/browser/popup = new(user, "arcade", "Space Villain 2000") popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) popup.open() return @@ -411,7 +410,6 @@ dat += "

Close

" var/datum/browser/popup = new(user, "arcade", "The Orion Trail",400,700) popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) popup.open() return diff --git a/code/game/machinery/computer/arcade_games/recruiter.dm b/code/game/machinery/computer/arcade_games/recruiter.dm index cdfd12c76ae8..44341499fe4e 100644 --- a/code/game/machinery/computer/arcade_games/recruiter.dm +++ b/code/game/machinery/computer/arcade_games/recruiter.dm @@ -190,10 +190,13 @@ emagged = FALSE prizevend(50) -/obj/machinery/computer/arcade/recruiter/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/arcade/recruiter/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/arcade/recruiter/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "NTRecruiter", name, 400, 480) + ui = new(user, src, "NTRecruiter", name) ui.open() /obj/machinery/computer/arcade/recruiter/ui_data(mob/user) diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index c7cbecb247c6..93435e09ba4a 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -2,8 +2,6 @@ name = "atmospheric alert computer" desc = "Used to access the station's atmospheric sensors." circuit = /obj/item/circuitboard/atmos_alert - var/ui_x = 350 - var/ui_y = 300 icon_keyboard = "atmos_key" icon_screen = "alert:0" light_color = LIGHT_COLOR_CYAN @@ -42,10 +40,13 @@ /obj/machinery/computer/atmos_alert/attack_hand(mob/user) ui_interact(user) -/obj/machinery/computer/atmos_alert/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/atmos_alert/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/atmos_alert/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AtmosAlertConsole", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, "AtmosAlertConsole", name) ui.open() /obj/machinery/computer/atmos_alert/ui_data(mob/user) diff --git a/code/game/machinery/computer/atmos_controllers.dm b/code/game/machinery/computer/atmos_controllers.dm index 849ae9facf27..c42f44a809bd 100644 --- a/code/game/machinery/computer/atmos_controllers.dm +++ b/code/game/machinery/computer/atmos_controllers.dm @@ -145,15 +145,18 @@ GLOBAL_LIST_EMPTY(gas_sensors) /obj/machinery/computer/general_air_control/attack_hand(mob/user) ui_interact(user) -/obj/machinery/computer/general_air_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/computer/general_air_control/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/general_air_control/ui_interact(mob/user, datum/tgui/ui = null) if(!isprocessing) START_PROCESSING(SSmachines, src) refresh_all() - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) // We can use the same template here for sensors and for tanks with inlets/outlets with TGUI memes - ui = new(user, src, ui_key, "AtmosTankControl", name, 400, 400, master_ui, state) + ui = new(user, src, "AtmosTankControl", name) ui.open() /obj/machinery/computer/general_air_control/ui_data(mob/user) @@ -274,10 +277,11 @@ GLOBAL_LIST_EMPTY(gas_sensors) /obj/machinery/computer/general_air_control/process() // We only care about refreshing if people are looking at us - if(SStgui.get_open_ui_count(src) < 1) - return PROCESS_KILL + if(src in SStgui.open_uis_by_src) + refresh_all() + return - refresh_all() + return PROCESS_KILL /obj/machinery/computer/general_air_control/large_tank_control circuit = /obj/item/circuitboard/large_tank_control @@ -516,5 +520,8 @@ GLOBAL_LIST_EMPTY(gas_sensors) return ui_interact(user) -/obj/machinery/computer/atmoscontrol/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - atmos_control.ui_interact(user, ui_key, ui, force_open) +/obj/machinery/computer/atmoscontrol/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/atmoscontrol/ui_interact(mob/user, datum/tgui/ui = null) + atmos_control.ui_interact(user, ui) diff --git a/code/game/machinery/computer/brigcells.dm b/code/game/machinery/computer/brigcells.dm index 27001c5f8b7f..07a84e492f0d 100644 --- a/code/game/machinery/computer/brigcells.dm +++ b/code/game/machinery/computer/brigcells.dm @@ -22,10 +22,13 @@ return ui_interact(user) -/obj/machinery/computer/brigcells/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/brigcells/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/brigcells/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BrigCells", "Brig Cell Management", 1000, 400, master_ui, state) + ui = new(user, src, "BrigCells", "Brig Cell Management") ui.open() /obj/machinery/computer/brigcells/ui_data(mob/user) diff --git a/code/game/machinery/computer/camera_console.dm b/code/game/machinery/computer/camera_console.dm index 2bae6d59a0ca..18cf4997b358 100644 --- a/code/game/machinery/computer/camera_console.dm +++ b/code/game/machinery/computer/camera_console.dm @@ -55,9 +55,12 @@ qdel(cam_background) return ..() -/obj/machinery/computer/security/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/computer/security/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/security/ui_interact(mob/user, datum/tgui/ui = null) // Update UI - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) // Show static if can't use the camera if(!active_camera?.can_use()) show_camera_static() @@ -79,7 +82,7 @@ user.client.register_map_obj(plane) user.client.register_map_obj(cam_background) // Open UI - ui = new(user, src, ui_key, "CameraConsole", name, 870, 708, master_ui, state) + ui = new(user, src, "CameraConsole", name) ui.open() /obj/machinery/computer/security/ui_close(mob/user) diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index a29242b6a080..2fd321890ff5 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -307,10 +307,13 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) ui_interact(user) -/obj/machinery/computer/card/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/card/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/card/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "CardComputer", name, 800, 800, master_ui, state) + ui = new(user, src, "CardComputer", name) ui.open() /obj/machinery/computer/card/ui_data(mob/user) diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 35cd02c66764..b2f97024b389 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -110,18 +110,23 @@ updatemodules() ui_interact(user) -/obj/machinery/computer/cloning/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/computer/cloning/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/cloning/ui_interact(mob/user, datum/tgui/ui = null) if(stat & (NOPOWER|BROKEN)) return - var/datum/asset/cloning/assets = get_asset_datum(/datum/asset/cloning) - assets.send(user) - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "CloningConsole", "Cloning Console", 640, 520) + ui = new(user, src, "CloningConsole", "Cloning Console") ui.open() +/obj/machinery/computer/cloning/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/simple/cloning) + ) + /obj/machinery/computer/cloning/ui_data(mob/user) var/data[0] data["menu"] = src.menu diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 3a7586397b7a..27640417d4ec 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -418,10 +418,13 @@ ui_interact(user) -/obj/machinery/computer/communications/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/communications/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/communications/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "CommunicationsComputer", name, 500, 600, master_ui, state) + ui = new(user, src, "CommunicationsComputer", name) ui.open() /obj/machinery/computer/communications/ui_data(mob/user) diff --git a/code/game/machinery/computer/crew_monitoring.dm b/code/game/machinery/computer/crew_monitoring.dm index e10afe9d7ca5..17f19ffa65cb 100644 --- a/code/game/machinery/computer/crew_monitoring.dm +++ b/code/game/machinery/computer/crew_monitoring.dm @@ -26,8 +26,11 @@ return ui_interact(user) -/obj/machinery/computer/crew/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - crew_monitor.ui_interact(user, ui_key, ui, force_open) +/obj/machinery/computer/crew/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/crew/ui_interact(mob/user, datum/tgui/ui = null) + crew_monitor.ui_interact(user, ui) /obj/machinery/computer/crew/interact(mob/user) crew_monitor.ui_interact(user) diff --git a/code/game/machinery/computer/depot_consoles.dm b/code/game/machinery/computer/depot_consoles.dm index 6c5f0916bb93..aa2c59f41044 100644 --- a/code/game/machinery/computer/depot_consoles.dm +++ b/code/game/machinery/computer/depot_consoles.dm @@ -72,10 +72,13 @@ /obj/machinery/computer/syndicate_depot/proc/disable_special_functions() return -/obj/machinery/computer/syndicate_depot/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/syndicate_depot/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/syndicate_depot/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SyndicateComputerSimple", name, window_width, window_height, master_ui, state) + ui = new(user, src, "SyndicateComputerSimple", name) ui.open() /obj/machinery/computer/syndicate_depot/ui_data(mob/user) diff --git a/code/game/machinery/computer/medical_records.dm b/code/game/machinery/computer/medical_records.dm index fe4bd70aeba1..521925639715 100644 --- a/code/game/machinery/computer/medical_records.dm +++ b/code/game/machinery/computer/medical_records.dm @@ -75,10 +75,13 @@ add_fingerprint(user) ui_interact(user) -/obj/machinery/computer/med_data/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/med_data/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/med_data/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "MedicalRecords", "Medical Records", 800, 800, master_ui, state) + ui = new(user, src, "MedicalRecords", "Medical Records") ui.open() ui.set_autoupdate(FALSE) diff --git a/code/game/machinery/computer/power_monitor_console.dm b/code/game/machinery/computer/power_monitor_console.dm index a348027cef69..1d9d6be8cf5c 100644 --- a/code/game/machinery/computer/power_monitor_console.dm +++ b/code/game/machinery/computer/power_monitor_console.dm @@ -70,8 +70,11 @@ powernet = find_powernet() ui_interact(user) -/obj/machinery/computer/monitor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - power_monitor.ui_interact(user, ui_key, ui, force_open) +/obj/machinery/computer/monitor/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/monitor/ui_interact(mob/user, datum/tgui/ui = null) + power_monitor.ui_interact(user, ui) /obj/machinery/computer/monitor/interact(mob/user) power_monitor.ui_interact(user) diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index 873da0f43d79..10cb16d32ab4 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -55,10 +55,13 @@ return FALSE return TRUE -/obj/machinery/computer/prisoner/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/prisoner/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/prisoner/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PrisonerImplantManager", name, 500, 500, master_ui, state) + ui = new(user, src, "PrisonerImplantManager", name) ui.open() /obj/machinery/computer/prisoner/ui_data(mob/user) diff --git a/code/game/machinery/computer/robot_control.dm b/code/game/machinery/computer/robot_control.dm index f92e17490e6e..4f3003638243 100644 --- a/code/game/machinery/computer/robot_control.dm +++ b/code/game/machinery/computer/robot_control.dm @@ -131,10 +131,13 @@ return FALSE return TRUE -/obj/machinery/computer/robotics/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/robotics/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/robotics/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "RoboticsControlConsole", name, 500, 460, master_ui, state) + ui = new(user, src, "RoboticsControlConsole", name) ui.open() /obj/machinery/computer/robotics/ui_data(mob/user) diff --git a/code/game/machinery/computer/security_records.dm b/code/game/machinery/computer/security_records.dm index 4a5b30a9ef1c..c983a2212194 100644 --- a/code/game/machinery/computer/security_records.dm +++ b/code/game/machinery/computer/security_records.dm @@ -71,10 +71,13 @@ add_fingerprint(user) ui_interact(user) -/obj/machinery/computer/secure_data/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/secure_data/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/secure_data/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SecurityRecords", name, 800, 800) + ui = new(user, src, "SecurityRecords", name) ui.open() ui.set_autoupdate(FALSE) diff --git a/code/game/machinery/computer/sm_monitor.dm b/code/game/machinery/computer/sm_monitor.dm index 4c5e1171af58..443443dabd14 100644 --- a/code/game/machinery/computer/sm_monitor.dm +++ b/code/game/machinery/computer/sm_monitor.dm @@ -25,10 +25,13 @@ return ui_interact(user) -/obj/machinery/computer/sm_monitor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/sm_monitor/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/sm_monitor/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SupermatterMonitor", name, 600, 350, master_ui, state) + ui = new(user, src, "SupermatterMonitor", name) ui.open() /obj/machinery/computer/sm_monitor/ui_data(mob/user) diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index 4b94acf7e210..70eca5d39826 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -6,8 +6,6 @@ icon_screen = "alert:0" light_color = LIGHT_COLOR_CYAN circuit = /obj/item/circuitboard/stationalert_engineering - var/ui_x = 325 - var/ui_y = 500 var/list/alarms_listend_for = list("Fire", "Atmosphere", "Power") /obj/machinery/computer/station_alert/Initialize(mapload) @@ -28,10 +26,13 @@ return ui_interact(user) -/obj/machinery/computer/station_alert/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/station_alert/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/station_alert/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "StationAlertConsole", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, "StationAlertConsole", name) ui.open() /obj/machinery/computer/station_alert/ui_data(mob/user) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index eb1616420141..18a18f655aa0 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -58,10 +58,13 @@ add_fingerprint(user) ui_interact(user) -/obj/machinery/computer/cryopod/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/cryopod/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/cryopod/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "CryopodConsole", name, 400, 480) + ui = new(user, src, "CryopodConsole", name) ui.open() /obj/machinery/computer/cryopod/ui_data(mob/user) diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm index 8e43922363a4..0a35e1e34b73 100644 --- a/code/game/machinery/dish_drive.dm +++ b/code/game/machinery/dish_drive.dm @@ -14,7 +14,7 @@ /obj/item/trash/plate, /obj/item/trash/tray, /obj/item/trash/snack_bowl, - /obj/item/reagent_containers/food/drinks/drinkingglass, + /obj/item/reagent_containers/drinks/drinkingglass, /obj/item/kitchen/utensil/fork, /obj/item/shard, /obj/item/broken_bottle) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index ccac183f5213..349cacabcdc3 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -674,10 +674,13 @@ GLOBAL_LIST_EMPTY(airlock_emissive_underlays) /obj/machinery/door/airlock/attack_ai(mob/user) ui_interact(user) -/obj/machinery/door/airlock/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/door/airlock/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/door/airlock/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AiAirlock", name, 600, 400, master_ui, state) + ui = new(user, src, "AiAirlock", name) ui.open() diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 1966c339ea8e..070c29e377dc 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -40,10 +40,13 @@ // tgui\packages\tgui\interfaces\AirlockElectronics.js -/obj/item/airlock_electronics/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/airlock_electronics/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/airlock_electronics/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AirlockElectronics", name, 450, 575, master_ui, state) + ui = new(user, src, "AirlockElectronics", name) ui.open() /obj/item/airlock_electronics/ui_data(mob/user) diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 4420697fcfb2..28719847da1e 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -295,10 +295,13 @@ return ui_interact(user) -/obj/machinery/door_timer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/door_timer/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/door_timer/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BrigTimer", name, 500, 450, master_ui, state) + ui = new(user, src, "BrigTimer", name) ui.open() /obj/machinery/door_timer/ui_static_data(mob/user) diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index 21117233e45f..bce1e147caeb 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -163,10 +163,13 @@ GLOBAL_LIST_EMPTY(doppler_arrays) else stat |= NOPOWER -/obj/machinery/doppler_array/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/doppler_array/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/doppler_array/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "TachyonArray", name, 500, 600, master_ui, state) + ui = new(user, src, "TachyonArray", name) ui.open() /obj/machinery/doppler_array/ui_data(mob/user) diff --git a/code/game/machinery/gameboard.dm b/code/game/machinery/gameboard.dm index be18b9219951..e0b8bb349418 100644 --- a/code/game/machinery/gameboard.dm +++ b/code/game/machinery/gameboard.dm @@ -50,18 +50,17 @@ if(.) return - var/dat - dat = replacetext(file2text('html/chess.html'), "\[hsrc]", UID()) - var/datum/asset/simple/chess/assets = get_asset_datum(/datum/asset/simple/chess) - assets.send(user) + var/datum/asset/chess_asset = get_asset_datum(/datum/asset/group/chess) + chess_asset.send(user) + var/dat = replacetext(file2text('html/chess.html'), "\[hsrc]", UID()) var/datum/browser/popup = new(user, "SpessChess", name, 500, 800, src) popup.set_content(dat) - popup.add_stylesheet("chess.css", 'html/browser/chess.css') - popup.add_script("garbochess.js", 'html/browser/garbochess.js') - //popup.add_script("boardui.js", 'html/browser/boardui.js') - popup.add_script("jquery-1.8.2.min.js", 'html/browser/jquery-1.8.2.min.js') - popup.add_script("jquery-ui-1.8.24.custom.min.js", 'html/browser/jquery-ui-1.8.24.custom.min.js') + popup.add_stylesheet("chess", 'html/browser/chess.css') + popup.add_script("boardui", 'html/browser/boardui.js') + popup.add_script("garbochess", 'html/browser/garbochess.js') + popup.add_script("jquery-1.8.2.min", 'html/browser/jquery-1.8.2.min.js') + popup.add_script("jquery-ui-1.8.24.custom.min", 'html/browser/jquery-ui-1.8.24.custom.min.js') popup.set_window_options("titlebar=0") popup.open() user.set_machine(src) @@ -72,7 +71,6 @@ if(user.client && user.machine == src) // I will look for you, user.unset_machine() // I will find you, user << browse(null, "window=SpessChess") // And I will kill you. - return /obj/machinery/gameboard/Topic(href, list/href_list) . = ..() diff --git a/code/game/machinery/guestpass.dm b/code/game/machinery/guestpass.dm index 2c236909a641..278e53b80994 100644 --- a/code/game/machinery/guestpass.dm +++ b/code/game/machinery/guestpass.dm @@ -80,12 +80,14 @@ return ui_interact(user) -/obj/machinery/computer/guestpass/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/guestpass/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/guestpass/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "GuestPass", name, 500, 850, master_ui, state) + ui = new(user, src, "GuestPass", name) ui.open() - ui.set_autoupdate(FALSE) /obj/machinery/computer/guestpass/ui_data(mob/user) var/list/data = list() diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index cb6bba8b720c..e433c7f17d41 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -193,7 +193,6 @@ GLOBAL_LIST_EMPTY(holopads) var/area/area = get_area(src) var/datum/browser/popup = new(user, "holopad", "[area] holopad", 400, 300) popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) popup.open() /obj/machinery/hologram/holopad/Topic(href, href_list) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 69ec66f91eaf..bd5cc4c82354 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -189,13 +189,13 @@ /obj/machinery/ui_status(mob/user, datum/ui_state/state) if(!interact_offline && (stat & (NOPOWER|BROKEN))) - return STATUS_CLOSE + return UI_CLOSE return ..() /obj/machinery/ui_status(mob/user, datum/ui_state/state) if(!interact_offline && (stat & (NOPOWER|BROKEN))) - return STATUS_CLOSE + return UI_CLOSE return ..() diff --git a/code/game/machinery/magnetic_module.dm b/code/game/machinery/magnetic_module.dm index 88a78dcfeea7..87442eac7123 100644 --- a/code/game/machinery/magnetic_module.dm +++ b/code/game/machinery/magnetic_module.dm @@ -237,10 +237,13 @@ if(magnets.len == 0 && autolink) link_magnets() -/obj/machinery/magnetic_controller/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/magnetic_controller/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/magnetic_controller/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "MagnetController", name, 400, 600) + ui = new(user, src, "MagnetController", name) ui.open() /obj/machinery/magnetic_controller/attack_ai(mob/user as mob) diff --git a/code/game/machinery/merch_vendor.dm b/code/game/machinery/merch_vendor.dm index fcbc117094ae..a6519cb7cf87 100644 --- a/code/game/machinery/merch_vendor.dm +++ b/code/game/machinery/merch_vendor.dm @@ -19,6 +19,9 @@ /obj/machinery/economy/merch/attack_hand(mob/user) ui_interact(user) +/obj/machinery/economy/merch/attack_ghost(mob/user) + ui_interact(user) + /obj/machinery/economy/merch/Initialize(mapload) . = ..() component_parts = list() @@ -74,10 +77,13 @@ user.put_in_hands(D) SSeconomy.total_vendor_transactions++ -/obj/machinery/economy/merch/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/economy/merch/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/economy/merch/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "MerchVendor", name, 450, 500, master_ui, state) + ui = new(user, src, "MerchVendor", name) ui.open() /obj/machinery/economy/merch/ui_data(mob/user) diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm index d3e0865feb44..c8ca52069366 100644 --- a/code/game/machinery/poolcontroller.dm +++ b/code/game/machinery/poolcontroller.dm @@ -161,10 +161,13 @@ linkedmist.Cut() -/obj/machinery/poolcontroller/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/poolcontroller/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/poolcontroller/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PoolController", "Pool Controller Interface", 520, 410) + ui = new(user, src, "PoolController", "Pool Controller Interface") ui.open() /obj/machinery/poolcontroller/proc/temp_to_str(temp) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 2739d7fe6f93..5ce688c64a62 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -211,16 +211,19 @@ GLOBAL_LIST_EMPTY(turret_icons) /obj/machinery/porta_turret/attack_hand(mob/user) ui_interact(user) -/obj/machinery/porta_turret/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/porta_turret/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/porta_turret/ui_interact(mob/user, datum/tgui/ui = null) if(HasController()) to_chat(user, "[src] can only be controlled using the assigned turret controller.") return if(!anchored) to_chat(user, "[src] has to be secured first!") return - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PortableTurret", name, 500, access_is_configurable() ? 800 : 400) + ui = new(user, src, "PortableTurret", name) ui.open() /obj/machinery/porta_turret/ui_data(mob/user) diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index eee369468a3e..dcc80752be8d 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -137,10 +137,13 @@ GLOBAL_LIST_EMPTY(allRequestConsoles) ui_interact(user) -/obj/machinery/requests_console/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/requests_console/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/requests_console/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "RequestConsole", "[department] Request Console", 520, 410, master_ui, state) + ui = new(user, src, "RequestConsole", "[department] Request Console") ui.open() /obj/machinery/requests_console/ui_data(mob/user) diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index 5e7f1fe550f8..ddbe364950df 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -38,10 +38,13 @@ UnregisterSignal(user_account, COMSIG_PARENT_QDELETING) user_account = null -/obj/machinery/economy/slot_machine/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/economy/slot_machine/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/economy/slot_machine/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SlotMachine", name, 350, 200, master_ui, state) + ui = new(user, src, "SlotMachine", name) ui.open() /obj/machinery/economy/slot_machine/ui_data(mob/user) diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 7a4bfc6a26f4..51382297d1db 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -595,10 +595,16 @@ wires.Interact(user) ui_interact(user) -/obj/machinery/suit_storage_unit/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/suit_storage_unit/attack_ghost(mob/user) + ui_interact(user) + +/obj/machinery/suit_storage_unit/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/suit_storage_unit/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SuitStorage", name, 402, 268, master_ui, state) + ui = new(user, src, "SuitStorage", name) ui.set_autoupdate(FALSE) ui.open() diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 6dc6c55a0393..1dc4d706e2dd 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -399,7 +399,7 @@ qdel(src) /obj/item/bombcore/badmin/summon - var/summon_path = /obj/item/reagent_containers/food/snacks/cookie + var/summon_path = /obj/item/food/snacks/cookie var/amt_summon = 1 /obj/item/bombcore/badmin/summon/detonate() diff --git a/code/game/machinery/tcomms/relay.dm b/code/game/machinery/tcomms/relay.dm index b13e7bc86ce4..475e25474157 100644 --- a/code/game/machinery/tcomms/relay.dm +++ b/code/game/machinery/tcomms/relay.dm @@ -139,10 +139,13 @@ // UI STUFF // ////////////// -/obj/machinery/tcomms/relay/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/tcomms/relay/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/tcomms/relay/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "TcommsRelay", name, 600, 400, master_ui, state) + ui = new(user, src, "TcommsRelay", name) ui.open() /obj/machinery/tcomms/relay/ui_data(mob/user) diff --git a/code/game/machinery/tcomms/tcomms_core.dm b/code/game/machinery/tcomms/tcomms_core.dm index a4b85d853382..b19fa2042d57 100644 --- a/code/game/machinery/tcomms/tcomms_core.dm +++ b/code/game/machinery/tcomms/tcomms_core.dm @@ -175,14 +175,17 @@ // UI STUFF // ////////////// -/obj/machinery/tcomms/core/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/tcomms/core/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/tcomms/core/ui_interact(mob/user, datum/tgui/ui = null) // This needs to happen here because of how late the language datum initializes. I dont like it if(length(nttc.valid_languages) == 1) nttc.update_languages() - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "TcommsCore", name, 900, 600, master_ui, state) + ui = new(user, src, "TcommsCore", name) ui.open() /obj/machinery/tcomms/core/ui_data(mob/user) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index ad5f3a59b41b..c63ce74635af 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -71,12 +71,15 @@ ui_interact(user) -/obj/machinery/computer/teleporter/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/computer/teleporter/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/teleporter/ui_interact(mob/user, datum/tgui/ui = null) if(stat & (NOPOWER|BROKEN)) return - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Teleporter", "Teleporter Console", 380, 260) + ui = new(user, src, "Teleporter", "Teleporter Console") ui.open() /obj/machinery/computer/teleporter/ui_data(mob/user) diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm index 0aec21cfcc4c..3126e5ffc5b0 100644 --- a/code/game/machinery/turret_control.dm +++ b/code/game/machinery/turret_control.dm @@ -141,10 +141,13 @@ /obj/machinery/turretid/attack_hand(mob/user as mob) ui_interact(user) -/obj/machinery/turretid/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/turretid/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/turretid/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PortableTurret", name, 500, 400) + ui = new(user, src, "PortableTurret", name) ui.open() /obj/machinery/turretid/ui_data(mob/user) diff --git a/code/game/machinery/vendors/contraband_vendors.dm b/code/game/machinery/vendors/contraband_vendors.dm index e12158e8fd32..29424174063b 100644 --- a/code/game/machinery/vendors/contraband_vendors.dm +++ b/code/game/machinery/vendors/contraband_vendors.dm @@ -68,10 +68,10 @@ icon_off = "nutri" icon_panel = "thin_vendor" category = VENDOR_TYPE_FOOD - products = list(/obj/item/reagent_containers/food/snacks/chips = 6, - /obj/item/reagent_containers/food/snacks/sosjerky = 6, - /obj/item/reagent_containers/food/snacks/syndicake = 6, - /obj/item/reagent_containers/food/snacks/cheesiehonkers = 6) + products = list(/obj/item/food/snacks/chips = 6, + /obj/item/food/snacks/sosjerky = 6, + /obj/item/food/snacks/syndicake = 6, + /obj/item/food/snacks/cheesiehonkers = 6) /obj/machinery/economy/vending/hydroseeds/syndicate_druglab products = list(/obj/item/seeds/ambrosia/deus = 2, diff --git a/code/game/machinery/vendors/departmental_vendors.dm b/code/game/machinery/vendors/departmental_vendors.dm index 142102a487ec..dbafb4359f37 100644 --- a/code/game/machinery/vendors/departmental_vendors.dm +++ b/code/game/machinery/vendors/departmental_vendors.dm @@ -100,13 +100,13 @@ /obj/item/kitchen/knife = 3, /obj/item/kitchen/rollingpin = 2, /obj/item/kitchen/sushimat = 3, - /obj/item/reagent_containers/food/drinks/drinkingglass = 8, + /obj/item/reagent_containers/drinks/drinkingglass = 8, /obj/item/clothing/suit/chef/classic = 2, /obj/item/storage/belt/chef = 2, - /obj/item/reagent_containers/food/condiment/pack/ketchup = 5, - /obj/item/reagent_containers/food/condiment/pack/hotsauce = 5, - /obj/item/reagent_containers/food/condiment/saltshaker =5, - /obj/item/reagent_containers/food/condiment/peppermill =5, + /obj/item/reagent_containers/condiment/pack/ketchup = 5, + /obj/item/reagent_containers/condiment/pack/hotsauce = 5, + /obj/item/reagent_containers/condiment/saltshaker =5, + /obj/item/reagent_containers/condiment/peppermill =5, /obj/item/whetstone = 2, /obj/item/mixing_bowl = 10, /obj/item/kitchen/mould/bear = 1, @@ -328,7 +328,7 @@ /obj/item/grenade/flashbang = 4, /obj/item/flash = 5, /obj/item/reagent_containers/spray/pepper = 5, - /obj/item/reagent_containers/food/snacks/donut = 12, + /obj/item/food/snacks/donut = 12, /obj/item/storage/box/evidence = 6, /obj/item/flashlight/seclite = 4, /obj/item/restraints/legcuffs/bola/energy = 7, @@ -340,5 +340,5 @@ /obj/item/hailer = 5) refill_canister = /obj/item/vending_refill/security - prices = list(/obj/item/reagent_containers/food/snacks/donut = 40, + prices = list(/obj/item/food/snacks/donut = 40, /obj/item/storage/fancy/donut_box = 200) //Bulk discount diff --git a/code/game/machinery/vendors/generic_vendors.dm b/code/game/machinery/vendors/generic_vendors.dm index 8b17f4d1e537..00343d5ac4ad 100644 --- a/code/game/machinery/vendors/generic_vendors.dm +++ b/code/game/machinery/vendors/generic_vendors.dm @@ -41,32 +41,32 @@ icon_panel = "smartfridge" icon_broken = "smartfridge" category = VENDOR_TYPE_DRINK - products = list(/obj/item/reagent_containers/food/drinks/bottle/gin = 5, - /obj/item/reagent_containers/food/drinks/bottle/whiskey = 5, - /obj/item/reagent_containers/food/drinks/bottle/tequila = 5, - /obj/item/reagent_containers/food/drinks/bottle/vodka = 5, - /obj/item/reagent_containers/food/drinks/bottle/vermouth = 5, - /obj/item/reagent_containers/food/drinks/bottle/rum = 5, - /obj/item/reagent_containers/food/drinks/bottle/wine = 5, - /obj/item/reagent_containers/food/drinks/bag/goonbag = 3, - /obj/item/reagent_containers/food/drinks/bottle/cognac = 5, - /obj/item/reagent_containers/food/drinks/bottle/kahlua = 5, - /obj/item/reagent_containers/food/drinks/cans/beer = 6, - /obj/item/reagent_containers/food/drinks/cans/ale = 6, - /obj/item/reagent_containers/food/drinks/cans/synthanol = 15, - /obj/item/reagent_containers/food/drinks/bottle/orangejuice = 4, - /obj/item/reagent_containers/food/drinks/bottle/tomatojuice = 4, - /obj/item/reagent_containers/food/drinks/bottle/limejuice = 4, - /obj/item/reagent_containers/food/drinks/bottle/cream = 4, - /obj/item/reagent_containers/food/drinks/cans/tonic = 8, - /obj/item/reagent_containers/food/drinks/cans/cola = 8, - /obj/item/reagent_containers/food/drinks/cans/sodawater = 15, - /obj/item/reagent_containers/food/drinks/drinkingglass = 30, - /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 30, - /obj/item/reagent_containers/food/drinks/ice = 9) - - contraband = list(/obj/item/reagent_containers/food/drinks/tea = 10, - /obj/item/reagent_containers/food/drinks/bottle/fernet = 5) + products = list(/obj/item/reagent_containers/drinks/bottle/gin = 5, + /obj/item/reagent_containers/drinks/bottle/whiskey = 5, + /obj/item/reagent_containers/drinks/bottle/tequila = 5, + /obj/item/reagent_containers/drinks/bottle/vodka = 5, + /obj/item/reagent_containers/drinks/bottle/vermouth = 5, + /obj/item/reagent_containers/drinks/bottle/rum = 5, + /obj/item/reagent_containers/drinks/bottle/wine = 5, + /obj/item/reagent_containers/drinks/bag/goonbag = 3, + /obj/item/reagent_containers/drinks/bottle/cognac = 5, + /obj/item/reagent_containers/drinks/bottle/kahlua = 5, + /obj/item/reagent_containers/drinks/cans/beer = 6, + /obj/item/reagent_containers/drinks/cans/ale = 6, + /obj/item/reagent_containers/drinks/cans/synthanol = 15, + /obj/item/reagent_containers/drinks/bottle/orangejuice = 4, + /obj/item/reagent_containers/drinks/bottle/tomatojuice = 4, + /obj/item/reagent_containers/drinks/bottle/limejuice = 4, + /obj/item/reagent_containers/drinks/bottle/cream = 4, + /obj/item/reagent_containers/drinks/cans/tonic = 8, + /obj/item/reagent_containers/drinks/cans/cola = 8, + /obj/item/reagent_containers/drinks/cans/sodawater = 15, + /obj/item/reagent_containers/drinks/drinkingglass = 30, + /obj/item/reagent_containers/drinks/drinkingglass/shotglass = 30, + /obj/item/reagent_containers/drinks/ice = 9) + + contraband = list(/obj/item/reagent_containers/drinks/tea = 10, + /obj/item/reagent_containers/drinks/bottle/fernet = 5) vend_delay = 15 slogan_list = list("Надеюсь, никто не попросит меня о чёртовой кружке чая...", @@ -120,25 +120,25 @@ item_slot = TRUE vend_delay = 34 category = VENDOR_TYPE_DRINK - products = list(/obj/item/reagent_containers/food/drinks/coffee = 25, - /obj/item/reagent_containers/food/drinks/tea = 25, - /obj/item/reagent_containers/food/drinks/h_chocolate = 25, - /obj/item/reagent_containers/food/drinks/chocolate = 10, - /obj/item/reagent_containers/food/drinks/chicken_soup = 10, - /obj/item/reagent_containers/food/drinks/weightloss = 10, - /obj/item/reagent_containers/food/drinks/mug = 15, - /obj/item/reagent_containers/food/drinks/mug/novelty = 5) - - contraband = list(/obj/item/reagent_containers/food/drinks/ice = 10) - - prices = list(/obj/item/reagent_containers/food/drinks/coffee = 80, - /obj/item/reagent_containers/food/drinks/tea = 80, - /obj/item/reagent_containers/food/drinks/h_chocolate = 64, - /obj/item/reagent_containers/food/drinks/chocolate = 120, - /obj/item/reagent_containers/food/drinks/chicken_soup = 100, - /obj/item/reagent_containers/food/drinks/weightloss = 50, - /obj/item/reagent_containers/food/drinks/mug = 75, - /obj/item/reagent_containers/food/drinks/mug/novelty = 100) + products = list(/obj/item/reagent_containers/drinks/coffee = 25, + /obj/item/reagent_containers/drinks/tea = 25, + /obj/item/reagent_containers/drinks/h_chocolate = 25, + /obj/item/reagent_containers/drinks/chocolate = 10, + /obj/item/reagent_containers/drinks/chicken_soup = 10, + /obj/item/reagent_containers/drinks/weightloss = 10, + /obj/item/reagent_containers/drinks/mug = 15, + /obj/item/reagent_containers/drinks/mug/novelty = 5) + + contraband = list(/obj/item/reagent_containers/drinks/ice = 10) + + prices = list(/obj/item/reagent_containers/drinks/coffee = 80, + /obj/item/reagent_containers/drinks/tea = 80, + /obj/item/reagent_containers/drinks/h_chocolate = 64, + /obj/item/reagent_containers/drinks/chocolate = 120, + /obj/item/reagent_containers/drinks/chicken_soup = 100, + /obj/item/reagent_containers/drinks/weightloss = 50, + /obj/item/reagent_containers/drinks/mug = 75, + /obj/item/reagent_containers/drinks/mug/novelty = 100) refill_canister = /obj/item/vending_refill/coffee @@ -146,7 +146,7 @@ prices = list() /obj/machinery/economy/vending/coffee/item_slot_check(mob/user, obj/item/I) - if(!(istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/food/drinks))) + if(!(istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/drinks))) return FALSE if(!..()) return FALSE @@ -158,9 +158,9 @@ /obj/machinery/economy/vending/coffee/do_vend(datum/data/vending_product/R, mob/user) if(..()) return - var/obj/item/reagent_containers/food/drinks/vended = new R.product_path() + var/obj/item/reagent_containers/drinks/vended = new R.product_path() - if(istype(vended, /obj/item/reagent_containers/food/drinks/mug)) + if(istype(vended, /obj/item/reagent_containers/drinks/mug)) var/put_on_turf = TRUE if(user && iscarbon(user) && user.Adjacent(src)) if(user.put_in_hands(vended)) @@ -862,12 +862,12 @@ icon_off = "nutri" icon_panel = "thin_vendor" category = VENDOR_TYPE_FOOD - products = list(/obj/item/reagent_containers/food/snacks/tofu = 24, - /obj/item/reagent_containers/food/drinks/ice = 12, - /obj/item/reagent_containers/food/snacks/candy/candy_corn = 6) + products = list(/obj/item/food/snacks/tofu = 24, + /obj/item/reagent_containers/drinks/ice = 12, + /obj/item/food/snacks/candy/candy_corn = 6) contraband = list(/obj/item/kitchen/knife = 6, - /obj/item/reagent_containers/food/drinks/coffee = 12, + /obj/item/reagent_containers/drinks/coffee = 12, /obj/item/tank/internals/emergency_oxygen = 6, /obj/item/clothing/mask/breath = 6) @@ -885,9 +885,9 @@ "We are simple people, for this is all we eat.", "If there is a person, there is a problem. If there is no person, then there is no problem.") - products = list(/obj/item/reagent_containers/food/drinks/cans/sodawater = 10) + products = list(/obj/item/reagent_containers/drinks/cans/sodawater = 10) - contraband = list(/obj/item/reagent_containers/food/drinks/cans/cola = 7) + contraband = list(/obj/item/reagent_containers/drinks/cans/cola = 7) resistance_flags = FIRE_PROOF refill_canister = /obj/item/vending_refill/sovietsoda @@ -914,32 +914,32 @@ icon_off = "nutri" icon_panel = "thin_vendor" category = VENDOR_TYPE_FOOD - products = list(/obj/item/reagent_containers/food/snacks/candy/candybar = 6, - /obj/item/reagent_containers/food/drinks/dry_ramen = 6, - /obj/item/reagent_containers/food/snacks/chips = 6, - /obj/item/reagent_containers/food/snacks/twimsts = 6, - /obj/item/reagent_containers/food/snacks/sosjerky = 6, - /obj/item/reagent_containers/food/snacks/no_raisin = 6, - /obj/item/reagent_containers/food/snacks/pistachios = 6, - /obj/item/reagent_containers/food/snacks/spacetwinkie = 6, - /obj/item/reagent_containers/food/snacks/cheesiehonkers = 6, - /obj/item/reagent_containers/food/snacks/tastybread = 6, - /obj/item/reagent_containers/food/snacks/stroopwafel = 2) - - contraband = list(/obj/item/reagent_containers/food/snacks/syndicake = 6) - - prices = list(/obj/item/reagent_containers/food/snacks/candy/candybar = 64, - /obj/item/reagent_containers/food/drinks/dry_ramen = 32, - /obj/item/reagent_containers/food/snacks/chips = 64, - /obj/item/reagent_containers/food/snacks/twimsts = 64, - /obj/item/reagent_containers/food/snacks/sosjerky = 64, - /obj/item/reagent_containers/food/snacks/no_raisin = 80, - /obj/item/reagent_containers/food/snacks/pistachios = 80, - /obj/item/reagent_containers/food/snacks/spacetwinkie = 64, - /obj/item/reagent_containers/food/snacks/cheesiehonkers = 64, - /obj/item/reagent_containers/food/snacks/tastybread = 80, - /obj/item/reagent_containers/food/snacks/stroopwafel = 100, - /obj/item/reagent_containers/food/snacks/syndicake = 175) //syndicakes are genuinely kind of powerful + products = list(/obj/item/food/snacks/candy/candybar = 6, + /obj/item/reagent_containers/drinks/dry_ramen = 6, + /obj/item/food/snacks/chips = 6, + /obj/item/food/snacks/twimsts = 6, + /obj/item/food/snacks/sosjerky = 6, + /obj/item/food/snacks/no_raisin = 6, + /obj/item/food/snacks/pistachios = 6, + /obj/item/food/snacks/spacetwinkie = 6, + /obj/item/food/snacks/cheesiehonkers = 6, + /obj/item/food/snacks/tastybread = 6, + /obj/item/food/snacks/stroopwafel = 2) + + contraband = list(/obj/item/food/snacks/syndicake = 6) + + prices = list(/obj/item/food/snacks/candy/candybar = 64, + /obj/item/reagent_containers/drinks/dry_ramen = 32, + /obj/item/food/snacks/chips = 64, + /obj/item/food/snacks/twimsts = 64, + /obj/item/food/snacks/sosjerky = 64, + /obj/item/food/snacks/no_raisin = 80, + /obj/item/food/snacks/pistachios = 80, + /obj/item/food/snacks/spacetwinkie = 64, + /obj/item/food/snacks/cheesiehonkers = 64, + /obj/item/food/snacks/tastybread = 80, + /obj/item/food/snacks/stroopwafel = 100, + /obj/item/food/snacks/syndicake = 175) //syndicakes are genuinely kind of powerful refill_canister = /obj/item/vending_refill/snack @@ -957,19 +957,19 @@ icon_state = "chang" icon_lightmask = "chang" category = VENDOR_TYPE_FOOD - products = list(/obj/item/reagent_containers/food/snacks/chinese/chowmein = 6, - /obj/item/reagent_containers/food/snacks/chinese/tao = 6, - /obj/item/reagent_containers/food/snacks/chinese/sweetsourchickenball = 6, - /obj/item/reagent_containers/food/snacks/chinese/newdles = 6, - /obj/item/reagent_containers/food/snacks/chinese/rice = 6, - /obj/item/reagent_containers/food/snacks/fortunecookie = 6) - - prices = list(/obj/item/reagent_containers/food/snacks/chinese/chowmein = 125, - /obj/item/reagent_containers/food/snacks/chinese/tao = 125, - /obj/item/reagent_containers/food/snacks/chinese/sweetsourchickenball = 125, - /obj/item/reagent_containers/food/snacks/chinese/newdles = 100, - /obj/item/reagent_containers/food/snacks/chinese/rice = 100, - /obj/item/reagent_containers/food/snacks/fortunecookie = 50) + products = list(/obj/item/food/snacks/chinese/chowmein = 6, + /obj/item/food/snacks/chinese/tao = 6, + /obj/item/food/snacks/chinese/sweetsourchickenball = 6, + /obj/item/food/snacks/chinese/newdles = 6, + /obj/item/food/snacks/chinese/rice = 6, + /obj/item/food/snacks/fortunecookie = 6) + + prices = list(/obj/item/food/snacks/chinese/chowmein = 125, + /obj/item/food/snacks/chinese/tao = 125, + /obj/item/food/snacks/chinese/sweetsourchickenball = 125, + /obj/item/food/snacks/chinese/newdles = 100, + /obj/item/food/snacks/chinese/rice = 100, + /obj/item/food/snacks/fortunecookie = 50) refill_canister = /obj/item/vending_refill/chinese @@ -992,22 +992,22 @@ "Лучшие напитки в космосе.") category = VENDOR_TYPE_DRINK - products = list(/obj/item/reagent_containers/food/drinks/cans/cola = 10, - /obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 10, - /obj/item/reagent_containers/food/drinks/cans/dr_gibb = 10, - /obj/item/reagent_containers/food/drinks/cans/starkist = 10, - /obj/item/reagent_containers/food/drinks/cans/space_up = 10, - /obj/item/reagent_containers/food/drinks/cans/grape_juice = 10, + products = list(/obj/item/reagent_containers/drinks/cans/cola = 10, + /obj/item/reagent_containers/drinks/cans/space_mountain_wind = 10, + /obj/item/reagent_containers/drinks/cans/dr_gibb = 10, + /obj/item/reagent_containers/drinks/cans/starkist = 10, + /obj/item/reagent_containers/drinks/cans/space_up = 10, + /obj/item/reagent_containers/drinks/cans/grape_juice = 10, /obj/item/reagent_containers/glass/beaker/waterbottle = 10) - contraband = list(/obj/item/reagent_containers/food/drinks/cans/thirteenloko = 5) + contraband = list(/obj/item/reagent_containers/drinks/cans/thirteenloko = 5) - prices = list(/obj/item/reagent_containers/food/drinks/cans/cola = 45, - /obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 50, - /obj/item/reagent_containers/food/drinks/cans/dr_gibb = 50, - /obj/item/reagent_containers/food/drinks/cans/starkist = 50, - /obj/item/reagent_containers/food/drinks/cans/space_up = 50, - /obj/item/reagent_containers/food/drinks/cans/grape_juice = 50, + prices = list(/obj/item/reagent_containers/drinks/cans/cola = 45, + /obj/item/reagent_containers/drinks/cans/space_mountain_wind = 50, + /obj/item/reagent_containers/drinks/cans/dr_gibb = 50, + /obj/item/reagent_containers/drinks/cans/starkist = 50, + /obj/item/reagent_containers/drinks/cans/space_up = 50, + /obj/item/reagent_containers/drinks/cans/grape_juice = 50, /obj/item/reagent_containers/glass/beaker/waterbottle = 20) refill_canister = /obj/item/vending_refill/cola diff --git a/code/game/machinery/vendors/vending.dm b/code/game/machinery/vendors/vending.dm index 813208452d3c..b12278781865 100644 --- a/code/game/machinery/vendors/vending.dm +++ b/code/game/machinery/vendors/vending.dm @@ -589,13 +589,13 @@ ui_interact(user) wires.Interact(user) -/obj/machinery/economy/vending/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/economy/vending/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/economy/vending/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - var/estimated_height = 100 + min(length(product_records) * 34, 500) - if(length(prices) > 0) - estimated_height += 100 // to account for the "current user" interface - ui = new(user, src, ui_key, "Vending", name, 470, estimated_height, master_ui, state) + ui = new(user, src, "Vending", name) ui.open() /obj/machinery/economy/vending/ui_data(mob/user) diff --git a/code/game/machinery/vendors/wardrobe_vendors.dm b/code/game/machinery/vendors/wardrobe_vendors.dm index 67530ab7458f..c6c9ebda4a58 100644 --- a/code/game/machinery/vendors/wardrobe_vendors.dm +++ b/code/game/machinery/vendors/wardrobe_vendors.dm @@ -112,7 +112,7 @@ /obj/item/clothing/head/fedora/whitefedora = 1, /obj/item/clothing/gloves/color/black = 2, /obj/item/clothing/gloves/color/latex = 2, - /obj/item/reagent_containers/food/drinks/flask/detflask = 2, + /obj/item/reagent_containers/drinks/flask/detflask = 2, /obj/item/storage/fancy/cigarettes/dromedaryco = 5) prices = list(/obj/item/clothing/under/rank/security/detective = 50, @@ -134,7 +134,7 @@ /obj/item/clothing/head/fedora/whitefedora = 20, /obj/item/clothing/gloves/color/black = 20, /obj/item/clothing/gloves/color/latex = 20, - /obj/item/reagent_containers/food/drinks/flask/detflask = 50, + /obj/item/reagent_containers/drinks/flask/detflask = 50, /obj/item/storage/fancy/cigarettes/dromedaryco = 5) contraband = list(/obj/item/toy/figure/crew/detective = 1) diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index 2e26607e3592..7f1f01500399 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -181,10 +181,13 @@ return ui_interact(user) -/obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/mech_bay_power_console/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "MechBayConsole", name, 400, 150, master_ui, state) + ui = new(user, src, "MechBayConsole", name) ui.open() /obj/machinery/computer/mech_bay_power_console/ui_act(action, params) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index aca69f9ca08d..c391cb2d9a20 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -314,19 +314,24 @@ return ui_interact(user) -/obj/machinery/mecha_part_fabricator/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/mecha_part_fabricator/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/mecha_part_fabricator/ui_interact(mob/user, datum/tgui/ui = null) if(!selected_category) selected_category = categories[1] - var/datum/asset/materials_assets = get_asset_datum(/datum/asset/simple/materials) - materials_assets.send(user) - - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ExosuitFabricator", name, 800, 600) + ui = new(user, src, "ExosuitFabricator", name) ui.open() ui.set_autoupdate(FALSE) +/obj/machinery/mecha_part_fabricator/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/materials) + ) + /obj/machinery/mecha_part_fabricator/ui_data(mob/user) var/list/data = list() data["syncing"] = syncing diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm index 44a20b00e4bf..72c9272cb1bd 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/game/mecha/mecha_control_console.dm @@ -15,10 +15,13 @@ /obj/machinery/computer/mecha/attack_hand(mob/user) ui_interact(user) -/obj/machinery/computer/mecha/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/mecha/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/mecha/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "MechaControlConsole", name, 420, 500, master_ui, state) + ui = new(user, src, "MechaControlConsole", name) ui.open() /obj/machinery/computer/mecha/ui_data(mob/user) diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index 2ca15c2fe7a6..1d74ec9bb0d5 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -99,7 +99,7 @@ reagents.add_reagent_list(scoop_reagents) /obj/effect/decal/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/food/drinks)) + if(istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/drinks)) scoop(I, user) else if(issimulatedturf(loc)) I.melee_attack_chain(user, loc) diff --git a/code/game/objects/effects/meteors.dm b/code/game/objects/effects/meteors.dm index ec519dfeca5f..edb05feb8e93 100644 --- a/code/game/objects/effects/meteors.dm +++ b/code/game/objects/effects/meteors.dm @@ -304,7 +304,7 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops hits = 2 heavy = TRUE meteorsound = 'sound/effects/blobattack.ogg' - meteordrop = list(/obj/item/reagent_containers/food/snacks/meat/human, /obj/item/organ/internal/heart, /obj/item/organ/internal/lungs, /obj/item/organ/internal/appendix) + meteordrop = list(/obj/item/food/snacks/meat/human, /obj/item/organ/internal/heart, /obj/item/organ/internal/lungs, /obj/item/organ/internal/appendix) var/meteorgibs = /obj/effect/gibspawner/generic /obj/effect/meteor/meaty/make_debris() @@ -323,7 +323,7 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops //Meaty Ore Xeno edition /obj/effect/meteor/meaty/xeno color = "#5EFF00" - meteordrop = list(/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat) + meteordrop = list(/obj/item/food/snacks/monstermeat/xenomeat) meteorgibs = /obj/effect/gibspawner/xeno /obj/effect/meteor/meaty/xeno/Initialize(mapload, target) @@ -342,7 +342,7 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops hits = 10 hitpwr = EXPLODE_DEVASTATE meteorsound = 'sound/effects/blobattack.ogg' - meteordrop = list(/obj/item/reagent_containers/food/snacks/meat) + meteordrop = list(/obj/item/food/snacks/meat) var/meteorgibs = /obj/effect/gibspawner/generic /obj/effect/meteor/goreops/make_debris() @@ -370,7 +370,7 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops hits = 10 heavy = TRUE dropamt = 1 - meteordrop = list(/obj/item/clothing/head/hardhat/pumpkinhead, /obj/item/reagent_containers/food/snacks/grown/pumpkin) + meteordrop = list(/obj/item/clothing/head/hardhat/pumpkinhead, /obj/item/food/snacks/grown/pumpkin) /obj/effect/meteor/pumpkin/Initialize(mapload, target) . = ..() diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index d8600cbfb6c2..b54a46802ea4 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -421,20 +421,20 @@ lootcount = 3 lootdoubles = FALSE var/soups = list( - /obj/item/reagent_containers/food/snacks/soup/beetsoup, - /obj/item/reagent_containers/food/snacks/soup/stew, - /obj/item/reagent_containers/food/snacks/soup/hotchili, - /obj/item/reagent_containers/food/snacks/soup/nettlesoup, - /obj/item/reagent_containers/food/snacks/soup/meatballsoup) + /obj/item/food/snacks/soup/beetsoup, + /obj/item/food/snacks/soup/stew, + /obj/item/food/snacks/soup/hotchili, + /obj/item/food/snacks/soup/nettlesoup, + /obj/item/food/snacks/soup/meatballsoup) var/salads = list( - /obj/item/reagent_containers/food/snacks/salad/herb, - /obj/item/reagent_containers/food/snacks/salad/valid, - /obj/item/reagent_containers/food/snacks/salad/aesir) + /obj/item/food/snacks/salad/herb, + /obj/item/food/snacks/salad/valid, + /obj/item/food/snacks/salad/aesir) var/mains = list( - /obj/item/reagent_containers/food/snacks/enchiladas, - /obj/item/reagent_containers/food/snacks/stewedsoymeat, - /obj/item/reagent_containers/food/snacks/burger/bigbite, - /obj/item/reagent_containers/food/snacks/burger/superbite) + /obj/item/food/snacks/enchiladas, + /obj/item/food/snacks/stewedsoymeat, + /obj/item/food/snacks/burger/bigbite, + /obj/item/food/snacks/burger/superbite) /obj/effect/spawner/lootdrop/three_course_meal/Initialize(mapload) loot = list(pick(soups) = 1,pick(salads) = 1,pick(mains) = 1) diff --git a/code/game/objects/effects/spawners/random_spawners.dm b/code/game/objects/effects/spawners/random_spawners.dm index 2b46924ff0da..9fe0686aefdb 100644 --- a/code/game/objects/effects/spawners/random_spawners.dm +++ b/code/game/objects/effects/spawners/random_spawners.dm @@ -266,7 +266,7 @@ spawn_inside = null result = list(/datum/nothing = 1, /obj/item/wrench = 1, - /obj/item/reagent_containers/food/snacks/syndicake = 1, + /obj/item/food/snacks/syndicake = 1, /obj/item/coin/antagtoken/syndicate = 1, /obj/item/gun/projectile/automatic/pistol = 1) diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 1264cf0daa90..7de0db3c1cc1 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -73,7 +73,6 @@ dat += "
" var/datum/browser/popup = new(user, "crayon", name, 300, 500) popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.open() dat = "" diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index a51de80bab4a..8bfb0cb9f9ad 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -48,10 +48,13 @@ /obj/item/aicard/attack_self(mob/user) ui_interact(user) -/obj/item/aicard/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/aicard/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/aicard/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AICard", "[name]", 600, 394, master_ui, state) + ui = new(user, src, "AICard", "[name]") ui.open() /obj/item/aicard/ui_data(mob/user) @@ -96,7 +99,7 @@ to_chat(user, "You are already wiping this AI!") return var/confirm = alert("Are you sure you want to wipe this card's memory? This cannot be undone once started.", "Confirm Wipe", "Yes", "No") - if(confirm == "Yes" && (ui_status(user, GLOB.inventory_state) == STATUS_INTERACTIVE)) // And make doubly sure they want to wipe (three total clicks) + if(confirm == "Yes" && (ui_status(user, GLOB.inventory_state) == UI_INTERACTIVE)) // And make doubly sure they want to wipe (three total clicks) msg_admin_attack("[key_name_admin(user)] wiped [key_name_admin(AI)] with \the [src].", ATKLOG_FEW) add_attack_logs(user, AI, "Wiped with [src].") INVOKE_ASYNC(src, PROC_REF(wipe_ai)) diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm index 342cc2981cf3..3a2e38d1cdfd 100644 --- a/code/game/objects/items/devices/camera_bug.dm +++ b/code/game/objects/items/devices/camera_bug.dm @@ -34,8 +34,11 @@ /obj/item/camera_bug/attack_self(mob/user as mob) ui_interact(user) -/obj/item/camera_bug/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - integrated_console.ui_interact(user, ui_key, ui, force_open, master_ui, state) +/obj/item/camera_bug/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/camera_bug/ui_interact(mob/user, datum/tgui/ui = null) + integrated_console.ui_interact(user, ui) /obj/item/camera_bug/ert diff --git a/code/game/objects/items/devices/painter/floor_painter.dm b/code/game/objects/items/devices/painter/floor_painter.dm index 83b7ee5f43e0..eac55a9ea04b 100644 --- a/code/game/objects/items/devices/painter/floor_painter.dm +++ b/code/game/objects/items/devices/painter/floor_painter.dm @@ -41,10 +41,13 @@ return ui_interact(user) -/datum/painter/floor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/painter/floor/ui_state(mob/user) + return GLOB.inventory_state + +/datum/painter/floor/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "FloorPainter", module_name, 405, 470, master_ui, state) + ui = new(user, src, "FloorPainter", module_name) // Disable automatic updates, because: // 1) we are the only user of the item, and don't expect to observe external changes // 2) generating and sending the icon each tick is a bit expensive, and creates small but noticeable lag diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index 556c0de2ee3e..d8448a6bf671 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -89,10 +89,13 @@ M.Weaken(10 SECONDS) // This should honestly just proxy the UI to the internal signaler -/obj/item/electropack/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/electropack/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/electropack/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Electropack", name, 360, 150, master_ui, state) + ui = new(user, src, "Electropack", name) ui.open() /obj/item/electropack/ui_data(mob/user) diff --git a/code/game/objects/items/devices/radio/radio_objects.dm b/code/game/objects/items/devices/radio/radio_objects.dm index c93f9e190896..f861e7b7a567 100644 --- a/code/game/objects/items/devices/radio/radio_objects.dm +++ b/code/game/objects/items/devices/radio/radio_objects.dm @@ -131,13 +131,13 @@ GLOBAL_LIST_EMPTY(deadsay_radio_systems) return ui_interact(user) -/obj/item/radio/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/radio/ui_state(mob/user) + return GLOB.default_state + +/obj/item/radio/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - var/list/schannels = list_secure_channels(user) - var/list/ichannels = list_internal_channels(user) - var/calc_height = 150 + (schannels.len * 20) + (ichannels.len * 10) - ui = new(user, src, ui_key, "Radio", name, 400, calc_height, master_ui, state) + ui = new(user, src, "Radio", name) ui.open() /obj/item/radio/ui_data(mob/user) @@ -162,16 +162,16 @@ GLOBAL_LIST_EMPTY(deadsay_radio_systems) return . = TRUE switch(action) - if("frequency") + if("frequency") // Available to both headsets and non-headset radios if(freqlock) return - var/tune = params["tune"] - var/adjust = text2num(params["adjust"]) + var/tune = isnum(params["tune"]) ? params["tune"] : text2num(params["tune"]) + var/adjust = isnum(params["adjust"]) ? params["adjust"] : text2num(params["adjust"]) if(tune == "reset") tune = initial(frequency) else if(adjust) tune = frequency + adjust * 10 - else if(text2num(tune) != null) + else if(!isnull(tune)) tune = tune * 10 else . = FALSE @@ -180,17 +180,17 @@ GLOBAL_LIST_EMPTY(deadsay_radio_systems) usr << browse(null, "window=radio") if(.) set_frequency(sanitize_frequency(tune, freerange)) - if("ichannel") // change primary frequency to an internal channel authorized by access + if("ichannel") // Change primary frequency to an internal channel authorized by access, for non-headset radios only if(freqlock) return - var/freq = params["ichannel"] - if(has_channel_access(usr, freq)) - set_frequency(text2num(freq)) + var/freq = isnum(params["ichannel"]) ? params["ichannel"] : text2num(params["ichannel"]) + if(has_channel_access(usr, num2text(freq))) + set_frequency(freq) if("listen") listening = !listening if("broadcast") broadcasting = !broadcasting - if("channel") + if("channel") // For keyed channels on headset radios only var/channel = params["channel"] if(!(channel in channels)) return @@ -198,8 +198,7 @@ GLOBAL_LIST_EMPTY(deadsay_radio_systems) channels[channel] &= ~FREQ_LISTENING else channels[channel] |= FREQ_LISTENING - if("loudspeaker") - // Toggle loudspeaker mode, AKA everyone around you hearing your radio. + if("loudspeaker") // Toggle loudspeaker mode, AKA everyone around you hearing your radio. if(has_loudspeaker) loudspeaker = !loudspeaker if(loudspeaker) @@ -657,8 +656,8 @@ GLOBAL_LIST_EMPTY(deadsay_radio_systems) /obj/item/radio/borg/syndicate/ui_status(mob/user, datum/ui_state/state) . = ..() - if(. == STATUS_UPDATE && istype(user, /mob/living/silicon/robot/syndicate)) - . = STATUS_INTERACTIVE + if(. == UI_UPDATE && istype(user, /mob/living/silicon/robot/syndicate)) + . = UI_INTERACTIVE /obj/item/radio/borg/Destroy() myborg = null diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 880ad5990959..9a2b416b4b16 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -114,9 +114,9 @@ REAGENT SCANNER if((HAS_TRAIT(user, TRAIT_CLUMSY) || user.getBrainLoss() >= 60) && prob(50)) var/list/msgs = list() user.visible_message("[user] analyzes the floor's vitals!", "You stupidly try to analyze the floor's vitals!") - msgs += "Analyzing results for The floor:\n\tOverall status: Healthy" + msgs += "Analyzing results for The floor:\nOverall status: Healthy" msgs += "Key: Suffocation/Toxin/Burn/Brute" - msgs += "\tDamage specifics: 0 - 0 - 0 - 0" + msgs += "Damage specifics: 0 - 0 - 0 - 0" msgs += "Body temperature: ???" to_chat(user, chat_box_healthscan(msgs.Join("
"))) return @@ -133,17 +133,17 @@ REAGENT SCANNER if(issimple_animal(M)) // no box here, keep it simple. if(M.stat == DEAD) - to_chat(user, "Analyzing Results for [M]:\n\t Overall Status: Dead") + to_chat(user, "Analyzing Results for [M]:\nOverall Status: Dead") else - to_chat(user, "Analyzing Results for [M]:\n\t Overall Status: [round(M.health / M.maxHealth * 100, 0.1)]% Healthy") + to_chat(user, "Analyzing Results for [M]:\nOverall Status: [round(M.health / M.maxHealth * 100, 0.1)]% Healthy") to_chat(user, "\t Damage Specifics: [M.maxHealth - M.health]") return if(!ishuman(M) || ismachineperson(M)) //these sensors are designed for organic life - msgs += "Analyzing Results for ERROR:\n\t Overall Status: ERROR" - msgs += "\t Key: Suffocation/Toxin/Burns/Brute" - msgs += "\t Damage Specifics: ? - ? - ? - ?" + msgs += "Analyzing Results for ERROR:\nOverall Status: ERROR" + msgs += "Key: Suffocation/Toxin/Burns/Brute" + msgs += "Damage Specifics: ? - ? - ? - ?" msgs += "Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)" msgs += "Warning: Blood Level ERROR: --% --cl.Type: ERROR" msgs += "Subject's pulse: -- bpm." @@ -168,9 +168,9 @@ REAGENT SCANNER else status = "[H.health]% Healthy" - msgs += "Analyzing Results for [H]:\n\t Overall Status: [status]" - msgs += "\t Key: Suffocation/Toxin/Burns/Brute" - msgs += "\t Damage Specifics: [OX] - [TX] - [BU] - [BR]" + msgs += "Analyzing Results for [H]:\nOverall Status: [status]" + msgs += "Key: Suffocation/Toxin/Burns/Brute" + msgs += "Damage Specifics: [OX] - [TX] - [BU] - [BR]" if(H.timeofdeath && (H.stat == DEAD || (HAS_TRAIT(H, TRAIT_FAKEDEATH)))) msgs += "Time of Death: [station_time_timestamp("hh:mm:ss", H.timeofdeath)]" var/tdelta = round(world.time - H.timeofdeath) @@ -184,7 +184,7 @@ REAGENT SCANNER if(length(damaged)) msgs += "Localized Damage, Brute/Burn:" for(var/obj/item/organ/external/org in damaged) - msgs += "\t\t[capitalize(org.name)]: [(org.brute_dam > 0) ? "[org.brute_dam]" : "0"]-[(org.burn_dam > 0) ? "[org.burn_dam]" : "0"]" + msgs += "[capitalize(org.name)]: [(org.brute_dam > 0) ? "[org.brute_dam]" : "0"]-[(org.burn_dam > 0) ? "[org.burn_dam]" : "0"]" if(advanced) msgs.Add(get_chemscan_results(user, H)) @@ -194,17 +194,17 @@ REAGENT SCANNER continue // Snowflaking heart problems, because they are special (and common). if(istype(D, /datum/disease/critical)) - msgs += "Warning: Subject is undergoing [D.name].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure_text]" + msgs += "Warning: Subject is undergoing [D.name].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure_text]" continue - msgs += "Warning: [D.form] detected\nName: [D.name].\nType: [D.spread_text].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure_text]" + msgs += "Warning: [D.form] detected\nName: [D.name].\nType: [D.spread_text].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure_text]" if(H.undergoing_cardiac_arrest()) var/obj/item/organ/internal/heart/heart = H.get_int_organ(/obj/item/organ/internal/heart) if(heart && !(heart.status & ORGAN_DEAD)) - msgs += "The patient's heart has stopped.\nPossible Cure: Electric Shock" + msgs += "The patient's heart has stopped.\nPossible Cure: Electric Shock" else if(heart && (heart.status & ORGAN_DEAD)) - msgs += "Subject's heart is necrotic." + msgs += "Subject's heart is necrotic." else if(!heart) - msgs += "Subject has no heart." + msgs += "Subject has no heart." if(H.getStaminaLoss()) msgs += "Subject appears to be suffering from fatigue." diff --git a/code/game/objects/items/devices/sensor_device.dm b/code/game/objects/items/devices/sensor_device.dm index 8f96b7d2f244..cff8ec351798 100644 --- a/code/game/objects/items/devices/sensor_device.dm +++ b/code/game/objects/items/devices/sensor_device.dm @@ -19,5 +19,8 @@ /obj/item/sensor_device/attack_self(mob/user as mob) ui_interact(user) -/obj/item/sensor_device/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - crew_monitor.ui_interact(user, ui_key, ui, force_open) +/obj/item/sensor_device/ui_state(mob/user) + return GLOB.default_state + +/obj/item/sensor_device/ui_interact(mob/user, datum/tgui/ui = null) + crew_monitor.ui_interact(user, ui) diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 0c653374304d..0449d907f9a0 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -410,8 +410,11 @@ w_class = WEIGHT_CLASS_TINY var/datum/ui_module/appearance_changer/appearance_changer_holder -/obj/item/handheld_mirror/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) - appearance_changer_holder.ui_interact(user, ui_key, ui, force_open, master_ui, state = GLOB.hands_state) +/obj/item/handheld_mirror/ui_state(mob/user) + return GLOB.hands_state + +/obj/item/handheld_mirror/ui_interact(mob/user, datum/tgui/ui = null) + appearance_changer_holder.ui_interact(user, ui) /obj/item/handheld_mirror/attack_self(mob/user) if(ishuman(user)) diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index e2cfcaf54744..994ff550b1ef 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -88,10 +88,13 @@ /obj/item/transfer_valve/attack_self(mob/user) ui_interact(user) -/obj/item/transfer_valve/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/transfer_valve/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/transfer_valve/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "TransferValve", name, 460, 320, master_ui, state) + ui = new(user, src, "TransferValve", name) ui.open() /obj/item/transfer_valve/ui_data(mob/user) @@ -157,7 +160,7 @@ icon_state = "valve_1" else icon_state = "valve" - + /obj/item/transfer_valve/update_overlays() . = ..() underlays.Cut() diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index 4b8adfc8e58d..1208b3d54781 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -195,10 +195,13 @@ GLOBAL_LIST_EMPTY(world_uplinks) return TRUE return FALSE -/obj/item/uplink/hidden/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/uplink/hidden/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/uplink/hidden/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Uplink", name, 900, 600, master_ui, state) + ui = new(user, src, "Uplink", name) ui.open() /obj/item/uplink/hidden/ui_data(mob/user) diff --git a/code/game/objects/items/granters/action_granters/summon_cheese.dm b/code/game/objects/items/granters/action_granters/summon_cheese.dm index c115a46b73cf..62645a34def7 100644 --- a/code/game/objects/items/granters/action_granters/summon_cheese.dm +++ b/code/game/objects/items/granters/action_granters/summon_cheese.dm @@ -22,7 +22,7 @@ /obj/item/book/granter/spell/summon_cheese/recoil(mob/living/user) to_chat(user, "[src] turns into a wedge of cheese!") - var/obj/item/reagent_containers/food/snacks/cheesewedge/presliced/book_cheese = new + var/obj/item/food/snacks/cheesewedge/presliced/book_cheese = new user.drop_item() user.put_in_hands(book_cheese) qdel(src) @@ -35,7 +35,7 @@ overlay = null action_icon_state = "cheese_wedge" action_background_icon_state = "bg_spell" - summon_type = list(/obj/item/reagent_containers/food/snacks/cheesewedge/presliced) + summon_type = list(/obj/item/food/snacks/cheesewedge/presliced) summon_amt = 9 aoe_range = 1 summon_ignore_prev_spawn_points = TRUE diff --git a/code/game/objects/items/mixing_bowl.dm b/code/game/objects/items/mixing_bowl.dm index 996ab847b0ce..4b81d55974a2 100644 --- a/code/game/objects/items/mixing_bowl.dm +++ b/code/game/objects/items/mixing_bowl.dm @@ -39,7 +39,7 @@ return add_item(S, user) else return add_item(I, user) - else if(is_type_in_list(I, list(/obj/item/reagent_containers/glass, /obj/item/reagent_containers/food/drinks, /obj/item/reagent_containers/food/condiment))) + else if(is_type_in_list(I, list(/obj/item/reagent_containers/glass, /obj/item/reagent_containers/drinks, /obj/item/reagent_containers/condiment))) if(!I.reagents) return 1 for(var/datum/reagent/R in I.reagents.reagent_list) @@ -68,20 +68,20 @@ var/list/items_measures_p = new for(var/obj/O in contents) var/display_name = O.name - if(istype(O,/obj/item/reagent_containers/food/snacks/egg)) + if(istype(O,/obj/item/food/snacks/egg)) items_measures[display_name] = "egg" items_measures_p[display_name] = "eggs" - if(istype(O,/obj/item/reagent_containers/food/snacks/tofu)) + if(istype(O,/obj/item/food/snacks/tofu)) items_measures[display_name] = "tofu chunk" items_measures_p[display_name] = "tofu chunks" - if(istype(O,/obj/item/reagent_containers/food/snacks/meat)) //any meat + if(istype(O,/obj/item/food/snacks/meat)) //any meat items_measures[display_name] = "slab of meat" items_measures_p[display_name] = "slabs of meat" - if(istype(O,/obj/item/reagent_containers/food/snacks/donkpocket)) + if(istype(O,/obj/item/food/snacks/donkpocket)) display_name = "Turnovers" items_measures[display_name] = "turnover" items_measures_p[display_name] = "turnovers" - if(istype(O,/obj/item/reagent_containers/food/snacks/carpmeat)) + if(istype(O,/obj/item/food/snacks/carpmeat)) items_measures[display_name] = "fillet of meat" items_measures_p[display_name] = "fillets of meat" items_counts[display_name]++ @@ -165,7 +165,7 @@ if(id) amount += reagents.get_reagent_amount(id) reagents.clear_reagents() - var/obj/item/reagent_containers/food/snacks/badrecipe/mysteryfood = new(get_turf(source)) + var/obj/item/food/snacks/badrecipe/mysteryfood = new(get_turf(source)) mysteryfood.reagents.add_reagent("carbon", amount) mysteryfood.reagents.add_reagent("????", amount / 10) make_dirty(75) diff --git a/code/game/objects/items/random_items.dm b/code/game/objects/items/random_items.dm index bea4ba78d010..c32d3397a1c3 100644 --- a/code/game/objects/items/random_items.dm +++ b/code/game/objects/items/random_items.dm @@ -25,11 +25,11 @@ new T(loc) qdel(src) -/obj/item/reagent_containers/food/drinks/bottle/random_drink +/obj/item/reagent_containers/drinks/bottle/random_drink name = "unlabelled drink" icon = 'icons/obj/drinks.dmi' -/obj/item/reagent_containers/food/drinks/bottle/random_drink/Initialize(mapload) +/obj/item/reagent_containers/drinks/bottle/random_drink/Initialize(mapload) . = ..() var/list/possible_drinks = GLOB.drinks.Copy() if(prob(50)) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index f229ce8b9562..4f6292496495 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -68,7 +68,7 @@ return /obj/item/toy/balloon/attackby(obj/O as obj, mob/user as mob, params) - if(istype(O, /obj/item/reagent_containers/glass) || istype(O, /obj/item/reagent_containers/food/drinks/drinkingglass)) + if(istype(O, /obj/item/reagent_containers/glass) || istype(O, /obj/item/reagent_containers/drinks/drinkingglass)) if(O.reagents) if(O.reagents.total_volume < 1) to_chat(user, "[O] is empty.") @@ -781,8 +781,8 @@ item_state = "plushie_ipc" /obj/item/toy/plushie/ipcplushie/attackby(obj/item/B, mob/user, params) - if(istype(B, /obj/item/reagent_containers/food/snacks/breadslice)) - new /obj/item/reagent_containers/food/snacks/toast(get_turf(loc)) + if(istype(B, /obj/item/food/snacks/breadslice)) + new /obj/item/food/snacks/toast(get_turf(loc)) to_chat(user, " You insert bread into the toaster. ") playsound(loc, 'sound/machines/ding.ogg', 50, 1) qdel(B) diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 143ad0422eea..23a32b354918 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -238,10 +238,13 @@ /obj/item/rcd/attack_self_tk(mob/user) radial_menu(user) -/obj/item/rcd/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/rcd/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/rcd/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "RCD", "Rapid Construction Device", 471, 673, master_ui, state) + ui = new(user, src, "RCD", "Rapid Construction Device") ui.open() /obj/item/rcd/ui_data(mob/user) diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm index 66951e2e044d..970916bba0d5 100644 --- a/code/game/objects/items/weapons/RSF.dm +++ b/code/game/objects/items/weapons/RSF.dm @@ -22,15 +22,15 @@ to_chat(user, "Choose an item to dispense!") else to_chat(user, "You are currently dispensing a [initial(currently_dispensing.name)].") - var/static/list/rsf_items = list("Drinking Glass" = /obj/item/reagent_containers/food/drinks/drinkingglass, + var/static/list/rsf_items = list("Drinking Glass" = /obj/item/reagent_containers/drinks/drinkingglass, "Paper" = /obj/item/paper, "Pen" = /obj/item/pen, "Dice Pack" = /obj/item/storage/bag/dice, "Cigarette" = /obj/item/clothing/mask/cigarette, - "Newdles" = /obj/item/reagent_containers/food/snacks/chinese/newdles, - "Donut" = /obj/item/reagent_containers/food/snacks/donut, - "Chicken Soup" = /obj/item/reagent_containers/food/drinks/chicken_soup, - "Tofu Burger" = /obj/item/reagent_containers/food/snacks/burger/tofu) + "Newdles" = /obj/item/food/snacks/chinese/newdles, + "Donut" = /obj/item/food/snacks/donut, + "Chicken Soup" = /obj/item/reagent_containers/drinks/chicken_soup, + "Tofu Burger" = /obj/item/food/snacks/burger/tofu) var/static/list/rsf_icons = list("Drinking Glass" = image(icon = 'icons/obj/drinks.dmi', icon_state = "glass_empty"), "Paper" = image(icon = 'icons/obj/bureaucracy.dmi', icon_state = "paper"), "Pen" = image(icon = 'icons/obj/bureaucracy.dmi', icon_state = "pen"), diff --git a/code/game/objects/items/weapons/bio_chips/bio_chip_pad.dm b/code/game/objects/items/weapons/bio_chips/bio_chip_pad.dm index 9c9036cffb41..e0867c566524 100644 --- a/code/game/objects/items/weapons/bio_chips/bio_chip_pad.dm +++ b/code/game/objects/items/weapons/bio_chips/bio_chip_pad.dm @@ -66,10 +66,13 @@ eject_case(user) -/obj/item/bio_chip_pad/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/bio_chip_pad/ui_state(mob/user) + return GLOB.default_state + +/obj/item/bio_chip_pad/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ImplantPad", name, 410, 400, master_ui, state) + ui = new(user, src, "BioChipPad", name) ui.open() /obj/item/bio_chip_pad/ui_data(mob/user) diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 7afd3326575b..f9844c0461ca 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -134,7 +134,6 @@ var/datum/browser/popup = new(user, "idcard", name, 600, 400) popup.set_content(dat) - popup.set_title_image(usr.browse_rsc_icon(src.icon, src.icon_state)) popup.open() /obj/item/card/id/attack_self(mob/user as mob) diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm index 6e2d363c319e..e3daad3f7102 100644 --- a/code/game/objects/items/weapons/cigs.dm +++ b/code/game/objects/items/weapons/cigs.dm @@ -534,8 +534,8 @@ LIGHTERS ARE IN LIGHTERS.DM /obj/item/rollingpaper/afterattack(atom/target, mob/user, proximity) if(!proximity) return - if(istype(target, /obj/item/reagent_containers/food/snacks/grown)) - var/obj/item/reagent_containers/food/snacks/grown/O = target + if(istype(target, /obj/item/food/snacks/grown)) + var/obj/item/food/snacks/grown/O = target if(O.dry) user.unEquip(target, 1) user.unEquip(src, 1) diff --git a/code/game/objects/items/weapons/dice.dm b/code/game/objects/items/weapons/dice.dm index 6363f02b6389..998dd526021b 100644 --- a/code/game/objects/items/weapons/dice.dm +++ b/code/game/objects/items/weapons/dice.dm @@ -225,7 +225,7 @@ if(11) //Cookie T.visible_message("A cookie appears out of thin air!") - var/obj/item/reagent_containers/food/snacks/cookie/C = new(drop_location()) + var/obj/item/food/snacks/cookie/C = new(drop_location()) create_smoke(2) C.name = "Cookie of Fate" if(12) diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index 45c788385bc2..c070e1d1f989 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -79,8 +79,8 @@ /obj/random/mech, /obj/item/toy/spinningtoy, /obj/item/toy/sword, - /obj/item/reagent_containers/food/snacks/grown/ambrosia/deus, - /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, + /obj/item/food/snacks/grown/ambrosia/deus, + /obj/item/food/snacks/grown/ambrosia/vulgaris, /obj/item/paicard, /obj/item/instrument/violin, /obj/item/instrument/guitar, diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 5d18e4321d8f..5b8cebe360db 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -324,8 +324,8 @@ desc = "A custom made large grenade. It affects a larger area." icon_state = "large_grenade" bomb_state = "largebomb" - allowed_containers = list(/obj/item/reagent_containers/glass,/obj/item/reagent_containers/food/condiment, - /obj/item/reagent_containers/food/drinks) + allowed_containers = list(/obj/item/reagent_containers/glass,/obj/item/reagent_containers/condiment, + /obj/item/reagent_containers/drinks) origin_tech = "combat=3;engineering=3" affected_area = 5 ignition_temp = 25 // Large grenades are slightly more effective at setting off heat-sensitive mixtures than smaller grenades. diff --git a/code/game/objects/items/weapons/grenades/clusterbuster.dm b/code/game/objects/items/weapons/grenades/clusterbuster.dm index aeae35cc6450..46aebed6b252 100644 --- a/code/game/objects/items/weapons/grenades/clusterbuster.dm +++ b/code/game/objects/items/weapons/grenades/clusterbuster.dm @@ -141,7 +141,7 @@ /obj/item/grenade/clusterbuster/booze name = "\improper Booze Grenade" - payload = /obj/item/reagent_containers/food/drinks/bottle/random_drink + payload = /obj/item/reagent_containers/drinks/bottle/random_drink /obj/item/grenade/clusterbuster/honk name = "\improper Mega Honk Grenade" diff --git a/code/game/objects/items/weapons/grenades/ghettobomb.dm b/code/game/objects/items/weapons/grenades/ghettobomb.dm index 15d827677b5f..92310e2484c5 100644 --- a/code/game/objects/items/weapons/grenades/ghettobomb.dm +++ b/code/game/objects/items/weapons/grenades/ghettobomb.dm @@ -27,7 +27,7 @@ /obj/item/grenade/iedcasing/CheckParts(list/parts_list) ..() - var/obj/item/reagent_containers/food/drinks/cans/can = locate() in contents + var/obj/item/reagent_containers/drinks/cans/can = locate() in contents if(can) can.pixel_x = 0 //Reset the sprite's position to make it consistent with the rest of the IED can.pixel_y = 0 diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index 187364a49361..05373e14596f 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -57,7 +57,7 @@ return ..() if(length(contents)) - var/obj/item/reagent_containers/food/snacks/toEat = contents[1] + var/obj/item/food/snacks/toEat = contents[1] if(istype(toEat)) if(C.eat(toEat, user)) toEat.On_Consume(C, user) diff --git a/code/game/objects/items/weapons/rpd.dm b/code/game/objects/items/weapons/rpd.dm index 37dc3b4917e7..223fbdd594c2 100644 --- a/code/game/objects/items/weapons/rpd.dm +++ b/code/game/objects/items/weapons/rpd.dm @@ -170,12 +170,19 @@ /obj/item/rpd/attack_self(mob/user) ui_interact(user) -/obj/item/rpd/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/rpd/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/rpd/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "RPD", name, 450, 650, master_ui, state) + ui = new(user, src, "RPD", name) ui.open() +/obj/item/rpd/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/rpd) + ) /obj/item/rpd/AltClick(mob/user) radial_menu(user) @@ -200,15 +207,15 @@ switch(action) if("iconrotation") - iconrotation = text2num(sanitize(params["iconrotation"])) + iconrotation = isnum(params[action]) ? params[action] : text2num(params[action]) if("whatpipe") - whatpipe = text2num(sanitize(params["whatpipe"])) + whatpipe = isnum(params[action]) ? params[action] : text2num(params[action]) if("whatdpipe") - whatdpipe = text2num(sanitize(params["whatdpipe"])) + whatdpipe = isnum(params[action]) ? params[action] : text2num(params[action]) if("pipe_category") - pipe_category = text2num(sanitize(params["pipe_category"])) + pipe_category = isnum(params[action]) ? params[action] : text2num(params[action]) if("mode") - mode = text2num(sanitize(params["mode"])) + mode = isnum(params[action]) ? params[action] : text2num(params[action]) //RPD radial menu /obj/item/rpd/proc/check_menu(mob/living/user) diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 3a23ce318ab6..d14eb7ddec50 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -116,12 +116,12 @@ new /obj/item/radio/headset/headset_service(src) new /obj/item/pda/clown(src) new /obj/item/storage/box/survival(src) - new /obj/item/reagent_containers/food/snacks/grown/banana(src) + new /obj/item/food/snacks/grown/banana(src) new /obj/item/stamp/clown(src) new /obj/item/toy/crayon/rainbow(src) new /obj/item/storage/fancy/crayons(src) new /obj/item/reagent_containers/spray/waterflower(src) - new /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana(src) + new /obj/item/reagent_containers/drinks/bottle/bottleofbanana(src) new /obj/item/instrument/bikehorn(src) new /obj/item/bikehorn(src) new /obj/item/dnainjector/comic(src) @@ -717,7 +717,7 @@ /obj/item/organ/internal/heart/cursed/wizard = 1, /obj/item/organ/internal/vocal_cords/colossus/wizard = 2, /obj/item/warp_cube/red = 1, - /obj/item/reagent_containers/food/drinks/everfull = 2, + /obj/item/reagent_containers/drinks/everfull = 2, /obj/item/clothing/suit/space/hardsuit/shielded/wizard = 2, /obj/item/immortality_talisman = 1 ) //spells recharge when invincible var/obj/item/pickeda = pick(list_a) @@ -749,7 +749,7 @@ value += 1 if(8) if(prob(25)) - new /obj/item/reagent_containers/food/snacks/grown/nymph_pod(src) + new /obj/item/food/snacks/grown/nymph_pod(src) new /obj/item/slimepotion/sentience(src) else new /obj/item/paicard(src) //Still useful, not a point useful. @@ -757,10 +757,10 @@ //Treat / potion. Free. var/obj/item/pickedt = pick( /obj/item/storage/box/syndidonkpockets, // Healing + speed - /obj/item/reagent_containers/food/drinks/bottle/dragonsbreath, // Killing - /obj/item/reagent_containers/food/drinks/bottle/immortality, // Super healing for 20 seconds - /obj/item/reagent_containers/food/snacks/meatsteak/stimulating, //Healing + stun immunity - /obj/item/reagent_containers/food/snacks/plum_pie ) // Great healing over long period of time + /obj/item/reagent_containers/drinks/bottle/dragonsbreath, // Killing + /obj/item/reagent_containers/drinks/bottle/immortality, // Super healing for 20 seconds + /obj/item/food/snacks/meatsteak/stimulating, //Healing + stun immunity + /obj/item/food/snacks/plum_pie ) // Great healing over long period of time new pickedt(src) @@ -774,7 +774,7 @@ #undef NANNY_MAX_VALUE #undef NANNY_MIN_VALUE -/obj/item/reagent_containers/food/drinks/bottle/dragonsbreath +/obj/item/reagent_containers/drinks/bottle/dragonsbreath name = "flask of dragons breath" desc = "Not recommended for wizardly consumption. Recommended for mundane consumption!" icon_state = "holyflask" @@ -782,7 +782,7 @@ volume = 100 list_reagents = list("dragonsbreath" = 80, "hell_water" = 20) -/obj/item/reagent_containers/food/drinks/bottle/immortality +/obj/item/reagent_containers/drinks/bottle/immortality name = "drop of immortality" desc = "Drinking this will make you immortal. For a moment or two, at least." icon_state = "holyflask" @@ -790,13 +790,13 @@ volume = 5 list_reagents = list("adminordrazine" = 5) -/obj/item/reagent_containers/food/snacks/meatsteak/stimulating +/obj/item/food/snacks/meatsteak/stimulating name = "stimulating steak" desc = "Stimulate your senses." list_reagents = list("nutriment" = 5, "stimulants" = 25) bitesize = 100 -/obj/item/reagent_containers/food/snacks/plum_pie +/obj/item/food/snacks/plum_pie name = "perfect plum pie" desc = "The Jack Horner brand of pie. 2 big thumbs up." icon = 'icons/obj/food/bakedgoods.dmi' diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index fbcd813e5044..2a61f0b5e0ff 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -206,7 +206,7 @@ max_combined_w_class = 100 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class max_w_class = WEIGHT_CLASS_NORMAL w_class = WEIGHT_CLASS_TINY - can_hold = list(/obj/item/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/grown,/obj/item/reagent_containers/food/snacks/grown/ash_flora,/obj/item/reagent_containers/food/snacks/honeycomb) + can_hold = list(/obj/item/food/snacks/grown,/obj/item/seeds,/obj/item/grown,/obj/item/food/snacks/grown/ash_flora,/obj/item/food/snacks/honeycomb) resistance_flags = FLAMMABLE /obj/item/storage/bag/plants/portaseeder @@ -497,7 +497,7 @@ /obj/item/storage/bag/tray/cookies_tray - var/cookie = /obj/item/reagent_containers/food/snacks/cookie + var/cookie = /obj/item/food/snacks/cookie /obj/item/storage/bag/tray/cookies_tray/populate_contents() // By Azule Utama, thank you a lot! for(var/i in 1 to 6) @@ -506,7 +506,7 @@ update_icon(UPDATE_OVERLAYS) /obj/item/storage/bag/tray/cookies_tray/sugarcookie - cookie = /obj/item/reagent_containers/food/snacks/sugarcookie + cookie = /obj/item/food/snacks/sugarcookie /* * Chemistry bag @@ -537,7 +537,7 @@ storage_slots = 25 max_combined_w_class = 200 w_class = WEIGHT_CLASS_TINY - can_hold = list(/obj/item/slime_extract, /obj/item/reagent_containers/food/snacks/monkeycube, + can_hold = list(/obj/item/slime_extract, /obj/item/food/snacks/monkeycube, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/iv_bag, /obj/item/reagent_containers/hypospray/autoinjector/epinephrine) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 717b00c0bb8a..ac92f8aa512f 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -278,7 +278,7 @@ /obj/item/clothing/glasses, /obj/item/ammo_casing/shotgun, /obj/item/ammo_box, - /obj/item/reagent_containers/food/snacks/donut, + /obj/item/food/snacks/donut, /obj/item/kitchen/knife/combat, /obj/item/melee/baton, /obj/item/melee/classic_baton, @@ -329,7 +329,7 @@ /obj/item/clothing/glasses, /obj/item/ammo_casing/shotgun, /obj/item/ammo_box, - /obj/item/reagent_containers/food/snacks/donut, + /obj/item/food/snacks/donut, /obj/item/kitchen/knife/combat, /obj/item/melee/baton, /obj/item/melee/classic_baton, @@ -420,7 +420,7 @@ can_hold = list( /obj/item/grenade, /obj/item/lighter, - /obj/item/reagent_containers/food/drinks/bottle/molotov + /obj/item/reagent_containers/drinks/bottle/molotov ) /obj/item/storage/belt/grenade/full/populate_contents() @@ -919,7 +919,7 @@ /obj/item/stack/sheet/bone, /obj/item/lighter, /obj/item/storage/fancy/cigarettes, - /obj/item/reagent_containers/food/drinks/bottle, + /obj/item/reagent_containers/drinks/bottle, /obj/item/stack/medical, /obj/item/kitchen/knife, /obj/item/reagent_containers/hypospray, @@ -930,7 +930,7 @@ /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/stack/ore, - /obj/item/reagent_containers/food/drinks, + /obj/item/reagent_containers/drinks, /obj/item/organ/internal/regenerative_core, /obj/item/wormhole_jaunter, /obj/item/storage/bag/plants, @@ -968,11 +968,11 @@ /obj/item/kitchen/cutter, /obj/item/assembly/mousetrap, /obj/item/reagent_containers/spray/pestspray, - /obj/item/reagent_containers/food/drinks/flask, - /obj/item/reagent_containers/food/drinks/drinkingglass, - /obj/item/reagent_containers/food/drinks/bottle, - /obj/item/reagent_containers/food/drinks/cans, - /obj/item/reagent_containers/food/drinks/shaker, - /obj/item/reagent_containers/food/snacks, - /obj/item/reagent_containers/food/condiment, + /obj/item/reagent_containers/drinks/flask, + /obj/item/reagent_containers/drinks/drinkingglass, + /obj/item/reagent_containers/drinks/bottle, + /obj/item/reagent_containers/drinks/cans, + /obj/item/reagent_containers/drinks/shaker, + /obj/item/food/snacks, + /obj/item/reagent_containers/condiment, /obj/item/reagent_containers/glass/beaker) diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index 35432af8c702..e4bafc9d70f5 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -58,8 +58,8 @@ icon_state ="bible" /obj/item/storage/bible/booze/populate_contents() - new /obj/item/reagent_containers/food/drinks/cans/beer(src) - new /obj/item/reagent_containers/food/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) new /obj/item/stack/spacecash(src) new /obj/item/stack/spacecash(src) new /obj/item/stack/spacecash(src) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index b8e166396aaf..4627eb960b64 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -302,7 +302,7 @@ /obj/item/storage/box/cups/populate_contents() for(var/I in 1 to 7) - new /obj/item/reagent_containers/food/drinks/sillycup(src) + new /obj/item/reagent_containers/drinks/sillycup(src) /obj/item/storage/box/drinkingglasses name = "box of drinking glasses" @@ -310,7 +310,7 @@ /obj/item/storage/box/drinkingglasses/populate_contents() for(var/I in 1 to 6) - new /obj/item/reagent_containers/food/drinks/drinkingglass(src) + new /obj/item/reagent_containers/drinks/drinkingglass(src) /obj/item/storage/box/condimentbottles name = "box of condiment bottles" @@ -318,7 +318,7 @@ /obj/item/storage/box/condimentbottles/populate_contents() for(var/I in 1 to 6) - new /obj/item/reagent_containers/food/condiment(src) + new /obj/item/reagent_containers/condiment(src) /obj/item/storage/box/mousetraps name = "box of Pest-B-Gon mousetraps" @@ -424,9 +424,9 @@ desc = "A box intended for experienced chefs." /obj/item/storage/box/chef_rare_ingredients_kit/populate_contents() - new /obj/item/reagent_containers/food/condiment/soysauce(src) - new /obj/item/reagent_containers/food/condiment/enzyme(src) - new /obj/item/reagent_containers/food/condiment/pack/hotsauce(src) + new /obj/item/reagent_containers/condiment/soysauce(src) + new /obj/item/reagent_containers/condiment/enzyme(src) + new /obj/item/reagent_containers/condiment/pack/hotsauce(src) new /obj/item/kitchen/knife/butcher(src) var/list/reagent_list = list("msg", "triple_citrus", "salglu_solution", "nutriment", "gravy", "honey", "vitfro") for(var/reag in reagent_list) @@ -490,8 +490,8 @@ desc = "Drymate brand monkey cubes. Just add water!" icon_state = "monkey_box" storage_slots = 7 - can_hold = list(/obj/item/reagent_containers/food/snacks/monkeycube) - var/monkey_cube_type = /obj/item/reagent_containers/food/snacks/monkeycube + can_hold = list(/obj/item/food/snacks/monkeycube) + var/monkey_cube_type = /obj/item/food/snacks/monkeycube /obj/item/storage/box/monkeycubes/populate_contents() for(var/I in 1 to 5) @@ -499,31 +499,31 @@ /obj/item/storage/box/monkeycubes/syndicate desc = "Waffle Co. brand monkey cubes. Just add water and a dash of subterfuge!" - monkey_cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/syndicate + monkey_cube_type = /obj/item/food/snacks/monkeycube/syndicate /obj/item/storage/box/monkeycubes/farwacubes name = "farwa cube box" desc = "Drymate brand farwa cubes. Just add water!" icon_state = "farwa_box" - monkey_cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/farwacube + monkey_cube_type = /obj/item/food/snacks/monkeycube/farwacube /obj/item/storage/box/monkeycubes/stokcubes name = "stok cube box" desc = "Drymate brand stok cubes. Just add water!" icon_state = "stok_box" - monkey_cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/stokcube + monkey_cube_type = /obj/item/food/snacks/monkeycube/stokcube /obj/item/storage/box/monkeycubes/neaeracubes name = "neaera cube box" desc = "Drymate brand neaera cubes. Just add water!" icon_state = "neaera_box" - monkey_cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/neaeracube + monkey_cube_type = /obj/item/food/snacks/monkeycube/neaeracube /obj/item/storage/box/monkeycubes/wolpincubes name = "wolpin cube box" desc = "Drymate brand wolpin cubes. Just add water!" icon_state = "wolpin_box" - monkey_cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/wolpincube + monkey_cube_type = /obj/item/food/snacks/monkeycube/wolpincube /////////////////// /* Medical Boxes */ @@ -864,14 +864,14 @@ icon_state = "donk_box" storage_slots = 6 can_hold = list( - /obj/item/reagent_containers/food/snacks/donkpocket, - /obj/item/reagent_containers/food/snacks/warmdonkpocket, - /obj/item/reagent_containers/food/snacks/warmdonkpocket_weak, - /obj/item/reagent_containers/food/snacks/syndidonkpocket) + /obj/item/food/snacks/donkpocket, + /obj/item/food/snacks/warmdonkpocket, + /obj/item/food/snacks/warmdonkpocket_weak, + /obj/item/food/snacks/syndidonkpocket) /obj/item/storage/box/donkpockets/populate_contents() for(var/I in 1 to 6) - new /obj/item/reagent_containers/food/snacks/donkpocket(src) + new /obj/item/food/snacks/donkpocket(src) /obj/item/storage/box/donkpockets/empty/populate_contents() return @@ -883,7 +883,7 @@ /obj/item/storage/box/syndidonkpockets/populate_contents() for(var/I in 1 to 6) - new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src) + new /obj/item/food/snacks/syndidonkpocket(src) //////////////// /* Misc Boxes */ diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 95bdd28570bd..7e4d2106f3b0 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -41,7 +41,7 @@ icon_type = "donut" icon_state = "donutbox" storage_slots = 6 - can_hold = list(/obj/item/reagent_containers/food/snacks/donut) + can_hold = list(/obj/item/food/snacks/donut) icon_type = "donut" foldable = /obj/item/stack/sheet/cardboard foldable_amt = 1 @@ -49,7 +49,7 @@ /obj/item/storage/fancy/donut_box/update_overlays() . = ..() for(var/I = 1 to length(contents)) - var/obj/item/reagent_containers/food/snacks/donut/donut = contents[I] + var/obj/item/food/snacks/donut/donut = contents[I] var/icon/new_donut_icon = icon('icons/obj/food/containers.dmi', "[(I - 1)]donut[donut.donut_sprite_type]") . += new_donut_icon @@ -58,7 +58,7 @@ /obj/item/storage/fancy/donut_box/populate_contents() for(var/I in 1 to storage_slots) - new /obj/item/reagent_containers/food/snacks/donut(src) + new /obj/item/food/snacks/donut(src) update_icon(UPDATE_OVERLAYS) /obj/item/storage/fancy/donut_box/empty/populate_contents() @@ -82,11 +82,11 @@ item_state = "eggbox" name = "egg box" storage_slots = 12 - can_hold = list(/obj/item/reagent_containers/food/snacks/egg) + can_hold = list(/obj/item/food/snacks/egg) /obj/item/storage/fancy/egg_box/populate_contents() for(var/I in 1 to storage_slots) - new /obj/item/reagent_containers/food/snacks/egg(src) + new /obj/item/food/snacks/egg(src) /* * Candle Box diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 3d530f357515..b26ee00de504 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -128,10 +128,13 @@ /obj/item/storage/secure/attack_self(mob/user) ui_interact(user) -/obj/item/storage/secure/ui_interact(mob/user, ui_key, datum/tgui/ui, force_open, datum/tgui/master_ui, datum/ui_state/state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/storage/secure/ui_state(mob/user) + return GLOB.default_state + +/obj/item/storage/secure/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SecureStorage", name, 275, 500, master_ui, state) + ui = new(user, src, "SecureStorage", name) ui.open() /obj/item/storage/secure/ui_data(mob/user) diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index b3c1d30fa903..ec70bb040627 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -68,7 +68,7 @@ /obj/item/storage/box/syndie_kit/emp, // 10TC /obj/item/clothing/glasses/hud/security/chameleon, // 10TC /obj/item/encryptionkey/syndicate, // 10TC - /obj/item/reagent_containers/food/drinks/drinkingglass/alliescocktail, // 0TC + /obj/item/reagent_containers/drinks/drinkingglass/alliescocktail, // 0TC /obj/item/storage/box/syndie_kit/pen_bomb, // 30 TC /obj/item/CQC_manual) // 13TC @@ -310,9 +310,9 @@ name = "combat bakery kit" /obj/item/storage/box/syndie_kit/combat_baking/populate_contents() - new /obj/item/reagent_containers/food/snacks/baguette/combat(src) + new /obj/item/food/snacks/baguette/combat(src) for(var/i in 1 to 2) - new /obj/item/reagent_containers/food/snacks/croissant/throwing(src) + new /obj/item/food/snacks/croissant/throwing(src) new /obj/item/book/granter/crafting_recipe/combat_baking(src) /obj/item/storage/box/syndie_kit/atmosn2ogrenades diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 17ee75fe8330..6e11a28b0a61 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -157,10 +157,13 @@ ui_interact(user) -/obj/item/tank/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/tank/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/tank/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Tank", name, 300, 150, master_ui, state) + ui = new(user, src, "Tank", name) ui.open() /obj/item/tank/ui_data(mob/user) diff --git a/code/game/objects/mail.dm b/code/game/objects/mail.dm index 13f6601ecb7f..8da165a7be11 100644 --- a/code/game/objects/mail.dm +++ b/code/game/objects/mail.dm @@ -56,13 +56,13 @@ /obj/item/envelope/security icon_state = "mail_sec" - possible_contents = list(/obj/item/reagent_containers/food/snacks/donut/sprinkles, + possible_contents = list(/obj/item/food/snacks/donut/sprinkles, /obj/item/megaphone, /obj/item/clothing/mask/whistle, /obj/item/poster/random_official, /obj/item/restraints/handcuffs/pinkcuffs, /obj/item/restraints/legcuffs/bola/energy, - /obj/item/reagent_containers/food/drinks/coffee, + /obj/item/reagent_containers/drinks/coffee, /obj/item/stock_parts/cell/super, /obj/item/grenade/barrier/dropwall, /obj/item/toy/figure/crew/detective, @@ -92,7 +92,7 @@ /obj/item/envelope/supply icon_state = "mail_sup" possible_contents = list(/obj/item/reagent_containers/hypospray/autoinjector/survival, - /obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, + /obj/item/reagent_containers/drinks/bottle/absinthe/premium, /obj/item/clothing/glasses/meson/gar, /obj/item/stack/marker_beacon/ten, /obj/item/stack/medical/splint, @@ -113,7 +113,7 @@ /obj/item/reagent_containers/applicator/brute, /obj/item/reagent_containers/applicator/burn, /obj/item/clothing/glasses/sunglasses, - /obj/item/reagent_containers/food/snacks/fortunecookie, + /obj/item/food/snacks/fortunecookie, /obj/item/scalpel/laser/laser1, /obj/item/toy/figure/crew/cmo, /obj/item/toy/figure/crew/chemist, @@ -126,8 +126,8 @@ /obj/item/envelope/engineering icon_state = "mail_eng" possible_contents = list(/obj/item/airlock_electronics, - /obj/item/reagent_containers/food/drinks/cans/beer, - /obj/item/reagent_containers/food/snacks/candy/confectionery/nougat, + /obj/item/reagent_containers/drinks/cans/beer, + /obj/item/food/snacks/candy/confectionery/nougat, /obj/item/mod/module/storage/large_capacity, /obj/item/weldingtool/hugetank, /obj/item/geiger_counter, @@ -143,7 +143,7 @@ icon_state = "mail_serv" possible_contents = list(/obj/item/painter, /obj/item/gun/energy/floragun, - /obj/item/reagent_containers/food/drinks/bottle/fernet, + /obj/item/reagent_containers/drinks/bottle/fernet, /obj/item/whetstone, /obj/item/soap/deluxe, /obj/item/stack/tile/disco_light/thirty, @@ -162,7 +162,7 @@ possible_contents = list(/obj/item/painter, /obj/item/stack/sheet/mineral/tranquillite/ten, /obj/item/stack/sheet/mineral/bananium/ten, - /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing, + /obj/item/reagent_containers/drinks/bottle/bottleofnothing, /obj/item/gun/throw/piecannon, /obj/item/ammo_box/shotgun/confetti, /obj/item/book/manual/wiki/sop_security, // They'll need this. @@ -183,7 +183,7 @@ /obj/item/book/manual/wiki/sop_command, /obj/item/reagent_containers/patch/synthflesh, /obj/item/paper_bin/nanotrasen, - /obj/item/reagent_containers/food/snacks/spesslaw, + /obj/item/food/snacks/spesslaw, /obj/item/clothing/head/collectable/petehat, /obj/item/toy/figure/crew/captain, /obj/item/toy/figure/crew/lawyer, diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index d3eddd8b963d..9c0ebc44a41e 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -62,7 +62,7 @@ // In the far future no checks are made in an overriding Topic() beyond if(..()) return // Instead any such checks are made in CanUseTopic() - if(ui_status(usr, state, href_list) == STATUS_INTERACTIVE) + if(ui_status(usr, state, href_list) == UI_INTERACTIVE) CouldUseTopic(usr) return FALSE diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm index d27a430d7e9f..0cf7d24743a1 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm @@ -11,13 +11,13 @@ close_sound_volume = 50 /obj/structure/closet/secure_closet/bar/populate_contents() - new /obj/item/reagent_containers/food/drinks/cans/beer(src) - new /obj/item/reagent_containers/food/drinks/cans/beer(src) - new /obj/item/reagent_containers/food/drinks/cans/beer(src) - new /obj/item/reagent_containers/food/drinks/cans/beer(src) - new /obj/item/reagent_containers/food/drinks/cans/beer(src) - new /obj/item/reagent_containers/food/drinks/cans/beer(src) - new /obj/item/reagent_containers/food/drinks/cans/beer(src) - new /obj/item/reagent_containers/food/drinks/cans/beer(src) - new /obj/item/reagent_containers/food/drinks/cans/beer(src) - new /obj/item/reagent_containers/food/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) + new /obj/item/reagent_containers/drinks/cans/beer(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo_lockers.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo_lockers.dm index 7938db083027..23e43d86390f 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo_lockers.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo_lockers.dm @@ -27,7 +27,7 @@ new /obj/item/clothing/accessory/medal/supply(src) new /obj/item/rcs(src) new /obj/item/destTagger(src) - new /obj/item/reagent_containers/food/drinks/mug/qm(src) + new /obj/item/reagent_containers/drinks/mug/qm(src) new /obj/item/flash(src) new /obj/item/cartridge/qm(src) new /obj/item/storage/bag/mail(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering_lockers.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering_lockers.dm index 7794cdbbc106..641f75e62626 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering_lockers.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering_lockers.dm @@ -24,7 +24,7 @@ new /obj/item/clothing/glasses/meson/engine(src) new /obj/item/door_remote/chief_engineer(src) new /obj/item/rpd(src) - new /obj/item/reagent_containers/food/drinks/mug/ce(src) + new /obj/item/reagent_containers/drinks/mug/ce(src) new /obj/item/organ/internal/eyes/cybernetic/meson(src) new /obj/item/clothing/accessory/medal/engineering(src) new /obj/item/holosign_creator/atmos(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm index a4a2f4a77087..e678e4952108 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -15,9 +15,9 @@ /obj/structure/closet/secure_closet/freezer/kitchen/populate_contents() for(var/i in 1 to 3) - new /obj/item/reagent_containers/food/condiment/flour(src) - new /obj/item/reagent_containers/food/condiment/rice(src) - new /obj/item/reagent_containers/food/condiment/sugar(src) + new /obj/item/reagent_containers/condiment/flour(src) + new /obj/item/reagent_containers/condiment/rice(src) + new /obj/item/reagent_containers/condiment/sugar(src) /obj/structure/closet/secure_closet/freezer/kitchen/mining @@ -30,9 +30,9 @@ /obj/structure/closet/secure_closet/freezer/kitchen/maintenance/populate_contents() for(var/i = 0, i < 5, i++) - new /obj/item/reagent_containers/food/condiment/milk(src) + new /obj/item/reagent_containers/condiment/milk(src) for(var/i = 0, i < 5, i++) - new /obj/item/reagent_containers/food/condiment/soymilk(src) + new /obj/item/reagent_containers/condiment/soymilk(src) for(var/i = 0, i < 2, i++) new /obj/item/storage/fancy/egg_box(src) @@ -43,7 +43,7 @@ /obj/structure/closet/secure_closet/freezer/meat/populate_contents() for(var/i in 1 to 4) - new /obj/item/reagent_containers/food/snacks/meat/monkey(src) + new /obj/item/food/snacks/meat/monkey(src) /obj/structure/closet/secure_closet/freezer/meat/open req_access = null @@ -56,8 +56,8 @@ /obj/structure/closet/secure_closet/freezer/fridge/populate_contents() for(var/i in 1 to 5) - new /obj/item/reagent_containers/food/condiment/milk(src) - new /obj/item/reagent_containers/food/condiment/soymilk(src) + new /obj/item/reagent_containers/condiment/milk(src) + new /obj/item/reagent_containers/condiment/soymilk(src) for(var/i in 1 to 2) new /obj/item/storage/fancy/egg_box(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical_lockers.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical_lockers.dm index 7ef37f41ed32..9a0f455f0d46 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical_lockers.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical_lockers.dm @@ -135,7 +135,7 @@ new /obj/item/storage/pill_bottle/psychiatrist(src) new /obj/random/plushie(src) for(var/i in 0 to 3) - var/candy = pick(subtypesof(/obj/item/reagent_containers/food/snacks/candy/fudge)) + var/candy = pick(subtypesof(/obj/item/food/snacks/candy/fudge)) new candy(src) /obj/structure/closet/secure_closet/CMO @@ -163,7 +163,7 @@ new /obj/item/reagent_containers/hypospray/CMO(src) new /obj/item/organ/internal/cyberimp/eyes/hud/medical(src) new /obj/item/door_remote/chief_medical_officer(src) - new /obj/item/reagent_containers/food/drinks/mug/cmo(src) + new /obj/item/reagent_containers/drinks/mug/cmo(src) new /obj/item/clothing/accessory/medal/medical(src) new /obj/item/storage/briefcase(src) new /obj/item/clothing/mask/gas(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/miscjobs.dm b/code/game/objects/structures/crates_lockers/closets/secure/miscjobs.dm index fc7bafad01d0..ee2c5e262ea6 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/miscjobs.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/miscjobs.dm @@ -17,7 +17,7 @@ new /obj/item/clown_recorder(src) new /obj/item/bikehorn(src) new /obj/item/reagent_containers/spray/waterflower(src) - new /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana(src) + new /obj/item/reagent_containers/drinks/bottle/bottleofbanana(src) new /obj/item/toy/crayon/rainbow(src) new /obj/item/seeds/banana(src) new /obj/item/restraints/handcuffs/toy(src) @@ -44,7 +44,7 @@ new /obj/item/clothing/shoes/black(src) new /obj/item/storage/backpack/mime(src) new /obj/item/toy/crayon/mime(src) - new /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing(src) + new /obj/item/reagent_containers/drinks/bottle/bottleofnothing(src) new /obj/item/cane(src) /obj/structure/closet/secure_closet/syndicate_officer diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index 73f75df0569a..85cf3434504a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -57,7 +57,7 @@ new /obj/item/flash(src) new /obj/item/laser_pointer(src) new /obj/item/door_remote/research_director(src) - new /obj/item/reagent_containers/food/drinks/mug/rd(src) + new /obj/item/reagent_containers/drinks/mug/rd(src) new /obj/item/organ/internal/cyberimp/eyes/hud/diagnostic(src) new /obj/item/clothing/accessory/medal/science(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security_lockers.dm b/code/game/objects/structures/crates_lockers/closets/secure/security_lockers.dm index ebda73462c86..d341e859856c 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security_lockers.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security_lockers.dm @@ -18,7 +18,7 @@ new /obj/item/gun/energy/gun(src) new /obj/item/flash(src) new /obj/item/door_remote/captain(src) - new /obj/item/reagent_containers/food/drinks/mug/cap(src) + new /obj/item/reagent_containers/drinks/mug/cap(src) new /obj/item/tank/internals/emergency_oxygen/double(src) /obj/structure/closet/secure_closet/hop @@ -35,7 +35,7 @@ new /obj/item/gun/energy/gun/mini(src) new /obj/item/flash(src) new /obj/item/door_remote/civillian(src) - new /obj/item/reagent_containers/food/drinks/mug/hop(src) + new /obj/item/reagent_containers/drinks/mug/hop(src) new /obj/item/clothing/accessory/medal/service(src) new /obj/item/storage/bag/garment/head_of_personnel(src) @@ -62,10 +62,10 @@ new /obj/item/storage/belt/security/full(src) new /obj/item/gun/energy/gun/hos(src) new /obj/item/door_remote/head_of_security(src) - new /obj/item/reagent_containers/food/drinks/mug/hos(src) + new /obj/item/reagent_containers/drinks/mug/hos(src) new /obj/item/organ/internal/cyberimp/eyes/hud/security(src) new /obj/item/clothing/accessory/medal/security(src) - new /obj/item/reagent_containers/food/drinks/flask/barflask(src) + new /obj/item/reagent_containers/drinks/flask/barflask(src) new /obj/item/clothing/mask/gas/sechailer(src) /obj/structure/closet/secure_closet/warden diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index dc4141592faf..e7224c838616 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -221,16 +221,21 @@ GLOBAL_LIST_EMPTY(safes) to_chat(user, "You can't put [I] into the safe while it is closed!") return -/obj/structure/safe/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) - var/datum/asset/safe_assets = get_asset_datum(/datum/asset/simple/safe) - safe_assets.send(user) +/obj/structure/safe/ui_state(mob/user) + return GLOB.physical_state - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/structure/safe/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Safe", name, 600, 750) + ui = new(user, src, "Safe", name) ui.open() ui.set_autoupdate(FALSE) +/obj/structure/safe/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/simple/safe) + ) + /obj/structure/safe/ui_data(mob/user) var/list/data = list() data["dial"] = dial diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index c7310b9141db..ef49a478bb27 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -332,7 +332,7 @@ desc = "Just like the ones you remember from childhood!" /obj/structure/snowman/built/Destroy() - new /obj/item/reagent_containers/food/snacks/grown/carrot(drop_location()) + new /obj/item/food/snacks/grown/carrot(drop_location()) new /obj/item/grown/log(drop_location()) new /obj/item/grown/log(drop_location()) return ..() diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index ab6b0c87305a..d38485b0c9b4 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -66,10 +66,13 @@ /obj/structure/dispenser/attack_ghost(mob/user) ui_interact(user) -/obj/structure/dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/structure/dispenser/ui_state(mob/user) + return GLOB.default_state + +/obj/structure/dispenser/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "TankDispenser", name, 275, 100, master_ui, state) + ui = new(user, src, "TankDispenser", name) ui.open() /obj/structure/dispenser/ui_data(user) diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index c72f5072f63a..b8d4ae73d80f 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -17,18 +17,30 @@ GLOBAL_VAR_INIT(admin_ooc_colour, "#b82e00") if(!mob) return if(IsGuestKey(key)) - to_chat(src, "Guests may not use OOC.") + to_chat(src, + type = MESSAGE_TYPE_WARNING, + html = "Guests may not use OOC.", + confidential = TRUE) return if(!check_rights(R_ADMIN|R_MOD, 0)) if(!GLOB.ooc_enabled) - to_chat(src, "OOC is globally muted.") + to_chat(src, + type = MESSAGE_TYPE_WARNING, + html = "OOC is globally muted.", + confidential = TRUE) return if(!GLOB.dooc_enabled && (mob.stat == DEAD)) - to_chat(usr, "OOC for dead mobs has been turned off.") + to_chat(usr, + type = MESSAGE_TYPE_WARNING, + html = "OOC for dead mobs has been turned off.", + confidential = TRUE) return if(check_mute(ckey, MUTE_OOC)) - to_chat(src, "You cannot use OOC (muted).") + to_chat(src, + type = MESSAGE_TYPE_WARNING, + html = "You cannot use OOC (muted).", + confidential = TRUE) return if(!msg) @@ -179,18 +191,30 @@ GLOBAL_VAR_INIT(admin_ooc_colour, "#b82e00") if(!mob) return if(IsGuestKey(key)) - to_chat(src, "Guests may not use OOC.") + to_chat(src, + type = MESSAGE_TYPE_WARNING, + html = "Guests may not use LOOC.", + confidential = TRUE) return if(!check_rights(R_ADMIN|R_MOD,0)) if(!GLOB.looc_enabled) - to_chat(src, "LOOC is globally muted.") + to_chat(src, + type = MESSAGE_TYPE_WARNING, + html = "LOOC is globally muted.", + confidential = TRUE) return if(!GLOB.dooc_enabled && (mob.stat == DEAD)) - to_chat(usr, "LOOC for dead mobs has been turned off.") + to_chat(usr, + type = MESSAGE_TYPE_WARNING, + html= "LOOC for dead mobs has been turned off.", + confidential = TRUE) return if(check_mute(ckey, MUTE_OOC)) - to_chat(src, "You cannot use LOOC (muted).") + to_chat(src, + type = MESSAGE_TYPE_WARNING, + html = "You cannot use LOOC (muted).", + confidential = TRUE) return if(!msg) diff --git a/code/game/world.dm b/code/game/world.dm index f538fcca4ed8..e46defc14f4e 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -155,15 +155,12 @@ GLOBAL_LIST_EMPTY(world_topic_handlers) to_chat(world, "Stats for this round can be viewed at [stats_link]") // If the server has been gracefully shutdown in TGS, have a 60 seconds grace period for SQL updates and stuff - var/secs_before_auto_reconnect = 10 if(GLOB.slower_restart) - secs_before_auto_reconnect = 60 server_announce_global("Reboot will take a little longer due to pending backend changes.") - // Send the reboot banner to all players for(var/client/C in GLOB.clients) - C << output(list2params(list(secs_before_auto_reconnect)), "browseroutput:reboot") + C?.tgui_panel?.send_roundrestart() if(C.prefs.server_region) // Keep them on the same relay C << link(GLOB.configuration.system.region_map[C.prefs.server_region]) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index eb5c03c7d01b..9780a909f3b9 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -255,10 +255,6 @@ GLOBAL_LIST_INIT(view_runtimes_verbs, list( /client/proc/timer_log )) -/client/proc/on_holder_add() - if(chatOutput && chatOutput.loaded) - chatOutput.loadAdmin() - /client/proc/add_admin_verbs() if(holder) // If they have ANYTHING OTHER THAN ONLY VIEW RUNTIMES (65536), then give them the default admin verbs @@ -801,7 +797,7 @@ GLOBAL_LIST_INIT(view_runtimes_verbs, list( if(!S) return var/datum/ui_module/law_manager/L = new(S) - L.ui_interact(usr, state = GLOB.admin_state) + L.ui_interact(usr) log_and_message_admins("has opened [S]'s law manager.") SSblackbox.record_feedback("tally", "admin_verb", 1, "Manage Silicon Laws") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index 3274482fe701..a553e65af7c5 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -48,7 +48,6 @@ GLOBAL_PROTECT(admin_datums) // This is protected because we dont want people ma if(istype(C)) owner = C owner.holder = src - owner.on_holder_add() owner.add_admin_verbs() //TODO owner.verbs -= /client/proc/readmin GLOB.admins |= C diff --git a/code/modules/admin/misc_admin_procs.dm b/code/modules/admin/misc_admin_procs.dm index 0197f048de77..bac3ee5bf6d4 100644 --- a/code/modules/admin/misc_admin_procs.dm +++ b/code/modules/admin/misc_admin_procs.dm @@ -7,14 +7,20 @@ GLOBAL_VAR_INIT(nologevent, 0) for(var/client/C in GLOB.admins) if(R_ADMIN & C.holder.rights) if(C.prefs && !(C.prefs.toggles & PREFTOGGLE_CHAT_NO_ADMINLOGS)) - to_chat(C, msg) + to_chat(C, + type = MESSAGE_TYPE_ADMINLOG, + html = msg, + confidential = TRUE) /proc/msg_admin_attack(text, loglevel) if(!GLOB.nologevent) var/rendered = "ATTACK: [text]" for(var/client/C in GLOB.admins) if((C.holder.rights & R_ADMIN) && (C.prefs?.atklog <= loglevel)) - to_chat(C, rendered) + to_chat(C, + type = MESSAGE_TYPE_ATTACKLOG, + html = rendered, + confidential = TRUE) /** * Sends a message to the staff able to see admin tickets @@ -27,7 +33,10 @@ GLOBAL_VAR_INIT(nologevent, 0) for(var/client/C in GLOB.admins) if(R_ADMIN & C.holder.rights) if(important || (C.prefs && !(C.prefs.toggles & PREFTOGGLE_CHAT_NO_TICKETLOGS))) - to_chat(C, msg) + to_chat(C, + type = MESSAGE_TYPE_ADMINPM, + html = msg, + confidential = TRUE) if(important) if(C.prefs?.sound & SOUND_ADMINHELP) SEND_SOUND(C, sound('sound/effects/adminhelp.ogg')) @@ -44,7 +53,10 @@ GLOBAL_VAR_INIT(nologevent, 0) for(var/client/C in GLOB.admins) if(check_rights(R_ADMIN | R_MENTOR | R_MOD, 0, C.mob)) if(important || (C.prefs && !(C.prefs.toggles & PREFTOGGLE_CHAT_NO_TICKETLOGS))) - to_chat(C, msg) + to_chat(C, + type = MESSAGE_TYPE_MENTORCHAT, + html = msg, + confidential = TRUE) if(important) if(C.prefs?.sound & SOUND_MENTORHELP) SEND_SOUND(C, sound('sound/effects/adminhelp.ogg')) @@ -56,12 +68,21 @@ GLOBAL_VAR_INIT(nologevent, 0) for(var/mob/O in GLOB.mob_list) if(O.ckey && O.ckey == ckey_to_find) if(admin_to_notify) - to_chat(admin_to_notify, "admin_ban_mobsearch: Player [ckey_to_find] is now in mob [O]. Pulling data from new mob.") + to_chat(admin_to_notify, + type = MESSAGE_TYPE_ADMINLOG, + html = "admin_ban_mobsearch: Player [ckey_to_find] is now in mob [O]. Pulling data from new mob.", + confidential = TRUE) return O if(admin_to_notify) - to_chat(admin_to_notify, "admin_ban_mobsearch: Player [ckey_to_find] does not seem to have any mob, anywhere. This is probably an error.") + to_chat(admin_to_notify, + type = MESSAGE_TYPE_ADMINLOG, + html = "admin_ban_mobsearch: Player [ckey_to_find] does not seem to have any mob, anywhere. This is probably an error.", + confidential = TRUE) else if(admin_to_notify) - to_chat(admin_to_notify, "admin_ban_mobsearch: No mob or ckey detected.") + to_chat(admin_to_notify, + type = MESSAGE_TYPE_ADMINLOG, + html = "admin_ban_mobsearch: No mob or ckey detected.", + confidential = TRUE) return M ///////////////////////////////////////////////////////////////////////////////////////////////Panels diff --git a/code/modules/admin/permissionverbs/permissionedit.dm b/code/modules/admin/permissionverbs/permissionedit.dm index 872bac35bca5..dd2ecf44c9b3 100644 --- a/code/modules/admin/permissionverbs/permissionedit.dm +++ b/code/modules/admin/permissionverbs/permissionedit.dm @@ -10,12 +10,15 @@ if(!check_rights(R_PERMISSIONS)) return + var/datum/asset/permissions_asset = get_asset_datum(/datum/asset/simple/permissions) + permissions_asset.send(usr) + var/output = {" Permissions Panel - - + +
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index f4bbe35cd7df..8041e3ec9b06 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1786,10 +1786,10 @@ to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") return - H.equip_to_slot_or_del( new /obj/item/reagent_containers/food/snacks/cookie(H), SLOT_HUD_LEFT_HAND ) - if(!(istype(H.l_hand,/obj/item/reagent_containers/food/snacks/cookie))) - H.equip_to_slot_or_del( new /obj/item/reagent_containers/food/snacks/cookie(H), SLOT_HUD_RIGHT_HAND ) - if(!(istype(H.r_hand,/obj/item/reagent_containers/food/snacks/cookie))) + H.equip_to_slot_or_del( new /obj/item/food/snacks/cookie(H), SLOT_HUD_LEFT_HAND ) + if(!(istype(H.l_hand,/obj/item/food/snacks/cookie))) + H.equip_to_slot_or_del( new /obj/item/food/snacks/cookie(H), SLOT_HUD_RIGHT_HAND ) + if(!(istype(H.r_hand,/obj/item/food/snacks/cookie))) log_admin("[key_name(H)] has their hands full, so they did not receive their cookie, spawned by [key_name(src.owner)].") message_admins("[key_name_admin(H)] has [H.p_their()] hands full, so [H.p_they()] did not receive [H.p_their()] cookie, spawned by [key_name_admin(src.owner)].") return @@ -2119,7 +2119,7 @@ ADD_TRAIT(H, TRAIT_BADDNA, "smiting") logmsg = "cluwned." if("Mutagen Cookie") - var/obj/item/reagent_containers/food/snacks/cookie/evilcookie = new /obj/item/reagent_containers/food/snacks/cookie + var/obj/item/food/snacks/cookie/evilcookie = new /obj/item/food/snacks/cookie evilcookie.reagents.add_reagent("mutagen", 10) evilcookie.desc = "It has a faint green glow." evilcookie.bitesize = 100 @@ -2128,7 +2128,7 @@ H.equip_to_slot_or_del(evilcookie, SLOT_HUD_LEFT_HAND) logmsg = "a mutagen cookie." if("Hellwater Cookie") - var/obj/item/reagent_containers/food/snacks/cookie/evilcookie = new /obj/item/reagent_containers/food/snacks/cookie + var/obj/item/food/snacks/cookie/evilcookie = new /obj/item/food/snacks/cookie evilcookie.reagents.add_reagent("hell_water", 25) evilcookie.desc = "Sulphur-flavored." evilcookie.bitesize = 100 @@ -2192,7 +2192,7 @@ if("Bread") var/mob/living/simple_animal/shade/sword/bread/breadshade = new(H.loc) - var/bready = pick(/obj/item/reagent_containers/food/snacks/customizable/cook/bread, /obj/item/reagent_containers/food/snacks/sliceable/meatbread, /obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread, /obj/item/reagent_containers/food/snacks/sliceable/spidermeatbread, /obj/item/reagent_containers/food/snacks/sliceable/bananabread, /obj/item/reagent_containers/food/snacks/sliceable/tofubread, /obj/item/reagent_containers/food/snacks/sliceable/bread, /obj/item/reagent_containers/food/snacks/sliceable/creamcheesebread, /obj/item/reagent_containers/food/snacks/sliceable/banarnarbread, /obj/item/reagent_containers/food/snacks/flatbread, /obj/item/reagent_containers/food/snacks/baguette) + var/bready = pick(/obj/item/food/snacks/customizable/cook/bread, /obj/item/food/snacks/sliceable/meatbread, /obj/item/food/snacks/sliceable/xenomeatbread, /obj/item/food/snacks/sliceable/spidermeatbread, /obj/item/food/snacks/sliceable/bananabread, /obj/item/food/snacks/sliceable/tofubread, /obj/item/food/snacks/sliceable/bread, /obj/item/food/snacks/sliceable/creamcheesebread, /obj/item/food/snacks/sliceable/banarnarbread, /obj/item/food/snacks/flatbread, /obj/item/food/snacks/baguette) var/obj/item/bread = new bready(get_turf(H)) breadshade.forceMove(bread) breadshade.key = H.key diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 40fb2ab3da75..d6d3890a8524 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -4,7 +4,10 @@ //handle muting and automuting if(check_mute(ckey, MUTE_ADMINHELP)) - to_chat(src, "Error: Admin-PM: You cannot send adminhelps (Muted).") + to_chat(src, + type = MESSAGE_TYPE_ADMINPM, + html = "Error: Admin-PM: You cannot send adminhelps (Muted).", + confidential = TRUE) return adminhelped = TRUE //Determines if they get the message to reply by clicking the name. @@ -31,7 +34,10 @@ SStickets.newHelpRequest(src, msg) // Ahelp //show it to the person adminhelping too - to_chat(src, "[selected_type]: [msg]") + to_chat(src, + type = MESSAGE_TYPE_ADMINPM, + html = "[selected_type]: [msg]", + confidential = TRUE) SSblackbox.record_feedback("tally", "admin_verb", 1, "Adminhelp") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! switch(selected_type) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index bf9c71d77b0b..d40f4107ec71 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -186,13 +186,13 @@ switch(type) if("Mentorhelp") if(check_rights(R_ADMIN|R_MOD|R_MENTOR, 0, X.mob)) - to_chat(X, "[type]: [key_name(src, TRUE, type)]->[key_name(C, TRUE, type)]: [emoji_msg]") + to_chat(X, "[type]: [key_name(src, TRUE, type)]->[key_name(C, TRUE, type)]: [emoji_msg]", type = MESSAGE_TYPE_MENTORCHAT) if("Adminhelp") if(check_rights(R_ADMIN|R_MOD, 0, X.mob)) - to_chat(X, "[type]: [key_name(src, TRUE, type)]->[key_name(C, TRUE, type)]: [emoji_msg]") + to_chat(X, "[type]: [key_name(src, TRUE, type)]->[key_name(C, TRUE, type)]: [emoji_msg]", type = MESSAGE_TYPE_ADMINCHAT) else if(check_rights(R_ADMIN|R_MOD, 0, X.mob)) - to_chat(X, "[type]: [key_name(src, TRUE, type)]->[key_name(C, TRUE, type)]: [emoji_msg]") + to_chat(X, "[type]: [key_name(src, TRUE, type)]->[key_name(C, TRUE, type)]: [emoji_msg]", type = MESSAGE_TYPE_ADMINCHAT) //Check if the mob being PM'd has any open admin tickets. var/tickets = list() @@ -242,7 +242,10 @@ GLOB.discord_manager.send2discord_simple(DISCORD_WEBHOOK_ADMIN, "PM from [key_name(src)]: [html_decode(msg)]") - to_chat(src, "PM to-Discord Admins: [msg]") + to_chat(src, + type = MESSAGE_TYPE_ADMINPM, + html = "PM to-Discord Admins: [msg]", + confidential = TRUE) log_admin("PM: [key_name(src)]->Discord: [msg]") for(var/client/X in GLOB.admins) diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index 695b707bbd26..421168e6334a 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -30,7 +30,10 @@ temp_message = replacetext(temp_message, "@[C.key]", "@[C.key]") // Same applies here. key and ckey. temp_message = "[temp_message]" - to_chat(C, "ADMIN: [key_name(usr, 1)] ([admin_jump_link(mob)]): [temp_message]") + to_chat(C, + type = MESSAGE_TYPE_ADMINCHAT, + html = "ADMIN: [key_name(usr, 1)] ([admin_jump_link(mob)]): [temp_message]", + confidential = TRUE) SSblackbox.record_feedback("tally", "admin_verb", 1, "Asay") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -76,7 +79,10 @@ else display_name = holder.fakekey msg = "[msg]" - to_chat(C, "MENTOR: [display_name] ([admin_jump_link(mob)]): [msg]") + to_chat(C, + type = MESSAGE_TYPE_MENTORCHAT, + html = "MENTOR: [display_name] ([admin_jump_link(mob)]): [msg]", + confidential = TRUE) SSblackbox.record_feedback("tally", "admin_verb", 1, "Msay") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/antagonists/changeling/evolution_menu.dm b/code/modules/antagonists/changeling/evolution_menu.dm index cfc62411a7e3..a777a1f34057 100644 --- a/code/modules/antagonists/changeling/evolution_menu.dm +++ b/code/modules/antagonists/changeling/evolution_menu.dm @@ -18,10 +18,13 @@ /datum/action/changeling/evolution_menu/try_to_sting(mob/user, mob/target) ui_interact(user) -/datum/action/changeling/evolution_menu/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/action/changeling/evolution_menu/ui_state(mob/user) + return GLOB.always_state + +/datum/action/changeling/evolution_menu/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "EvolutionMenu", "Evolution Menu", 480, 574, master_ui, state) + ui = new(user, src, "EvolutionMenu", "Evolution Menu") ui.set_autoupdate(FALSE) ui.open() diff --git a/code/modules/antagonists/traitor/contractor/datums/contractor_hub_ui.dm b/code/modules/antagonists/traitor/contractor/datums/contractor_hub_ui.dm index cc7b733c743e..250e6a5876f2 100644 --- a/code/modules/antagonists/traitor/contractor/datums/contractor_hub_ui.dm +++ b/code/modules/antagonists/traitor/contractor/datums/contractor_hub_ui.dm @@ -38,10 +38,13 @@ var/obj/item/U = ui_host() U?.add_fingerprint(usr) -/datum/contractor_hub/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/contractor_hub/ui_state(mob/user) + return GLOB.default_state + +/datum/contractor_hub/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Contractor", "Syndicate Contractor Uplink", 500, 600, master_ui, state) + ui = new(user, src, "Contractor", "Syndicate Contractor Uplink") ui.open() /datum/contractor_hub/ui_data(mob/user) diff --git a/code/modules/antagonists/traitor/contractor/datums/syndicate_contract.dm b/code/modules/antagonists/traitor/contractor/datums/syndicate_contract.dm index 82d4ca3ea709..19bf47f722d9 100644 --- a/code/modules/antagonists/traitor/contractor/datums/syndicate_contract.dm +++ b/code/modules/antagonists/traitor/contractor/datums/syndicate_contract.dm @@ -23,8 +23,8 @@ /obj/item/clothing/under/syndicate/tacticool, /obj/item/coin/antagtoken/syndicate, /obj/item/poster/syndicate_recruitment, - /obj/item/reagent_containers/food/snacks/syndicake, - /obj/item/reagent_containers/food/snacks/tatortot, + /obj/item/food/snacks/syndicake, + /obj/item/food/snacks/tatortot, /obj/item/storage/box/fakesyndiesuit, /obj/item/storage/fancy/cigarettes/cigpack_syndicate, /obj/item/toy/figure/crew/syndie, @@ -422,7 +422,7 @@ M.update_icons() // Supply them with some chow. How generous is the Syndicate? - var/obj/item/reagent_containers/food/snacks/breadslice/food = new(get_turf(M)) + var/obj/item/food/snacks/breadslice/food = new(get_turf(M)) food.name = "stale bread" food.desc = "Looks like your captors care for their prisoners as much as their bread." food.trash = null @@ -432,7 +432,7 @@ food.name = "moldy bread" food.reagents.add_reagent("fungus", 1) - var/obj/item/reagent_containers/food/drinks/drinkingglass/drink = new(get_turf(M)) + var/obj/item/reagent_containers/drinks/drinkingglass/drink = new(get_turf(M)) drink.reagents.add_reagent("tea", 25) // British coders beware, tea in glasses var/obj/item/coin/antagtoken/passingtime = new(get_turf(M)) diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index 16a4f3f916c3..282b8c9517f8 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -24,6 +24,18 @@ owner.som.masters += owner ..() +/datum/antagonist/traitor/apply_innate_effects(mob/living/mob_override) + . = ..() + var/mob/living/datum_owner = mob_override || owner.current + datum_owner.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_phrase_regex, "codephrases", src) + datum_owner.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_response_regex, "coderesponses", src) + +/datum/antagonist/traitor/remove_innate_effects(mob/living/mob_override) + . = ..() + var/mob/living/datum_owner = mob_override || owner.current + for(var/datum/component/codeword_hearing/component in datum_owner.GetComponents(/datum/component/codeword_hearing)) + component.delete_if_from_source(src) + /datum/antagonist/traitor/Destroy(force, ...) // Remove all associated malf AI abilities. if(isAI(owner.current)) @@ -44,8 +56,8 @@ slaved.leave_serv_hud(owner) owner.som = null - owner.current.client?.chatOutput?.clear_syndicate_codes() - + // Need to bring this functionality back to TGchat + // owner.current.client?.chatOutput?.clear_syndicate_codes() // Try removing their uplink, check PDA var/mob/M = owner.current var/obj/item/uplink_holder = locate(/obj/item/pda) in M.contents @@ -162,7 +174,8 @@ /datum/antagonist/traitor/proc/give_codewords() if(!owner.current) return - var/mob/traitor_mob = owner.current + // Need to bring this functionality back to TGchat + // var/mob/traitor_mob = owner.current var/phrases = jointext(GLOB.syndicate_code_phrase, ", ") var/responses = jointext(GLOB.syndicate_code_response, ", ") @@ -177,7 +190,8 @@ messages.Add("Используйте эти слова для идентификации других агентов. Действуйте аккуратно, поскольку каждый человек - потенциальный враг.") messages.Add("Вы запоминаете кодовые формулировки, определяя их в речи.") - traitor_mob.client.chatOutput?.notify_syndicate_codes() + // Need to bring this functionality back to TGchat + // traitor_mob.client.chatOutput?.notify_syndicate_codes() return messages /** diff --git a/code/modules/antagonists/vampire/vampire_powers/vampire_powers.dm b/code/modules/antagonists/vampire/vampire_powers/vampire_powers.dm index 68304f932a6c..50fdd3349d1b 100644 --- a/code/modules/antagonists/vampire/vampire_powers/vampire_powers.dm +++ b/code/modules/antagonists/vampire/vampire_powers/vampire_powers.dm @@ -106,10 +106,13 @@ /obj/effect/proc_holder/spell/vampire/self/specialize/cast(mob/user) ui_interact(user) -/obj/effect/proc_holder/spell/vampire/self/specialize/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/effect/proc_holder/spell/vampire/self/specialize/ui_state(mob/user) + return GLOB.always_state + +/obj/effect/proc_holder/spell/vampire/self/specialize/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SpecMenu", "Specialisation Menu", 1200, 760, master_ui, state) + ui = new(user, src, "SpecMenu", "Specialisation Menu") ui.set_autoupdate(FALSE) ui.open() diff --git a/code/modules/arcade/claw_game.dm b/code/modules/arcade/claw_game.dm index d1c6bd555818..ccd8d1e40cd9 100644 --- a/code/modules/arcade/claw_game.dm +++ b/code/modules/arcade/claw_game.dm @@ -8,14 +8,8 @@ GLOBAL_VAR(claw_game_html) token_price = 5 window_name = "Claw Game" var/machine_image = "_1" - var/bonus_prize_chance = 5 //chance to dispense a SECOND prize if you win, increased by matter bin rating - //This is to make sure the images are available - var/list/img_resources = list('icons/obj/arcade_images/backgroundsprite.png', - 'icons/obj/arcade_images/clawpieces.png', - 'icons/obj/arcade_images/crane_bot.png', - 'icons/obj/arcade_images/crane_top.png', - 'icons/obj/arcade_images/prize_inside.png', - 'icons/obj/arcade_images/prizeorbs.png') + /// Chance to dispense a SECOND prize if you win, increased by matter bin rating + var/bonus_prize_chance = 5 /obj/machinery/economy/arcade/claw/Initialize(mapload) . = ..() @@ -62,16 +56,16 @@ GLOBAL_VAR(claw_game_html) /obj/machinery/economy/arcade/claw/start_play(mob/user as mob) ..() - user << browse_rsc('page.css') - for(var/i in 1 to img_resources.len) - user << browse_rsc(img_resources[i]) + var/datum/asset/claw_game_page_asset = get_asset_datum(/datum/asset/group/claw_game) + claw_game_page_asset.send(user) + var/my_game_html = replacetext(GLOB.claw_game_html, "/* ref src */", UID()) var/datum/browser/popup = new(user, window_name, name, 915, 700, src) popup.set_content(my_game_html) - popup.add_stylesheet("page.css", 'code/modules/arcade/page.css') - popup.add_stylesheet("Button.scss", 'tgui/packages/tgui/styles/components/Button.scss') - popup.add_script("jquery-1.8.2.min.js", 'html/browser/jquery-1.8.2.min.js') - popup.add_script("jquery-ui-1.8.24.custom.min.js", 'html/browser/jquery-ui-1.8.24.custom.min.js') + popup.add_stylesheet("page", 'code/modules/arcade/page.css') + popup.add_scss_stylesheet("Button", 'tgui/packages/tgui/styles/components/Button.scss') + popup.add_script("jquery-1.8.2.min", 'html/browser/jquery-1.8.2.min.js') + popup.add_script("jquery-ui-1.8.24.custom.min", 'html/browser/jquery-ui-1.8.24.custom.min.js') popup.open() user.set_machine(src) diff --git a/code/modules/arcade/mob_hunt/battle_computer.dm b/code/modules/arcade/mob_hunt/battle_computer.dm index fc16026f48a5..e3acd026c33d 100644 --- a/code/modules/arcade/mob_hunt/battle_computer.dm +++ b/code/modules/arcade/mob_hunt/battle_computer.dm @@ -117,6 +117,9 @@ /obj/machinery/computer/mob_battle_terminal/interact(mob/user) check_connection() + var/datum/asset/mob_hunt_asset = get_asset_datum(/datum/asset/simple/mob_hunt) + mob_hunt_asset.send(user) + var/dat = "" dat += "
" dat += "" @@ -144,9 +147,9 @@ dat += "" dat += "" diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index 795f1a5ac5b5..6d128f01ce6d 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -76,10 +76,13 @@ /obj/item/assembly/health/attack_self(mob/user) ui_interact(user) -/obj/item/assembly/health/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.deep_inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/assembly/health/ui_state(mob/user) + return GLOB.deep_inventory_state + +/obj/item/assembly/health/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "HealthSensor", name, 300, 140, master_ui, state) + ui = new(user, src, "HealthSensor", name) ui.open() /obj/item/assembly/health/ui_data(mob/user) diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 074d254d4977..518706ac1743 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -81,10 +81,13 @@ GLOBAL_LIST_EMPTY(remote_signalers) /obj/item/assembly/signaler/attack_self(mob/user) ui_interact(user) -/obj/item/assembly/signaler/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.deep_inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/assembly/signaler/ui_state(mob/user) + return GLOB.deep_inventory_state + +/obj/item/assembly/signaler/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "RemoteSignaler", name, 300, 200, master_ui, state) + ui = new(user, src, "RemoteSignaler", name) ui.open() /obj/item/assembly/signaler/ui_data(mob/user) diff --git a/code/modules/asset_cache/asset_cache_client.dm b/code/modules/asset_cache/asset_cache_client.dm new file mode 100644 index 000000000000..cbb1e8bc777d --- /dev/null +++ b/code/modules/asset_cache/asset_cache_client.dm @@ -0,0 +1,53 @@ +/client + /// List of all asset filenames sent to this client by the asset cache, along with their assoicated md5s + var/list/sent_assets = list() + /// List of all completed blocking send jobs awaiting acknowledgement by send_asset + var/list/completed_asset_jobs = list() + + /// Last asset send job id + var/last_asset_job = 0 + var/last_completed_asset_job = 0 + +/// Process asset cache client topic calls for "asset_cache_confirm_arrival=[INT]" +/client/proc/asset_cache_confirm_arrival(job_id) + var/asset_cache_job = round(text2num(job_id)) + //because we skip the limiter, we have to make sure this is a valid arrival and not somebody tricking us into letting them append to a list without limit. + if(asset_cache_job > 0 && asset_cache_job <= last_asset_job && !(completed_asset_jobs["[asset_cache_job]"])) + completed_asset_jobs["[asset_cache_job]"] = TRUE + last_completed_asset_job = max(last_completed_asset_job, asset_cache_job) + else + return asset_cache_job || TRUE + + +/// Process asset cache client topic calls for "asset_cache_preload_data=[HTML+JSON_STRING] +/client/proc/asset_cache_preload_data(data) + var/json = data + var/list/preloaded_assets = json_decode(json) + for(var/preloaded_asset in preloaded_assets) + if(copytext(preloaded_asset, findlasttext(preloaded_asset, ".") + 1) in list("js", "jsm", "htm", "html")) + preloaded_assets -= preloaded_asset + continue + sent_assets |= preloaded_assets + + +/// Updates the client side stored json file used to keep track of what assets the client has between restarts/reconnects. +/client/proc/asset_cache_update_json() + if(world.time - connection_time < 10 SECONDS) //don't override the existing data file on a new connection + return + + src << browse(json_encode(sent_assets), "file=asset_data.json&display=0") + +/// Blocks until all currently sending browse and browse_rs assets have been sent. +/// Due to byond limitations, this proc will sleep for 1 client round trip even if the client has no pending asset sends. +/// This proc will return an untrue value if it had to return before confirming the send, such as timeout or the client going away. +/client/proc/browse_queue_flush(timeout = 5 SECONDS) + var/job = ++last_asset_job + var/t = 0 + var/timeout_time = timeout + src << browse({""}, "window=asset_cache_browser&file=asset_cache_send_verify.htm") + + while(!completed_asset_jobs["[job]"] && t < timeout_time) // Reception is handled in Topic() + stoplag(1) // Lock up the caller until this is received. + t++ + if(t < timeout_time) + return TRUE diff --git a/code/modules/asset_cache/asset_cache_item.dm b/code/modules/asset_cache/asset_cache_item.dm new file mode 100644 index 000000000000..2d9aa65e503c --- /dev/null +++ b/code/modules/asset_cache/asset_cache_item.dm @@ -0,0 +1,54 @@ +/** + * # asset_cache_item + * + * An internal datum containing info on items in the asset cache. Mainly used to cache md5 info for speed. +**/ +/datum/asset_cache_item + /// the name of this asset item, becomes the key in SSassets.cache list + var/name + /// md5() of the file this asset item represents. + var/hash + /// the file this asset represents + var/resource + /// our file extension e.g. .png, .gif, etc + var/ext = "" + /// Should this file also be sent via the legacy browse_rsc system + /// when cdn transports are enabled? + var/legacy = FALSE + /// Used by the cdn system to keep legacy css assets with their parent + /// css file. (css files resolve urls relative to the css file, so the + /// legacy system can't be used if the css file itself could go out over + /// the cdn) + var/namespace = null + /// True if this is the parent css or html file for an asset's namespace + var/namespace_parent = FALSE + /// TRUE for keeping local asset names when browse_rsc backend is used + var/keep_local_name = FALSE + +/datum/asset_cache_item/New(name, file) + if(!isfile(file)) + file = fcopy_rsc(file) + hash = md5(file) + if(!hash) + hash = md5(fcopy_rsc(file)) + if(!hash) + CRASH("invalid asset sent to asset cache") + log_debug("asset cache unexpected success of second fcopy_rsc") + src.name = name + var/extstart = findlasttext(name, ".") + if(extstart) + ext = ".[copytext(name, extstart+1)]" + resource = file + +/datum/asset_cache_item/vv_edit_var(var_name, var_value) + return FALSE + +/datum/asset_cache_item/CanProcCall(procname) + return FALSE + +/* + * can_vv_delete override + * Admins should not be deleting asset cache items through VV + */ +/datum/asset_cache_item/can_vv_delete() + return FALSE diff --git a/code/modules/asset_cache/asset_list.dm b/code/modules/asset_cache/asset_list.dm new file mode 100644 index 000000000000..4674bf24ce64 --- /dev/null +++ b/code/modules/asset_cache/asset_list.dm @@ -0,0 +1,378 @@ +//These datums are used to populate the asset cache, the proc "register()" does this. +//Place any asset datums you create in asset_list_items.dm + +//all of our asset datums, used for referring to these later +GLOBAL_LIST_EMPTY(asset_datums) + +//get an assetdatum or make a new one +/proc/get_asset_datum(type) + return GLOB.asset_datums[type] || new type() + +/datum/asset + var/_abstract = /datum/asset + var/cached_serialized_url_mappings + var/cached_serialized_url_mappings_transport_type + +/datum/asset/New() + GLOB.asset_datums[type] = src + register() + +/datum/asset/proc/get_url_mappings() + return list() + +/datum/asset/proc/register() + return + +/datum/asset/proc/send(client) + return + + +/// If you don't need anything complicated. +/datum/asset/simple + _abstract = /datum/asset/simple + /// List of assets for this datum in the form of asset_filename = asset_file. At runtime the asset_file will be converted into a asset_cache datum + var/assets = list() + /// Set to true to have this asset also be sent via browse_rsc when cdn asset transports are enabled + var/legacy = FALSE + /// TRUE for keeping local asset names when browse_rsc backend is used + var/keep_local_name = FALSE + +/datum/asset/simple/register() + for(var/asset_name in assets) + var/datum/asset_cache_item/ACI = SSassets.transport.register_asset(asset_name, assets[asset_name]) + if(!ACI) + log_debug("ERROR: Invalid asset: [type]:[asset_name]:[ACI]") + continue + if(legacy) + ACI.legacy = TRUE + if(keep_local_name) + ACI.keep_local_name = keep_local_name + assets[asset_name] = ACI + +/datum/asset/simple/send(client) + . = SSassets.transport.send_assets(client, assets) + +/datum/asset/simple/get_url_mappings() + . = list() + for(var/asset_name in assets) + var/datum/asset_cache_item/ACI = assets[asset_name] + if(!ACI) + continue + .[asset_name] = SSassets.transport.get_asset_url(asset_name, assets[asset_name]) + + +/// For registering or sending multiple others at once +/datum/asset/group + _abstract = /datum/asset/group + var/list/children + +/datum/asset/group/register() + for(var/type in children) + get_asset_datum(type) + +/datum/asset/group/send(client/C) + for(var/type in children) + var/datum/asset/A = get_asset_datum(type) + . = A.send(C) || . + +/datum/asset/group/get_url_mappings() + . = list() + for(var/type in children) + var/datum/asset/A = get_asset_datum(type) + . += A.get_url_mappings() + +/// Returns a cached tgui message of URL mappings +/datum/asset/proc/get_serialized_url_mappings() + if(isnull(cached_serialized_url_mappings) || cached_serialized_url_mappings_transport_type != SSassets.transport.type) + cached_serialized_url_mappings = TGUI_CREATE_MESSAGE("asset/mappings", get_url_mappings()) + cached_serialized_url_mappings_transport_type = SSassets.transport.type + + return cached_serialized_url_mappings + +// spritesheet implementation - coalesces various icons into a single .png file +// and uses CSS to select icons out of that file - saves on transferring some +// 1400-odd individual PNG files +#define SPR_SIZE 1 +#define SPR_IDX 2 +#define SPRSZ_COUNT 1 +#define SPRSZ_ICON 2 +#define SPRSZ_STRIPPED 3 + +/datum/asset/spritesheet + _abstract = /datum/asset/spritesheet + var/name + /// "32x32" -> list(10, icon/normal, icon/stripped) + var/list/sizes = list() + /// "foo_bar" -> list("32x32", 5) + var/list/sprites = list() + +/datum/asset/spritesheet/register() + SHOULD_NOT_OVERRIDE(TRUE) + + if(!name) + CRASH("spritesheet [type] cannot register without a name") + + create_spritesheets() + realize_spritesheets() + +/datum/asset/spritesheet/proc/realize_spritesheets() + ensure_stripped() + for(var/size_id in sizes) + var/size = sizes[size_id] + SSassets.transport.register_asset("[name]_[size_id].png", size[SPRSZ_STRIPPED]) + var/css_name = "spritesheet_[name].css" + var/file_directory = "data/spritesheets/[css_name]" + fdel(file_directory) + text2file(generate_css(), file_directory) + SSassets.transport.register_asset(css_name, fcopy_rsc(file_directory)) + fdel(file_directory) + +/datum/asset/spritesheet/send(client/client) + if(!name) + return + var/all = list("spritesheet_[name].css") + for(var/size_id in sizes) + all += "[name]_[size_id].png" + . = SSassets.transport.send_assets(client, all) + +/datum/asset/spritesheet/get_url_mappings() + if(!name) + return + + . = list("spritesheet_[name].css" = SSassets.transport.get_asset_url("spritesheet_[name].css")) + for(var/size_id in sizes) + .["[name]_[size_id].png"] = SSassets.transport.get_asset_url("[name]_[size_id].png") + +/datum/asset/spritesheet/proc/ensure_stripped(sizes_to_strip = sizes) + for(var/size_id in sizes_to_strip) + var/size = sizes[size_id] + if(size[SPRSZ_STRIPPED]) + continue + + // save flattened version + var/png_name = "[name]_[size_id].png" + var/file_directory = "data/spritesheets/[png_name]" + fcopy(size[SPRSZ_ICON], file_directory) + var/error = rustg_dmi_strip_metadata(file_directory) + if(length(error)) + stack_trace("Failed to strip [png_name]: [error]") + size[SPRSZ_STRIPPED] = icon(file_directory) + fdel(file_directory) + +/datum/asset/spritesheet/proc/generate_css() + var/list/out = list() + + for(var/size_id in sizes) + var/size = sizes[size_id] + var/icon/tiny = size[SPRSZ_ICON] + out += ".[name][size_id]{display:inline-block;width:[tiny.Width()]px;height:[tiny.Height()]px;background:url('[SSassets.transport.get_asset_url("[name]_[size_id].png")]') no-repeat;}" + + for(var/sprite_id in sprites) + var/sprite = sprites[sprite_id] + var/size_id = sprite[SPR_SIZE] + var/idx = sprite[SPR_IDX] + var/size = sizes[size_id] + + var/icon/tiny = size[SPRSZ_ICON] + var/icon/big = size[SPRSZ_STRIPPED] + var/per_line = big.Width() / tiny.Width() + var/x = (idx % per_line) * tiny.Width() + var/y = round(idx / per_line) * tiny.Height() + + out += ".[name][size_id].[sprite_id]{background-position:-[x]px -[y]px;}" + + return out.Join("\n") + +/* + * Override this in order to start the creation of the spritehseet. + * This is where all your Insert, InsertAll, etc calls should be inside. + */ +/datum/asset/spritesheet/proc/create_spritesheets() + SHOULD_CALL_PARENT(FALSE) + CRASH("create_spritesheets() not implemented for [type]!") + +/datum/asset/spritesheet/proc/Insert(sprite_name, icon/I, icon_state="", dir=SOUTH, frame=1, moving=FALSE) + I = icon(I, icon_state=icon_state, dir=dir, frame=frame, moving=moving) + if(!I || !length(icon_states(I))) // that direction or state doesn't exist + return + // any sprite modifications we want to do (aka, coloring a greyscaled asset) + I = ModifyInserted(I) + var/size_id = "[I.Width()]x[I.Height()]" + var/size = sizes[size_id] + + if(sprites[sprite_name]) + CRASH("duplicate sprite \"[sprite_name]\" in sheet [name] ([type])") + + if(size) + var/position = size[SPRSZ_COUNT]++ + // Icons are essentially representations of files + modifications + // Because of this, byond keeps them in a cache. It does this in a really dumb way tho + // It's essentially a FIFO queue. So after we do icon() some amount of times, our old icons go out of cache + // When this happens it becomes impossible to modify them, trying to do so will instead throw a + // "bad icon" error. + // What we're doing here is ensuring our icon is in the cache by refreshing it, so we can modify it w/o runtimes. + var/icon/sheet = size[SPRSZ_ICON] + var/icon/sheet_copy = icon(sheet) + size[SPRSZ_STRIPPED] = null + sheet_copy.Insert(I, icon_state=sprite_name) + size[SPRSZ_ICON] = sheet_copy + + sprites[sprite_name] = list(size_id, position) + else + sizes[size_id] = size = list(1, I, null) + sprites[sprite_name] = list(size_id, 0) + +/** + * A simple proc handing the Icon for you to modify before it gets turned into an asset. + * + * Arguments: + * * I: icon being turned into an asset + */ +/datum/asset/spritesheet/proc/ModifyInserted(icon/pre_asset) + return pre_asset + +/datum/asset/spritesheet/proc/InsertAll(prefix, icon/I, list/directions) + if(length(prefix)) + prefix = "[prefix]-" + + if(!directions) + directions = list(SOUTH) + + for(var/icon_state_name in icon_states(I)) + for(var/direction in directions) + var/prefix2 = length(directions) ? "[dir2text(direction)]-" : "" + Insert("[prefix][prefix2][icon_state_name]", I, icon_state=icon_state_name, dir=direction) + +/datum/asset/spritesheet/proc/css_tag() + return {""} + +/datum/asset/spritesheet/proc/css_filename() + return SSassets.transport.get_asset_url("spritesheet_[name].css") + +/datum/asset/spritesheet/proc/icon_tag(sprite_name) + var/sprite = sprites[sprite_name] + if(!sprite) + return null + var/size_id = sprite[SPR_SIZE] + return {""} + +/datum/asset/spritesheet/proc/icon_class_name(sprite_name) + var/sprite = sprites[sprite_name] + if(!sprite) + return null + var/size_id = sprite[SPR_SIZE] + return {"[name][size_id] [sprite_name]"} + +/** + * Returns the size class (ex design32x32) for a given sprite's icon + * + * Arguments: + * * sprite_name - The sprite to get the size of + */ +/datum/asset/spritesheet/proc/icon_size_id(sprite_name) + var/sprite = sprites[sprite_name] + if(!sprite) + return null + var/size_id = sprite[SPR_SIZE] + return "[name][size_id]" + +#undef SPR_SIZE +#undef SPR_IDX +#undef SPRSZ_COUNT +#undef SPRSZ_ICON +#undef SPRSZ_STRIPPED + + +/datum/asset/spritesheet/simple + _abstract = /datum/asset/spritesheet/simple + var/list/assets + +/datum/asset/spritesheet/simple/create_spritesheets() + for(var/key in assets) + Insert(key, assets[key]) + +/// Generates assets based on iconstates of a single icon +/datum/asset/simple/icon_states + _abstract = /datum/asset/simple/icon_states + var/icon + var/list/directions = list(SOUTH) + var/frame = 1 + var/movement_states = FALSE + + /// Used in asset name generation, (asset_name = "[prefix].[icon_state_name].png") + var/prefix = "default" + /// Generate icon filenames using GENERATE_ASSET_NAME instead the "[prefix].[icon_state_name].png" format + var/generic_icon_names = FALSE + +/datum/asset/simple/icon_states/register(_icon = icon) + for(var/icon_state_name in icon_states(_icon)) + for(var/direction in directions) + var/asset = icon(_icon, icon_state_name, direction, frame, movement_states) + if(!asset) + continue + asset = fcopy_rsc(asset) //dedupe + var/prefix2 = (directions.len > 1) ? "[dir2text(direction)]." : "" + var/asset_name = "[prefix].[prefix2][icon_state_name].png" + if(generic_icon_names) + asset_name = "[GENERATE_ASSET_NAME(asset)].png" + + SSassets.transport.register_asset(asset_name, asset) + +/datum/asset/simple/icon_states/multiple_icons + _abstract = /datum/asset/simple/icon_states/multiple_icons + var/list/icons + +/datum/asset/simple/icon_states/multiple_icons/register() + for(var/i in icons) + ..(i) + +/// Namespace'ed assets (for static css and html files) +/// When sent over a cdn transport, all assets in the same asset datum will exist in the same folder, as their plain names. +/// Used to ensure css files can reference files by url() without having to generate the css at runtime, both the css file and the files it depends on must exist in the same namespace asset datum. (Also works for html) +/// For example `blah.css` with asset `blah.png` will get loaded as `namespaces/a3d..14f/f12..d3c.css` and `namespaces/a3d..14f/blah.png`. allowing the css file to load `blah.png` by a relative url rather then compute the generated url with get_url_mappings(). +/// The namespace folder's name will change if any of the assets change. (excluding parent assets) +/datum/asset/simple/namespaced + _abstract = /datum/asset/simple/namespaced + /// parents - list of the parent asset or assets (in name = file assoicated format) for this namespace. + /// parent assets must be referenced by their generated url, but if an update changes a parent asset, it won't change the namespace's identity. + var/list/parents = list() + +/datum/asset/simple/namespaced/register() + if(legacy) + assets |= parents + var/list/hashlist = list() + var/list/sorted_assets = sortTim(assets, GLOBAL_PROC_REF(cmp_text_asc), TRUE) + + for(var/asset_name in sorted_assets) + var/datum/asset_cache_item/ACI = new(asset_name, sorted_assets[asset_name]) + if(!ACI?.hash) + log_debug("ERROR: Invalid asset: [type]:[asset_name]:[ACI]") + continue + hashlist += ACI.hash + sorted_assets[asset_name] = ACI + var/namespace = md5(hashlist.Join()) + + for(var/asset_name in parents) + var/datum/asset_cache_item/ACI = new(asset_name, parents[asset_name]) + if(!ACI?.hash) + log_debug("ERROR: Invalid asset: [type]:[asset_name]:[ACI]") + continue + ACI.namespace_parent = TRUE + sorted_assets[asset_name] = ACI + + for(var/asset_name in sorted_assets) + var/datum/asset_cache_item/ACI = sorted_assets[asset_name] + if(!ACI?.hash) + log_debug("ERROR: Invalid asset: [type]:[asset_name]:[ACI]") + continue + ACI.namespace = namespace + + assets = sorted_assets + ..() + +/* + * Get a html string that will load a html asset. + * Needed because byond doesn't allow you to browse() to a url. + */ +/datum/asset/simple/namespaced/proc/get_htmlloader(filename) + return URL2HTMLLOADER(SSassets.transport.get_asset_url(filename, assets[filename])) diff --git a/code/modules/asset_cache/assets/asset_alloys.dm b/code/modules/asset_cache/assets/asset_alloys.dm new file mode 100644 index 000000000000..8c6ff0f71d77 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_alloys.dm @@ -0,0 +1,10 @@ +/datum/asset/spritesheet/alloys + name = "alloys" + +/datum/asset/spritesheet/alloys/create_spritesheets() + for(var/datum/design/smelter/alloy_typepath as anything in subtypesof(/datum/design/smelter) + /datum/design/rglass) + var/obj/item/stack/stack_type = initial(alloy_typepath.build_path) + if(!stack_type) + continue + + Insert(alloy_typepath.id, stack_type.icon, stack_type.icon_state) diff --git a/code/modules/asset_cache/assets/asset_chem_master.dm b/code/modules/asset_cache/assets/asset_chem_master.dm new file mode 100644 index 000000000000..7371b807289a --- /dev/null +++ b/code/modules/asset_cache/assets/asset_chem_master.dm @@ -0,0 +1,15 @@ +/// Pill sprites for UIs +/datum/asset/spritesheet/chem_master + name = "chem_master" + +/datum/asset/spritesheet/chem_master/create_spritesheets() + for(var/pill_type = 1 to 20) + Insert("pill[pill_type]", 'icons/obj/chemical.dmi', "pill[pill_type]") + for(var/bottle_type in list("bottle", "small_bottle", "wide_bottle", "round_bottle", "reagent_bottle")) + Insert(bottle_type, 'icons/obj/chemical.dmi', bottle_type) + +/datum/asset/spritesheet/chem_master/ModifyInserted(icon/pre_asset) + pre_asset.Scale(64, 64) + pre_asset.Crop(16,16,48,48) + pre_asset.Scale(32, 32) + return pre_asset diff --git a/code/modules/asset_cache/assets/asset_chess.dm b/code/modules/asset_cache/assets/asset_chess.dm new file mode 100644 index 000000000000..84af9c24a2bf --- /dev/null +++ b/code/modules/asset_cache/assets/asset_chess.dm @@ -0,0 +1,16 @@ +/datum/asset/simple/namespaced/chess + legacy = TRUE + assets = list( + "sprites.png" = 'icons/chess_pieces/sprites.png', + "blank.gif" = 'icons/chess_pieces/blank.gif', + "garbochess.js" = 'html/browser/garbochess.js', + ) + parents = list( + "boardui.js" = 'html/browser/boardui.js' + ) + +/datum/asset/group/chess + children = list( + /datum/asset/simple/namespaced/chess, + /datum/asset/simple/jquery + ) diff --git a/code/modules/asset_cache/assets/asset_claw_game.dm b/code/modules/asset_cache/assets/asset_claw_game.dm new file mode 100644 index 000000000000..e503820c74b3 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_claw_game.dm @@ -0,0 +1,20 @@ +/datum/asset/simple/namespaced/claw_game + legacy = TRUE + assets = list( + "backgroundsprite.png" = 'icons/obj/arcade_images/backgroundsprite.png', + "clawpieces.png" = 'icons/obj/arcade_images/clawpieces.png', + "crane_bot.png" = 'icons/obj/arcade_images/crane_bot.png', + "crane_top.png" = 'icons/obj/arcade_images/crane_top.png', + "prize_inside.png" = 'icons/obj/arcade_images/prize_inside.png', + "prizeorbs.png" = 'icons/obj/arcade_images/prizeorbs.png' + ) + parents = list( + "page.css" = 'code/modules/arcade/page.css', + "Button.scss" = 'tgui/packages/tgui/styles/components/Button.scss' + ) + +/datum/asset/group/claw_game + children = list( + /datum/asset/simple/namespaced/claw_game, + /datum/asset/simple/jquery + ) diff --git a/code/modules/asset_cache/assets/asset_cloning.dm b/code/modules/asset_cache/assets/asset_cloning.dm new file mode 100644 index 000000000000..4d5ca534dbd2 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_cloning.dm @@ -0,0 +1,6 @@ +/datum/asset/simple/cloning + assets = list( + "pod_idle.gif" = icon('icons/obj/cloning.dmi', "pod_idle"), + "pod_cloning.gif" = icon('icons/obj/cloning.dmi', "pod_cloning"), + "pod_mess.gif" = icon('icons/obj/cloning.dmi', "pod_mess") + ) diff --git a/code/modules/asset_cache/assets/asset_common.dm b/code/modules/asset_cache/assets/asset_common.dm new file mode 100644 index 000000000000..2ada930f3611 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_common.dm @@ -0,0 +1,2 @@ +/datum/asset/simple/common + assets = list("common.css" = 'html/browser/common.css') diff --git a/code/modules/asset_cache/assets/asset_jquery.dm b/code/modules/asset_cache/assets/asset_jquery.dm new file mode 100644 index 000000000000..e6de67c3b796 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_jquery.dm @@ -0,0 +1,5 @@ +/datum/asset/simple/jquery + assets = list( + "jquery-1.8.2.min.js" = 'html/browser/jquery-1.8.2.min.js', + "jquery-ui-1.8.24.custom.min.js" = 'html/browser/jquery-ui-1.8.24.custom.min.js' + ) diff --git a/code/modules/asset_cache/assets/asset_materials.dm b/code/modules/asset_cache/assets/asset_materials.dm new file mode 100644 index 000000000000..8226e23d4904 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_materials.dm @@ -0,0 +1,10 @@ +/datum/asset/spritesheet/materials + name = "materials" + +/datum/asset/spritesheet/materials/create_spritesheets() + for(var/datum/material/material_typepath as anything in subtypesof(/datum/material)) + var/obj/item/stack/stack_type = initial(material_typepath.sheet_type) + if(!stack_type) + continue + + Insert(material_typepath.id, stack_type.icon, stack_type.icon_state) diff --git a/code/modules/asset_cache/assets/asset_mob_hunt.dm b/code/modules/asset_cache/assets/asset_mob_hunt.dm new file mode 100644 index 000000000000..ed1f7494e332 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_mob_hunt.dm @@ -0,0 +1,7 @@ +/datum/asset/simple/mob_hunt/register() + for(var/state in icon_states('icons/effects/mob_hunt.dmi')) + if(state == "Placeholder") + continue + assets["[state].png"] = icon('icons/effects/mob_hunt.dmi', state) + + return ..() diff --git a/code/modules/asset_cache/assets/asset_nanomap.dm b/code/modules/asset_cache/assets/asset_nanomap.dm new file mode 100644 index 000000000000..d678800f292c --- /dev/null +++ b/code/modules/asset_cache/assets/asset_nanomap.dm @@ -0,0 +1,9 @@ +/datum/asset/simple/nanomaps + // It REALLY doesnt matter too much if these arent up to date + // They are relatively big + assets = list( + "Cyberiad220_nanomap_z1.png" = 'icons/_nanomaps/Cyberiad220_nanomap_z1.png', // SS220 EDITS - OUR MAPS + "Delta220_nanomap_z1.png" = 'icons/_nanomaps/Delta220_nanomap_z1.png', + "MetaStation220_nanomap_z1.png" = 'icons/_nanomaps/MetaStation220_nanomap_z1.png', + "CereStation_nanomap_z1.png" = 'icons/_nanomaps/CereStation_nanomap_z1.png', + ) diff --git a/code/modules/asset_cache/assets/asset_panels.dm b/code/modules/asset_cache/assets/asset_panels.dm new file mode 100644 index 000000000000..783105fa9bb8 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_panels.dm @@ -0,0 +1,5 @@ +/datum/asset/simple/permissions + assets = list( + "search.js" = 'html/search.js', + "panels.css" = 'html/panels.css' + ) diff --git a/code/modules/asset_cache/assets/asset_paper.dm b/code/modules/asset_cache/assets/asset_paper.dm new file mode 100644 index 000000000000..5c3e3329e481 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_paper.dm @@ -0,0 +1,31 @@ +/datum/asset/simple/paper + // TODO: revrite stamp code to not rely on hardcoded stamp url or make TGUI for paper + keep_local_name = TRUE + assets = list( + "large_stamp-clown.png" = 'icons/paper_icons/large_stamp-clown.png', + "large_stamp-deny.png"= 'icons/paper_icons/large_stamp-deny.png', + "large_stamp-ok.png" = 'icons/paper_icons/large_stamp-ok.png', + "large_stamp-hop.png" = 'icons/paper_icons/large_stamp-hop.png', + "large_stamp-cmo.png" = 'icons/paper_icons/large_stamp-cmo.png', + "large_stamp-ce.png" = 'icons/paper_icons/large_stamp-ce.png', + "large_stamp-hos.png" = 'icons/paper_icons/large_stamp-hos.png', + "large_stamp-rd.png" = 'icons/paper_icons/large_stamp-rd.png', + "large_stamp-cap.png" = 'icons/paper_icons/large_stamp-cap.png', + "large_stamp-qm.png" = 'icons/paper_icons/large_stamp-qm.png', + "large_stamp-law.png" = 'icons/paper_icons/large_stamp-law.png', + "large_stamp-cent.png"= 'icons/paper_icons/large_stamp-cent.png', + "large_stamp-syndicate.png" = 'icons/paper_icons/large_stamp-syndicate.png', + "large_stamp-rep.png" = 'icons/paper_icons/large_stamp-rep.png', + "large_stamp-magistrate.png" = 'icons/paper_icons/large_stamp-magistrate.png', + "talisman.png" = 'icons/paper_icons/talisman.png', + "ntlogo.png" = 'icons/paper_icons/ntlogo.png', + "syndielogo.png" ='icons/paper_icons/syndielogo.png', + + // SS220 ADDITION + "large_stamp-ward.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-ward.png', + "large_stamp-ploho.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-ploho.png', + "large_stamp-BIGdeny.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-BIGdeny.png', + "large_stamp-navcom.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-navcom.png', + "large_stamp-mime.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-mime.png', + "large_stamp-ussp.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-ussp.png' + ) diff --git a/code/modules/asset_cache/assets/asset_rpd.dm b/code/modules/asset_cache/assets/asset_rpd.dm new file mode 100644 index 000000000000..89b954cb1442 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_rpd.dm @@ -0,0 +1,6 @@ +/datum/asset/spritesheet/rpd + name = "rpd" + +/datum/asset/spritesheet/rpd/create_spritesheets() + InsertAll("", 'icons/obj/pipe-item.dmi', GLOB.alldirs) + InsertAll("", 'icons/obj/pipes/disposal.dmi', GLOB.alldirs) diff --git a/code/modules/asset_cache/assets/asset_safe.dm b/code/modules/asset_cache/assets/asset_safe.dm new file mode 100644 index 000000000000..007226cf952c --- /dev/null +++ b/code/modules/asset_cache/assets/asset_safe.dm @@ -0,0 +1,5 @@ +/datum/asset/simple/safe + keep_local_name = TRUE + assets = list( + "safe_dial.png" = 'icons/safe_dial.png' + ) diff --git a/code/modules/asset_cache/assets/asset_tgui.dm b/code/modules/asset_cache/assets/asset_tgui.dm new file mode 100644 index 000000000000..2ffaa23144b7 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_tgui.dm @@ -0,0 +1,26 @@ +/datum/asset/simple/tgui + keep_local_name = TRUE + assets = list( + "tgui.bundle.js" = 'tgui/public/tgui.bundle.js', + "tgui.bundle.css" = 'tgui/public/tgui.bundle.css' +) + +/datum/asset/simple/tgui_panel + keep_local_name = TRUE + assets = list( + "tgui-panel.bundle.js" = 'tgui/public/tgui-panel.bundle.js', + "tgui-panel.bundle.css" = 'tgui/public/tgui-panel.bundle.css', + ) + +/datum/asset/simple/namespaced/fontawesome + legacy = TRUE + assets = list( + "fa-regular-400.eot" = 'html/font-awesome/webfonts/fa-regular-400.eot', + "fa-regular-400.woff" = 'html/font-awesome/webfonts/fa-regular-400.woff', + "fa-solid-900.eot" = 'html/font-awesome/webfonts/fa-solid-900.eot', + "fa-solid-900.woff" = 'html/font-awesome/webfonts/fa-solid-900.woff', + "v4shim.css" = 'html/font-awesome/css/v4-shims.min.css' + ) + parents = list( + "font-awesome.css" = 'html/font-awesome/css/all.min.css' + ) diff --git a/code/modules/asset_cache/readme.md b/code/modules/asset_cache/readme.md new file mode 100644 index 000000000000..b2f8914708bb --- /dev/null +++ b/code/modules/asset_cache/readme.md @@ -0,0 +1,35 @@ +# Asset cache system + +## Framework for managing browser assets (javascript,css,images,etc) + +This manages getting the asset to the client without doing unneeded re-sends, as well as utilizing any configured cdns. + +There are two frameworks for using this system: + +### Asset datum: + +Make a datum in asset_list_items.dm with your browser assets for your thing. + +Checkout asset_list.dm for the helper subclasses + +The `simple` subclass will most likely be of use for most cases. + +Call get_asset_datum() with the type of the datum you created to get your asset cache datum + +Call .send(client|usr) on that datum to send the asset to the client. Depending on the asset transport this may or may not block. + +Call .get_url_mappings() to get an associated list with the urls your assets can be found at. + +### Manual backend: + +See the documentation for `/datum/asset_transport` for the backend api the asset datums utilize. + +The global variable `SSassets.transport` contains the currently configured transport. + +### Notes: + +Because byond browse() calls use non-blocking queues, if your code uses output() (which bypasses all of these queues) to invoke javascript functions you will need to first have the javascript announce to the server it has loaded before trying to invoke js functions. + +To make your code work with any CDNs configured by the server, you must make sure assets are referenced from the url returned by `get_url_mappings()` or by asset_transport's `get_asset_url()`. (TGUI also has helpers for this.) If this can not be easily done, you can bypass the cdn using legacy assets, see the simple asset datum for details. + +CSS files that use url() can be made to use the CDN without needing to rewrite all url() calls in code by using the namespaced helper datum. See the documentation for `/datum/asset/simple/namespaced` for details. diff --git a/code/modules/asset_cache/transports/asset_transport.dm b/code/modules/asset_cache/transports/asset_transport.dm new file mode 100644 index 000000000000..a8edb2f6afa5 --- /dev/null +++ b/code/modules/asset_cache/transports/asset_transport.dm @@ -0,0 +1,155 @@ +/// When sending mutiple assets, how many before we give the client a quaint little sending resources message +#define ASSET_CACHE_TELL_CLIENT_AMOUNT 8 + +/// Base browse_rsc asset transport +/datum/asset_transport + var/name = "Simple browse_rsc asset transport" + var/static/list/preload + /// Don't mutate the filename of assets when sending via browse_rsc. + /// This is to make it easier to debug issues with assets, and allow server operators to bypass issues that make it to production. + /// If turning this on fixes asset issues, something isn't using SSassets.transport.get_asset_url and the asset isn't marked legacy, fix one of those. + var/dont_mutate_filenames = FALSE + +/// Initialize - Called when SSassets initializes. +/datum/asset_transport/proc/Initialize(list/assets) + preload = assets.Copy() + Load() + +/// Called when the transport is loaded by the config controller, not called on the default transport unless it gets loaded by a config change. +/datum/asset_transport/proc/Load() + if(!GLOB.configuration.asset_cache.asset_simple_preload) + return + for(var/client/C as anything in GLOB.clients) + addtimer(CALLBACK(src, PROC_REF(send_assets_slow), C, preload), 1 SECONDS) + + +/// Register a browser asset with the asset cache system +/// asset_name - the identifier of the asset +/// asset - the actual asset file (or an asset_cache_item datum) +/// returns a /datum/asset_cache_item. +/// mutiple calls to register the same asset under the same asset_name return the same datum +/datum/asset_transport/proc/register_asset(asset_name, asset) + var/datum/asset_cache_item/ACI = asset + if(!istype(ACI)) + ACI = new(asset_name, asset) + if(!ACI || !ACI.hash) + CRASH("ERROR: Invalid asset: [asset_name]:[asset]:[ACI]") + if(SSassets.cache[asset_name]) + var/datum/asset_cache_item/OACI = SSassets.cache[asset_name] + OACI.legacy = ACI.legacy = (ACI.legacy|OACI.legacy) + OACI.namespace_parent = ACI.namespace_parent = (ACI.namespace_parent | OACI.namespace_parent) + OACI.namespace = OACI.namespace || ACI.namespace + if(OACI.hash != ACI.hash) + var/error_msg = "ERROR: new asset added to the asset cache with the same name as another asset: [asset_name] existing asset hash: [OACI.hash] new asset hash:[ACI.hash]" + stack_trace(error_msg) + log_debug(error_msg) + else + if(length(ACI.namespace)) + return ACI + return OACI + + SSassets.cache[asset_name] = ACI + return ACI + + +/// Returns a url for a given asset. +/// asset_name - Name of the asset. +/// asset_cache_item - asset cache item datum for the asset, optional, overrides asset_name +/datum/asset_transport/proc/get_asset_url(asset_name, datum/asset_cache_item/asset_cache_item) + if(!istype(asset_cache_item)) + asset_cache_item = SSassets.cache[asset_name] + // To ensure code that breaks on cdns breaks in local testing, we only + // use the normal filename on legacy assets and name space assets. + var/keep_local_name = dont_mutate_filenames \ + || asset_cache_item.legacy \ + || asset_cache_item.keep_local_name \ + || (asset_cache_item.namespace && !asset_cache_item.namespace_parent) + if(keep_local_name) + return url_encode(asset_cache_item.name) + return url_encode("asset.[asset_cache_item.hash][asset_cache_item.ext]") + + +/// Sends a list of browser assets to a client +/// client - a client or mob +/// asset_list - A list of asset filenames to be sent to the client. Can optionally be assoicated with the asset's asset_cache_item datum. +/// Returns TRUE if any assets were sent. +/datum/asset_transport/proc/send_assets(client/client, list/asset_list) + if(!istype(client)) + if(ismob(client)) + var/mob/M = client + if(M.client) + client = M.client + else //no stacktrace because this will mainly happen because the client went away + return + else + CRASH("Invalid argument: client: `[client]`") + if(!islist(asset_list)) + asset_list = list(asset_list) + var/list/unreceived = list() + + for(var/asset_name in asset_list) + var/datum/asset_cache_item/ACI = asset_list[asset_name] + if(!istype(ACI) && !(ACI = SSassets.cache[asset_name])) + log_debug("ERROR: can't send asset `[asset_name]`: unregistered or invalid state: `[ACI]`") + continue + var/asset_file = ACI.resource + if(!asset_file) + log_debug("ERROR: can't send asset `[asset_name]`: invalid registered resource: `[ACI.resource]`") + continue + + var/asset_hash = ACI.hash + var/new_asset_name = asset_name + var/keep_local_name = dont_mutate_filenames \ + || ACI.legacy \ + || ACI.keep_local_name \ + || (ACI.namespace && !ACI.namespace_parent) + if(!keep_local_name) + new_asset_name = "asset.[ACI.hash][ACI.ext]" + if(client.sent_assets[new_asset_name] == asset_hash) + // Un-comment below to debug asset sending (This will spam logs so do not enable normally) + // log_debug("Skipping send of `[asset_name]` (as `[new_asset_name]`) for `[client]` because it already exists in the client's sent_assets list") + continue + unreceived[asset_name] = ACI + + if(length(unreceived)) + if(length(unreceived) >= ASSET_CACHE_TELL_CLIENT_AMOUNT) + to_chat(client, "Sending Resources...") + + for(var/asset_name in unreceived) + var/new_asset_name = asset_name + var/datum/asset_cache_item/ACI = unreceived[asset_name] + var/keep_local_name = dont_mutate_filenames \ + || ACI.legacy \ + || ACI.keep_local_name \ + || (ACI.namespace && !ACI.namespace_parent) + if(!keep_local_name) + new_asset_name = "asset.[ACI.hash][ACI.ext]" + // Un-comment below to debug asset sending (This will spam logs so do not enable normally) + // log_debug("Sending asset `[asset_name]` to client `[client]` as `[new_asset_name]`") + client << browse_rsc(ACI.resource, new_asset_name) + + client.sent_assets[new_asset_name] = ACI.hash + + addtimer(CALLBACK(client, /client/proc/asset_cache_update_json), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) + return TRUE + return FALSE + + +/// Precache files without clogging up the browse() queue, used for passively sending files on connection start. +/datum/asset_transport/proc/send_assets_slow(client/client, list/files, filerate = 6) + var/startingfilerate = filerate + for(var/file in files) + if(!client) + break + if(send_assets(client, file)) + if(!(--filerate)) + filerate = startingfilerate + client.browse_queue_flush() + stoplag(0) //queuing calls like this too quickly can cause issues in some client versions + +/// Check the config is valid to load this transport +/// Returns TRUE or FALSE +/datum/asset_transport/proc/validate_config(log = TRUE) + return TRUE + +#undef ASSET_CACHE_TELL_CLIENT_AMOUNT diff --git a/code/modules/asset_cache/transports/webroot_transport.dm b/code/modules/asset_cache/transports/webroot_transport.dm new file mode 100644 index 000000000000..3da0863e0077 --- /dev/null +++ b/code/modules/asset_cache/transports/webroot_transport.dm @@ -0,0 +1,87 @@ +/// CDN Webroot asset transport. +/datum/asset_transport/webroot + name = "CDN Webroot asset transport" + +/datum/asset_transport/webroot/Load() + if(validate_config(log = FALSE)) + load_existing_assets() + +/// Processes thru any assets that were registered before we were loaded as a transport. +/datum/asset_transport/webroot/proc/load_existing_assets() + for(var/asset_name in SSassets.cache) + var/datum/asset_cache_item/ACI = SSassets.cache[asset_name] + save_asset_to_webroot(ACI) + +/// Register a browser asset with the asset cache system +/// We also save it to the CDN webroot at this step instead of waiting for send_assets() +/// asset_name - the identifier of the asset +/// asset - the actual asset file or an asset_cache_item datum. +/datum/asset_transport/webroot/register_asset(asset_name, asset) + . = ..() + var/datum/asset_cache_item/ACI = . + + if(istype(ACI) && ACI.hash) + save_asset_to_webroot(ACI) + +/// Saves the asset to the webroot taking into account namespaces and hashes. +/datum/asset_transport/webroot/proc/save_asset_to_webroot(datum/asset_cache_item/ACI) + var/webroot = GLOB.configuration.asset_cache.asset_cdn_webroot + var/newpath = "[webroot][get_asset_suffex(ACI)]" + if(fexists(newpath)) + return + if(fexists("[newpath].gz")) //its a common pattern in webhosting to save gzip'ed versions of text files and let the webserver serve them up as gzip compressed normal files, sometimes without keeping the original version. + return + return fcopy(ACI.resource, newpath) + +/// Returns a url for a given asset. +/// asset_name - Name of the asset. +/// asset_cache_item - asset cache item datum for the asset, optional, overrides asset_name +/datum/asset_transport/webroot/get_asset_url(asset_name, datum/asset_cache_item/asset_cache_item) + if(!istype(asset_cache_item)) + asset_cache_item = SSassets.cache[asset_name] + var/url = GLOB.configuration.asset_cache.asset_cdn_url //config loading will handle making sure this ends in a / + return "[url][get_asset_suffex(asset_cache_item)]" + +/datum/asset_transport/webroot/proc/get_asset_suffex(datum/asset_cache_item/asset_cache_item) + var/base = "" + var/filename = "asset.[asset_cache_item.hash][asset_cache_item.ext]" + if(length(asset_cache_item.namespace)) + base = "namespaces/[asset_cache_item.namespace]/" + if(!asset_cache_item.namespace_parent) + filename = "[asset_cache_item.name]" + return base + filename + + +/// webroot asset sending - does nothing unless passed legacy assets +/datum/asset_transport/webroot/send_assets(client/client, list/asset_list) + . = FALSE + var/list/legacy_assets = list() + if(!islist(asset_list)) + asset_list = list(asset_list) + for(var/asset_name in asset_list) + var/datum/asset_cache_item/ACI = asset_list[asset_name] + if(!istype(ACI)) + ACI = SSassets.cache[asset_name] + if(!ACI) + legacy_assets += asset_name //pass it on to base send_assets so it can output an error + continue + if(ACI.legacy) + legacy_assets[asset_name] = ACI + if(length(legacy_assets)) + return ..(client, legacy_assets) + + +/// webroot slow asset sending - does nothing. +/datum/asset_transport/webroot/send_assets_slow(client/client, list/files, filerate) + return FALSE + +/datum/asset_transport/webroot/validate_config(log = TRUE) + if(!GLOB.configuration.asset_cache.asset_cdn_url) + if(log) + log_debug("ERROR: [type]: Invalid Config: asset_cdn_url") + return FALSE + if(!GLOB.configuration.asset_cache.asset_cdn_webroot) + if(log) + log_debug("ERROR: [type]: Invalid Config: asset_cdn_webroot") + return FALSE + return TRUE diff --git a/code/modules/asset_cache/validate_assets.html b/code/modules/asset_cache/validate_assets.html new file mode 100644 index 000000000000..9728bb5c285b --- /dev/null +++ b/code/modules/asset_cache/validate_assets.html @@ -0,0 +1,29 @@ + + + + + + + + + + diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index e4db8e8151d1..95408f6eddef 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -704,7 +704,7 @@ vent_info["id_tag"] = P.UID() vent_info["name"] = sanitize(P.name) vent_info["power"] = P.on - vent_info["direction"] = P.releasing ? "release" : "siphon" + vent_info["direction"] = P.releasing vent_info["checks"] = P.pressure_checks vent_info["external"] = P.external_pressure_bound vents += list(vent_info) @@ -776,16 +776,29 @@ return thresholds -/obj/machinery/alarm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/alarm/ui_state(mob/user) + if(isAI(user)) + var/mob/living/silicon/ai/AI = user + if(!AI.lacks_power() || AI.apc_override) + return GLOB.always_state + + else if(ishuman(user)) + for(var/obj/machinery/computer/atmoscontrol/AC in range(1, user)) + if(!AC.stat) + return GLOB.always_state + + return GLOB.default_state + +/obj/machinery/alarm/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AirAlarm", name, 570, 410, master_ui, state) + ui = new(user, src, "AirAlarm", name) ui.open() -/obj/machinery/alarm/proc/is_authenticated(mob/user, datum/tgui/ui=null) +/obj/machinery/alarm/proc/is_authenticated(mob/user, datum/tgui/ui = null, bypass = FALSE) // Return true if they are connecting with a remote console - // DO NOT CHANGE THIS TO USE ISTYPE, IT WILL NOT WORK - if(ui?.master_ui?.src_object.type == /datum/ui_module/atmos_control) + // lol this is a wank hack, please don't shoot me + for(var/obj/machinery/computer/atmoscontrol/control in orange(1, user)) return TRUE if(user.can_admin_interact()) return TRUE @@ -796,13 +809,13 @@ /obj/machinery/alarm/ui_status(mob/user, datum/ui_state/state) if(buildstage != 2) - return STATUS_CLOSE + return UI_CLOSE if(aidisabled && (isAI(user) || isrobot(user))) to_chat(user, "AI control for \the [src] interface has been disabled.") - return STATUS_CLOSE + return UI_CLOSE - . = shorted ? STATUS_DISABLED : STATUS_INTERACTIVE + . = shorted ? UI_DISABLED : UI_INTERACTIVE return min(..(), .) @@ -849,10 +862,8 @@ "widenet", "scrubbing", "direction") - var/val - if(params["val"]) - val = text2num(params["val"]) - else + var/val = isnum(params["val"]) ? params["val"] : text2num(params["val"]) + if(isnull(val)) var/newval = input("Enter new value") as num|null if(isnull(newval)) return diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index a2d8103b1145..dda7317936fe 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -76,10 +76,13 @@ /obj/machinery/atmospherics/binary/passive_gate/attack_ghost(mob/user) ui_interact(user) -/obj/machinery/atmospherics/binary/passive_gate/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/atmospherics/binary/passive_gate/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/atmospherics/binary/passive_gate/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AtmosPump", name, 310, 110, master_ui, state) + ui = new(user, src, "AtmosPump", name) ui.open() /obj/machinery/atmospherics/binary/passive_gate/ui_data(mob/user) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index e15a07cda7bd..3171bcf40dac 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -110,10 +110,13 @@ Thus, the two variables affect pump operation are set in New(): /obj/machinery/atmospherics/binary/pump/attack_ghost(mob/user) ui_interact(user) -/obj/machinery/atmospherics/binary/pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/atmospherics/binary/pump/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/atmospherics/binary/pump/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AtmosPump", name, 310, 110, master_ui, state) + ui = new(user, src, "AtmosPump", name) ui.open() /obj/machinery/atmospherics/binary/pump/ui_data(mob/user) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index 5e24a87a7f6a..4dbcc32e4635 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -105,10 +105,13 @@ Thus, the two variables affect pump operation are set in New(): /obj/machinery/atmospherics/binary/volume_pump/attack_ghost(mob/user) ui_interact(user) -/obj/machinery/atmospherics/binary/volume_pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/atmospherics/binary/volume_pump/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/atmospherics/binary/volume_pump/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AtmosPump", name, 310, 110, master_ui, state) + ui = new(user, src, "AtmosPump", name) ui.open() /obj/machinery/atmospherics/binary/volume_pump/ui_data(mob/user) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index 6aad4743a2b7..2d3f2c5bc61d 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -174,10 +174,13 @@ add_fingerprint(user) ui_interact(user) -/obj/machinery/atmospherics/trinary/filter/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/atmospherics/trinary/filter/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/atmospherics/trinary/filter/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AtmosFilter", name, 380, 140, master_ui, state) + ui = new(user, src, "AtmosFilter", name) ui.open() /obj/machinery/atmospherics/trinary/filter/ui_data(mob/user) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm index 353cc920387f..12d84586b9ca 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm @@ -145,10 +145,13 @@ add_fingerprint(user) ui_interact(user) -/obj/machinery/atmospherics/trinary/mixer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/atmospherics/trinary/mixer/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/atmospherics/trinary/mixer/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AtmosMixer", name, 330, 165, master_ui, state) + ui = new(user, src, "AtmosMixer", name) ui.open() /obj/machinery/atmospherics/trinary/mixer/ui_data(mob/user) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 495ed5d8eac4..d4dc2df7ac81 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -212,10 +212,13 @@ ui_interact(user) -/obj/machinery/atmospherics/unary/cryo_cell/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/atmospherics/unary/cryo_cell/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/atmospherics/unary/cryo_cell/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Cryo", "Cryo Cell", 520, 500) + ui = new(user, src, "Cryo", "Cryo Cell") ui.open() /obj/machinery/atmospherics/unary/cryo_cell/ui_data(mob/user) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 898d1b221ec4..e3a4780e2137 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -163,10 +163,13 @@ return ui_interact(user) -/obj/machinery/atmospherics/unary/thermomachine/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/atmospherics/unary/thermomachine/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/atmospherics/unary/thermomachine/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ThermoMachine", name, 300, 250) + ui = new(user, src, "ThermoMachine", name) ui.open() /obj/machinery/atmospherics/unary/thermomachine/ui_data(mob/user) diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index ce31c66b666f..714b18688015 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -307,10 +307,13 @@ GLOBAL_DATUM_INIT(canister_icon_container, /datum/canister_icons, new()) /obj/machinery/atmospherics/portable/canister/attack_hand(mob/user) return ui_interact(user) -/obj/machinery/atmospherics/portable/canister/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/atmospherics/portable/canister/ui_state(mob/user) + return GLOB.physical_state + +/obj/machinery/atmospherics/portable/canister/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Canister", name, 600, 350, master_ui, state) + ui = new(user, src, "Canister", name) ui.open() /obj/machinery/atmospherics/portable/canister/ui_data() diff --git a/code/modules/atmospherics/machinery/portable/portable_pump.dm b/code/modules/atmospherics/machinery/portable/portable_pump.dm index b4601e55aeac..31b1c273215d 100644 --- a/code/modules/atmospherics/machinery/portable/portable_pump.dm +++ b/code/modules/atmospherics/machinery/portable/portable_pump.dm @@ -119,10 +119,13 @@ /obj/machinery/atmospherics/portable/pump/attack_hand(mob/user) ui_interact(user) -/obj/machinery/atmospherics/portable/pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/atmospherics/portable/pump/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/atmospherics/portable/pump/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PortablePump", "Portable Pump", 434, 377, master_ui, state) + ui = new(user, src, "PortablePump", "Portable Pump") ui.open() /obj/machinery/atmospherics/portable/pump/ui_data(mob/user) diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm index 8b7a38cca7c0..e52ab86a0689 100644 --- a/code/modules/atmospherics/machinery/portable/scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/scrubber.dm @@ -114,10 +114,13 @@ ui_interact(user) return -/obj/machinery/atmospherics/portable/scrubber/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/atmospherics/portable/scrubber/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/atmospherics/portable/scrubber/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PortableScrubber", "Portable Scrubber", 433, 346, master_ui, state) + ui = new(user, src, "PortableScrubber", "Portable Scrubber") ui.open() ui.set_autoupdate(TRUE) diff --git a/code/modules/awaymissions/mission_code/ruins/watcher_grave.dm b/code/modules/awaymissions/mission_code/ruins/watcher_grave.dm index 003c2b2da8d2..1bfb0792373b 100644 --- a/code/modules/awaymissions/mission_code/ruins/watcher_grave.dm +++ b/code/modules/awaymissions/mission_code/ruins/watcher_grave.dm @@ -16,7 +16,7 @@ #define WATCHER_EGG_ACTIVE_MOD 0.5 /// Egg which hatches into a helpful pet. Or you can eat it if you want. -/obj/item/reagent_containers/food/snacks/egg/watcher +/obj/item/food/snacks/egg/watcher name = "watcher egg" desc = "A lonely egg still pulsing with life, somehow untouched by the corruption of the Necropolis." icon_state = "egg_watcher" @@ -30,15 +30,15 @@ /// Datum used to measure our steps var/datum/movement_detector/pedometer -/obj/item/reagent_containers/food/snacks/egg/watcher/Initialize(mapload) +/obj/item/food/snacks/egg/watcher/Initialize(mapload) . = ..() pedometer = new(src, CALLBACK(src, PROC_REF(on_stepped))) -/obj/item/reagent_containers/food/snacks/egg/watcher/Destroy(force) +/obj/item/food/snacks/egg/watcher/Destroy(force) . = ..() QDEL_NULL(pedometer) -/obj/item/reagent_containers/food/snacks/egg/watcher/examine(mob/user) +/obj/item/food/snacks/egg/watcher/examine(mob/user) . = ..() if(steps_travelled < (steps_to_hatch * WATCHER_EGG_ACTIVE_MOD)) . += "Something stirs listlessly inside." @@ -50,7 +50,7 @@ /// Called when we are moved, whether inside an inventory or by ourself somehow -/obj/item/reagent_containers/food/snacks/egg/watcher/proc/on_stepped(atom/movable/egg, atom/mover, atom/old_loc, direction) +/obj/item/food/snacks/egg/watcher/proc/on_stepped(atom/movable/egg, atom/mover, atom/old_loc, direction) var/new_loc = get_turf(egg) if(isnull(new_loc) || new_loc == get_turf(old_loc)) return // Didn't actually go anywhere @@ -67,7 +67,7 @@ qdel(src) /// Animate the egg -/obj/item/reagent_containers/food/snacks/egg/watcher/proc/jiggle() +/obj/item/food/snacks/egg/watcher/proc/jiggle() var/animation = isturf(loc) ? rand(1, 3) : 1 // Pixel_x/y animations don't work in an inventory switch(animation) if(1) diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm deleted file mode 100644 index ccde1dcb2d35..000000000000 --- a/code/modules/client/asset_cache.dm +++ /dev/null @@ -1,337 +0,0 @@ -/* -Asset cache quick users guide: - -Make a datum at the bottom of this file with your assets for your thing. -The simple subsystem will most like be of use for most cases. -Then call get_asset_datum() with the type of the datum you created and store the return -Then call .send(client) on that stored return value. - -You can set verify to TRUE if you want send() to sleep until the client has the assets. -*/ - - -// Amount of time(ds) MAX to send per asset, if this get exceeded we cancel the sleeping. -// This is doubled for the first asset, then added per asset after -#define ASSET_CACHE_SEND_TIMEOUT 7 - -//When sending mutiple assets, how many before we give the client a quaint little sending resources message -#define ASSET_CACHE_TELL_CLIENT_AMOUNT 8 - -//When passively preloading assets, how many to send at once? Too high creates noticable lag where as too low can flood the client's cache with "verify" files -#define ASSET_CACHE_PRELOAD_CONCURRENT 3 - -/client - var/list/cache = list() // List of all assets sent to this client by the asset cache. - var/list/completed_asset_jobs = list() // List of all completed jobs, awaiting acknowledgement. - var/list/sending = list() - var/last_asset_job = 0 // Last job done. - -//This proc sends the asset to the client, but only if it needs it. -//This proc blocks(sleeps) unless verify is set to false -/proc/send_asset(client/client, asset_name, verify = TRUE) - if(!istype(client)) - if(ismob(client)) - var/mob/M = client - if(M.client) - client = M.client - - else - return 0 - - else - return 0 - - if(client.cache.Find(asset_name) || client.sending.Find(asset_name)) - return 0 - - client << browse_rsc(SSassets.cache[asset_name], asset_name) - if(!verify) // Can't access the asset cache browser, rip. - client.cache += asset_name - return 1 - - client.sending |= asset_name - var/job = ++client.last_asset_job - - client << browse({" - - "}, "window=asset_cache_browser") - - var/t = 0 - var/timeout_time = (ASSET_CACHE_SEND_TIMEOUT * client.sending.len) + ASSET_CACHE_SEND_TIMEOUT - while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic() - sleep(1) // Lock up the caller until this is received. - t++ - - if(client) - client.sending -= asset_name - client.cache |= asset_name - client.completed_asset_jobs -= job - - return 1 - -//This proc blocks(sleeps) unless verify is set to false -/proc/send_asset_list(client/client, list/asset_list, verify = TRUE) - if(!istype(client)) - if(ismob(client)) - var/mob/M = client - if(M.client) - client = M.client - - else - return 0 - - else - return 0 - - var/list/unreceived = asset_list - (client.cache + client.sending) - if(!unreceived || !unreceived.len) - return 0 - if(unreceived.len >= ASSET_CACHE_TELL_CLIENT_AMOUNT) - to_chat(client, "Sending Resources...") - for(var/asset in unreceived) - if(asset in SSassets.cache) - client << browse_rsc(SSassets.cache[asset], asset) - - if(!verify) // Can't access the asset cache browser, rip. - client.cache += unreceived - return 1 - - client.sending |= unreceived - var/job = ++client.last_asset_job - - client << browse({" - - "}, "window=asset_cache_browser") - - var/t = 0 - var/timeout_time = ASSET_CACHE_SEND_TIMEOUT * client.sending.len - while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic() - sleep(1) // Lock up the caller until this is received. - t++ - - if(client) - client.sending -= unreceived - client.cache |= unreceived - client.completed_asset_jobs -= job - - return 1 - -//This proc will download the files without clogging up the browse() queue, used for passively sending files on connection start. -//The proc calls procs that sleep for long times. -/proc/getFilesSlow(client/client, list/files, register_asset = TRUE) - var/concurrent_tracker = 1 - for(var/file in files) - if(!client) - break - if(register_asset) - register_asset(file, files[file]) - if(concurrent_tracker >= ASSET_CACHE_PRELOAD_CONCURRENT) - concurrent_tracker = 1 - send_asset(client, file) - else - concurrent_tracker++ - send_asset(client, file, verify = FALSE) - sleep(0) //queuing calls like this too quickly can cause issues in some client versions - -//This proc "registers" an asset, it adds it to the cache for further use, you cannot touch it from this point on or you'll fuck things up. -//if it's an icon or something be careful, you'll have to copy it before further use. -/proc/register_asset(asset_name, asset) - SSassets.cache[asset_name] = asset - -//These datums are used to populate the asset cache, the proc "register()" does this. - -//all of our asset datums, used for referring to these later -GLOBAL_LIST_EMPTY(asset_datums) - -//get a assetdatum or make a new one -/proc/get_asset_datum(type) - if(!(type in GLOB.asset_datums)) - return new type() - return GLOB.asset_datums[type] - -/datum/asset/New() - GLOB.asset_datums[type] = src - -/datum/asset/proc/register() - return - -/datum/asset/proc/send(client) - return - -//If you don't need anything complicated. -/datum/asset/simple - var/assets = list() - var/verify = FALSE - -/datum/asset/simple/register() - for(var/asset_name in assets) - register_asset(asset_name, assets[asset_name]) -/datum/asset/simple/send(client) - send_asset_list(client,assets,verify) - - -//DEFINITIONS FOR ASSET DATUMS START HERE. -/datum/asset/simple/tgui - assets = list( - "tgui.bundle.js" = 'tgui/packages/tgui/public/tgui.bundle.js', - "tgui.bundle.css" = 'tgui/packages/tgui/public/tgui.bundle.css' -) - -/datum/asset/simple/paper - assets = list( - "large_stamp-clown.png" = 'icons/paper_icons/large_stamp-clown.png', - "large_stamp-deny.png" = 'icons/paper_icons/large_stamp-deny.png', - "large_stamp-ok.png" = 'icons/paper_icons/large_stamp-ok.png', - "large_stamp-hop.png" = 'icons/paper_icons/large_stamp-hop.png', - "large_stamp-cmo.png" = 'icons/paper_icons/large_stamp-cmo.png', - "large_stamp-ce.png" = 'icons/paper_icons/large_stamp-ce.png', - "large_stamp-hos.png" = 'icons/paper_icons/large_stamp-hos.png', - "large_stamp-rd.png" = 'icons/paper_icons/large_stamp-rd.png', - "large_stamp-cap.png" = 'icons/paper_icons/large_stamp-cap.png', - "large_stamp-qm.png" = 'icons/paper_icons/large_stamp-qm.png', - "large_stamp-law.png" = 'icons/paper_icons/large_stamp-law.png', - "large_stamp-cent.png" = 'icons/paper_icons/large_stamp-cent.png', - "large_stamp-syndicate.png" = 'icons/paper_icons/large_stamp-syndicate.png', - "large_stamp-rep.png" = 'icons/paper_icons/large_stamp-rep.png', - "large_stamp-magistrate.png"= 'icons/paper_icons/large_stamp-magistrate.png', - "talisman.png" = 'icons/paper_icons/talisman.png', - "ntlogo.png" = 'icons/paper_icons/ntlogo.png', - "syndielogo.png" ='icons/paper_icons/syndielogo.png' - ) - -/datum/asset/simple/chess - assets = list( - "bishop_black.png" = 'icons/chess_pieces/bishop_black.png', - "bishop_white.png" = 'icons/chess_pieces/bishop_white.png', - "king_black.png" = 'icons/chess_pieces/king_black.png', - "king_white.png" = 'icons/chess_pieces/king_white.png', - "knight_black.png" = 'icons/chess_pieces/knight_black.png', - "knight_white.png" = 'icons/chess_pieces/knight_white.png', - "pawn_black.png" = 'icons/chess_pieces/pawn_black.png', - "pawn_white.png" = 'icons/chess_pieces/pawn_white.png', - "queen_black.png" = 'icons/chess_pieces/queen_black.png', - "queen_white.png" = 'icons/chess_pieces/queen_white.png', - "rook_black.png" = 'icons/chess_pieces/rook_black.png', - "rook_white.png" = 'icons/chess_pieces/rook_white.png', - "sprites.png" = 'icons/chess_pieces/sprites.png', - "blank.gif" = 'icons/chess_pieces/blank.gif', - "garbochess.js" = 'html/browser/garbochess.js', - "boardui.js" = 'html/browser/boardui.js' - ) - -//Pill sprites for UIs -/datum/asset/chem_master - var/assets = list() - var/verify = FALSE - -/datum/asset/chem_master/register() - for(var/i = 1 to 20) - assets["pill[i].png"] = icon('icons/obj/chemical.dmi', "pill[i]") - for(var/i in list("bottle", "small_bottle", "wide_bottle", "round_bottle", "reagent_bottle")) - assets["[i].png"] = icon('icons/obj/chemical.dmi', "[i]") - for(var/asset_name in assets) - register_asset(asset_name, assets[asset_name]) - -/datum/asset/chem_master/send(client) - send_asset_list(client, assets, verify) - -//Cloning pod sprites for UIs -/datum/asset/cloning - var/assets = list() - var/verify = FALSE - -/datum/asset/cloning/register() - assets["pod_idle.gif"] = icon('icons/obj/cloning.dmi', "pod_idle") - assets["pod_cloning.gif"] = icon('icons/obj/cloning.dmi', "pod_cloning") - assets["pod_mess.gif"] = icon('icons/obj/cloning.dmi', "pod_mess") - for(var/asset_name in assets) - register_asset(asset_name, assets[asset_name]) - -/datum/asset/cloning/send(client) - send_asset_list(client, assets, verify) - -//Pipe sprites for UIs -/datum/asset/rpd - var/assets = list() - var/verify = FALSE - -/datum/asset/rpd/register() - for(var/state in icon_states('icons/obj/pipe-item.dmi')) - if(!(state in list("cap", "connector", "dtvalve", "dvalve", "filter", "he", "heunary", "injector", "junction", "manifold", "mixer", "tvalve", "mvalve", "passive vent", "passivegate", "pump", "scrubber", "simple", "universal", "uvent", "volumepump"))) //Basically all the pipes we want sprites for - continue - if(state in list("he", "simple")) - for(var/D in GLOB.alldirs) - assets["[state]-[dir2text(D)].png"] = icon('icons/obj/pipe-item.dmi', state, D) - for(var/D in GLOB.cardinal) - assets["[state]-[dir2text(D)].png"] = icon('icons/obj/pipe-item.dmi', state, D) - for(var/state in icon_states('icons/obj/pipes/disposal.dmi')) - if(!(state in list("pipe-c", "pipe-j1", "pipe-s", "pipe-t", "pipe-y", "intake", "outlet", "pipe-j1s"))) //Pipes we want sprites for - continue - for(var/D in GLOB.cardinal) - assets["[state]-[dir2text(D)].png"] = icon('icons/obj/pipes/disposal.dmi', state, D) - for(var/asset_name in assets) - register_asset(asset_name, assets[asset_name]) - -/datum/asset/rpd/send(client) - send_asset_list(client, assets, verify) - -//Mob Hunt sprites for UIs -/datum/asset/mob_hunt - var/assets = list() - var/verify = FALSE - -/datum/asset/mob_hunt/register() - for(var/state in icon_states('icons/effects/mob_hunt.dmi')) - if(state == "Placeholder") - continue - assets["[state].png"] = icon('icons/effects/mob_hunt.dmi', state) - for(var/asset_name in assets) - register_asset(asset_name, assets[asset_name]) - -/datum/asset/mob_hunt/send(client) - send_asset_list(client, assets, verify) - -// Fontawesome -/datum/asset/simple/fontawesome - verify = FALSE - assets = list( - "fa-regular-400.eot" = 'html/font-awesome/webfonts/fa-regular-400.eot', - "fa-regular-400.woff" = 'html/font-awesome/webfonts/fa-regular-400.woff', - "fa-solid-900.eot" = 'html/font-awesome/webfonts/fa-solid-900.eot', - "fa-solid-900.woff" = 'html/font-awesome/webfonts/fa-solid-900.woff', - "font-awesome.css" = 'html/font-awesome/css/all.min.css', - "v4shim.css" = 'html/font-awesome/css/v4-shims.min.css' - ) - -// Nanomaps -/datum/asset/simple/nanomaps - // It REALLY doesnt matter too much if these arent up to date - // They are relatively big - verify = FALSE - assets = list( - "Cyberiad_nanomap_z1.png" = 'icons/_nanomaps/Cyberiad_nanomap_z1.png', - "Delta_nanomap_z1.png" = 'icons/_nanomaps/Delta_nanomap_z1.png', - "MetaStation_nanomap_z1.png" = 'icons/_nanomaps/MetaStation_nanomap_z1.png', - "CereStation_nanomap_z1.png" = 'icons/_nanomaps/CereStation_nanomap_z1.png', - ) - -/datum/asset/simple/safe - verify = FALSE - assets = list( - "safe_dial.png" = 'icons/safe_dial.png' - ) - -// Materials (metal, glass...) -/datum/asset/simple/materials - verify = FALSE - -/datum/asset/simple/materials/register() - for(var/n in list("metal", "glass", "silver", "gold", "diamond", "uranium", "plasma", "bananium", "tranquillite", "titanium", "plastic", - "rglass", "plasteel", "plastitanium", "plasmaglass", "titaniumglass", "plastitaniumglass")) - assets["sheet-[n].png"] = icon('icons/obj/stacks/minerals.dmi', "sheet-[n]") - assets["sheet-bluespace.png"] = icon('icons/obj/stacks/minerals.dmi', "bluespace_crystal") - ..() diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index ed0268a61720..958178a7da04 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -71,10 +71,6 @@ /// Persistent storage for the flavour text of examined atoms. var/list/description_holders = list() - // Their chat window, sort of important. - // See /goon/code/datums/browserOutput.dm - var/datum/chatOutput/chatOutput - // Donator stuff. var/donator_level = 0 @@ -103,6 +99,9 @@ /// Last world/time that a PM was sent to the player by an admin var/received_discord_pm = -99999 // Yes this super low number is intentional + ///world.time they connected + var/connection_time + /// Has the client accepted the TOS about data collection and other stuff var/tos_consent = FALSE diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 149fcf1bf51c..0e2ca8dc8d73 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -50,13 +50,12 @@ stack_trace("Got \\ref-based src in topic from [src] for [hsrc_info], should be UID: [href]") + // asset_cache + var/asset_cache_job if(href_list["asset_cache_confirm_arrival"]) - var/job = text2num(href_list["asset_cache_confirm_arrival"]) - completed_asset_jobs += job - return - - if(href_list["_src_"] == "chat") - return chatOutput.Topic(href, href_list) + asset_cache_job = asset_cache_confirm_arrival(href_list["asset_cache_confirm_arrival"]) + if(!asset_cache_job) + return // Rate limiting var/mtl = 100 // 100 topics per minute @@ -156,18 +155,21 @@ qdel(src) return - if(href_list["__keydown"]) - var/keycode = href_list["__keydown"] - if(keycode) - Key_Down(keycode) + // Tgui Topic middleware + if(tgui_Topic(href_list)) return + if(href_list["reload_tguipanel"]) + nuke_chat() - if(href_list["__keyup"]) - var/keycode = href_list["__keyup"] - if(keycode) - Key_Up(keycode) + //byond bug ID:2256651 + if(asset_cache_job && (asset_cache_job in completed_asset_jobs)) + to_chat(src, " An error has been detected in how your client is receiving resources. Attempting to correct.... (If you keep seeing these messages you might want to close byond and reconnect)") + src << browse("...", "window=asset_cache_browser") return + if(href_list["asset_cache_preload_data"]) + asset_cache_preload_data(href_list["asset_cache_preload_data"]) + return switch(href_list["action"]) if("openLink") @@ -252,7 +254,7 @@ /////////// /client/New(TopicData) var/tdata = TopicData //save this for later use - chatOutput = new /datum/chatOutput(src) // Right off the bat. + tgui_panel = new(src) TopicData = null //Prevent calls to client.Topic from connect if(connection != "seeker") //Invalid connection type. @@ -276,7 +278,7 @@ to_chat(src, "If the title screen is black, resources are still downloading. Please be patient until the title screen appears.") GLOB.directory[ckey] = src - //Admin Authorisation + // Admin Authorisation // Automatically makes localhost connection an admin try_localhost_autoadmin() @@ -345,10 +347,7 @@ // DO NOT STUFF RANDOM SQL QUERIES BELOW THIS POINT WITHOUT USING `INVOKE_ASYNC()` OR SIMILAR // YOU WILL BREAK STUFF. SERIOUSLY. -aa07 GLOB.clients += src - - - spawn() // Goonchat does some non-instant checks in start() - chatOutput.start() + connection_time = world.time var/_2fa_alert = FALSE // This is so we can display the message where it will be seen if(holder) @@ -361,7 +360,6 @@ GLOB.de_admins += ckey else - on_holder_add() add_admin_verbs() // Must be async because any sleeps (happen in sql queries) will break connectings clients INVOKE_ASYNC(src, PROC_REF(admin_memo_output), "Show", FALSE, TRUE) @@ -391,15 +389,12 @@ if(SSinput.initialized) set_macros() + // Initialize tgui panel + tgui_panel.initialize() + check_ip_intel() send_resources() - - if(prefs.toggles & PREFTOGGLE_UI_DARKMODE) // activates dark mode if its flagged. -AA07 - activate_darkmode() - - else - // activate_darkmode() calls the CL update button proc, so we dont want it double called - SSchangelog.UpdatePlayerChangelogButton(src) + SSchangelog.UpdatePlayerChangelogButton(src) if(show_update_prompt) show_update_notice() @@ -467,7 +462,6 @@ #ifdef MULTIINSTANCE SSinstancing.update_playercache() // Clear us out #endif - QDEL_NULL(chatOutput) QDEL_NULL(pai_save) if(movingmob) @@ -476,6 +470,7 @@ SSambience.ambience_listening_clients -= src SSinput.processing -= src + SSping.current_run -= src Master.UpdateTickRate() ..() //Even though we're going to be hard deleted there are still some things that want to know the destroy is happening return QDEL_HINT_HARDDEL_NOW @@ -906,19 +901,17 @@ // Change the way they should download resources. if(length(GLOB.configuration.url.rsc_urls)) preload_rsc = pick(GLOB.configuration.url.rsc_urls) - else preload_rsc = 1 // If config.resource_urls is not set, preload like normal. - // Most assets are now handled through global_cache.dm - getFiles( - 'html/search.js', // Used in various non-TGUI HTML windows for search functionality - 'html/panels.css' // Used for styling certain panels, such as in the new player panel - ) - spawn (10) //removing this spawn causes all clients to not get verbs. + + //load info on what assets the client has + src << browse('code/modules/asset_cache/validate_assets.html', "window=asset_cache_browser") + //Precache the client with all other assets slowly, so as to not block other browse() calls - getFilesSlow(src, SSassets.preload, register_asset = FALSE) + if(GLOB.configuration.asset_cache.asset_simple_preload) + addtimer(CALLBACK(SSassets.transport, TYPE_PROC_REF(/datum/asset_transport, send_assets_slow), src, SSassets.transport.preload), 5 SECONDS) //For debugging purposes /client/proc/list_all_languages() @@ -937,72 +930,6 @@ /client/proc/on_varedit() var_edited = TRUE -///////////////// -// DARKMODE UI // -///////////////// -// IF YOU CHANGE ANYTHING IN ACTIVATE, MAKE SURE IT HAS A DEACTIVATE METHOD, -AA07 -/client/proc/activate_darkmode() - ///// BUTTONS ///// - SSchangelog.UpdatePlayerChangelogButton(src) - /* Rpane */ - winset(src, "rpane.textb", "background-color=#494949;text-color=#a4bad6") - winset(src, "rpane.infob", "background-color=#494949;text-color=#a4bad6") - winset(src, "rpane.wikib", "background-color=#494949;text-color=#a4bad6") - winset(src, "rpane.forumb", "background-color=#494949;text-color=#a4bad6") - winset(src, "rpane.rulesb", "background-color=#494949;text-color=#a4bad6") - winset(src, "rpane.githubb", "background-color=#494949;text-color=#a4bad6") - winset(src, "rpane.webmap", "background-color=#494949;text-color=#a4bad6") - /* Outputwindow */ - winset(src, "outputwindow.saybutton", "background-color=#494949;text-color=#a4bad6") - winset(src, "outputwindow.mebutton", "background-color=#494949;text-color=#a4bad6") - ///// UI ELEMENTS ///// - /* Mainwindow */ - winset(src, "mainwindow", "background-color=#171717") - winset(src, "mainwindow.mainvsplit", "background-color=#202020") - winset(src, "mainwindow.tooltip", "background-color=#171717") - /* Outputwindow */ - winset(src, "outputwindow", "background-color=#202020") - winset(src, "outputwindow.browseroutput", "background-color=#202020") - /* Rpane */ - winset(src, "rpane", "background-color=#202020") - winset(src, "rpane.rpanewindow", "background-color=#202020") - /* Infowindow */ - winset(src, "infowindow", "background-color=#202020;text-color=#a4bad6") - winset(src, "infowindow.info", "background-color=#171717;text-color=#a4bad6;highlight-color=#009900;tab-text-color=#a4bad6;tab-background-color=#202020") - // NOTIFY USER - to_chat(src, "Darkmode Enabled") - -/client/proc/deactivate_darkmode() - ///// BUTTONS ///// - SSchangelog.UpdatePlayerChangelogButton(src) - /* Rpane */ - winset(src, "rpane.textb", "background-color=none;text-color=#000000") - winset(src, "rpane.infob", "background-color=none;text-color=#000000") - winset(src, "rpane.wikib", "background-color=none;text-color=#000000") - winset(src, "rpane.forumb", "background-color=none;text-color=#000000") - winset(src, "rpane.rulesb", "background-color=none;text-color=#000000") - winset(src, "rpane.githubb", "background-color=none;text-color=#000000") - winset(src, "rpane.webmap", "background-color=none;text-color=#000000") - /* Outputwindow */ - winset(src, "outputwindow.saybutton", "background-color=none;text-color=#000000") - winset(src, "outputwindow.mebutton", "background-color=none;text-color=#000000") - ///// UI ELEMENTS ///// - /* Mainwindow */ - winset(src, "mainwindow", "background-color=none") - winset(src, "mainwindow.mainvsplit", "background-color=none") - winset(src, "mainwindow.tooltip", "background-color=none") - /* Outputwindow */ - winset(src, "outputwindow", "background-color=none") - winset(src, "outputwindow.browseroutput", "background-color=none") - /* Rpane */ - winset(src, "rpane", "background-color=none") - winset(src, "rpane.rpanewindow", "background-color=none") - /* Infowindow */ - winset(src, "infowindow", "background-color=none;text-color=#000000") - winset(src, "infowindow.info", "background-color=none;text-color=#000000;highlight-color=#007700;tab-text-color=#000000;tab-background-color=none") - ///// NOTIFY USER ///// - to_chat(src, "Darkmode Disabled") // what a sick fuck - /client/proc/generate_clickcatcher() if(!void) void = new() @@ -1028,6 +955,8 @@ #undef SSD_WARNING_TIMER + +// /client/verb/resend_ui_resources() set name = "Reload UI Resources" set desc = "Reload your UI assets if they are not working" @@ -1037,7 +966,7 @@ to_chat(usr, "You requested your UI resource files too quickly. Please try again in [(last_ui_resource_send - world.time)/10] seconds.") return - var/choice = alert(usr, "This will reload your TGUI resources. If you have any open UIs this may break them. Are you sure?", "Resource Reloading", "Yes", "No") + var/choice = alert(usr, "This will reload your TGUI resources. If you have any open UIs, they will be closed. Are you sure?", "Resource Reloading", "Yes", "No") if(choice == "Yes") // 600 deciseconds = 1 minute last_ui_resource_send = world.time + 60 SECONDS @@ -1045,18 +974,9 @@ // Close their open UIs SStgui.close_user_uis(usr) - // Resend the resources - - var/datum/asset/tgui_assets = get_asset_datum(/datum/asset/simple/tgui) - tgui_assets.register() - - var/datum/asset/nanomaps = get_asset_datum(/datum/asset/simple/nanomaps) - nanomaps.register() - // Clear the user's cache so they get resent. // This is not fully clearing their BYOND cache, just their assets sent from the server this round - cache = list() - + sent_assets = list() to_chat(usr, "UI resource files resent successfully. If you are still having issues, please try manually clearing your BYOND cache. This can be achieved by opening your BYOND launcher, pressing the cog in the top right, selecting preferences, going to the Games tab, and pressing 'Clear Cache'.") diff --git a/code/modules/client/preference/loadout/loadout_general.dm b/code/modules/client/preference/loadout/loadout_general.dm index 4def22c447be..2549eff6d9c1 100644 --- a/code/modules/client/preference/loadout/loadout_general.dm +++ b/code/modules/client/preference/loadout/loadout_general.dm @@ -174,20 +174,20 @@ /datum/gear/mug display_name = "Coffee mug, random" description = "A randomly colored coffee mug. You'll need to supply your own beverage though." - path = /obj/item/reagent_containers/food/drinks/mug + path = /obj/item/reagent_containers/drinks/mug sort_category = "Mugs" /datum/gear/novelty_mug display_name = "Coffee mug, novelty" description = "A random novelty coffee mug. You'll need to supply your own beverage though." - path = /obj/item/reagent_containers/food/drinks/mug/novelty + path = /obj/item/reagent_containers/drinks/mug/novelty cost = 2 sort_category = "Mugs" /datum/gear/mug/flask display_name = "Flask" description = "A flask for drink transportation. You'll need to supply your own beverage though." - path = /obj/item/reagent_containers/food/drinks/flask/barflask + path = /obj/item/reagent_containers/drinks/flask/barflask /datum/gear/mug/department main_typepath = /datum/gear/mug/department @@ -198,30 +198,30 @@ display_name = "Coffee mug, engineering" description = "An engineer's coffee mug, emblazoned in the colors of the Engineering department." allowed_roles = list("Chief Engineer", "Station Engineer", "Life Support Specialist") - path = /obj/item/reagent_containers/food/drinks/mug/eng + path = /obj/item/reagent_containers/drinks/mug/eng /datum/gear/mug/department/med display_name = "Coffee mug, medical" description = "A doctor's coffee mug, emblazoned in the colors of the Medical department." allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Psychiatrist", "Paramedic", "Virologist", "Coroner") - path = /obj/item/reagent_containers/food/drinks/mug/med + path = /obj/item/reagent_containers/drinks/mug/med /datum/gear/mug/department/sci display_name = "Coffee mug, science" description = "A scientist's coffee mug, emblazoned in the colors of the Science department." allowed_roles = list("Research Director", "Scientist", "Roboticist") - path = /obj/item/reagent_containers/food/drinks/mug/sci + path = /obj/item/reagent_containers/drinks/mug/sci /datum/gear/mug/department/sec display_name = "Coffee mug, security" description = "An officer's coffee mug, emblazoned in the colors of the Security department." allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Internal Affairs Agent") - path = /obj/item/reagent_containers/food/drinks/mug/sec + path = /obj/item/reagent_containers/drinks/mug/sec /datum/gear/mug/department/serv display_name = "Coffee mug, service" description = "A crewmember's coffee mug, emblazoned in the colors of the Service department." - path = /obj/item/reagent_containers/food/drinks/mug/serv + path = /obj/item/reagent_containers/drinks/mug/serv ////////////////////// diff --git a/code/modules/client/preference/preferences_toggles.dm b/code/modules/client/preference/preferences_toggles.dm index c252a2d8d1f9..1e9129bc774c 100644 --- a/code/modules/client/preference/preferences_toggles.dm +++ b/code/modules/client/preference/preferences_toggles.dm @@ -254,18 +254,6 @@ prefs.current_tab = 1 prefs.ShowChoices(usr) -/client/verb/toggle_darkmode() - set name = "Toggle Darkmode" - set category = "Preferences" - set desc = "Toggles UI style between dark and light" - prefs.toggles ^= PREFTOGGLE_UI_DARKMODE - prefs.save_preferences(src) - if(prefs.toggles & PREFTOGGLE_UI_DARKMODE) - activate_darkmode() - else - deactivate_darkmode() - SSblackbox.record_feedback("tally", "toggle_verbs", 1, "Toggle Darkmode") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - /client/verb/toggle_popup_limiter() set name = "Toggle Text Popup Limiter" set category = "Preferences" diff --git a/code/modules/clothing/head/job_hats.dm b/code/modules/clothing/head/job_hats.dm index 3641624520c1..94d268d41108 100644 --- a/code/modules/clothing/head/job_hats.dm +++ b/code/modules/clothing/head/job_hats.dm @@ -120,7 +120,7 @@ name = "hat" desc = "Someone who wears this will look very smart." icon_state = "detective" - allowed = list(/obj/item/reagent_containers/food/snacks/candy/candy_corn, /obj/item/pen) + allowed = list(/obj/item/food/snacks/candy/candy_corn, /obj/item/pen) armor = list(MELEE = 15, BULLET = 5, LASER = 15, ENERGY = 5, BOMB = 0, RAD = 0, FIRE = 20, ACID = 50) dog_fashion = /datum/dog_fashion/head/detective diff --git a/code/modules/clothing/suits/armor_suits.dm b/code/modules/clothing/suits/armor_suits.dm index 846b5d033e9d..47c2b602ff78 100644 --- a/code/modules/clothing/suits/armor_suits.dm +++ b/code/modules/clothing/suits/armor_suits.dm @@ -190,7 +190,7 @@ armor = list(MELEE = 50, BULLET = 35, LASER = 50, ENERGY = 5, BOMB = 15, RAD = 0, FIRE = INFINITY, ACID = 450) dog_fashion = null resistance_flags = FIRE_PROOF - allowed = list(/obj/item/disk, /obj/item/stamp, /obj/item/reagent_containers/food/drinks/flask, /obj/item/melee, /obj/item/storage/lockbox/medal, /obj/item/flash, /obj/item/storage/fancy/matches, /obj/item/lighter, /obj/item/clothing/mask/cigarette, /obj/item/storage/fancy/cigarettes, /obj/item/tank/internals/emergency_oxygen, /obj/item/gun/energy, /obj/item/gun/projectile) + allowed = list(/obj/item/disk, /obj/item/stamp, /obj/item/reagent_containers/drinks/flask, /obj/item/melee, /obj/item/storage/lockbox/medal, /obj/item/flash, /obj/item/storage/fancy/matches, /obj/item/lighter, /obj/item/clothing/mask/cigarette, /obj/item/storage/fancy/cigarettes, /obj/item/tank/internals/emergency_oxygen, /obj/item/gun/energy, /obj/item/gun/projectile) sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/suit.dmi', diff --git a/code/modules/clothing/suits/job_suits.dm b/code/modules/clothing/suits/job_suits.dm index 4b3232679f5b..db2fcc1981de 100644 --- a/code/modules/clothing/suits/job_suits.dm +++ b/code/modules/clothing/suits/job_suits.dm @@ -44,7 +44,7 @@ item_state = "chaplain_hoodie" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS hoodtype = /obj/item/clothing/head/hooded/chaplain_hood - allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/suit.dmi' @@ -59,7 +59,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS flags_inv = HIDESHOES|HIDEJUMPSUIT hoodtype = /obj/item/clothing/head/hooded/nun_hood - allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/suit.dmi' @@ -74,7 +74,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS flags_inv = HIDESHOES|HIDEJUMPSUIT hoodtype = /obj/item/clothing/head/hooded/monk_hood - allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) /obj/item/clothing/suit/witchhunter name = "witchhunter garb" @@ -82,7 +82,7 @@ icon_state = "witchhunter" item_state = "witchhunter" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) //Chef diff --git a/code/modules/clothing/suits/misc_suits.dm b/code/modules/clothing/suits/misc_suits.dm index bfa4b04a399a..d24cb2245597 100644 --- a/code/modules/clothing/suits/misc_suits.dm +++ b/code/modules/clothing/suits/misc_suits.dm @@ -153,7 +153,7 @@ item_state = "imperium_monk" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS flags_inv = HIDESHOES|HIDEJUMPSUIT - allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) /obj/item/clothing/suit/chickensuit name = "chicken suit" @@ -220,7 +220,7 @@ item_state = "holidaypriest" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS flags_inv = HIDEJUMPSUIT - allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) /obj/item/clothing/suit/cardborg name = "cardborg suit" @@ -1261,7 +1261,7 @@ icon_state = "abaya" item_state = "abaya" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) hoodtype = /obj/item/clothing/head/hooded/screened_niqab flags_inv = HIDEJUMPSUIT var/list/options = list( diff --git a/code/modules/crafting/craft.dm b/code/modules/crafting/craft.dm index 2916882460aa..a520f476bc87 100644 --- a/code/modules/crafting/craft.dm +++ b/code/modules/crafting/craft.dm @@ -285,10 +285,13 @@ return parts_returned -/datum/personal_crafting/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.not_incapacitated_turf_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/personal_crafting/ui_state(mob/user) + return GLOB.not_incapacitated_turf_state + +/datum/personal_crafting/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PersonalCrafting", "Crafting Menu", 700, 800, master_ui, state) + ui = new(user, src, "PersonalCrafting", "Crafting Menu") ui.open() /datum/personal_crafting/proc/close(mob/user) diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 5ac0d342449a..4e9df5d39611 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -31,19 +31,19 @@ reqs = list(/datum/reagent/fuel = 50, /obj/item/stack/cable_coil = 1, /obj/item/assembly/igniter = 1, - /obj/item/reagent_containers/food/drinks/cans = 1) - parts = list(/obj/item/reagent_containers/food/drinks/cans = 1) + /obj/item/reagent_containers/drinks/cans = 1) + parts = list(/obj/item/reagent_containers/drinks/cans = 1) time = 15 category = CAT_WEAPONRY subcategory = CAT_WEAPON /datum/crafting_recipe/molotov name = "Molotov" - result = list(/obj/item/reagent_containers/food/drinks/bottle/molotov) + result = list(/obj/item/reagent_containers/drinks/bottle/molotov) reqs = list(/obj/item/reagent_containers/glass/rag = 1, - /obj/item/reagent_containers/food/drinks/bottle = 1) - blacklist = list(/obj/item/reagent_containers/food/drinks/bottle/molotov) - parts = list(/obj/item/reagent_containers/food/drinks/bottle = 1) + /obj/item/reagent_containers/drinks/bottle = 1) + blacklist = list(/obj/item/reagent_containers/drinks/bottle/molotov) + parts = list(/obj/item/reagent_containers/drinks/bottle = 1) time = 40 category = CAT_WEAPONRY subcategory = CAT_WEAPON @@ -91,10 +91,10 @@ /datum/crafting_recipe/throwing_croissant name = "Throwing croissant" reqs = list( - /obj/item/reagent_containers/food/snacks/croissant = 1, + /obj/item/food/snacks/croissant = 1, /obj/item/stack/rods = 1 ) - result = list(/obj/item/reagent_containers/food/snacks/croissant/throwing) + result = list(/obj/item/food/snacks/croissant/throwing) category = CAT_WEAPONRY subcategory = CAT_WEAPON always_available = FALSE @@ -888,7 +888,7 @@ name = "Snowman" result = list(/obj/structure/snowman/built) reqs = list(/obj/item/snowball = 10, - /obj/item/reagent_containers/food/snacks/grown/carrot = 1, + /obj/item/food/snacks/grown/carrot = 1, /obj/item/grown/log = 2) time = 50 category = CAT_MISC diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index cc753c4d261b..26592194f5d6 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -269,9 +269,9 @@ storage_slots = 3 /obj/item/storage/toolbox/fluff/lunchbox/populate_contents() - new /obj/item/reagent_containers/food/snacks/sandwich(src) - new /obj/item/reagent_containers/food/snacks/chips(src) - new /obj/item/reagent_containers/food/drinks/cans/cola(src) + new /obj/item/food/snacks/sandwich(src) + new /obj/item/food/snacks/chips(src) + new /obj/item/reagent_containers/drinks/cans/cola(src) /obj/item/fluff/wingler_comb diff --git a/code/modules/economy/economy_admin.dm b/code/modules/economy/economy_admin.dm index f33af855c66d..186a36b4af98 100644 --- a/code/modules/economy/economy_admin.dm +++ b/code/modules/economy/economy_admin.dm @@ -12,10 +12,13 @@ /datum/ui_module/economy_manager name = "Economy Manager" -/datum/ui_module/economy_manager/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.admin_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/economy_manager/ui_state(mob/user) + return GLOB.admin_state + +/datum/ui_module/economy_manager/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "EconomyManager", name, 600, 350, master_ui, state) + ui = new(user, src, "EconomyManager", name) ui.autoupdate = TRUE ui.open() diff --git a/code/modules/economy/economy_machinery/account_terminal.dm b/code/modules/economy/economy_machinery/account_terminal.dm index 282aa26a4df8..d8b1ec285641 100644 --- a/code/modules/economy/economy_machinery/account_terminal.dm +++ b/code/modules/economy/economy_machinery/account_terminal.dm @@ -32,10 +32,13 @@ /obj/machinery/computer/account_database/attack_hand(mob/user) ui_interact(user) -/obj/machinery/computer/account_database/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/account_database/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/account_database/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AccountsUplinkTerminal", name, 800, 600, master_ui, state) + ui = new(user, src, "AccountsUplinkTerminal", name) ui.open() /obj/machinery/computer/account_database/ui_data(mob/user) diff --git a/code/modules/economy/economy_machinery/atm.dm b/code/modules/economy/economy_machinery/atm.dm index 8d75ef68f40c..99d8dc2f687b 100644 --- a/code/modules/economy/economy_machinery/atm.dm +++ b/code/modules/economy/economy_machinery/atm.dm @@ -129,10 +129,13 @@ UnregisterSignal(authenticated_account, COMSIG_PARENT_QDELETING) authenticated_account = null -/obj/machinery/economy/atm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/economy/atm/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/economy/atm/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ATM", name, 550, 650) + ui = new(user, src, "ATM", name) ui.open() /obj/machinery/economy/atm/ui_data(mob/user) diff --git a/code/modules/economy/economy_machinery/eftpos.dm b/code/modules/economy/economy_machinery/eftpos.dm index 5826d1db063a..edc5d4c7466a 100644 --- a/code/modules/economy/economy_machinery/eftpos.dm +++ b/code/modules/economy/economy_machinery/eftpos.dm @@ -55,10 +55,13 @@ else return ..() -/obj/item/eftpos/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/eftpos/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/eftpos/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "EFTPOS", name, 500, 250, master_ui, state) + ui = new(user, src, "EFTPOS", name) ui.open() /obj/item/eftpos/ui_data(mob/user) @@ -278,10 +281,13 @@ to_chat(user, "You need to be behind [src] to use it!") return add_fingerprint(user) - ui_interact(user, state = GLOB.human_adjacent_state) + ui_interact(user) return TRUE return ..() +/obj/item/eftpos/register/ui_state(mob/user) + return GLOB.human_adjacent_state + /obj/item/eftpos/register/attack_self(mob/user) to_chat(user, "[src] has to be set down and secured to be used.") diff --git a/code/modules/events/meaty_ores.dm b/code/modules/events/meaty_ores.dm index 7b7c4ffbfa0b..7d0c6bae4594 100644 --- a/code/modules/events/meaty_ores.dm +++ b/code/modules/events/meaty_ores.dm @@ -32,7 +32,7 @@ if(prob(80)) gibs(where) if(prob(45)) - new /obj/item/reagent_containers/food/snacks/meat(where) + new /obj/item/food/snacks/meat(where) else if(prob(10)) explosion(where, 0, pick(0,1), pick(2,3), 0) else diff --git a/code/modules/fish/fish_items.dm b/code/modules/fish/fish_items.dm index 758a36ebb1af..707eb46ca9c7 100644 --- a/code/modules/fish/fish_items.dm +++ b/code/modules/fish/fish_items.dm @@ -66,7 +66,7 @@ can_hold = list( /obj/item/fish, /obj/item/fish_eggs, - /obj/item/reagent_containers/food/snacks/shrimp, + /obj/item/food/snacks/shrimp, ) resistance_flags = FLAMMABLE @@ -74,7 +74,7 @@ // Fish Items // ////////////////////////////////////////////// -/obj/item/reagent_containers/food/snacks/shrimp +/obj/item/food/snacks/shrimp name = "shrimp" desc = "A single raw shrimp." icon = 'icons/obj/food/seafood.dmi' @@ -82,12 +82,12 @@ filling_color = "#FF1C1C" bitesize = 1 -/obj/item/reagent_containers/food/snacks/shrimp/Initialize(mapload) +/obj/item/food/snacks/shrimp/Initialize(mapload) . = ..() desc = pick("Anyway, like I was sayin', shrimp is the fruit of the sea.", "You can barbecue it, boil it, broil it, bake it, saute it.") reagents.add_reagent("protein", 1) -/obj/item/reagent_containers/food/snacks/feederfish +/obj/item/food/snacks/feederfish name = "feeder fish" desc = "A tiny feeder fish. Sure doesn't look very filling..." icon = 'icons/obj/food/seafood.dmi' @@ -95,7 +95,7 @@ filling_color = "#FF1C1C" bitesize = 1 -/obj/item/reagent_containers/food/snacks/feederfish/Initialize(mapload) +/obj/item/food/snacks/feederfish/Initialize(mapload) . = ..() reagents.add_reagent("protein", 1) @@ -170,8 +170,8 @@ /obj/item/fish/catfish/attackby(obj/item/O, mob/user as mob) if(is_sharp(O)) to_chat(user, "You carefully clean and gut \the [src.name].") - new /obj/item/reagent_containers/food/snacks/catfishmeat(get_turf(src)) - new /obj/item/reagent_containers/food/snacks/catfishmeat(get_turf(src)) + new /obj/item/food/snacks/catfishmeat(get_turf(src)) + new /obj/item/food/snacks/catfishmeat(get_turf(src)) qdel(src) return ..() @@ -189,8 +189,8 @@ /obj/item/fish/salmon/attackby(obj/item/O, mob/user as mob) if(is_sharp(O)) to_chat(user, "You carefully clean and gut \the [src.name].") - new /obj/item/reagent_containers/food/snacks/salmonmeat(get_turf(src)) - new /obj/item/reagent_containers/food/snacks/salmonmeat(get_turf(src)) + new /obj/item/food/snacks/salmonmeat(get_turf(src)) + new /obj/item/food/snacks/salmonmeat(get_turf(src)) qdel(src) return ..() @@ -205,7 +205,7 @@ /obj/item/fish/babycarp/attackby(obj/item/O, mob/user as mob) if(is_sharp(O)) to_chat(user, "You carefully clean and gut \the [src.name].") - new /obj/item/reagent_containers/food/snacks/carpmeat(get_turf(src)) //just one fillet; this is a baby, afterall. + new /obj/item/food/snacks/carpmeat(get_turf(src)) //just one fillet; this is a baby, afterall. qdel(src) return ..() diff --git a/code/modules/fish/fish_types.dm b/code/modules/fish/fish_types.dm index f7c2e6659cc2..f90cda4efc90 100644 --- a/code/modules/fish/fish_types.dm +++ b/code/modules/fish/fish_types.dm @@ -52,13 +52,13 @@ /datum/fish/shrimp fish_name = "shrimp" egg_item = /obj/item/fish_eggs/shrimp - fish_item = /obj/item/reagent_containers/food/snacks/shrimp + fish_item = /obj/item/food/snacks/shrimp crossbreeder = 0 /datum/fish/feederfish fish_name = "feeder fish" egg_item = /obj/item/fish_eggs/feederfish - fish_item = /obj/item/reagent_containers/food/snacks/feederfish + fish_item = /obj/item/food/snacks/feederfish /datum/fish/feederfish/special_interact(obj/machinery/fishtank/my_tank) if(!my_tank || !istype(my_tank)) diff --git a/code/modules/food_and_drinks/drinks/bottler/bottler.dm b/code/modules/food_and_drinks/drinks/bottler/bottler.dm index 10f1065f444f..60672679bea5 100644 --- a/code/modules/food_and_drinks/drinks/bottler/bottler.dm +++ b/code/modules/food_and_drinks/drinks/bottler/bottler.dm @@ -28,8 +28,8 @@ available_recipes = list() acceptable_items = list() //These are going to be acceptable even if they aren't in a recipe - acceptable_items |= /obj/item/reagent_containers/food/snacks - acceptable_items |= /obj/item/reagent_containers/food/drinks/cans + acceptable_items |= /obj/item/food/snacks + acceptable_items |= /obj/item/reagent_containers/drinks/cans //the rest is based on what is used in recipes so we don't have people destroying the nuke disc for(var/type in subtypesof(/datum/bottler_recipe)) var/datum/bottler_recipe/recipe = new type @@ -45,8 +45,8 @@ to_chat(user, "[O] is stuck to your hand, you can't seem to put it down!") return 0 if(is_type_in_list(O,acceptable_items)) - if(istype(O, /obj/item/reagent_containers/food/snacks)) - var/obj/item/reagent_containers/food/snacks/S = O + if(istype(O, /obj/item/food/snacks)) + var/obj/item/food/snacks/S = O user.unEquip(S) if(S.reagents && !S.reagents.total_volume) //This prevents us from using empty foods, should one occur due to some sort of error to_chat(user, "[S] is gone, oh no!") @@ -54,8 +54,8 @@ else insert_item(S, user) return 1 - else if(istype(O, /obj/item/reagent_containers/food/drinks/cans)) - var/obj/item/reagent_containers/food/drinks/cans/C = O + else if(istype(O, /obj/item/reagent_containers/drinks/cans)) + var/obj/item/reagent_containers/drinks/cans/C = O if(C.reagents) if(C.can_opened && C.reagents.total_volume) //This prevents us from using opened cans that still have something in them to_chat(user, "Only unopened cans and bottles can be processed to ensure product integrity.") @@ -141,8 +141,8 @@ else con_type = "metal can" max_define = MAX_METAL - else if(istype(O, /obj/item/reagent_containers/food/drinks/cans)) - var/obj/item/reagent_containers/food/drinks/cans/C = O + else if(istype(O, /obj/item/reagent_containers/drinks/cans)) + var/obj/item/reagent_containers/drinks/cans/C = O if(C.is_glass) con_type = "glass bottle" max_define = MAX_GLASS @@ -215,17 +215,17 @@ /obj/machinery/bottler/proc/dispense_empty_container(container) var/con_type - var/obj/item/reagent_containers/food/drinks/cans/bottler/drink_container + var/obj/item/reagent_containers/drinks/cans/bottler/drink_container switch(container) if(1) //glass bottle con_type = "glass bottle" - drink_container = /obj/item/reagent_containers/food/drinks/cans/bottler/glass_bottle + drink_container = /obj/item/reagent_containers/drinks/cans/bottler/glass_bottle if(2) //plastic bottle con_type = "plastic bottle" - drink_container = /obj/item/reagent_containers/food/drinks/cans/bottler/plastic_bottle + drink_container = /obj/item/reagent_containers/drinks/cans/bottler/plastic_bottle if(3) //metal can con_type = "metal can" - drink_container = /obj/item/reagent_containers/food/drinks/cans/bottler/metal_can + drink_container = /obj/item/reagent_containers/drinks/cans/bottler/metal_can if(containers[con_type]) //empties aren't sealed, so let's open it quietly drink_container = new drink_container() @@ -240,18 +240,18 @@ visible_message("There are no ingredients to process! Please insert some first.") return //prep a container - var/obj/item/reagent_containers/food/drinks/cans/bottler/drink_container + var/obj/item/reagent_containers/drinks/cans/bottler/drink_container var/con_type switch(container) if(1) //glass bottle con_type = "glass bottle" - drink_container = /obj/item/reagent_containers/food/drinks/cans/bottler/glass_bottle + drink_container = /obj/item/reagent_containers/drinks/cans/bottler/glass_bottle if(2) //plastic bottle con_type = "plastic bottle" - drink_container = /obj/item/reagent_containers/food/drinks/cans/bottler/plastic_bottle + drink_container = /obj/item/reagent_containers/drinks/cans/bottler/plastic_bottle if(3) //metal can con_type = "metal can" - drink_container = /obj/item/reagent_containers/food/drinks/cans/bottler/metal_can + drink_container = /obj/item/reagent_containers/drinks/cans/bottler/metal_can if(!con_type) visible_message("Error 404: Drink Container Not Found.") diff --git a/code/modules/food_and_drinks/drinks/bottler/bottler_recipes.dm b/code/modules/food_and_drinks/drinks/bottler/bottler_recipes.dm index 5f13f5938929..3a923c5428ad 100644 --- a/code/modules/food_and_drinks/drinks/bottler/bottler_recipes.dm +++ b/code/modules/food_and_drinks/drinks/bottler/bottler_recipes.dm @@ -22,48 +22,48 @@ There is no excuse to do this wrong now that there is an example for you. --Fals /datum/bottler_recipe/Paradise_Punch name = "Paradise Punch" description = "Tastes just how you'd think Paradise would if you could bottle it." - ingredients = list(/obj/item/reagent_containers/food/snacks/grown/grapes, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/cherries) + ingredients = list(/obj/item/food/snacks/grown/grapes, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/cherries) result = "paradise_punch" /datum/bottler_recipe/Applepocalypse name = "Apple-pocalypse" description = "If doomsday came in fruit form, it'd probably be apples." - ingredients = list(/obj/item/reagent_containers/food/snacks/grown/apple, - /obj/item/reagent_containers/food/snacks/grown/apple, - /obj/item/reagent_containers/food/snacks/grown/apple) + ingredients = list(/obj/item/food/snacks/grown/apple, + /obj/item/food/snacks/grown/apple, + /obj/item/food/snacks/grown/apple) result = "apple-pocalypse" /datum/bottler_recipe/Berry_Banned name = "Berry Banned" description = "Reason for ban: Excessive Flavor." - ingredients = list(/obj/item/reagent_containers/food/snacks/grown/berries, - /obj/item/reagent_containers/food/snacks/grown/berries, - /obj/item/reagent_containers/food/snacks/grown/berries) + ingredients = list(/obj/item/food/snacks/grown/berries, + /obj/item/food/snacks/grown/berries, + /obj/item/food/snacks/grown/berries) result = "berry_banned" /datum/bottler_recipe/Berry_Banned2 name = "Berry Banned" description = "Reason for ban: Excessive Flavor." - ingredients = list(/obj/item/reagent_containers/food/snacks/grown/berries/poison, - /obj/item/reagent_containers/food/snacks/grown/berries/poison, - /obj/item/reagent_containers/food/snacks/grown/berries/poison) + ingredients = list(/obj/item/food/snacks/grown/berries/poison, + /obj/item/food/snacks/grown/berries/poison, + /obj/item/food/snacks/grown/berries/poison) result = "berry_banned2" /datum/bottler_recipe/Blackeye_Brew name = "Blackeye Brew" description = "Creamy, smooth flavor, just like the bald heads of the masses. Supposedly aged for 30 years." - ingredients = list(/obj/item/reagent_containers/food/drinks/cans/cola, - /obj/item/reagent_containers/food/snacks/grown/sugarcane, - /obj/item/reagent_containers/food/snacks/frozen/icecream) + ingredients = list(/obj/item/reagent_containers/drinks/cans/cola, + /obj/item/food/snacks/grown/sugarcane, + /obj/item/food/snacks/frozen/icecream) result = "blackeye_brew" /datum/bottler_recipe/Grape_Granade name = "Grape Granade" description = "Exploding with grape flavor and a favorite among ERT members system-wide." - ingredients = list(/obj/item/reagent_containers/food/drinks/cans/grape_juice, - /obj/item/reagent_containers/food/snacks/grown/grapes, + ingredients = list(/obj/item/reagent_containers/drinks/cans/grape_juice, + /obj/item/food/snacks/grown/grapes, /obj/item/flash) result = "grape_granade" @@ -71,6 +71,6 @@ There is no excuse to do this wrong now that there is an example for you. --Fals name = "Meteor Malt" description = "Soft drinks have been detected on collision course with your tastebuds." ingredients = list(/obj/item/stack/ore, - /obj/item/reagent_containers/food/snacks/grown/wheat, + /obj/item/food/snacks/grown/wheat, /obj/item/stack/ore) result = "meteor_malt" diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 5307f00752dc..88d923bb4458 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -4,7 +4,7 @@ //Functionally identical to regular drinks. The only difference is that the default bottle size is 100. - Darem //Bottles now weaken and break when smashed on people's heads. - Giacom -/obj/item/reagent_containers/food/drinks/bottle +/obj/item/reagent_containers/drinks/bottle amount_per_transfer_from_this = 10 volume = 100 throwforce = 15 @@ -12,7 +12,7 @@ var/const/duration = 13 //Directly relates to the 'weaken' duration. Lowered by armor (i.e. helmets) var/is_glass = TRUE //Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it -/obj/item/reagent_containers/food/drinks/bottle/proc/smash(mob/living/target, mob/living/user, ranged = FALSE) +/obj/item/reagent_containers/drinks/bottle/proc/smash(mob/living/target, mob/living/user, ranged = FALSE) //Creates a shattering noise and replaces the bottle with a broken_bottle var/new_location = get_turf(loc) @@ -42,7 +42,7 @@ qdel(src) -/obj/item/reagent_containers/food/drinks/bottle/attack(mob/living/target, mob/living/user) +/obj/item/reagent_containers/drinks/bottle/attack(mob/living/target, mob/living/user) if(!target) return @@ -119,18 +119,18 @@ //Finally, smash the bottle. This kills (qdel) the bottle. smash(target, user) -/obj/item/reagent_containers/food/drinks/bottle/proc/SplashReagents(mob/M) +/obj/item/reagent_containers/drinks/bottle/proc/SplashReagents(mob/M) if(reagents && reagents.total_volume) M.visible_message("The contents of \the [src] splashes all over [M]!") reagents.reaction(M, REAGENT_TOUCH) reagents.clear_reagents() -/obj/item/reagent_containers/food/drinks/bottle/throw_impact(atom/target,mob/thrower) +/obj/item/reagent_containers/drinks/bottle/throw_impact(atom/target,mob/thrower) ..() SplashReagents(target) smash(target, thrower, ranged = TRUE) -/obj/item/reagent_containers/food/drinks/bottle/decompile_act(obj/item/matter_decompiler/C, mob/user) +/obj/item/reagent_containers/drinks/bottle/decompile_act(obj/item/matter_decompiler/C, mob/user) if(!reagents.total_volume) C.stored_comms["glass"] += 3 qdel(src) @@ -159,119 +159,119 @@ qdel(src) return TRUE -/obj/item/reagent_containers/food/drinks/bottle/gin +/obj/item/reagent_containers/drinks/bottle/gin name = "Griffeater Gin" desc = "A bottle of high quality gin, produced in the New London Space Station." icon_state = "ginbottle" list_reagents = list("gin" = 100) -/obj/item/reagent_containers/food/drinks/bottle/whiskey +/obj/item/reagent_containers/drinks/bottle/whiskey name = "Uncle Git's Special Reserve" desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES." icon_state = "whiskeybottle" list_reagents = list("whiskey" = 100) -/obj/item/reagent_containers/food/drinks/bottle/vodka +/obj/item/reagent_containers/drinks/bottle/vodka name = "Tunguska Triple Distilled" desc = "Aah, vodka. Prime choice of drink AND fuel by Russians worldwide." icon_state = "vodkabottle" list_reagents = list("vodka" = 100) -/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka +/obj/item/reagent_containers/drinks/bottle/vodka/badminka name = "Badminka Vodka" desc = "The label's written in Cyrillic. All you can make out is the name and a word that looks vaguely like 'Vodka'." icon_state = "badminka" list_reagents = list("vodka" = 100) -/obj/item/reagent_containers/food/drinks/bottle/tequila +/obj/item/reagent_containers/drinks/bottle/tequila name = "Caccavo Guaranteed Quality Tequila" desc = "Made from premium petroleum distillates, pure thalidomide and other fine quality ingredients!" icon_state = "tequilabottle" list_reagents = list("tequila" = 100) -/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing +/obj/item/reagent_containers/drinks/bottle/bottleofnothing name = "Bottle of Nothing" desc = "A bottle filled with nothing." icon_state = "bottleofnothing" list_reagents = list("nothing" = 100) -/obj/item/reagent_containers/food/drinks/bottle/bottleofbanana +/obj/item/reagent_containers/drinks/bottle/bottleofbanana name = "Jolly Jug" desc = "A jug filled with banana juice." icon_state = "bottleofjolly" list_reagents = list("banana" = 100) -/obj/item/reagent_containers/food/drinks/bottle/patron +/obj/item/reagent_containers/drinks/bottle/patron name = "Wrapp Artiste Patron" desc = "Silver laced tequila, served in space night clubs across the galaxy." icon_state = "patronbottle" list_reagents = list("patron" = 100) -/obj/item/reagent_containers/food/drinks/bottle/rum +/obj/item/reagent_containers/drinks/bottle/rum name = "Captain Pete's Cuban Spiced Rum" desc = "This isn't just rum, oh no. It's practically GRIFF in a bottle." icon_state = "rumbottle" list_reagents = list("rum" = 100) -/obj/item/reagent_containers/food/drinks/bottle/holywater +/obj/item/reagent_containers/drinks/bottle/holywater name = "flask of holy water" desc = "A flask of the chaplain's holy water." icon_state = "holyflask" list_reagents = list("holywater" = 100) -/obj/item/reagent_containers/food/drinks/bottle/holywater/hell +/obj/item/reagent_containers/drinks/bottle/holywater/hell desc = "A flask of holy water...it's been sitting in the Necropolis a while though." list_reagents = list("hell_water" = 100) -/obj/item/reagent_containers/food/drinks/bottle/vermouth +/obj/item/reagent_containers/drinks/bottle/vermouth name = "Goldeneye Vermouth" desc = "Sweet, sweet dryness~" icon_state = "vermouthbottle" list_reagents = list("vermouth" = 100) -/obj/item/reagent_containers/food/drinks/bottle/kahlua +/obj/item/reagent_containers/drinks/bottle/kahlua name = "Robert Robust's Coffee Liqueur" desc = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936, HONK." icon_state = "kahluabottle" list_reagents = list("kahlua" = 100) -/obj/item/reagent_containers/food/drinks/bottle/goldschlager +/obj/item/reagent_containers/drinks/bottle/goldschlager name = "College Girl Goldschlager" desc = "Because they are the only ones who will drink 100 proof cinnamon schnapps." icon_state = "goldschlagerbottle" list_reagents = list("goldschlager" = 100) -/obj/item/reagent_containers/food/drinks/bottle/cognac +/obj/item/reagent_containers/drinks/bottle/cognac name = "Chateau De Baton Premium Cognac" desc = "A sweet and strongly alcoholic drink, made after numerous distillations and years of maturing. You might as well not scream 'SHITCURITY' this time." icon_state = "cognacbottle" list_reagents = list("cognac" = 100) -/obj/item/reagent_containers/food/drinks/bottle/wine +/obj/item/reagent_containers/drinks/bottle/wine name = "Doublebeard Bearded Special Wine" desc = "A faint aura of unease and asspainery surrounds the bottle." icon_state = "winebottle" list_reagents = list("wine" = 100) -/obj/item/reagent_containers/food/drinks/bottle/absinthe +/obj/item/reagent_containers/drinks/bottle/absinthe name = "Yellow Marquee Absinthe" desc = "A strong alcoholic drink brewed and distributed by Yellow Marquee." icon_state = "absinthebottle" list_reagents = list("absinthe" = 100) -/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium +/obj/item/reagent_containers/drinks/bottle/absinthe/premium name = "Gwyn's Premium Absinthe" desc = "A potent alcoholic beverage, almost makes you forget the ash in your lungs." icon_state = "absinthepremium" -/obj/item/reagent_containers/food/drinks/bottle/hcider +/obj/item/reagent_containers/drinks/bottle/hcider name = "Jian Hard Cider" desc = "Apple juice for adults." icon_state = "hcider" volume = 50 list_reagents = list("suicider" = 50) -/obj/item/reagent_containers/food/drinks/bottle/fernet +/obj/item/reagent_containers/drinks/bottle/fernet name = "Fernet Bronca" desc = "A bottle of pure Fernet Bronca, produced in Cordoba Space Station" icon_state = "fernetbottle" @@ -279,7 +279,7 @@ //////////////////////////JUICES AND STUFF /////////////////////// -/obj/item/reagent_containers/food/drinks/bottle/orangejuice +/obj/item/reagent_containers/drinks/bottle/orangejuice name = "orange juice" desc = "Full of vitamins and deliciousness!" icon_state = "orangejuice" @@ -288,7 +288,7 @@ is_glass = FALSE list_reagents = list("orangejuice" = 100) -/obj/item/reagent_containers/food/drinks/bottle/cream +/obj/item/reagent_containers/drinks/bottle/cream name = "milk cream" desc = "It's cream. Made from milk. What else did you think you'd find in there?" icon_state = "cream" @@ -297,7 +297,7 @@ is_glass = FALSE list_reagents = list("cream" = 100) -/obj/item/reagent_containers/food/drinks/bottle/tomatojuice +/obj/item/reagent_containers/drinks/bottle/tomatojuice name = "tomato juice" desc = "Well, at least it LOOKS like tomato juice. You can't tell with all that redness." icon_state = "tomatojuice" @@ -306,7 +306,7 @@ is_glass = FALSE list_reagents = list("tomatojuice" = 100) -/obj/item/reagent_containers/food/drinks/bottle/limejuice +/obj/item/reagent_containers/drinks/bottle/limejuice name = "lime juice" desc = "Sweet-sour goodness." icon_state = "limejuice" @@ -315,7 +315,7 @@ is_glass = FALSE list_reagents = list("limejuice" = 100) -/obj/item/reagent_containers/food/drinks/bottle/milk +/obj/item/reagent_containers/drinks/bottle/milk name = "milk" desc = "Soothing milk." icon_state = "milk" @@ -325,7 +325,7 @@ list_reagents = list("milk" = 100) ////////////////////////// MOLOTOV /////////////////////// -/obj/item/reagent_containers/food/drinks/bottle/molotov +/obj/item/reagent_containers/drinks/bottle/molotov name = "molotov cocktail" desc = "A throwing weapon used to ignite things, typically filled with an accelerant. Recommended highly by rioters and revolutionaries. Light and toss." icon_state = "vodkabottle" @@ -334,32 +334,32 @@ /datum/reagent/napalm,/datum/reagent/hellwater,/datum/reagent/plasma,/datum/reagent/plasma_dust) var/active = FALSE -/obj/item/reagent_containers/food/drinks/bottle/molotov/update_desc() +/obj/item/reagent_containers/drinks/bottle/molotov/update_desc() . = ..() desc = initial(desc) if(!is_glass) desc += " You're not sure if making this out of a carton was the brightest idea." -/obj/item/reagent_containers/food/drinks/bottle/molotov/update_icon_state() - var/obj/item/reagent_containers/food/drinks/bottle/B = locate() in contents +/obj/item/reagent_containers/drinks/bottle/molotov/update_icon_state() + var/obj/item/reagent_containers/drinks/bottle/B = locate() in contents if(B) icon_state = B.icon_state -/obj/item/reagent_containers/food/drinks/bottle/molotov/update_overlays() +/obj/item/reagent_containers/drinks/bottle/molotov/update_overlays() . = ..() if(active) . += GLOB.fire_overlay -/obj/item/reagent_containers/food/drinks/bottle/molotov/CheckParts(list/parts_list) +/obj/item/reagent_containers/drinks/bottle/molotov/CheckParts(list/parts_list) ..() - var/obj/item/reagent_containers/food/drinks/bottle/B = locate() in contents + var/obj/item/reagent_containers/drinks/bottle/B = locate() in contents if(B) B.reagents.copy_to(src, 100) if(!B.is_glass) is_glass = FALSE update_appearance(UPDATE_DESC|UPDATE_ICON) -/obj/item/reagent_containers/food/drinks/bottle/molotov/throw_impact(atom/target,mob/thrower) +/obj/item/reagent_containers/drinks/bottle/molotov/throw_impact(atom/target,mob/thrower) var/firestarter = FALSE for(var/datum/reagent/R in reagents.reagent_list) for(var/A in accelerants) @@ -371,7 +371,7 @@ target.fire_act() new /obj/effect/hotspot(get_turf(target)) -/obj/item/reagent_containers/food/drinks/bottle/molotov/attackby(obj/item/I, mob/user, params) +/obj/item/reagent_containers/drinks/bottle/molotov/attackby(obj/item/I, mob/user, params) if(I.get_heat() && !active) active = TRUE var/turf/bombturf = get_turf(src) @@ -395,7 +395,7 @@ A.fire_act() qdel(src) -/obj/item/reagent_containers/food/drinks/bottle/molotov/attack_self(mob/user) +/obj/item/reagent_containers/drinks/bottle/molotov/attack_self(mob/user) if(active) if(!is_glass) to_chat(user, "The flame's spread too far on it!") diff --git a/code/modules/food_and_drinks/drinks/drinks/cans.dm b/code/modules/food_and_drinks/drinks/drinks/cans.dm index f3125e60df1c..c98487ba69c8 100644 --- a/code/modules/food_and_drinks/drinks/drinks/cans.dm +++ b/code/modules/food_and_drinks/drinks/drinks/cans.dm @@ -1,4 +1,4 @@ -/obj/item/reagent_containers/food/drinks/cans +/obj/item/reagent_containers/drinks/cans container_type = NONE var/can_opened = FALSE var/is_glass = FALSE @@ -8,14 +8,14 @@ var/can_burst = FALSE var/burst_chance = 0 -/obj/item/reagent_containers/food/drinks/cans/examine(mob/user) +/obj/item/reagent_containers/drinks/cans/examine(mob/user) . = ..() if(can_opened) . += "It has been opened." else . += "Ctrl-click to shake it up!" -/obj/item/reagent_containers/food/drinks/cans/attack_self(mob/user) +/obj/item/reagent_containers/drinks/cans/attack_self(mob/user) if(can_opened) return ..() if(times_shaken) @@ -27,7 +27,7 @@ to_chat(user, "You open the drink with an audible pop!") return ..() -/obj/item/reagent_containers/food/drinks/cans/proc/crush(mob/user) +/obj/item/reagent_containers/drinks/cans/proc/crush(mob/user) var/obj/item/trash/can/crushed_can = new /obj/item/trash/can(user.loc) crushed_can.icon_state = icon_state //inherit material vars for recycling purposes @@ -41,7 +41,7 @@ qdel(src) return crushed_can -/obj/item/reagent_containers/food/drinks/cans/CtrlClick(mob/user) +/obj/item/reagent_containers/drinks/cans/CtrlClick(mob/user) var/mob/living/carbon/human/H if(!can_shake || !ishuman(user)) return ..() @@ -67,7 +67,7 @@ else return ..() -/obj/item/reagent_containers/food/drinks/cans/attack(mob/M, mob/user, proximity) +/obj/item/reagent_containers/drinks/cans/attack(mob/M, mob/user, proximity) if(!can_opened) to_chat(user, "You need to open the drink!") return @@ -77,7 +77,7 @@ return return ..() -/obj/item/reagent_containers/food/drinks/cans/attackby(obj/item/I, mob/user, params) +/obj/item/reagent_containers/drinks/cans/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/storage/bag/trash/cyborg)) user.visible_message("[user] crushes [src] in [user.p_their()] trash compactor.", "You crush [src] in your trash compactor.") var/obj/can = crush(user) @@ -85,7 +85,7 @@ return TRUE ..() -/obj/item/reagent_containers/food/drinks/cans/afterattack(obj/target, mob/user, proximity) +/obj/item/reagent_containers/drinks/cans/afterattack(obj/target, mob/user, proximity) if(!proximity) return if(istype(target, /obj/structure/reagent_dispensers) && !can_opened) @@ -97,14 +97,14 @@ else return ..(target, user, proximity) -/obj/item/reagent_containers/food/drinks/cans/throw_impact(atom/A) +/obj/item/reagent_containers/drinks/cans/throw_impact(atom/A) . = ..() if(times_shaken < 5) times_shaken++ else handle_bursting() -/obj/item/reagent_containers/food/drinks/cans/proc/fizzy_open(mob/user, burstopen = FALSE) +/obj/item/reagent_containers/drinks/cans/proc/fizzy_open(mob/user, burstopen = FALSE) playsound(loc, 'sound/effects/canopenfizz.ogg', rand(10, 50), 1) can_opened = TRUE container_type |= OPENCONTAINER @@ -130,7 +130,7 @@ reagents.remove_any(times_shaken / 5 * reagents.total_volume) -/obj/item/reagent_containers/food/drinks/cans/proc/handle_bursting(mob/user) +/obj/item/reagent_containers/drinks/cans/proc/handle_bursting(mob/user) if(times_shaken != 5 || can_opened) return @@ -148,10 +148,10 @@ else fizzy_open(burstopen = TRUE) -/obj/item/reagent_containers/food/drinks/cans/proc/reset_shakable() +/obj/item/reagent_containers/drinks/cans/proc/reset_shakable() can_shake = TRUE -/obj/item/reagent_containers/food/drinks/cans/proc/reset_shaken() +/obj/item/reagent_containers/drinks/cans/proc/reset_shaken() times_shaken-- if(can_burst) can_burst = FALSE @@ -159,41 +159,41 @@ if(times_shaken) addtimer(CALLBACK(src, PROC_REF(reset_shaken)), (70 - (times_shaken * 10)) SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_NO_HASH_WAIT) -/obj/item/reagent_containers/food/drinks/cans/cola +/obj/item/reagent_containers/drinks/cans/cola name = "space cola" desc = "Cola. In space." icon_state = "cola" list_reagents = list("cola" = 30) -/obj/item/reagent_containers/food/drinks/cans/beer +/obj/item/reagent_containers/drinks/cans/beer name = "space beer" desc = "Contains only water, malt and hops." icon_state = "beer" is_glass = TRUE list_reagents = list("beer" = 30) -/obj/item/reagent_containers/food/drinks/cans/adminbooze +/obj/item/reagent_containers/drinks/cans/adminbooze name = "admin booze" desc = "Bottled Griffon tears. Drink with caution." icon_state = "adminbooze" is_glass = TRUE list_reagents = list("adminordrazine" = 5, "capsaicin" = 5, "methamphetamine"= 20, "thirteenloko" = 20) -/obj/item/reagent_containers/food/drinks/cans/madminmalt +/obj/item/reagent_containers/drinks/cans/madminmalt name = "madmin malt" desc = "Bottled essence of angry admins. Drink with EXTREME caution." icon_state = "madminmalt" is_glass = TRUE list_reagents = list("hell_water" = 20, "neurotoxin" = 15, "thirteenloko" = 15) -/obj/item/reagent_containers/food/drinks/cans/badminbrew +/obj/item/reagent_containers/drinks/cans/badminbrew name = "badmin brew" desc = "Bottled trickery and terrible admin work. Probably shouldn't drink this one at all." icon_state = "badminbrew" is_glass = TRUE list_reagents = list("mutagen" = 25, "charcoal" = 10, "thirteenloko" = 15) -/obj/item/reagent_containers/food/drinks/cans/ale +/obj/item/reagent_containers/drinks/cans/ale name = "Magm-Ale" desc = "A true dorf's drink of choice." icon_state = "alebottle" @@ -201,82 +201,82 @@ is_glass = TRUE list_reagents = list("ale" = 30) -/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind +/obj/item/reagent_containers/drinks/cans/space_mountain_wind name = "Space Mountain Wind" desc = "Blows right through you like a space wind." icon_state = "space_mountain_wind" list_reagents = list("spacemountainwind" = 30) -/obj/item/reagent_containers/food/drinks/cans/thirteenloko +/obj/item/reagent_containers/drinks/cans/thirteenloko name = "Thirteen Loko" desc = "The CMO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkenness, or even death. Please Drink Responsibly." icon_state = "thirteen_loko" list_reagents = list("thirteenloko" = 25, "psilocybin" = 5) -/obj/item/reagent_containers/food/drinks/cans/dr_gibb +/obj/item/reagent_containers/drinks/cans/dr_gibb name = "Dr. Gibb" desc = "A delicious mixture of 42 different flavors." icon_state = "dr_gibb" list_reagents = list("dr_gibb" = 30) -/obj/item/reagent_containers/food/drinks/cans/starkist +/obj/item/reagent_containers/drinks/cans/starkist name = "Star-kist" desc = "The taste of a star in liquid form. And, a bit of tuna...?" icon_state = "starkist" list_reagents = list("brownstar" = 30) -/obj/item/reagent_containers/food/drinks/cans/space_up +/obj/item/reagent_containers/drinks/cans/space_up name = "Space-Up" desc = "Tastes like a hull breach in your mouth." icon_state = "space-up" list_reagents = list("space_up" = 30) -/obj/item/reagent_containers/food/drinks/cans/lemon_lime +/obj/item/reagent_containers/drinks/cans/lemon_lime name = "Lemon-Lime" desc = "You wanted ORANGE. It gave you Lemon Lime." icon_state = "lemon-lime" list_reagents = list("lemon_lime" = 30) -/obj/item/reagent_containers/food/drinks/cans/iced_tea +/obj/item/reagent_containers/drinks/cans/iced_tea name = "Vrisk Serket Iced Tea" desc = "That sweet, refreshing southern earthy flavor. That's where it's from, right? South Earth?" icon_state = "ice_tea_can" list_reagents = list("icetea" = 30) -/obj/item/reagent_containers/food/drinks/cans/grape_juice +/obj/item/reagent_containers/drinks/cans/grape_juice name = "Grapel Juice" desc = "500 pages of rules of how to appropriately enter into a combat with this juice!" icon_state = "purple_can" list_reagents = list("grapejuice" = 30) -/obj/item/reagent_containers/food/drinks/cans/tonic +/obj/item/reagent_containers/drinks/cans/tonic name = "T-Borg's Tonic Water" desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." icon_state = "tonic" list_reagents = list("tonic" = 50) -/obj/item/reagent_containers/food/drinks/cans/sodawater +/obj/item/reagent_containers/drinks/cans/sodawater name = "soda water" desc = "A can of soda water. Still water's more refreshing cousin." icon_state = "sodawater" list_reagents = list("sodawater" = 50) -/obj/item/reagent_containers/food/drinks/cans/synthanol +/obj/item/reagent_containers/drinks/cans/synthanol name = "Beep's Classic Synthanol" desc = "A can of IPC booze, however that works." icon_state = "synthanolcan" list_reagents = list("synthanol" = 50) -/obj/item/reagent_containers/food/drinks/cans/bottler +/obj/item/reagent_containers/drinks/cans/bottler name = "generic beverage container" desc = "this shouldn't ever be spawned. shame on you" icon_state = "glass_bottle" -/obj/item/reagent_containers/food/drinks/cans/bottler/on_reagent_change() +/obj/item/reagent_containers/drinks/cans/bottler/on_reagent_change() update_icon(UPDATE_OVERLAYS) -/obj/item/reagent_containers/food/drinks/cans/bottler/update_overlays() +/obj/item/reagent_containers/drinks/cans/bottler/update_overlays() . = ..() if(reagents.total_volume) var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10") @@ -298,19 +298,19 @@ filling.icon += mix_color_from_reagents(reagents.reagent_list) . += filling -/obj/item/reagent_containers/food/drinks/cans/bottler/glass_bottle +/obj/item/reagent_containers/drinks/cans/bottler/glass_bottle name = "glass bottle" desc = "A glass bottle suitable for beverages." icon_state = "glass_bottle" is_glass = TRUE -/obj/item/reagent_containers/food/drinks/cans/bottler/plastic_bottle +/obj/item/reagent_containers/drinks/cans/bottler/plastic_bottle name = "plastic bottle" desc = "A plastic bottle suitable for beverages." icon_state = "plastic_bottle" is_plastic = TRUE -/obj/item/reagent_containers/food/drinks/cans/bottler/metal_can +/obj/item/reagent_containers/drinks/cans/bottler/metal_can name = "metal can" desc = "A metal can suitable for beverages." icon_state = "metal_can" diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm index 5ba474cf76e5..35f67923976e 100644 --- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm @@ -1,6 +1,6 @@ -/obj/item/reagent_containers/food/drinks/drinkingglass +/obj/item/reagent_containers/drinks/drinkingglass name = "glass" desc = "Your standard drinking glass." icon_state = "glass_empty" @@ -15,9 +15,9 @@ drop_sound = 'sound/items/handling/drinkglass_drop.ogg' pickup_sound = 'sound/items/handling/drinkglass_pickup.ogg' -/obj/item/reagent_containers/food/drinks/drinkingglass/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers/food/snacks/egg)) //breaking eggs - var/obj/item/reagent_containers/food/snacks/egg/E = I +/obj/item/reagent_containers/drinks/drinkingglass/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/food/snacks/egg)) //breaking eggs + var/obj/item/food/snacks/egg/E = I if(reagents) if(reagents.total_volume >= reagents.maximum_volume) to_chat(user, "[src] is full.") @@ -29,16 +29,16 @@ else ..() -/obj/item/reagent_containers/food/drinks/drinkingglass/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) +/obj/item/reagent_containers/drinks/drinkingglass/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) if(!reagents.total_volume) return ..() -/obj/item/reagent_containers/food/drinks/drinkingglass/burn() +/obj/item/reagent_containers/drinks/drinkingglass/burn() reagents.clear_reagents() extinguish() -/obj/item/reagent_containers/food/drinks/drinkingglass/on_reagent_change() +/obj/item/reagent_containers/drinks/drinkingglass/on_reagent_change() overlays.Cut() if(reagents.reagent_list.len) var/datum/reagent/R = reagents.get_master_reagent() @@ -56,15 +56,15 @@ desc = "Your standard drinking glass." // for /obj/machinery/economy/vending/sovietsoda -/obj/item/reagent_containers/food/drinks/drinkingglass/soda +/obj/item/reagent_containers/drinks/drinkingglass/soda list_reagents = list("sodawater" = 50) -/obj/item/reagent_containers/food/drinks/drinkingglass/cola +/obj/item/reagent_containers/drinks/drinkingglass/cola list_reagents = list("cola" = 50) -/obj/item/reagent_containers/food/drinks/drinkingglass/devilskiss +/obj/item/reagent_containers/drinks/drinkingglass/devilskiss list_reagents = list("devilskiss" = 50) -/obj/item/reagent_containers/food/drinks/drinkingglass/alliescocktail +/obj/item/reagent_containers/drinks/drinkingglass/alliescocktail list_reagents = list("alliescocktail" = 25, "omnizine" = 25) diff --git a/code/modules/food_and_drinks/drinks/drinks/mugs.dm b/code/modules/food_and_drinks/drinks/drinks/mugs.dm index 5238d8a88742..637ed8ec646d 100644 --- a/code/modules/food_and_drinks/drinks/drinks/mugs.dm +++ b/code/modules/food_and_drinks/drinks/drinks/mugs.dm @@ -1,5 +1,5 @@ -/obj/item/reagent_containers/food/drinks/mug +/obj/item/reagent_containers/drinks/mug name = "coffee mug" desc = "A mug for sipping hot beverages out of." icon = 'icons/obj/mugs.dmi' @@ -7,7 +7,7 @@ var/novelty = FALSE var/preset = FALSE -/obj/item/reagent_containers/food/drinks/mug/novelty +/obj/item/reagent_containers/drinks/mug/novelty name = "novelty coffee mug" desc = "A fun mug for your coffee or other hot beverage!" novelty = TRUE @@ -86,7 +86,7 @@ description = "So mesmerizing!" state = "mug_rainbow" -/obj/item/reagent_containers/food/drinks/mug/Initialize(mapload) +/obj/item/reagent_containers/drinks/mug/Initialize(mapload) . = ..() if(preset) return @@ -99,73 +99,73 @@ else icon_state = pick("mug_black", "mug_white", "mug_red", "mug_blue", "mug_green", "mug_pink") -/obj/item/reagent_containers/food/drinks/mug/eng +/obj/item/reagent_containers/drinks/mug/eng name = "engineer's mug" desc = "A mug engineered to hold your beverage... IN SPACE!" icon_state = "mug_eng" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/med +/obj/item/reagent_containers/drinks/mug/med name = "doctor's mug" desc = "A mug that can hold the cure for what ails you!" icon_state = "mug_med" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/sci +/obj/item/reagent_containers/drinks/mug/sci name = "scientist's mug" desc = "Nothing fuels research like a coffee mug... or grant money!" icon_state = "mug_sci" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/sec +/obj/item/reagent_containers/drinks/mug/sec name = "officer's mug" desc = "The perfect partner for a sprinkled donut or stunbaton!" icon_state = "mug_sec" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/serv +/obj/item/reagent_containers/drinks/mug/serv name = "crewmember's mug" desc = "Serve your thirst better than you serve the rest of the crew!" icon_state = "mug_serv" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/ce +/obj/item/reagent_containers/drinks/mug/ce name = "chief engineer's mug" desc = "Broken and welded back together countless times, just like the station! Probably microwave safe." icon_state = "mug_ce" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/hos +/obj/item/reagent_containers/drinks/mug/hos name = "head of security's mug" desc = "If only your officers were as robust as this coffee's flavor!" icon_state = "mug_hos" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/rd +/obj/item/reagent_containers/drinks/mug/rd name = "research director's mug" desc = "Energy tech level: 99" icon_state = "mug_rd" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/cmo +/obj/item/reagent_containers/drinks/mug/cmo name = "chief medical officer's mug" desc = "Fill it with something to keep you awake while you try to keep the crew alive." icon_state = "mug_cmo" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/qm +/obj/item/reagent_containers/drinks/mug/qm name = "quartermaster's mug" desc = "A newly imported mug, express delivery." icon_state = "mug_qm" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/hop +/obj/item/reagent_containers/drinks/mug/hop name = "head of personnel's mug" desc = "Are the stains on the bottom coffee or ink?" icon_state = "mug_hop" preset = TRUE -/obj/item/reagent_containers/food/drinks/mug/cap +/obj/item/reagent_containers/drinks/mug/cap name = "captain's mug" desc = "An inscription on the side reads \"Best Captain 2559\"... The last time the station had a worthy captain." icon_state = "mug_cap" diff --git a/code/modules/food_and_drinks/drinks/drinks/shotglass.dm b/code/modules/food_and_drinks/drinks/drinks/shotglass.dm index c181349498b1..5947abb4a527 100644 --- a/code/modules/food_and_drinks/drinks/drinks/shotglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/shotglass.dm @@ -1,4 +1,4 @@ -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass +/obj/item/reagent_containers/drinks/drinkingglass/shotglass name = "shot glass" desc = "No glasses were shot in the making of this glass." icon_state = "shotglass" @@ -10,14 +10,14 @@ light_color = LIGHT_COLOR_LIGHTBLUE resistance_flags = FLAMMABLE -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/bluespace +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/bluespace name = "bluespace shot glass" desc = "For when you need to make the Bartender's life extra hell." amount_per_transfer_from_this = 50 volume = 50 icon_state = "bluespaceshotglass" -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/bluespace/update_name() +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/bluespace/update_name() . = ..() if(reagents.total_volume) name = "bluespace shot glass of " + reagents.get_master_reagent_name() //No matter what, the glass will tell you the reagent's name. Might be too abusable in the future. @@ -26,12 +26,12 @@ else name = "bluespace shot glass" -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/on_reagent_change() +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/on_reagent_change() if(!isShotFlammable() && (resistance_flags & ON_FIRE)) extinguish() update_appearance(UPDATE_NAME|UPDATE_OVERLAYS) -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/update_name() +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/update_name() . = ..() if(reagents.total_volume) name = "shot glass of " + reagents.get_master_reagent_name() //No matter what, the glass will tell you the reagent's name. Might be too abusable in the future. @@ -40,7 +40,7 @@ else name = "shot glass" -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/update_overlays() +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/update_overlays() . = ..() if(reagents.total_volume) var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]1") @@ -56,7 +56,7 @@ filling.icon += mix_color_from_reagents(reagents.reagent_list) . += filling -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/proc/clumsilyDrink(mob/living/carbon/human/user) //Clowns beware +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/proc/clumsilyDrink(mob/living/carbon/human/user) //Clowns beware if(!(resistance_flags & ON_FIRE)) return user.visible_message("[user] pours [src] all over [user.p_themselves()]!", "You pour [src] all over yourself!", "You hear a 'whoompf' and a sizzle.") @@ -65,14 +65,14 @@ reagents.clear_reagents() user.IgniteMob() -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/proc/isShotFlammable() +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/proc/isShotFlammable() var/datum/reagent/R = reagents.get_master_reagent() if(istype(R, /datum/reagent/consumable/ethanol)) var/datum/reagent/consumable/ethanol/A = R if(A.volume >= 5 && A.alcohol_perc >= 0.35) //Only an approximation to if something's flammable but it will do return TRUE -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = FALSE) +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = FALSE) if(!isShotFlammable() || (resistance_flags & ON_FIRE)) //You can't light a shot that's not flammable! return ..() @@ -80,31 +80,31 @@ visible_message("[src] begins to burn with a blue hue!") update_appearance(UPDATE_NAME|UPDATE_OVERLAYS) -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/extinguish(silent = FALSE) +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/extinguish(silent = FALSE) ..() set_light(0) if(!silent) visible_message("The dancing flame on [src] dies out.") update_appearance(UPDATE_NAME|UPDATE_OVERLAYS) -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/burn() //Let's override fire deleting the reagents inside the shot +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/burn() //Let's override fire deleting the reagents inside the shot return -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/attack(mob/living/carbon/human/user) +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/attack(mob/living/carbon/human/user) if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50) && (resistance_flags & ON_FIRE)) clumsilyDrink(user) else ..() -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/attackby(obj/item/W) +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/attackby(obj/item/W) ..() if(W.get_heat()) fire_act() -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/attack_hand(mob/user, pickupfireoverride = TRUE) +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/attack_hand(mob/user, pickupfireoverride = TRUE) ..() -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/attack_self(mob/living/carbon/human/user) +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/attack_self(mob/living/carbon/human/user) ..() if(!(resistance_flags & ON_FIRE)) return @@ -114,7 +114,7 @@ user.visible_message("[user] places [user.p_their()] hand over [src] to put it out!", "You use your hand to extinguish [src]!") extinguish() -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/MouseDrop(mob/living/carbon/human/user) +/obj/item/reagent_containers/drinks/drinkingglass/shotglass/MouseDrop(mob/living/carbon/human/user) if(!ishuman(user)) return if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50) && (resistance_flags & ON_FIRE)) diff --git a/code/modules/food_and_drinks/drinks/drinks_base.dm b/code/modules/food_and_drinks/drinks/drinks_base.dm index bb7d7365c629..3ad002ed0ee5 100644 --- a/code/modules/food_and_drinks/drinks/drinks_base.dm +++ b/code/modules/food_and_drinks/drinks/drinks_base.dm @@ -1,30 +1,23 @@ //////////////////////////////////////////////////////////////////////////////// /// Drinks. //////////////////////////////////////////////////////////////////////////////// -/obj/item/reagent_containers/food/drinks +/obj/item/reagent_containers/drinks name = "drink" desc = "yummy" icon = 'icons/obj/drinks.dmi' icon_state = null container_type = OPENCONTAINER - consume_sound = 'sound/items/drink.ogg' possible_transfer_amounts = list(5,10,15,20,25,30,50) visible_transfer_rate = TRUE volume = 50 resistance_flags = NONE - antable = FALSE + var/consume_sound = 'sound/items/drink.ogg' var/chugging = FALSE -/obj/item/reagent_containers/food/drinks/Initialize(mapload) - . = ..() - bitesize = amount_per_transfer_from_this - if(bitesize < 5) - bitesize = 5 - -/obj/item/reagent_containers/food/drinks/attack_self(mob/user) +/obj/item/reagent_containers/drinks/attack_self(mob/user) return -/obj/item/reagent_containers/food/drinks/attack(mob/M, mob/user, def_zone) +/obj/item/reagent_containers/drinks/attack(mob/M, mob/user, def_zone) if(!reagents || !reagents.total_volume) to_chat(user, " None of [src] left, oh no!") return FALSE @@ -35,11 +28,11 @@ if(iscarbon(M)) var/mob/living/carbon/C = M - if(C.eat(src, user)) + if(C.drink(src, user)) return TRUE return FALSE -/obj/item/reagent_containers/food/drinks/MouseDrop(atom/over_object) //CHUG! CHUG! CHUG! +/obj/item/reagent_containers/drinks/MouseDrop(atom/over_object) //CHUG! CHUG! CHUG! if(!iscarbon(over_object)) return var/mob/living/carbon/chugger = over_object @@ -61,7 +54,7 @@ break chugging = FALSE -/obj/item/reagent_containers/food/drinks/afterattack(obj/target, mob/user, proximity) +/obj/item/reagent_containers/drinks/afterattack(obj/target, mob/user, proximity) if(!proximity) return if(chugging) @@ -96,7 +89,7 @@ return FALSE -/obj/item/reagent_containers/food/drinks/examine(mob/user) +/obj/item/reagent_containers/drinks/examine(mob/user) . = ..() if(in_range(user, src)) if(!reagents || reagents.total_volume == 0) @@ -115,7 +108,7 @@ /// Drinks. END //////////////////////////////////////////////////////////////////////////////// -/obj/item/reagent_containers/food/drinks/trophy +/obj/item/reagent_containers/drinks/trophy name = "pewter cup" desc = "Everyone gets a trophy." icon_state = "pewter_cup" @@ -130,7 +123,7 @@ container_type = OPENCONTAINER resistance_flags = FIRE_PROOF -/obj/item/reagent_containers/food/drinks/trophy/gold_cup +/obj/item/reagent_containers/drinks/trophy/gold_cup name = "gold cup" desc = "You're winner!" icon_state = "golden_cup" @@ -141,7 +134,7 @@ materials = list(MAT_GOLD=1000) volume = 150 -/obj/item/reagent_containers/food/drinks/trophy/silver_cup +/obj/item/reagent_containers/drinks/trophy/silver_cup name = "silver cup" desc = "Best loser!" icon_state = "silver_cup" @@ -152,7 +145,7 @@ materials = list(MAT_SILVER=800) volume = 100 -/obj/item/reagent_containers/food/drinks/trophy/bronze_cup +/obj/item/reagent_containers/drinks/trophy/bronze_cup name = "bronze cup" desc = "At least you ranked!" icon_state = "bronze_cup" @@ -163,7 +156,7 @@ materials = list(MAT_METAL=400) volume = 25 -/obj/item/reagent_containers/food/drinks/trophy/bronze_cup/toolbox_win //2023 toolbox tournament 3rd place went to paradise station. +/obj/item/reagent_containers/drinks/trophy/bronze_cup/toolbox_win //2023 toolbox tournament 3rd place went to paradise station. name = "3rd place toolbox tournament 2567" desc = "Awarded to centcomms elite toolbox warriors raising money for the GBS research institute." icon_state = "reward_cup" @@ -176,39 +169,39 @@ // Formatting is the same as food. -/obj/item/reagent_containers/food/drinks/coffee +/obj/item/reagent_containers/drinks/coffee name = "Robust Coffee" desc = "Careful, the beverage you're about to enjoy is extremely hot." icon_state = "coffee" list_reagents = list("coffee" = 30) resistance_flags = FREEZE_PROOF -/obj/item/reagent_containers/food/drinks/ice +/obj/item/reagent_containers/drinks/ice name = "ice cup" desc = "Careful, cold ice, do not chew." icon_state = "icecup" list_reagents = list("ice" = 30) -/obj/item/reagent_containers/food/drinks/tea +/obj/item/reagent_containers/drinks/tea name = "Duke Purple tea" desc = "An insult to Duke Purple is an insult to the Space Queen! Any proper gentleman will fight you, if you sully this tea." icon_state = "teacup" item_state = "coffee" list_reagents = list("tea" = 30) -/obj/item/reagent_containers/food/drinks/tea/Initialize(mapload) +/obj/item/reagent_containers/drinks/tea/Initialize(mapload) . = ..() if(prob(20)) reagents.add_reagent("mugwort", 3) -/obj/item/reagent_containers/food/drinks/mugwort +/obj/item/reagent_containers/drinks/mugwort name = "mugwort tea" desc = "A bitter herbal tea." icon_state = "manlydorfglass" item_state = "coffee" list_reagents = list("mugwort" = 30) -/obj/item/reagent_containers/food/drinks/h_chocolate +/obj/item/reagent_containers/drinks/h_chocolate name = "Dutch hot coco" desc = "Made in Space South America." icon_state = "hot_coco" @@ -216,7 +209,7 @@ list_reagents = list("hot_coco" = 30, "sugar" = 5) resistance_flags = FREEZE_PROOF -/obj/item/reagent_containers/food/drinks/chocolate +/obj/item/reagent_containers/drinks/chocolate name = "hot chocolate" desc = "Made in Space Switzerland." icon_state = "hot_coco" @@ -224,32 +217,32 @@ list_reagents = list("hot_coco" = 15, "chocolate" = 6, "water" = 9) resistance_flags = FREEZE_PROOF -/obj/item/reagent_containers/food/drinks/weightloss +/obj/item/reagent_containers/drinks/weightloss name = "weight-loss shake" desc = "A shake designed to cause weight loss, now in a berry-flavored formulation. The package proudly proclaims that it is 'tapeworm free.'" icon_state = "weightshake" list_reagents = list("lipolicide" = 30, "berryjuice" = 5) -/obj/item/reagent_containers/food/drinks/dry_ramen +/obj/item/reagent_containers/drinks/dry_ramen name = "cup ramen" desc = "Just add 10ml of water, self heats! A taste that reminds you of your school years." icon_state = "ramen" item_state = "ramen" list_reagents = list("dry_ramen" = 30) -/obj/item/reagent_containers/food/drinks/dry_ramen/Initialize(mapload) +/obj/item/reagent_containers/drinks/dry_ramen/Initialize(mapload) . = ..() if(prob(20)) reagents.add_reagent("enzyme", 3) -/obj/item/reagent_containers/food/drinks/chicken_soup +/obj/item/reagent_containers/drinks/chicken_soup name = "canned chicken soup" desc = "A delicious and soothing can of chicken noodle soup; just like spessmom used to microwave it." icon_state = "soupcan" item_state = "soupcan" list_reagents = list("chicken_soup" = 30) -/obj/item/reagent_containers/food/drinks/sillycup +/obj/item/reagent_containers/drinks/sillycup name = "paper cup" desc = "A paper water cup." icon_state = "water_cup_e" @@ -257,7 +250,7 @@ possible_transfer_amounts = null volume = 10 -/obj/item/reagent_containers/food/drinks/sillycup/on_reagent_change() +/obj/item/reagent_containers/drinks/sillycup/on_reagent_change() if(reagents.total_volume) icon_state = "water_cup" else @@ -268,7 +261,7 @@ // itself), in Chemistry-Recipes.dm (for the reaction that changes the components into the drink), and here (for the drinking glass // icon states. -/obj/item/reagent_containers/food/drinks/shaker +/obj/item/reagent_containers/drinks/shaker name = "shaker" desc = "A metal shaker to mix drinks in." icon_state = "shaker" @@ -279,11 +272,11 @@ COOLDOWN_DECLARE(shaking_cooldown) -/obj/item/reagent_containers/food/drinks/shaker/Initialize(mapload) +/obj/item/reagent_containers/drinks/shaker/Initialize(mapload) . = ..() reagents.set_reacting(FALSE) -/obj/item/reagent_containers/food/drinks/shaker/attack_self(mob/user) +/obj/item/reagent_containers/drinks/shaker/attack_self(mob/user) if(!reagents.total_volume) to_chat(user, "You won't shake an empty shaker now, will you?") return @@ -313,54 +306,54 @@ shaking = FALSE reagents.set_reacting(FALSE) -/obj/item/reagent_containers/food/drinks/shaker/dropped(mob/user) +/obj/item/reagent_containers/drinks/shaker/dropped(mob/user) . = ..() icon_state = "shaker" -/obj/item/reagent_containers/food/drinks/flask +/obj/item/reagent_containers/drinks/flask name = "flask" desc = "Every good spaceman knows it's a good idea to bring along a couple of pints of whiskey wherever they go." icon_state = "flask" materials = list(MAT_METAL=250) volume = 60 -/obj/item/reagent_containers/food/drinks/flask/barflask +/obj/item/reagent_containers/drinks/flask/barflask name = "flask" desc = "For those who can't be bothered to hang out at the bar to drink." icon_state = "barflask" -/obj/item/reagent_containers/food/drinks/flask/gold +/obj/item/reagent_containers/drinks/flask/gold name = "captain's flask" desc = "A gold flask belonging to the captain." icon_state = "flask_gold" materials = list(MAT_GOLD=500) -/obj/item/reagent_containers/food/drinks/flask/detflask +/obj/item/reagent_containers/drinks/flask/detflask name = "detective's flask" desc = "The detective's only true friend." icon_state = "detflask" list_reagents = list("whiskey" = 30) -/obj/item/reagent_containers/food/drinks/flask/hand_made +/obj/item/reagent_containers/drinks/flask/hand_made name = "handmade flask" desc = "A wooden flask with a silver lid and bottom. It has a matte, dark blue paint on it with the initials \"W.H.\" etched in black." icon = 'icons/obj/custom_items.dmi' icon_state = "williamhackett" materials = list() -/obj/item/reagent_containers/food/drinks/flask/thermos +/obj/item/reagent_containers/drinks/flask/thermos name = "vintage thermos" desc = "An older thermos with a faint shine." icon_state = "thermos" volume = 50 -/obj/item/reagent_containers/food/drinks/flask/shiny +/obj/item/reagent_containers/drinks/flask/shiny name = "shiny flask" desc = "A shiny metal flask. It appears to have a Greek symbol inscribed on it." icon_state = "shinyflask" volume = 50 -/obj/item/reagent_containers/food/drinks/flask/lithium +/obj/item/reagent_containers/drinks/flask/lithium name = "lithium flask" desc = "A flask with a Lithium Atom symbol on it." icon = 'icons/obj/custom_items.dmi' @@ -368,30 +361,30 @@ volume = 50 -/obj/item/reagent_containers/food/drinks/britcup +/obj/item/reagent_containers/drinks/britcup name = "cup" desc = "A cup with the british flag emblazoned on it." icon_state = "britcup" volume = 30 -/obj/item/reagent_containers/food/drinks/bag +/obj/item/reagent_containers/drinks/bag name = "drink bag" desc = "Normally put in wine boxes, or down pants at stadium events." icon_state = "goonbag" volume = 70 -/obj/item/reagent_containers/food/drinks/bag/goonbag +/obj/item/reagent_containers/drinks/bag/goonbag name = "goon from a Blue Toolbox special edition" desc = "Wine from the land down under, where the dingos roam and the roos do wander." icon_state = "goonbag" list_reagents = list("wine" = 70) -/obj/item/reagent_containers/food/drinks/oilcan +/obj/item/reagent_containers/drinks/oilcan name = "oil can" desc = "Contains oil intended for use on cyborgs, robots, and other synthetics." icon = 'icons/goonstation/objects/oil.dmi' icon_state = "oilcan" volume = 100 -/obj/item/reagent_containers/food/drinks/oilcan/full +/obj/item/reagent_containers/drinks/oilcan/full list_reagents = list("oil" = 100) diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm index 69128c5d568b..01c99264ebf0 100644 --- a/code/modules/food_and_drinks/food/condiment.dm +++ b/code/modules/food_and_drinks/food/condiment.dm @@ -5,7 +5,7 @@ // to mixed-drinks code. If you want an object that starts pre-loaded, you need to make it in addition to the other code. //Food items that aren't eaten normally and leave an empty container behind. -/obj/item/reagent_containers/food/condiment +/obj/item/reagent_containers/condiment name = "condiment container" desc = "Just your average condiment container." icon = 'icons/obj/food/containers.dmi' @@ -38,10 +38,10 @@ "rice" = list("rice", "rice sack", "A big bag of rice. Good for cooking!")) var/originalname = "condiment" //Can't use initial(name) for this. This stores the name set by condimasters. -/obj/item/reagent_containers/food/condiment/attack_self(mob/user) +/obj/item/reagent_containers/condiment/attack_self(mob/user) return -/obj/item/reagent_containers/food/condiment/attack(mob/M, mob/user, def_zone) +/obj/item/reagent_containers/condiment/attack(mob/M, mob/user, def_zone) if(!reagents || !reagents.total_volume) to_chat(user, "None of [src] left, oh no!") @@ -68,7 +68,7 @@ playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1) return 1 -/obj/item/reagent_containers/food/condiment/afterattack(obj/target, mob/user , proximity) +/obj/item/reagent_containers/condiment/afterattack(obj/target, mob/user , proximity) if(!proximity) return if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. @@ -85,7 +85,7 @@ to_chat(user, "You fill [src] with [trans] units of the contents of [target].") //Something like a glass or a food item. Player probably wants to transfer TO it. - else if(target.is_drainable() || istype(target, /obj/item/reagent_containers/food/snacks)) + else if(target.is_drainable() || istype(target, /obj/item/food/snacks)) if(!reagents.total_volume) to_chat(user, "[src] is empty!") return @@ -95,7 +95,7 @@ var/trans = reagents.trans_to(target, amount_per_transfer_from_this) to_chat(user, "You transfer [trans] units of the condiment to [target].") -/obj/item/reagent_containers/food/condiment/on_reagent_change() +/obj/item/reagent_containers/condiment/on_reagent_change() if(!possible_states.len) return if(reagents.reagent_list.len > 0) @@ -118,16 +118,16 @@ name = "condiment bottle" desc = "An empty condiment bottle." -/obj/item/reagent_containers/food/condiment/enzyme +/obj/item/reagent_containers/condiment/enzyme name = "universal enzyme" desc = "Used in cooking various dishes." icon_state = "enzyme" list_reagents = list("enzyme" = 50) -/obj/item/reagent_containers/food/condiment/enzyme/cyborg_recharge(coeff, emagged) +/obj/item/reagent_containers/condiment/enzyme/cyborg_recharge(coeff, emagged) reagents.check_and_add("enzyme", volume, 2 * coeff) // Only recharge if the current amount of enzyme is under `volume`. -/obj/item/reagent_containers/food/condiment/sugar +/obj/item/reagent_containers/condiment/sugar name = "sugar sack" desc = "Tasty spacey sugar!" icon_state = "sugar" @@ -135,7 +135,7 @@ list_reagents = list("sugar" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/saltshaker //Seperate from above since it's a small shaker rather then +/obj/item/reagent_containers/condiment/saltshaker //Seperate from above since it's a small shaker rather then name = "salt shaker" // a large one. desc = "Salt. From space oceans, presumably." icon_state = "saltshakersmall" @@ -145,7 +145,7 @@ list_reagents = list("sodiumchloride" = 20) possible_states = list() -/obj/item/reagent_containers/food/condiment/saltshaker/suicide_act(mob/user) +/obj/item/reagent_containers/condiment/saltshaker/suicide_act(mob/user) user.visible_message("[user] begins to swap forms with the salt shaker! It looks like [user.p_theyre()] trying to commit suicide.") var/newname = "[name]" name = "[user.name]" @@ -154,7 +154,7 @@ desc = "Salt. From dead crew, presumably." return BRUTELOSS -/obj/item/reagent_containers/food/condiment/peppermill +/obj/item/reagent_containers/condiment/peppermill name = "pepper mill" desc = "Often used to flavor food or make people sneeze." icon_state = "peppermillsmall" @@ -164,7 +164,7 @@ list_reagents = list("blackpepper" = 20) possible_states = list() -/obj/item/reagent_containers/food/condiment/milk +/obj/item/reagent_containers/condiment/milk name = "space milk" desc = "It's milk. White and nutritious goodness!" icon_state = "milk" @@ -172,7 +172,7 @@ list_reagents = list("milk" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/flour +/obj/item/reagent_containers/condiment/flour name = "flour sack" desc = "A big bag of flour. Good for baking!" icon_state = "flour" @@ -180,14 +180,14 @@ list_reagents = list("flour" = 30) possible_states = list() -/obj/item/reagent_containers/food/condiment/bbqsauce +/obj/item/reagent_containers/condiment/bbqsauce name = "BBQ sauce" desc = "Sweet, smoky, savory, and gets everywhere. Perfect for grilling." icon_state = "bbqsauce" list_reagents = list("bbqsauce" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/soymilk +/obj/item/reagent_containers/condiment/soymilk name = "soy milk" desc = "It's soy milk. White and nutritious goodness!" icon_state = "soymilk" @@ -195,7 +195,7 @@ list_reagents = list("soymilk" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/rice +/obj/item/reagent_containers/condiment/rice name = "rice sack" desc = "A big bag of rice. Good for cooking!" icon_state = "rice" @@ -203,83 +203,83 @@ list_reagents = list("rice" = 30) possible_states = list() -/obj/item/reagent_containers/food/condiment/soysauce +/obj/item/reagent_containers/condiment/soysauce name = "soy sauce" desc = "A salty soy-based flavoring." icon_state = "soysauce" list_reagents = list("soysauce" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/syndisauce +/obj/item/reagent_containers/condiment/syndisauce name = "\improper Chef Excellence's Special Sauce" desc = "A potent sauce extracted from the potent amanita mushrooms. Death never tasted quite so delicious." list_reagents = list("amanitin" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/mayonnaise +/obj/item/reagent_containers/condiment/mayonnaise name = "mayonnaise" desc = "An oily condiment made from egg yolks." icon_state = "mayonnaise" list_reagents = list("mayonnaise" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/cherryjelly +/obj/item/reagent_containers/condiment/cherryjelly name = "cherry jelly" desc = "A sweet jelly made out of red cherries." icon_state = "cherryjelly" list_reagents = list("cherryjelly" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/peanutbutter +/obj/item/reagent_containers/condiment/peanutbutter name = "peanut butter" desc = "A smooth, nutty spread. Perfect for sandwiches." icon_state = "peanutbutter" list_reagents = list("peanutbutter" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/honey +/obj/item/reagent_containers/condiment/honey name = "honey" desc = "A sweet substance produced by bees." icon_state = "honey" list_reagents = list("honey" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/oliveoil +/obj/item/reagent_containers/condiment/oliveoil name = "olive oil" desc = "A high quality oil derived from olives." icon_state = "oliveoil" list_reagents = list("oliveoil" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/frostoil +/obj/item/reagent_containers/condiment/frostoil name = "cold sauce" desc = "A special oil that noticably chills the body. Extraced from Icepeppers." icon_state = "coldsauce" list_reagents = list("frostoil" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/capsaicin +/obj/item/reagent_containers/condiment/capsaicin name = "hot sauce" desc = "You can almost TASTE the stomach ulcers now!" icon_state = "hotsauce" list_reagents = list("capsaicin" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/wasabi +/obj/item/reagent_containers/condiment/wasabi name = "wasabi" desc= "A pungent paste commonly served in tiny amounts with sushi. Spicy!" icon_state = "wasabibottle" list_reagents = list("wasabi" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/vinegar +/obj/item/reagent_containers/condiment/vinegar name = "vinegar" desc = "Useful for pickling, or putting on chips." icon_state = "vinegar" list_reagents = list("vinegar" = 50) possible_states = list() -/obj/item/reagent_containers/food/condiment/ketchup +/obj/item/reagent_containers/condiment/ketchup name = "ketchup" desc = "You feel more American already." icon_state = "ketchup" @@ -288,7 +288,7 @@ //Food packs. To easily apply deadly toxi... delicious sauces to your food! -/obj/item/reagent_containers/food/condiment/pack +/obj/item/reagent_containers/condiment/pack name = "condiment pack" desc = "A small plastic pack with condiments to put on your food." icon_state = "condi_empty" @@ -306,14 +306,14 @@ "sugar" = list("condi_sugar", "Sugar", "Tasty spacey sugar!"), "vinegar" =list("condi_mixed", "vinegar", "Perfect for chips, if you're feeling Space British.")) -/obj/item/reagent_containers/food/condiment/pack/attack(mob/M, mob/user, def_zone) //Can't feed these to people directly. +/obj/item/reagent_containers/condiment/pack/attack(mob/M, mob/user, def_zone) //Can't feed these to people directly. return -/obj/item/reagent_containers/food/condiment/pack/afterattack(obj/target, mob/user , proximity) +/obj/item/reagent_containers/condiment/pack/afterattack(obj/target, mob/user , proximity) if(!proximity) return //You can tear the bag open above food to put the condiments on it, obviously. - if(istype(target, /obj/item/reagent_containers/food/snacks)) + if(istype(target, /obj/item/food/snacks)) if(!reagents.total_volume) to_chat(user, "You tear open [src], but there's nothing in it.") qdel(src) @@ -327,7 +327,7 @@ reagents.trans_to(target, amount_per_transfer_from_this) qdel(src) -/obj/item/reagent_containers/food/condiment/pack/on_reagent_change() +/obj/item/reagent_containers/condiment/pack/on_reagent_change() if(reagents.reagent_list.len > 0) var/main_reagent = reagents.get_master_reagent_id() if(main_reagent in possible_states) @@ -342,13 +342,13 @@ desc = "A small condiment pack. It is empty." //Ketchup -/obj/item/reagent_containers/food/condiment/pack/ketchup +/obj/item/reagent_containers/condiment/pack/ketchup name = "ketchup pack" originalname = "ketchup" list_reagents = list("ketchup" = 10) //Hot sauce -/obj/item/reagent_containers/food/condiment/pack/hotsauce +/obj/item/reagent_containers/condiment/pack/hotsauce name = "hotsauce pack" originalname = "hotsauce" list_reagents = list("capsaicin" = 10) diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index 4dd12564d29e..8d22dd0d9db3 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -1,40 +1,40 @@ #define MAKE_CUSTOM_FOOD(snack_to_add, user, type) \ do {\ - var/obj/item/reagent_containers/food/snacks/customizable/custom_snack = new type(get_turf(user));\ + var/obj/item/food/snacks/customizable/custom_snack = new type(get_turf(user));\ custom_snack.add_ingredient(snack_to_add, user); \ user.put_in_active_hand(custom_snack); \ qdel(src);\ } while(FALSE) -/obj/item/reagent_containers/food/snacks/breadslice/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/reagent_containers/food/snacks) && !(W.flags & NODROP)) - MAKE_CUSTOM_FOOD(W, user, /obj/item/reagent_containers/food/snacks/customizable/sandwich) +/obj/item/food/snacks/breadslice/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/food/snacks) && !(W.flags & NODROP)) + MAKE_CUSTOM_FOOD(W, user, /obj/item/food/snacks/customizable/sandwich) return ..() -/obj/item/reagent_containers/food/snacks/bun/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/reagent_containers/food/snacks) && !(W.flags & NODROP)) - MAKE_CUSTOM_FOOD(W, user, /obj/item/reagent_containers/food/snacks/customizable/burger) +/obj/item/food/snacks/bun/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/food/snacks) && !(W.flags & NODROP)) + MAKE_CUSTOM_FOOD(W, user, /obj/item/food/snacks/customizable/burger) return ..() -/obj/item/reagent_containers/food/snacks/sliceable/flatdough/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/reagent_containers/food/snacks) && !(W.flags & NODROP)) - MAKE_CUSTOM_FOOD(W, user, /obj/item/reagent_containers/food/snacks/customizable/pizza) +/obj/item/food/snacks/sliceable/flatdough/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/food/snacks) && !(W.flags & NODROP)) + MAKE_CUSTOM_FOOD(W, user, /obj/item/food/snacks/customizable/pizza) return ..() -/obj/item/reagent_containers/food/snacks/boiledspaghetti/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/reagent_containers/food/snacks) && !(W.flags & NODROP)) - MAKE_CUSTOM_FOOD(W, user, /obj/item/reagent_containers/food/snacks/customizable/pasta) +/obj/item/food/snacks/boiledspaghetti/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/food/snacks) && !(W.flags & NODROP)) + MAKE_CUSTOM_FOOD(W, user, /obj/item/food/snacks/customizable/pasta) return ..() /obj/item/trash/plate/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/reagent_containers/food/snacks) && !(W.flags & NODROP)) - MAKE_CUSTOM_FOOD(W, user, /obj/item/reagent_containers/food/snacks/customizable/fullycustom) + if(istype(W, /obj/item/food/snacks) && !(W.flags & NODROP)) + MAKE_CUSTOM_FOOD(W, user, /obj/item/food/snacks/customizable/fullycustom) return ..() @@ -47,14 +47,14 @@ do {\ icon_state = "soup" /obj/item/trash/bowl/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers/food/snacks) && !(I.flags & NODROP)) - var/obj/item/reagent_containers/food/snacks/customizable/soup/S = new(get_turf(user)) + if(istype(I, /obj/item/food/snacks) && !(I.flags & NODROP)) + var/obj/item/food/snacks/customizable/soup/S = new(get_turf(user)) S.attackby(I, user, params) qdel(src) else ..() -/obj/item/reagent_containers/food/snacks/customizable +/obj/item/food/snacks/customizable name = "sandwich" desc = "A sandwich! A timeless classic." icon = 'icons/obj/food/custom.dmi' @@ -74,20 +74,20 @@ do {\ var/list/ingredients = list() list_reagents = list("nutriment" = 8) -/obj/item/reagent_containers/food/snacks/customizable/Initialize(mapload) +/obj/item/food/snacks/customizable/Initialize(mapload) . = ..() if(top) top_image = new(icon, "[baseicon]_top") add_overlay(top_image) -/obj/item/reagent_containers/food/snacks/customizable/sandwich +/obj/item/food/snacks/customizable/sandwich name = "sandwich" desc = "A sandwich! A timeless classic." icon_state = "sandwichcustom" baseicon = "sandwichcustom" basename = "sandwich" -/obj/item/reagent_containers/food/snacks/customizable/pizza +/obj/item/food/snacks/customizable/pizza name = "personal pizza" desc = "A personalized pan pizza meant for only one person." icon_state = "personal_pizza" @@ -97,7 +97,7 @@ do {\ top = 0 tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1) -/obj/item/reagent_containers/food/snacks/customizable/pasta +/obj/item/food/snacks/customizable/pasta name = "spaghetti" desc = "Noodles. With stuff. Delicious." icon_state = "pasta_bot" @@ -106,7 +106,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/cook/bread +/obj/item/food/snacks/customizable/cook/bread name = "bread" desc = "Tasty bread." icon_state = "breadcustom" @@ -116,7 +116,7 @@ do {\ top = 0 tastes = list("bread" = 10) -/obj/item/reagent_containers/food/snacks/customizable/cook/pie +/obj/item/food/snacks/customizable/cook/pie name = "pie" desc = "Tasty pie." icon_state = "piecustom" @@ -126,7 +126,7 @@ do {\ top = 0 tastes = list("pie" = 1) -/obj/item/reagent_containers/food/snacks/customizable/cook/cake +/obj/item/food/snacks/customizable/cook/cake name = "cake" desc = "A popular band." icon_state = "cakecustom" @@ -136,7 +136,7 @@ do {\ top = 0 tastes = list("cake" = 1) -/obj/item/reagent_containers/food/snacks/customizable/cook/jelly +/obj/item/food/snacks/customizable/cook/jelly name = "jelly" desc = "Totally jelly." icon_state = "jellycustom" @@ -145,7 +145,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/cook/donkpocket +/obj/item/food/snacks/customizable/cook/donkpocket name = "donk pocket" desc = "You wanna put a bangin-Oh nevermind." icon_state = "donkcustom" @@ -154,7 +154,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/cook/kebab +/obj/item/food/snacks/customizable/cook/kebab name = "kebab" desc = "Kebab or Kabab?" icon_state = "kababcustom" @@ -164,7 +164,7 @@ do {\ top = 0 tastes = list("meat" = 3, "metal" = 1) -/obj/item/reagent_containers/food/snacks/customizable/cook/salad +/obj/item/food/snacks/customizable/cook/salad name = "salad" desc = "Very tasty." icon_state = "saladcustom" @@ -174,7 +174,7 @@ do {\ top = 0 tastes = list("leaves" = 1) -/obj/item/reagent_containers/food/snacks/customizable/cook/waffles +/obj/item/food/snacks/customizable/cook/waffles name = "waffles" desc = "Made with love." icon_state = "wafflecustom" @@ -184,7 +184,7 @@ do {\ top = 0 tastes = list("waffles" = 1) -/obj/item/reagent_containers/food/snacks/customizable/candy/cookie +/obj/item/food/snacks/customizable/candy/cookie name = "cookie" desc = "COOKIE!!1!" icon_state = "cookiecustom" @@ -194,7 +194,7 @@ do {\ top = 0 tastes = list("cookie" = 1) -/obj/item/reagent_containers/food/snacks/customizable/candy/cotton +/obj/item/food/snacks/customizable/candy/cotton name = "flavored cotton candy" desc = "Who can take a sunrise, sprinkle it with dew," icon_state = "cottoncandycustom" @@ -203,7 +203,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/gummybear +/obj/item/food/snacks/customizable/candy/gummybear name = "flavored giant gummy bear" desc = "Cover it in chocolate and a miracle or two," icon_state = "gummybearcustom" @@ -212,7 +212,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/gummyworm +/obj/item/food/snacks/customizable/candy/gummyworm name = "flavored giant gummy worm" desc = "The Candy Man can 'cause he mixes it with love," icon_state = "gummywormcustom" @@ -221,7 +221,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/jellybean +/obj/item/food/snacks/customizable/candy/jellybean name = "flavored giant jelly bean" desc = "And makes the world taste good." icon_state = "jellybeancustom" @@ -230,7 +230,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/jawbreaker +/obj/item/food/snacks/customizable/candy/jawbreaker name = "flavored jawbreaker" desc = "Who can take a rainbow, Wrap it in a sigh," icon_state = "jawbreakercustom" @@ -239,7 +239,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/candycane +/obj/item/food/snacks/customizable/candy/candycane name = "flavored candy cane" desc = "Soak it in the sun and make strawberry-lemon pie," icon_state = "candycanecustom" @@ -248,7 +248,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/gum +/obj/item/food/snacks/customizable/candy/gum name = "flavored gum" desc = "The Candy Man can 'cause he mixes it with love and makes the world taste good. And the world tastes good 'cause the Candy Man thinks it should..." icon_state = "gumcustom" @@ -257,7 +257,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/donut +/obj/item/food/snacks/customizable/candy/donut name = "filled donut" desc = "Donut eat this!" // kill me icon_state = "donutcustom" @@ -266,7 +266,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/bar +/obj/item/food/snacks/customizable/candy/bar name = "flavored chocolate bar" desc = "Made in a factory downtown." icon_state = "barcustom" @@ -275,7 +275,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/sucker +/obj/item/food/snacks/customizable/candy/sucker name = "flavored sucker" desc = "Suck suck suck." icon_state = "suckercustom" @@ -284,7 +284,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/cash +/obj/item/food/snacks/customizable/candy/cash name = "flavored chocolate cash" desc = "I got piles!" icon_state = "cashcustom" @@ -293,7 +293,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/candy/coin +/obj/item/food/snacks/customizable/candy/coin name = "flavored chocolate coin" desc = "Clink, clink, clink." icon_state = "coincustom" @@ -302,7 +302,7 @@ do {\ snack_overlays = 0 top = 0 -/obj/item/reagent_containers/food/snacks/customizable/fullycustom // In the event you fuckers find something I forgot to add a customizable food for. +/obj/item/food/snacks/customizable/fullycustom // In the event you fuckers find something I forgot to add a customizable food for. name = "on a plate" desc = "A unique dish." icon_state = "fullycustom" @@ -313,7 +313,7 @@ do {\ ingredient_limit = 20 fullycustom = 1 -/obj/item/reagent_containers/food/snacks/customizable/soup +/obj/item/food/snacks/customizable/soup name = "soup" desc = "A bowl with liquid and... stuff in it." icon_state = "soup" @@ -325,7 +325,7 @@ do {\ top = 0 tastes = list("soup" = 1) -/obj/item/reagent_containers/food/snacks/customizable/burger +/obj/item/food/snacks/customizable/burger name = "burger bun" desc = "A bun for a burger. Delicious." icon_state = "burgercustom" @@ -334,8 +334,8 @@ do {\ tastes = list("bun" = 4) -/obj/item/reagent_containers/food/snacks/customizable/attackby(obj/item/I, mob/user, params) - if(!istype(I, /obj/item/reagent_containers/food/snacks)) +/obj/item/food/snacks/customizable/attackby(obj/item/I, mob/user, params) + if(!istype(I, /obj/item/food/snacks)) to_chat(user, "[I] isn't exactly something that you would want to eat.") return @@ -347,14 +347,14 @@ do {\ * Arguments: * * snack - The ingredient that will be added */ -/obj/item/reagent_containers/food/snacks/customizable/proc/add_ingredient(obj/item/reagent_containers/food/snacks/snack, mob/user) +/obj/item/food/snacks/customizable/proc/add_ingredient(obj/item/food/snacks/snack, mob/user) if(length(ingredients) > ingredient_limit) to_chat(user, "If you put anything else in or on [src] it's going to make a mess.") return // Fully custom snacks don't add the ingredients. So no need to check - if(!fullycustom && istype(snack, /obj/item/reagent_containers/food/snacks/customizable)) - var/obj/item/reagent_containers/food/snacks/customizable/origin = snack + if(!fullycustom && istype(snack, /obj/item/food/snacks/customizable)) + var/obj/item/food/snacks/customizable/origin = snack if(length(ingredients) + length(origin.ingredients) > ingredient_limit) to_chat(user, "Merging [snack] and [src] together is going to make a mess.") return @@ -369,8 +369,8 @@ do {\ var/list/added_ingredients = list(snack) // Only merge when it is not fullycustom. Else it looks weird - if(!fullycustom && istype(snack, /obj/item/reagent_containers/food/snacks/customizable)) - var/obj/item/reagent_containers/food/snacks/customizable/origin = snack + if(!fullycustom && istype(snack, /obj/item/food/snacks/customizable)) + var/obj/item/food/snacks/customizable/origin = snack added_ingredients += origin.ingredients origin.ingredients.Cut() origin.name = initial(origin.name) // Reset the name for the examine text @@ -387,12 +387,12 @@ do {\ * Arguments: * * new_ingredients - The new ingredients to be added */ -/obj/item/reagent_containers/food/snacks/customizable/proc/add_ingredients(list/new_ingredients) +/obj/item/food/snacks/customizable/proc/add_ingredients(list/new_ingredients) cut_overlay(top_image) // Remove the top image so we can change it again var/ingredient_num = length(ingredients) ingredients += new_ingredients - for(var/obj/item/reagent_containers/food/snacks/food as anything in new_ingredients) + for(var/obj/item/food/snacks/food as anything in new_ingredients) ingredient_num++ var/image/ingredient_image if(!fullycustom) @@ -418,20 +418,20 @@ do {\ add_overlay(top_image) -/obj/item/reagent_containers/food/snacks/customizable/Destroy() +/obj/item/food/snacks/customizable/Destroy() QDEL_LIST_CONTENTS(ingredients) qdel(top_image) return ..() -/obj/item/reagent_containers/food/snacks/customizable/examine(mob/user) +/obj/item/food/snacks/customizable/examine(mob/user) . = ..() if(LAZYLEN(ingredients)) var/whatsinside = pick(ingredients) . += " You think you can see [whatsinside] in there." -/obj/item/reagent_containers/food/snacks/customizable/proc/newname() +/obj/item/food/snacks/customizable/proc/newname() var/unsorteditems[0] var/sorteditems[0] var/unsortedtypes[0] @@ -449,8 +449,8 @@ do {\ continue - if(istype(ing, /obj/item/reagent_containers/food/snacks/customizable)) // split the ingredients into ones with basenames (sandwich, burger, etc) and ones without, keeping track of how many of each there are - var/obj/item/reagent_containers/food/snacks/customizable/gettype = ing + if(istype(ing, /obj/item/food/snacks/customizable)) // split the ingredients into ones with basenames (sandwich, burger, etc) and ones without, keeping track of how many of each there are + var/obj/item/food/snacks/customizable/gettype = ing if(unsortedtypes[gettype.basename]) unsortedtypes[gettype.basename]++ if(unsortedtypes[gettype.basename] > ct) @@ -511,7 +511,7 @@ do {\ sendback = "[pick(list("absurd","colossal","enormous","ridiculous","massive","oversized","cardiac-arresting","pipe-clogging","edible but sickening","sickening","gargantuan","mega","belly-burster","chest-burster"))] [basename]" return sendback -/obj/item/reagent_containers/food/snacks/customizable/proc/sortlist(list/unsorted, highest) +/obj/item/food/snacks/customizable/proc/sortlist(list/unsorted, highest) var/sorted[0] for(var/i = 1, i<= highest, i++) for(var/it in unsorted) diff --git a/code/modules/food_and_drinks/food/foods/baked_goods.dm b/code/modules/food_and_drinks/food/foods/baked_goods.dm index 3cb816deaf6b..a4ab2d626ba3 100644 --- a/code/modules/food_and_drinks/food/foods/baked_goods.dm +++ b/code/modules/food_and_drinks/food/foods/baked_goods.dm @@ -5,19 +5,19 @@ // Cakes // ////////////////////// -/obj/item/reagent_containers/food/snacks/sliceable/carrotcake +/obj/item/food/snacks/sliceable/carrotcake name = "carrot cake" desc = "A favorite desert of a certain wascally wabbit. Not a lie." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "carrotcake" - slice_path = /obj/item/reagent_containers/food/snacks/carrotcakeslice + slice_path = /obj/item/food/snacks/carrotcakeslice slices_num = 5 bitesize = 3 filling_color = "#FFD675" list_reagents = list("nutriment" = 20, "oculine" = 10, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1) -/obj/item/reagent_containers/food/snacks/carrotcakeslice +/obj/item/food/snacks/carrotcakeslice name = "carrot cake slice" desc = "Carrotty slice of Carrot Cake, carrots are good for your eyes! Also not a lie." icon = 'icons/obj/food/bakedgoods.dmi' @@ -27,19 +27,19 @@ tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/braincake +/obj/item/food/snacks/sliceable/braincake name = "brain cake" desc = "A squishy cake-thing." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "braincake" - slice_path = /obj/item/reagent_containers/food/snacks/braincakeslice + slice_path = /obj/item/food/snacks/braincakeslice slices_num = 5 filling_color = "#E6AEDB" bitesize = 3 list_reagents = list("protein" = 10, "nutriment" = 10, "mannitol" = 10, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 2, "brains" = 1) -/obj/item/reagent_containers/food/snacks/braincakeslice +/obj/item/food/snacks/braincakeslice name = "brain cake slice" desc = "Lemme tell you something about brains. THEY'RE DELICIOUS." icon = 'icons/obj/food/bakedgoods.dmi' @@ -48,19 +48,19 @@ filling_color = "#E6AEDB" tastes = list("cake" = 5, "sweetness" = 2, "brains" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/cheesecake +/obj/item/food/snacks/sliceable/cheesecake name = "cheese cake" desc = "DANGEROUSLY cheesy." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "cheesecake" - slice_path = /obj/item/reagent_containers/food/snacks/cheesecakeslice + slice_path = /obj/item/food/snacks/cheesecakeslice slices_num = 5 filling_color = "#FAF7AF" bitesize = 3 list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("cake" = 4, "cream cheese" = 3) -/obj/item/reagent_containers/food/snacks/cheesecakeslice +/obj/item/food/snacks/cheesecakeslice name = "cheese cake slice" desc = "Slice of pure cheestisfaction." icon = 'icons/obj/food/bakedgoods.dmi' @@ -69,19 +69,19 @@ filling_color = "#FAF7AF" tastes = list("cake" = 4, "cream cheese" = 3) -/obj/item/reagent_containers/food/snacks/sliceable/plaincake +/obj/item/food/snacks/sliceable/plaincake name = "vanilla cake" desc = "A plain cake, not a lie." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "plaincake" - slice_path = /obj/item/reagent_containers/food/snacks/plaincakeslice + slice_path = /obj/item/food/snacks/plaincakeslice slices_num = 5 bitesize = 3 filling_color = "#F7EDD5" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("cake" = 5, "vanilla" = 1, "sweetness" = 2) -/obj/item/reagent_containers/food/snacks/plaincakeslice +/obj/item/food/snacks/plaincakeslice name = "vanilla cake slice" desc = "Just a slice of cake, it is enough for everyone." icon = 'icons/obj/food/bakedgoods.dmi' @@ -90,19 +90,19 @@ filling_color = "#F7EDD5" tastes = list("cake" = 5, "vanilla" = 1, "sweetness" = 2) -/obj/item/reagent_containers/food/snacks/sliceable/orangecake +/obj/item/food/snacks/sliceable/orangecake name = "orange cake" desc = "A cake with added orange." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "orangecake" - slice_path = /obj/item/reagent_containers/food/snacks/orangecakeslice + slice_path = /obj/item/food/snacks/orangecakeslice slices_num = 5 bitesize = 3 filling_color = "#FADA8E" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 2, "oranges" = 2) -/obj/item/reagent_containers/food/snacks/orangecakeslice +/obj/item/food/snacks/orangecakeslice name = "orange cake slice" desc = "Just a slice of cake, it is enough for everyone." icon = 'icons/obj/food/bakedgoods.dmi' @@ -111,19 +111,19 @@ filling_color = "#FADA8E" tastes = list("cake" = 5, "sweetness" = 2, "oranges" = 2) -/obj/item/reagent_containers/food/snacks/sliceable/bananacake +/obj/item/food/snacks/sliceable/bananacake name = "banana cake" desc = "A cake with added bananas." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "bananacake" - slice_path = /obj/item/reagent_containers/food/snacks/bananacakeslice + slice_path = /obj/item/food/snacks/bananacakeslice slices_num = 5 bitesize = 3 filling_color = "#FADA8E" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 2, "banana" = 2) -/obj/item/reagent_containers/food/snacks/bananacakeslice +/obj/item/food/snacks/bananacakeslice name = "banana cake slice" desc = "Just a slice of cake, it is enough for everyone." icon = 'icons/obj/food/bakedgoods.dmi' @@ -132,19 +132,19 @@ filling_color = "#FADA8E" tastes = list("cake" = 5, "sweetness" = 2, "banana" = 2) -/obj/item/reagent_containers/food/snacks/sliceable/limecake +/obj/item/food/snacks/sliceable/limecake name = "lime cake" desc = "A cake with added lime." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "limecake" bitesize = 3 - slice_path = /obj/item/reagent_containers/food/snacks/limecakeslice + slice_path = /obj/item/food/snacks/limecakeslice slices_num = 5 filling_color = "#CBFA8E" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2) -/obj/item/reagent_containers/food/snacks/limecakeslice +/obj/item/food/snacks/limecakeslice name = "lime cake slice" desc = "Just a slice of cake, it is enough for everyone." icon = 'icons/obj/food/bakedgoods.dmi' @@ -153,19 +153,19 @@ filling_color = "#CBFA8E" tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2) -/obj/item/reagent_containers/food/snacks/sliceable/lemoncake +/obj/item/food/snacks/sliceable/lemoncake name = "lemon cake" desc = "A cake with added lemon." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "lemoncake" - slice_path = /obj/item/reagent_containers/food/snacks/lemoncakeslice + slice_path = /obj/item/food/snacks/lemoncakeslice slices_num = 5 bitesize = 3 filling_color = "#FAFA8E" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2) -/obj/item/reagent_containers/food/snacks/lemoncakeslice +/obj/item/food/snacks/lemoncakeslice name = "lemon cake slice" desc = "Just a slice of cake, it is enough for everyone." icon = 'icons/obj/food/bakedgoods.dmi' @@ -174,19 +174,19 @@ filling_color = "#FAFA8E" tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2) -/obj/item/reagent_containers/food/snacks/sliceable/chocolatecake +/obj/item/food/snacks/sliceable/chocolatecake name = "chocolate cake" desc = "A cake with added chocolate." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "chocolatecake" - slice_path = /obj/item/reagent_containers/food/snacks/chocolatecakeslice + slice_path = /obj/item/food/snacks/chocolatecakeslice slices_num = 5 bitesize = 3 filling_color = "#805930" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4) -/obj/item/reagent_containers/food/snacks/chocolatecakeslice +/obj/item/food/snacks/chocolatecakeslice name = "chocolate cake slice" desc = "Just a slice of cake, it is enough for everyone." icon = 'icons/obj/food/bakedgoods.dmi' @@ -195,19 +195,19 @@ filling_color = "#805930" tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4) -/obj/item/reagent_containers/food/snacks/sliceable/birthdaycake +/obj/item/food/snacks/sliceable/birthdaycake name = "birthday cake" desc = "Happy Birthday..." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "birthdaycake" - slice_path = /obj/item/reagent_containers/food/snacks/birthdaycakeslice + slice_path = /obj/item/food/snacks/birthdaycakeslice slices_num = 5 filling_color = "#FFD6D6" bitesize = 3 list_reagents = list("nutriment" = 20, "sprinkles" = 10, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 1) -/obj/item/reagent_containers/food/snacks/birthdaycakeslice +/obj/item/food/snacks/birthdaycakeslice name = "birthday cake slice" desc = "A slice of your birthday" icon = 'icons/obj/food/bakedgoods.dmi' @@ -216,19 +216,19 @@ filling_color = "#FFD6D6" tastes = list("cake" = 5, "sweetness" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/applecake +/obj/item/food/snacks/sliceable/applecake name = "apple cake" desc = "A cake centered with Apple." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "applecake" - slice_path = /obj/item/reagent_containers/food/snacks/applecakeslice + slice_path = /obj/item/food/snacks/applecakeslice slices_num = 5 bitesize = 3 filling_color = "#EBF5B8" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 1, "apple" = 1) -/obj/item/reagent_containers/food/snacks/applecakeslice +/obj/item/food/snacks/applecakeslice name = "apple cake slice" desc = "A slice of heavenly cake." icon = 'icons/obj/food/bakedgoods.dmi' @@ -242,7 +242,7 @@ // Cookies // ////////////////////// -/obj/item/reagent_containers/food/snacks/cookie +/obj/item/food/snacks/cookie name = "cookie" desc = "COOKIE!!!" icon = 'icons/obj/food/bakedgoods.dmi' @@ -252,7 +252,7 @@ list_reagents = list("nutriment" = 1, "sugar" = 3, "hot_coco" = 5 ) tastes = list("cookie" = 1, "crunchy chocolate" = 1) -/obj/item/reagent_containers/food/snacks/fortunecookie +/obj/item/food/snacks/fortunecookie name = "fortune cookie" desc = "A true prophecy in each cookie!" icon = 'icons/obj/food/bakedgoods.dmi' @@ -262,7 +262,7 @@ trash = /obj/item/paper/fortune tastes = list("cookie" = 1) -/obj/item/reagent_containers/food/snacks/sugarcookie +/obj/item/food/snacks/sugarcookie name = "sugar cookie" desc = "Just like your little sister used to make." icon = 'icons/obj/food/bakedgoods.dmi' @@ -275,7 +275,7 @@ // Pies // ////////////////////// -/obj/item/reagent_containers/food/snacks/pie +/obj/item/food/snacks/pie name = "banana cream pie" desc = "One of the five essential food groups of clowns." icon = 'icons/obj/food/bakedgoods.dmi' @@ -286,13 +286,13 @@ list_reagents = list("nutriment" = 6, "banana" = 5, "vitamin" = 2) tastes = list("pie" = 1) -/obj/item/reagent_containers/food/snacks/pie/throw_impact(atom/hit_atom) +/obj/item/food/snacks/pie/throw_impact(atom/hit_atom) ..() new/obj/effect/decal/cleanable/pie_smudge(loc) visible_message("[src] splats.","You hear a splat.") qdel(src) -/obj/item/reagent_containers/food/snacks/meatpie +/obj/item/food/snacks/meatpie name = "meat-pie" icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "meatpie" @@ -303,7 +303,7 @@ list_reagents = list("nutriment" = 10, "vitamin" = 2) tastes = list("pie" = 1, "meat" = 1) -/obj/item/reagent_containers/food/snacks/tofupie +/obj/item/food/snacks/tofupie name = "tofu-pie" icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "meatpie" @@ -314,7 +314,7 @@ list_reagents = list("nutriment" = 10, "vitamin" = 2) tastes = list("pie" = 1, "tofu" = 1) -/obj/item/reagent_containers/food/snacks/amanita_pie +/obj/item/food/snacks/amanita_pie name = "amanita pie" desc = "Sweet and tasty poison pie." icon = 'icons/obj/food/bakedgoods.dmi' @@ -324,7 +324,7 @@ list_reagents = list("nutriment" = 6, "amanitin" = 3, "psilocybin" = 1, "vitamin" = 4) tastes = list("pie" = 1, "mushroom" = 1) -/obj/item/reagent_containers/food/snacks/plump_pie +/obj/item/food/snacks/plump_pie name = "plump pie" desc = "I bet you love stuff made out of plump helmets!" icon = 'icons/obj/food/bakedgoods.dmi' @@ -334,14 +334,14 @@ list_reagents = list("nutriment" = 10, "vitamin" = 2) tastes = list("pie" = 1, "mushroom" = 1) -/obj/item/reagent_containers/food/snacks/plump_pie/Initialize(mapload) +/obj/item/food/snacks/plump_pie/Initialize(mapload) . = ..() if(prob(10)) name = "exceptional plump pie" desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!" // What reagents.add_reagent("omnizine", 5) -/obj/item/reagent_containers/food/snacks/xemeatpie +/obj/item/food/snacks/xemeatpie name = "xeno-pie" icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "xenomeatpie" @@ -352,7 +352,7 @@ tastes = list("pie" = 1, "meat" = 1, "acid" = 1) -/obj/item/reagent_containers/food/snacks/applepie +/obj/item/food/snacks/applepie name = "apple pie" desc = "A pie containing sweet sweet love... or apple." icon = 'icons/obj/food/bakedgoods.dmi' @@ -363,7 +363,7 @@ tastes = list("pie" = 1, "apple" = 1) -/obj/item/reagent_containers/food/snacks/cherrypie +/obj/item/food/snacks/cherrypie name = "cherry pie" desc = "Taste so good, make a grown man cry." icon = 'icons/obj/food/bakedgoods.dmi' @@ -373,19 +373,19 @@ list_reagents = list("nutriment" = 10, "vitamin" = 2) tastes = list("pie" = 1, "cherries" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/pumpkinpie +/obj/item/food/snacks/sliceable/pumpkinpie name = "pumpkin pie" desc = "A delicious treat for the autumn months." icon = 'icons/obj/food/bakedgoods.dmi' icon_state = "pumpkinpie" - slice_path = /obj/item/reagent_containers/food/snacks/pumpkinpieslice + slice_path = /obj/item/food/snacks/pumpkinpieslice slices_num = 5 bitesize = 3 filling_color = "#F5B951" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("pie" = 1, "pumpkin" = 1) -/obj/item/reagent_containers/food/snacks/pumpkinpieslice +/obj/item/food/snacks/pumpkinpieslice name = "pumpkin pie slice" desc = "A slice of pumpkin pie, with whipped cream on top. Perfection." icon = 'icons/obj/food/bakedgoods.dmi' @@ -398,7 +398,7 @@ // Donuts // ////////////////////// -/obj/item/reagent_containers/food/snacks/donut +/obj/item/food/snacks/donut name = "donut" desc = "Goes great with Robust Coffee." icon = 'icons/obj/food/bakedgoods.dmi' @@ -411,7 +411,7 @@ var/donut_sprite_type = DONUT_NORMAL tastes = list("donut" = 1) -/obj/item/reagent_containers/food/snacks/donut/Initialize(mapload) +/obj/item/food/snacks/donut/Initialize(mapload) . = ..() if(randomized_sprinkles && prob(30)) icon_state = "donut2" @@ -420,7 +420,7 @@ donut_sprite_type = DONUT_FROSTED filling_color = "#FF69B4" -/obj/item/reagent_containers/food/snacks/donut/sprinkles +/obj/item/food/snacks/donut/sprinkles name = "frosted donut" icon_state = "donut2" list_reagents = list("nutriment" = 3, "sugar" = 2, "sprinkles" = 2) @@ -428,13 +428,13 @@ donut_sprite_type = DONUT_FROSTED randomized_sprinkles = 0 -/obj/item/reagent_containers/food/snacks/donut/chaos +/obj/item/food/snacks/donut/chaos name = "chaos donut" desc = "Like life, it never quite tastes the same." bitesize = 10 tastes = list("donut" = 3, "chaos" = 1) -/obj/item/reagent_containers/food/snacks/donut/chaos/Initialize(mapload) +/obj/item/food/snacks/donut/chaos/Initialize(mapload) . = ..() extra_reagent = pick("nutriment", "capsaicin", "frostoil", "krokodil", "plasma", "cocoa", "slimejelly", "banana", "berryjuice", "omnizine") reagents.add_reagent("[extra_reagent]", 3) @@ -444,14 +444,14 @@ reagents.add_reagent("sprinkles", 2) filling_color = "#FF69B4" -/obj/item/reagent_containers/food/snacks/donut/jelly +/obj/item/food/snacks/donut/jelly name = "jelly donut" desc = "You jelly?" icon_state = "jdonut1" extra_reagent = "berryjuice" tastes = list("jelly" = 1, "donut" = 3) -/obj/item/reagent_containers/food/snacks/donut/jelly/Initialize(mapload) +/obj/item/food/snacks/donut/jelly/Initialize(mapload) . = ..() if(extra_reagent) reagents.add_reagent("[extra_reagent]", 3) @@ -462,13 +462,13 @@ reagents.add_reagent("sprinkles", 2) filling_color = "#FF69B4" -/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly +/obj/item/food/snacks/donut/jelly/slimejelly name = "jelly donut" desc = "You jelly?" icon_state = "jdonut1" extra_reagent = "slimejelly" -/obj/item/reagent_containers/food/snacks/donut/jelly/cherryjelly +/obj/item/food/snacks/donut/jelly/cherryjelly name = "jelly donut" desc = "You jelly?" icon_state = "jdonut1" @@ -478,7 +478,7 @@ // Pancakes // ////////////////////// -/obj/item/reagent_containers/food/snacks/pancake +/obj/item/food/snacks/pancake name = "pancake" desc = "A plain pancake." icon = 'icons/obj/food/breakfast.dmi' @@ -488,7 +488,7 @@ list_reagents = list("nutriment" = 3, "sugar" = 3) tastes = list("sweet cake" = 1) -/obj/item/reagent_containers/food/snacks/pancake/attack_tk(mob/user) +/obj/item/food/snacks/pancake/attack_tk(mob/user) if(src in user.tkgrabbed_objects) to_chat(user, "You start channeling psychic energy into [src].") visible_message("The syrup on [src] starts to boil...") @@ -503,14 +503,14 @@ return return ..() -/obj/item/reagent_containers/food/snacks/pancake/berry_pancake +/obj/item/food/snacks/pancake/berry_pancake name = "berry pancake" desc = "A pancake loaded with berries." icon_state = "berry_pancake" list_reagents = list("nutriment" = 3, "sugar" = 3, "berryjuice" = 3) tastes = list("sweet cake" = 2, "berries" = 2) -/obj/item/reagent_containers/food/snacks/pancake/choc_chip_pancake +/obj/item/food/snacks/pancake/choc_chip_pancake name = "choc-chip pancake" desc = "A pancake loaded with chocolate chips." icon_state = "choc_chip_pancake" @@ -521,7 +521,7 @@ // Misc // ////////////////////// -/obj/item/reagent_containers/food/snacks/muffin +/obj/item/food/snacks/muffin name = "muffin" desc = "A delicious and spongy little cake." icon = 'icons/obj/food/breakfast.dmi' @@ -530,7 +530,7 @@ list_reagents = list("nutriment" = 6) tastes = list("muffin" = 1) -/obj/item/reagent_containers/food/snacks/berryclafoutis +/obj/item/food/snacks/berryclafoutis name = "berry clafoutis" desc = "No black birds, this is a good sign." icon = 'icons/obj/food/bakedgoods.dmi' @@ -541,7 +541,7 @@ tastes = list("pie" = 1, "blackberries" = 1) -/obj/item/reagent_containers/food/snacks/poppypretzel +/obj/item/food/snacks/poppypretzel name = "poppy pretzel" desc = "A large soft pretzel full of POP! It's all twisted up!" icon = 'icons/obj/food/bakedgoods.dmi' @@ -550,7 +550,7 @@ list_reagents = list("nutriment" = 5) tastes = list("pretzel" = 1) -/obj/item/reagent_containers/food/snacks/plumphelmetbiscuit +/obj/item/food/snacks/plumphelmetbiscuit name = "plump helmet biscuit" desc = "This is a finely-prepared plump helmet biscuit. The ingredients are exceptionally minced plump helmet, and well-minced dwarven wheat flour." icon = 'icons/obj/food/breakfast.dmi' @@ -559,14 +559,14 @@ list_reagents = list("nutriment" = 5) tastes = list("mushroom" = 1, "biscuit" = 1) -/obj/item/reagent_containers/food/snacks/plumphelmetbiscuit/Initialize(mapload) +/obj/item/food/snacks/plumphelmetbiscuit/Initialize(mapload) . = ..() if(prob(10)) name = "exceptional plump helmet biscuit" desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!" // Is this a reference? reagents.add_reagent("omnizine", 5) -/obj/item/reagent_containers/food/snacks/appletart +/obj/item/food/snacks/appletart name = "golden apple streusel tart" desc = "A tasty dessert that won't make it through a metal detector." icon = 'icons/obj/food/bakedgoods.dmi' @@ -578,7 +578,7 @@ tastes = list("pie" = 1, "apple" = 1, "expensive metal" = 1) -/obj/item/reagent_containers/food/snacks/cracker +/obj/item/food/snacks/cracker name = "cracker" desc = "It's a salted cracker." icon = 'icons/obj/food/bakedgoods.dmi' @@ -588,7 +588,7 @@ list_reagents = list("nutriment" = 1) tastes = list("cracker" = 1) -/obj/item/reagent_containers/food/snacks/croissant +/obj/item/food/snacks/croissant name = "croissant" desc = "Once a pastry reserved for the bourgeois, this flaky goodness is now on your table." icon = 'icons/obj/food/bakedgoods.dmi' @@ -598,13 +598,13 @@ list_reagents = list("nutriment" = 4, "sugar" = 2) tastes = list("croissant" = 1) -/obj/item/reagent_containers/food/snacks/croissant/throwing +/obj/item/food/snacks/croissant/throwing throwforce = 20 throw_range = 9 //now with extra throwing action tastes = list("croissant" = 2, "butter" = 1, "metal" = 1) list_reagents = list("nutriment" = 4, "sugar" = 2, "iron" = 1) -/obj/item/reagent_containers/food/snacks/croissant/throwing/Initialize(mapload) +/obj/item/food/snacks/croissant/throwing/Initialize(mapload) . = ..() AddComponent(/datum/component/boomerang, throw_range, TRUE) diff --git a/code/modules/food_and_drinks/food/foods/bread.dm b/code/modules/food_and_drinks/food/foods/bread.dm index f3b30727f140..c2cfd50226b8 100644 --- a/code/modules/food_and_drinks/food/foods/bread.dm +++ b/code/modules/food_and_drinks/food/foods/bread.dm @@ -3,53 +3,53 @@ // Breads // ////////////////////// -/obj/item/reagent_containers/food/snacks/sliceable/meatbread +/obj/item/food/snacks/sliceable/meatbread name = "meatbread loaf" desc = "The culinary base of every self-respecting eloquen/tg/entleman." icon = 'icons/obj/food/burgerbread.dmi' icon_state = "meatbread" - slice_path = /obj/item/reagent_containers/food/snacks/meatbreadslice + slice_path = /obj/item/food/snacks/meatbreadslice slices_num = 5 filling_color = "#FF7575" list_reagents = list("protein" = 20, "nutriment" = 10, "vitamin" = 5) tastes = list("bread" = 10, "meat" = 10) -/obj/item/reagent_containers/food/snacks/meatbreadslice +/obj/item/food/snacks/meatbreadslice name = "meatbread slice" desc = "A slice of delicious meatbread." icon = 'icons/obj/food/burgerbread.dmi' icon_state = "meatbreadslice" filling_color = "#FF7575" -/obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread +/obj/item/food/snacks/sliceable/xenomeatbread name = "xenomeatbread loaf" desc = "The culinary base of every self-respecting eloquent gentleman. Extra Heretical." icon = 'icons/obj/food/burgerbread.dmi' icon_state = "xenomeatbread" - slice_path = /obj/item/reagent_containers/food/snacks/xenomeatbreadslice + slice_path = /obj/item/food/snacks/xenomeatbreadslice slices_num = 5 filling_color = "#8AFF75" list_reagents = list("protein" = 20, "nutriment" = 10, "vitamin" = 5) tastes = list("bread" = 10, "acid" = 10) -/obj/item/reagent_containers/food/snacks/xenomeatbreadslice +/obj/item/food/snacks/xenomeatbreadslice name = "xenomeatbread slice" desc = "A slice of delicious meatbread. Extra Heretical." icon = 'icons/obj/food/burgerbread.dmi' icon_state = "xenobreadslice" filling_color = "#8AFF75" -/obj/item/reagent_containers/food/snacks/sliceable/spidermeatbread +/obj/item/food/snacks/sliceable/spidermeatbread name = "spider meat loaf" desc = "Reassuringly green meatloaf made from spider meat." icon = 'icons/obj/food/burgerbread.dmi' icon_state = "spidermeatbread" - slice_path = /obj/item/reagent_containers/food/snacks/spidermeatbreadslice + slice_path = /obj/item/food/snacks/spidermeatbreadslice slices_num = 5 list_reagents = list("protein" = 20, "nutriment" = 10, "toxin" = 15, "vitamin" = 5) tastes = list("bread" = 10, "cobwebs" = 5) -/obj/item/reagent_containers/food/snacks/spidermeatbreadslice +/obj/item/food/snacks/spidermeatbreadslice name = "spider meat bread slice" desc = "A slice of meatloaf made from an animal that most likely still wants you dead." icon = 'icons/obj/food/burgerbread.dmi' @@ -57,18 +57,18 @@ tastes = list("bread" = 10, "cobwebs" = 5) list_reagents = list("toxin" = 2) -/obj/item/reagent_containers/food/snacks/sliceable/bananabread +/obj/item/food/snacks/sliceable/bananabread name = "banana-nut bread" desc = "A heavenly and filling treat." icon = 'icons/obj/food/burgerbread.dmi' icon_state = "bananabread" - slice_path = /obj/item/reagent_containers/food/snacks/bananabreadslice + slice_path = /obj/item/food/snacks/bananabreadslice slices_num = 5 filling_color = "#EDE5AD" list_reagents = list("banana" = 20, "nutriment" = 20) tastes = list("bread" = 10, "banana" = 5) -/obj/item/reagent_containers/food/snacks/bananabreadslice +/obj/item/food/snacks/bananabreadslice name = "banana-nut bread slice" desc = "A slice of delicious banana bread." icon = 'icons/obj/food/burgerbread.dmi' @@ -76,36 +76,36 @@ filling_color = "#EDE5AD" tastes = list("bread" = 10, "banana" = 5) -/obj/item/reagent_containers/food/snacks/sliceable/tofubread +/obj/item/food/snacks/sliceable/tofubread name = "tofubread" desc = "Like meatbread but for vegetarians. Not guaranteed to give superpowers." icon = 'icons/obj/food/burgerbread.dmi' icon_state = "tofubread" - slice_path = /obj/item/reagent_containers/food/snacks/tofubreadslice + slice_path = /obj/item/food/snacks/tofubreadslice slices_num = 5 filling_color = "#F7FFE0" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("bread" = 10, "tofu" = 10) -/obj/item/reagent_containers/food/snacks/tofubreadslice +/obj/item/food/snacks/tofubreadslice name = "tofubread slice" desc = "A slice of delicious tofubread." icon = 'icons/obj/food/burgerbread.dmi' icon_state = "tofubreadslice" filling_color = "#F7FFE0" -/obj/item/reagent_containers/food/snacks/sliceable/bread +/obj/item/food/snacks/sliceable/bread name = "bread" desc = "Some plain old Earthen bread." icon = 'icons/obj/food/burgerbread.dmi' icon_state = "bread" - slice_path = /obj/item/reagent_containers/food/snacks/breadslice + slice_path = /obj/item/food/snacks/breadslice slices_num = 6 filling_color = "#FFE396" list_reagents = list("nutriment" = 10) tastes = list("bread" = 1) -/obj/item/reagent_containers/food/snacks/breadslice +/obj/item/food/snacks/breadslice name = "bread slice" desc = "A slice of home." icon = 'icons/obj/food/burgerbread.dmi' @@ -114,18 +114,18 @@ list_reagents = list("nutriment" = 2, "bread" = 5) tastes = list("bread" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/creamcheesebread +/obj/item/food/snacks/sliceable/creamcheesebread name = "cream cheese bread" desc = "Yum yum yum!" icon = 'icons/obj/food/burgerbread.dmi' icon_state = "creamcheesebread" - slice_path = /obj/item/reagent_containers/food/snacks/creamcheesebreadslice + slice_path = /obj/item/food/snacks/creamcheesebreadslice slices_num = 5 filling_color = "#FFF896" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("bread" = 10, "cheese" = 10) -/obj/item/reagent_containers/food/snacks/creamcheesebreadslice +/obj/item/food/snacks/creamcheesebreadslice name = "cream cheese bread slice" desc = "A slice of yum!" icon = 'icons/obj/food/burgerbread.dmi' @@ -134,18 +134,18 @@ list_reagents = list("nutriment" = 4, "vitamin" = 1) tastes = list("bread" = 10, "cheese" = 10) -/obj/item/reagent_containers/food/snacks/sliceable/banarnarbread +/obj/item/food/snacks/sliceable/banarnarbread name = "banarnarbread loaf" desc = "A loaf of delicious mah'weyh pleggh at e'ntrath!" icon = 'icons/obj/food/burgerbread.dmi' icon_state = "banarnarbread" - slice_path = /obj/item/reagent_containers/food/snacks/banarnarbreadslice + slice_path = /obj/item/food/snacks/banarnarbreadslice slices_num = 5 filling_color = "#6F0000" list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("heresy" = 10, "banana" = 10) -/obj/item/reagent_containers/food/snacks/banarnarbreadslice +/obj/item/food/snacks/banarnarbreadslice name = "banarnarbread slice" desc = "A slice of delicious mah'weyh pleggh at e'ntrath!" icon = 'icons/obj/food/burgerbread.dmi' @@ -159,7 +159,7 @@ // Misc // ////////////////////// -/obj/item/reagent_containers/food/snacks/bun +/obj/item/food/snacks/bun name = "bun" desc = "The base for any self-respecting burger." icon = 'icons/obj/food/food_ingredients.dmi' @@ -168,7 +168,7 @@ tastes = list("bun" = 1) -/obj/item/reagent_containers/food/snacks/flatbread +/obj/item/food/snacks/flatbread name = "flatbread" desc = "Bland but filling." icon = 'icons/obj/food/food_ingredients.dmi' @@ -176,7 +176,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bread" = 1) -/obj/item/reagent_containers/food/snacks/baguette +/obj/item/food/snacks/baguette name = "baguette" desc = "Bon appetit!" icon = 'icons/obj/food/bakedgoods.dmi' @@ -188,15 +188,15 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bread" = 1) -/obj/item/reagent_containers/food/snacks/baguette/combat +/obj/item/food/snacks/baguette/combat sharp = TRUE force = 20 -/obj/item/reagent_containers/food/snacks/baguette/combat/Initialize(mapload) +/obj/item/food/snacks/baguette/combat/Initialize(mapload) . = ..() AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.5, _parryable_attack_types = ALL_ATTACK_TYPES) -/obj/item/reagent_containers/food/snacks/twobread +/obj/item/food/snacks/twobread name = "two bread" desc = "It is very bitter and winy." icon = 'icons/obj/food/burgerbread.dmi' @@ -206,7 +206,7 @@ list_reagents = list("nutriment" = 2, "vitamin" = 2) tastes = list("bread" = 1) -/obj/item/reagent_containers/food/snacks/toast +/obj/item/food/snacks/toast name = "toast" desc = "Yeah! Toast!" icon = 'icons/obj/food/burgerbread.dmi' @@ -216,7 +216,7 @@ list_reagents = list("nutriment" = 3) tastes = list("toast" = 1) -/obj/item/reagent_containers/food/snacks/jelliedtoast +/obj/item/food/snacks/jelliedtoast name = "jellied toast" desc = "A slice of bread covered with delicious jam." icon = 'icons/obj/food/burgerbread.dmi' @@ -225,13 +225,13 @@ bitesize = 3 tastes = list("toast" = 1, "jelly" = 1) -/obj/item/reagent_containers/food/snacks/jelliedtoast/cherry +/obj/item/food/snacks/jelliedtoast/cherry list_reagents = list("nutriment" = 1, "cherryjelly" = 5, "vitamin" = 2) -/obj/item/reagent_containers/food/snacks/jelliedtoast/slime +/obj/item/food/snacks/jelliedtoast/slime list_reagents = list("nutriment" = 1, "slimejelly" = 5, "vitamin" = 2) -/obj/item/reagent_containers/food/snacks/rofflewaffles +/obj/item/food/snacks/rofflewaffles name = "roffle waffles" desc = "Waffles from Roffle. Co." icon = 'icons/obj/food/breakfast.dmi' @@ -242,7 +242,7 @@ list_reagents = list("nutriment" = 8, "psilocybin" = 2, "vitamin" = 2) tastes = list("waffle" = 1, "mushrooms" = 1) -/obj/item/reagent_containers/food/snacks/waffles +/obj/item/food/snacks/waffles name = "waffles" desc = "Mmm, waffles." icon = 'icons/obj/food/breakfast.dmi' diff --git a/code/modules/food_and_drinks/food/foods/candy.dm b/code/modules/food_and_drinks/food/foods/candy.dm index fb4d3c2fc86a..fe3fe0ac48a6 100644 --- a/code/modules/food_and_drinks/food/foods/candy.dm +++ b/code/modules/food_and_drinks/food/foods/candy.dm @@ -7,7 +7,7 @@ //Candy / Candy Ingredients //Subclass so we can pass on values -/obj/item/reagent_containers/food/snacks/candy +/obj/item/food/snacks/candy name = "generic candy" desc = "It's placeholder flavored. This shouldn't be seen." icon = 'icons/obj/food/candy.dmi' @@ -18,7 +18,7 @@ // Candy Ingredients / Flavorings / Byproduct // *********************************************************** -/obj/item/reagent_containers/food/snacks/chocolatebar +/obj/item/food/snacks/chocolatebar name = "chocolate bar" desc = "Such sweet, fattening food." icon_state = "chocolatebar" @@ -26,7 +26,7 @@ list_reagents = list("nutriment" = 2, "chocolate" = 4) tastes = list("chocolate" = 1) -/obj/item/reagent_containers/food/snacks/candy/caramel +/obj/item/food/snacks/candy/caramel name = "caramel" desc = "Chewy and dense, yet it practically melts in your mouth!" icon_state = "caramel" @@ -34,32 +34,32 @@ list_reagents = list("cream" = 2, "sugar" = 2) -/obj/item/reagent_containers/food/snacks/candy/toffee +/obj/item/food/snacks/candy/toffee name = "toffee" desc = "A hard, brittle candy with a distinctive taste." icon_state = "toffee" filling_color = "#7D5F46" list_reagents = list("nutriment" = 3, "sugar" = 3) -/obj/item/reagent_containers/food/snacks/candy/nougat +/obj/item/food/snacks/candy/nougat name = "nougat" desc = "A soft, chewy candy commonly found in candybars." icon_state = "nougat" filling_color = "#7D5F46" list_reagents = list("nutriment" = 3, "sugar" = 3) -/obj/item/reagent_containers/food/snacks/candy/taffy +/obj/item/food/snacks/candy/taffy name = "saltwater taffy" desc = "Old fashioned saltwater taffy. Chewy!" icon_state = "candy1" filling_color = "#7D5F46" list_reagents = list("nutriment" = 3, "sugar" = 3) -/obj/item/reagent_containers/food/snacks/candy/taffy/Initialize(mapload) +/obj/item/food/snacks/candy/taffy/Initialize(mapload) . = ..() icon_state = pick("candy1", "candy2", "candy3", "candy4", "candy5") -/obj/item/reagent_containers/food/snacks/candy/fudge +/obj/item/food/snacks/candy/fudge name = "fudge" desc = "Chocolate fudge, a timeless classic treat." icon_state = "fudge" @@ -67,26 +67,26 @@ bitesize = 3 list_reagents = list("cream" = 3, "chocolate" = 6) -/obj/item/reagent_containers/food/snacks/candy/fudge/peanut +/obj/item/food/snacks/candy/fudge/peanut name = "peanut fudge" desc = "Chocolate fudge, with bits of peanuts mixed in. People with nut allergies shouldn't eat this." icon_state = "fudge_peanut" filling_color = "#7D5F46" -/obj/item/reagent_containers/food/snacks/candy/fudge/cherry +/obj/item/food/snacks/candy/fudge/cherry name = "chocolate cherry fudge" desc = "Chocolate fudge surrounding sweet cherries. Good for tricking kids into eating some fruit." icon_state = "fudge_cherry" filling_color = "#7D5F46" -/obj/item/reagent_containers/food/snacks/candy/fudge/cookies_n_cream +/obj/item/food/snacks/candy/fudge/cookies_n_cream name = "cookies 'n' cream fudge" desc = "An extra creamy fudge with bits of real chocolate cookie mixed in. Crunchy!" icon_state = "fudge_cookies_n_cream" filling_color = "#7D5F46" list_reagents = list("cream" = 6, "chocolate" = 6) -/obj/item/reagent_containers/food/snacks/candy/fudge/turtle +/obj/item/food/snacks/candy/fudge/turtle name = "turtle fudge" desc = "Chocolate fudge with caramel and nuts. It doesn't contain real turtles, thankfully." icon_state = "fudge_turtle" @@ -96,14 +96,14 @@ // Candy Products (Pre-existing) // *********************************************************** -/obj/item/reagent_containers/food/snacks/candy/donor +/obj/item/food/snacks/candy/donor name = "donor candy" desc = "A little treat for blood donors." trash = /obj/item/trash/candy bitesize = 5 list_reagents = list("nutriment" = 10, "sugar" = 3) -/obj/item/reagent_containers/food/snacks/candy/candy_corn +/obj/item/food/snacks/candy/candy_corn name = "candy corn" desc = "It's a handful of candy corn. Cannot be stored in a detective's hat, alas." icon_state = "candycorn" @@ -115,7 +115,7 @@ // Candy Products (plain / unflavored) // *********************************************************** -/obj/item/reagent_containers/food/snacks/candy/cotton +/obj/item/food/snacks/candy/cotton name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_plain" @@ -124,7 +124,7 @@ bitesize = 4 list_reagents = list("sugar" = 15) -/obj/item/reagent_containers/food/snacks/candy/candybar +/obj/item/food/snacks/candy/candybar name = "candy" desc = "A chocolate candybar, wrapped in a bit of foil." icon_state = "candy" @@ -137,14 +137,14 @@ tastes = list("chocolate" = 1) -/obj/item/reagent_containers/food/snacks/candy/candycane +/obj/item/food/snacks/candy/candycane name = "candy cane" desc = "A festive mint candy cane." icon_state = "candycane" filling_color = "#F2F2F2" list_reagents = list("minttoxin" = 1, "sugar" = 5) -/obj/item/reagent_containers/food/snacks/candy/gummybear +/obj/item/food/snacks/candy/gummybear name = "gummy bear" desc = "A small edible bear. It's squishy and chewy!" icon_state = "gbear" @@ -152,7 +152,7 @@ bitesize = 3 list_reagents = list("sugar" = 10) -/obj/item/reagent_containers/food/snacks/candy/gummyworm +/obj/item/food/snacks/candy/gummyworm name = "gummy worm" desc = "An edible worm, made from gelatin." icon_state = "gworm" @@ -160,7 +160,7 @@ bitesize = 3 list_reagents = list("sugar" = 10) -/obj/item/reagent_containers/food/snacks/candy/jellybean +/obj/item/food/snacks/candy/jellybean name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas." icon_state = "jbean" @@ -168,7 +168,7 @@ bitesize = 3 list_reagents = list("sugar" = 10) -/obj/item/reagent_containers/food/snacks/candy/jawbreaker +/obj/item/food/snacks/candy/jawbreaker name = "jawbreaker" desc = "An unbelievably hard candy. The name is fitting." icon_state = "jawbreaker" @@ -176,7 +176,7 @@ bitesize = 0.1 //this is gonna take a while, you'll be working at this all shift. list_reagents = list("sugar" = 10) -/obj/item/reagent_containers/food/snacks/candy/cash +/obj/item/food/snacks/candy/cash name = "candy cash" desc = "Not legal tender. Tasty though." icon_state = "candy_cash" @@ -185,7 +185,7 @@ tastes = list("chocolate" = 1) -/obj/item/reagent_containers/food/snacks/candy/coin +/obj/item/food/snacks/candy/coin name = "chocolate coin" desc = "Probably won't work in the vending machines." icon_state = "choc_coin" @@ -195,7 +195,7 @@ tastes = list("chocolate" = 1) -/obj/item/reagent_containers/food/snacks/candy/gum +/obj/item/food/snacks/candy/gum name = "bubblegum" desc = "Chewy!" icon_state = "bubblegum" @@ -204,7 +204,7 @@ bitesize = 0.2 list_reagents = list("sugar" = 5) -/obj/item/reagent_containers/food/snacks/candy/sucker +/obj/item/food/snacks/candy/sucker name = "sucker" desc = "For being such a good sport!" icon_state = "sucker" @@ -215,56 +215,56 @@ // Gummy Bear Flavors // *********************************************************** -/obj/item/reagent_containers/food/snacks/candy/gummybear/red +/obj/item/food/snacks/candy/gummybear/red name = "gummy bear" desc = "A small edible bear. It's red!" icon_state = "gbear_red" filling_color = "#801E28" list_reagents = list("sugar" = 10, "cherryjelly" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummybear/blue +/obj/item/food/snacks/candy/gummybear/blue name = "gummy bear" desc = "A small edible bear. It's blue!" icon_state = "gbear_blue" filling_color = "#863333" list_reagents = list("sugar" = 10, "berryjuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummybear/poison +/obj/item/food/snacks/candy/gummybear/poison name = "gummy bear" desc = "A small edible bear. It's blue!" icon_state = "gbear_blue" filling_color = "#863353" list_reagents = list("poisonberryjuice" = 12) -/obj/item/reagent_containers/food/snacks/candy/gummybear/green +/obj/item/food/snacks/candy/gummybear/green name = "gummy bear" desc = "A small edible bear. It's green!" icon_state = "gbear_green" filling_color = "#365E30" list_reagents = list("sugar" = 10, "limejuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummybear/yellow +/obj/item/food/snacks/candy/gummybear/yellow name = "gummy bear" desc = "A small edible bear. It's yellow!" icon_state = "gbear_yellow" filling_color = "#863333" list_reagents = list("sugar" = 10, "lemonjuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummybear/orange +/obj/item/food/snacks/candy/gummybear/orange name = "gummy bear" desc = "A small edible bear. It's orange!" icon_state = "gbear_orange" filling_color = "#E78108" list_reagents = list("sugar" = 10, "orangejuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummybear/purple +/obj/item/food/snacks/candy/gummybear/purple name = "gummy bear" desc = "A small edible bear. It's purple!" icon_state = "gbear_purple" filling_color = "#993399" list_reagents = list("sugar" = 10, "grapejuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummybear/wtf +/obj/item/food/snacks/candy/gummybear/wtf name = "gummy bear" desc = "A small bear. Wait... what?" icon_state = "gbear_rainbow" @@ -275,56 +275,56 @@ // Gummy Worm Flavors // *********************************************************** -/obj/item/reagent_containers/food/snacks/candy/gummyworm/red +/obj/item/food/snacks/candy/gummyworm/red name = "gummy worm" desc = "An edible worm, made from gelatin. It's red!" icon_state = "gworm_red" filling_color = "#801E28" list_reagents = list("sugar" = 10, "cherryjelly" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummyworm/blue +/obj/item/food/snacks/candy/gummyworm/blue name = "gummy worm" desc = "An edible worm, made from gelatin. It's blue!" icon_state = "gworm_blue" filling_color = "#863333" list_reagents = list("sugar" = 10, "berryjuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummyworm/poison +/obj/item/food/snacks/candy/gummyworm/poison name = "gummy worm" desc = "An edible worm, made from gelatin. It's blue!" icon_state = "gworm_blue" filling_color = "#863353" list_reagents = list("poisonberryjuice" = 12) -/obj/item/reagent_containers/food/snacks/candy/gummyworm/green +/obj/item/food/snacks/candy/gummyworm/green name = "gummy worm" desc = "An edible worm, made from gelatin. It's green!" icon_state = "gworm_green" filling_color = "#365E30" list_reagents = list("sugar" = 10, "limejuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummyworm/yellow +/obj/item/food/snacks/candy/gummyworm/yellow name = "gummy worm" desc = "An edible worm, made from gelatin. It's yellow!" icon_state = "gworm_yellow" filling_color = "#863333" list_reagents = list("sugar" = 10, "lemonjuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummyworm/orange +/obj/item/food/snacks/candy/gummyworm/orange name = "gummy worm" desc = "An edible worm, made from gelatin. It's orange!" icon_state = "gworm_orange" filling_color = "#E78108" list_reagents = list("sugar" = 10, "orangejuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummyworm/purple +/obj/item/food/snacks/candy/gummyworm/purple name = "gummy worm" desc = "An edible worm, made from gelatin. It's purple!" icon_state = "gworm_purple" filling_color = "#993399" list_reagents = list("sugar" = 10, "grapejuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/gummyworm/wtf +/obj/item/food/snacks/candy/gummyworm/wtf name = "gummy worm" desc = "An edible worm. Did it just move?" icon_state = "gworm_rainbow" @@ -335,91 +335,91 @@ // Jelly Bean Flavors // *********************************************************** -/obj/item/reagent_containers/food/snacks/candy/jellybean/red +/obj/item/food/snacks/candy/jellybean/red name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's red!" icon_state = "jbean_red" filling_color = "#801E28" list_reagents = list("sugar" = 10, "cherryjelly" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/blue +/obj/item/food/snacks/candy/jellybean/blue name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's blue!" icon_state = "jbean_blue" filling_color = "#863333" list_reagents = list("sugar" = 10, "berryjuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/poison +/obj/item/food/snacks/candy/jellybean/poison name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's blue!" icon_state = "jbean_blue" filling_color = "#863353" list_reagents = list("poisonberryjuice" = 12) -/obj/item/reagent_containers/food/snacks/candy/jellybean/green +/obj/item/food/snacks/candy/jellybean/green name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's green!" icon_state = "jbean_green" filling_color = "#365E30" list_reagents = list("sugar" = 10, "limejuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/yellow +/obj/item/food/snacks/candy/jellybean/yellow name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's yellow!" icon_state = "jbean_yellow" filling_color = "#863333" list_reagents = list("sugar" = 10, "lemonjuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/orange +/obj/item/food/snacks/candy/jellybean/orange name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's orange!" icon_state = "jbean_orange" filling_color = "#E78108" list_reagents = list("sugar" = 10, "orangejuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/purple +/obj/item/food/snacks/candy/jellybean/purple name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's purple!" icon_state = "jbean_purple" filling_color = "#993399" list_reagents = list("sugar" = 10, "grapejuice" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/chocolate +/obj/item/food/snacks/candy/jellybean/chocolate name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's chocolate!" icon_state = "jbean_choc" filling_color = "#302000" list_reagents = list("sugar" = 10, "chocolate" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/popcorn +/obj/item/food/snacks/candy/jellybean/popcorn name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's popcorn flavored!" icon_state = "jbean_popcorn" filling_color = "#664330" list_reagents = list("sugar" = 10, "nutriment" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/cola +/obj/item/food/snacks/candy/jellybean/cola name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's Cola flavored!" icon_state = "jbean_cola" filling_color = "#102000" list_reagents = list("sugar" = 10, "cola" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/drgibb +/obj/item/food/snacks/candy/jellybean/drgibb name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's Dr. Gibb flavored!" icon_state = "jbean_cola" filling_color = "#102000" list_reagents = list("sugar" = 10, "dr_gibb" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/coffee +/obj/item/food/snacks/candy/jellybean/coffee name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. It's Coffee flavored!" icon_state = "jbean_choc" filling_color = "#482000" list_reagents = list("sugar" = 10, "coffee" = 2) -/obj/item/reagent_containers/food/snacks/candy/jellybean/wtf +/obj/item/food/snacks/candy/jellybean/wtf name = "jelly bean" desc = "A candy bean, guaranteed to not give you gas. You aren't sure what color it is." icon_state = "jbean_rainbow" @@ -430,7 +430,7 @@ // Cotton Candy Flavors // *********************************************************** -/obj/item/reagent_containers/food/snacks/candy/cotton/red +/obj/item/food/snacks/candy/cotton/red name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_red" @@ -438,7 +438,7 @@ filling_color = "#801E28" list_reagents = list("sugar" = 15, "cherryjelly" = 5) -/obj/item/reagent_containers/food/snacks/candy/cotton/blue +/obj/item/food/snacks/candy/cotton/blue name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_blue" @@ -446,7 +446,7 @@ filling_color = "#863333" list_reagents = list("sugar" = 15, "berryjuice" = 5) -/obj/item/reagent_containers/food/snacks/candy/cotton/poison +/obj/item/food/snacks/candy/cotton/poison name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_blue" @@ -454,7 +454,7 @@ filling_color = "#863353" list_reagents = list("poisonberryjuice" = 20) -/obj/item/reagent_containers/food/snacks/candy/cotton/green +/obj/item/food/snacks/candy/cotton/green name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_green" @@ -462,7 +462,7 @@ filling_color = "#365E30" list_reagents = list("sugar" = 15, "limejuice" = 5) -/obj/item/reagent_containers/food/snacks/candy/cotton/yellow +/obj/item/food/snacks/candy/cotton/yellow name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_yellow" @@ -470,7 +470,7 @@ filling_color = "#863333" list_reagents = list("sugar" = 15, "lemonjuice" = 5) -/obj/item/reagent_containers/food/snacks/candy/cotton/orange +/obj/item/food/snacks/candy/cotton/orange name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_orange" @@ -478,7 +478,7 @@ filling_color = "#E78108" list_reagents = list("sugar" = 15, "orangejuice" = 5) -/obj/item/reagent_containers/food/snacks/candy/cotton/purple +/obj/item/food/snacks/candy/cotton/purple name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_purple" @@ -486,7 +486,7 @@ filling_color = "#993399" list_reagents = list("sugar" = 15, "grapejuice" = 5) -/obj/item/reagent_containers/food/snacks/candy/cotton/pink +/obj/item/food/snacks/candy/cotton/pink name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_pink" @@ -494,7 +494,7 @@ filling_color = "#863333" list_reagents = list("sugar" = 15, "watermelonjuice" = 5) -/obj/item/reagent_containers/food/snacks/candy/cotton/rainbow +/obj/item/food/snacks/candy/cotton/rainbow name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_rainbow" @@ -502,7 +502,7 @@ filling_color = "#C8A5DC" list_reagents = list("omnizine" = 20) -/obj/item/reagent_containers/food/snacks/candy/cotton/bad_rainbow +/obj/item/food/snacks/candy/cotton/bad_rainbow name = "cotton candy" desc = "Light and fluffy, it's like eating a cloud made from sugar!" icon_state = "cottoncandy_rainbow" @@ -514,35 +514,35 @@ // Candybar Flavors // *********************************************************** -/obj/item/reagent_containers/food/snacks/candy/confectionery +/obj/item/food/snacks/candy/confectionery list_reagents = list("nutriment" = 1, "chocolate" = 1) -/obj/item/reagent_containers/food/snacks/candy/confectionery/rice +/obj/item/food/snacks/candy/confectionery/rice name = "Asteroid Crunch Bar" desc = "Crunchy rice deposits in delicious chocolate! A favorite of miners galaxy-wide." icon_state = "asteroidcrunch" trash = /obj/item/trash/candy filling_color = "#7D5F46" -/obj/item/reagent_containers/food/snacks/candy/confectionery/toffee +/obj/item/food/snacks/candy/confectionery/toffee name = "Yum-Baton Bar" desc = "Chocolate and toffee in the shape of a baton. Security sure knows how to pound these down!" icon_state = "yumbaton" filling_color = "#7D5F46" -/obj/item/reagent_containers/food/snacks/candy/confectionery/caramel +/obj/item/food/snacks/candy/confectionery/caramel name = "Malper Bar" desc = "A chocolate syringe filled with a caramel injection. Just what the doctor ordered!" icon_state = "malper" filling_color = "#7D5F46" -/obj/item/reagent_containers/food/snacks/candy/confectionery/caramel_nougat +/obj/item/food/snacks/candy/confectionery/caramel_nougat name = "Toxins Test Bar" desc = "An explosive combination of chocolate, caramel, and nougat. Research has never been so tasty!" icon_state = "toxinstest" filling_color = "#7D5F46" -/obj/item/reagent_containers/food/snacks/candy/confectionery/nougat +/obj/item/food/snacks/candy/confectionery/nougat name = "Tool-erone Bar" desc = "Chocolate-covered nougat, shaped like a wrench. Great for an engineer on the go!" icon_state = "toolerone" diff --git a/code/modules/food_and_drinks/food/foods/desserts.dm b/code/modules/food_and_drinks/food/foods/desserts.dm index 692c8c06208b..c68b8bc55f17 100644 --- a/code/modules/food_and_drinks/food/foods/desserts.dm +++ b/code/modules/food_and_drinks/food/foods/desserts.dm @@ -2,13 +2,13 @@ // Misc // ////////////////////// -/obj/item/reagent_containers/food/snacks/friedbanana +/obj/item/food/snacks/friedbanana name = "fried banana" desc = "Goreng Pisang, also known as fried bananas." icon_state = "friedbanana" list_reagents = list("sugar" = 5, "nutriment" = 8, "cornoil" = 4) -/obj/item/reagent_containers/food/snacks/ricepudding +/obj/item/food/snacks/ricepudding name = "rice pudding" desc = "Where's the Jam!" icon_state = "rpudding" @@ -17,7 +17,7 @@ list_reagents = list("nutriment" = 7, "vitamin" = 2) tastes = list("rice" = 1, "sweetness" = 1) -/obj/item/reagent_containers/food/snacks/spacylibertyduff +/obj/item/food/snacks/spacylibertyduff name = "spacy liberty duff" desc = "Jello gelatin, from Alfred Hubbard's cookbook." icon_state = "spacylibertyduff" @@ -27,7 +27,7 @@ list_reagents = list("nutriment" = 6, "psilocybin" = 6) tastes = list("jelly" = 1, "mushroom" = 1) -/obj/item/reagent_containers/food/snacks/amanitajelly +/obj/item/food/snacks/amanitajelly name = "amanita jelly" desc = "Looks curiously toxic." icon_state = "amanitajelly" @@ -37,7 +37,7 @@ list_reagents = list("nutriment" = 6, "amanitin" = 6, "psilocybin" = 3) tastes = list("jelly" = 1, "mushroom" = 1) -/obj/item/reagent_containers/food/snacks/candiedapple +/obj/item/food/snacks/candiedapple name = "candied apple" desc = "An apple coated in sugary sweetness." icon_state = "candiedapple" @@ -46,7 +46,7 @@ list_reagents = list("nutriment" = 3, "sugar" = 2) tastes = list("apple" = 2, "sweetness" = 2) -/obj/item/reagent_containers/food/snacks/mint +/obj/item/food/snacks/mint name = "mint" desc = "it is only wafer thin." icon_state = "mint" diff --git a/code/modules/food_and_drinks/food/foods/ethnic.dm b/code/modules/food_and_drinks/food/foods/ethnic.dm index d57032656c3e..153dc2b7407c 100644 --- a/code/modules/food_and_drinks/food/foods/ethnic.dm +++ b/code/modules/food_and_drinks/food/foods/ethnic.dm @@ -3,7 +3,7 @@ // Mexican // ////////////////////// -/obj/item/reagent_containers/food/snacks/taco +/obj/item/food/snacks/taco name = "taco" desc = "Take a bite!" icon_state = "taco" @@ -11,7 +11,7 @@ list_reagents = list("nutriment" = 7, "vitamin" = 1) tastes = list("taco" = 4, "meat" = 2, "cheese" = 2, "lettuce" = 1) -/obj/item/reagent_containers/food/snacks/burrito +/obj/item/food/snacks/burrito name = "burrito" desc = "Meat, beans, cheese, and rice wrapped up as an easy-to-hold meal." icon_state = "burrito" @@ -21,7 +21,7 @@ tastes = list("torilla" = 2, "meat" = 3) -/obj/item/reagent_containers/food/snacks/chimichanga +/obj/item/food/snacks/chimichanga name = "chimichanga" desc = "Time to eat a chimi-f***ing-changa." icon_state = "chimichanga" @@ -29,7 +29,7 @@ filling_color = "#A36A1F" list_reagents = list("omnizine" = 4, "cheese" = 2) //Deadpool reference. Deal with it. -/obj/item/reagent_containers/food/snacks/enchiladas +/obj/item/food/snacks/enchiladas name = "enchiladas" desc = "Viva la Mexico!" icon_state = "enchiladas" @@ -39,7 +39,7 @@ list_reagents = list("nutriment" = 8, "capsaicin" = 6) tastes = list("hot peppers" = 1, "meat" = 3, "cheese" = 1, "sour cream" = 1) -/obj/item/reagent_containers/food/snacks/cornchips +/obj/item/food/snacks/cornchips name = "corn chips" desc = "Goes great with salsa! OLE!" icon_state = "chips" @@ -53,7 +53,7 @@ // Chinese // ////////////////////// -/obj/item/reagent_containers/food/snacks/chinese/chowmein +/obj/item/food/snacks/chinese/chowmein name = "chow mein" desc = "What is in this anyways?" icon_state = "chinese1" @@ -62,7 +62,7 @@ list_reagents = list("nutriment" = 1, "beans" = 3, "msg" = 4, "sugar" = 2) tastes = list("noodle" = 1, "vegetables" = 1) -/obj/item/reagent_containers/food/snacks/chinese/sweetsourchickenball +/obj/item/food/snacks/chinese/sweetsourchickenball name = "sweet & sour chicken balls" desc = "Is this chicken cooked? The odds are better than wok paper scissors." icon = 'icons/obj/food/meat.dmi' @@ -72,7 +72,7 @@ list_reagents = list("nutriment" = 2, "msg" = 4, "sugar" = 2) tastes = list("chicken" = 1, "sweetness" = 1) -/obj/item/reagent_containers/food/snacks/chinese/tao +/obj/item/food/snacks/chinese/tao name = "Admiral Yamamoto carp" desc = "Tastes like chicken." icon_state = "chinese2" @@ -81,7 +81,7 @@ list_reagents = list("nutriment" = 1, "protein" = 1, "msg" = 4, "sugar" = 4) tastes = list("chicken" = 1) -/obj/item/reagent_containers/food/snacks/chinese/newdles +/obj/item/food/snacks/chinese/newdles name = "chinese newdles" desc = "Made fresh, weekly!" icon_state = "chinese3" @@ -90,7 +90,7 @@ list_reagents = list("nutriment" = 1, "msg" = 4, "sugar" = 3) tastes = list("noodles" = 1) -/obj/item/reagent_containers/food/snacks/chinese/rice +/obj/item/food/snacks/chinese/rice name = "fried rice" desc = "A timeless classic." icon_state = "chinese4" @@ -105,7 +105,7 @@ // Japanese // ////////////////////// -/obj/item/reagent_containers/food/snacks/chawanmushi +/obj/item/food/snacks/chawanmushi name = "chawanmushi" desc = "A legendary egg custard that makes friends out of enemies. Probably too hot for a cat to eat." icon_state = "chawanmushi" @@ -114,7 +114,7 @@ list_reagents = list("nutriment" = 5) tastes = list("custard" = 1) -/obj/item/reagent_containers/food/snacks/yakiimo +/obj/item/food/snacks/yakiimo name = "yaki imo" desc = "Made with roasted sweet potatoes!" icon_state = "yakiimo" @@ -128,7 +128,7 @@ // Middle Eastern // ////////////////////// -/obj/item/reagent_containers/food/snacks/human/kabob +/obj/item/food/snacks/human/kabob name = "-kabob" icon_state = "kabob" desc = "Human meat, on a stick." @@ -136,7 +136,7 @@ filling_color = "#A85340" list_reagents = list("nutriment" = 8) -/obj/item/reagent_containers/food/snacks/monkeykabob +/obj/item/food/snacks/monkeykabob name = "meat-kabob" icon_state = "kabob" desc = "Delicious meat, on a stick." @@ -144,7 +144,7 @@ filling_color = "#A85340" list_reagents = list("nutriment" = 8) -/obj/item/reagent_containers/food/snacks/tofukabob +/obj/item/food/snacks/tofukabob name = "tofu-kabob" icon_state = "kabob" desc = "Vegan meat, on a stick." @@ -152,7 +152,7 @@ filling_color = "#FFFEE0" list_reagents = list("nutriment" = 8) -/obj/item/reagent_containers/food/snacks/picoss_kabob +/obj/item/food/snacks/picoss_kabob name = "picoss-kabob" desc = "A popular Moghes streetfood consisting of vinegar-marinated space carp on a skewer with onion and chillis." icon_state = "picoss_skewer" diff --git a/code/modules/food_and_drinks/food/foods/frozen.dm b/code/modules/food_and_drinks/food/foods/frozen.dm index 069dfa297111..d00db915ed0a 100644 --- a/code/modules/food_and_drinks/food/foods/frozen.dm +++ b/code/modules/food_and_drinks/food/foods/frozen.dm @@ -5,24 +5,24 @@ //Abstract item for inheritence. -/obj/item/reagent_containers/food/snacks/frozen +/obj/item/food/snacks/frozen name = "frozen treat" desc = "If you got this, something broke! Contact a coder if this somehow spawns." icon = 'icons/obj/food/frozen_treats.dmi' icon_state = "flavorless_sc" -/obj/item/reagent_containers/food/snacks/sliceable/clowncake +/obj/item/food/snacks/sliceable/clowncake name = "clown cake" desc = "A funny cake with a clown face on it." icon = 'icons/obj/food/frozen_treats.dmi' icon_state = "clowncake" - slice_path = /obj/item/reagent_containers/food/snacks/frozen/clowncakeslice + slice_path = /obj/item/food/snacks/frozen/clowncakeslice slices_num = 5 bitesize = 3 list_reagents = list("nutriment" = 20, "sugar" = 5, "vitamin" = 5, "banana" = 15) tastes = list("cake" = 5, "sweetness" = 2, "banana" = 1, "sad clowns" = 1, "ice-cream" = 1) -/obj/item/reagent_containers/food/snacks/frozen/clowncakeslice +/obj/item/food/snacks/frozen/clowncakeslice name = "clown cake slice" desc = "A slice of bad jokes, and silly props." icon_state = "clowncake_slice" @@ -31,7 +31,7 @@ list_reagents = list("nutriment" = 4, "sugar" = 1, "vitamin" = 1, "banana" = 3) tastes = list("cake" = 5, "sweetness" = 2, "sad clowns" = 1, "ice-cream" = 1) -/obj/item/reagent_containers/food/snacks/frozen/sundae +/obj/item/food/snacks/frozen/sundae name = "sundae" desc = "Portable ice cream in its own packaging." icon_state = "sundae" @@ -42,7 +42,7 @@ // Ice Cream // ////////////////// -/obj/item/reagent_containers/food/snacks/frozen/icecream +/obj/item/food/snacks/frozen/icecream name = "ice cream" desc = "Delicious ice cream." icon_state = "icecream_cone" @@ -50,11 +50,11 @@ list_reagents = list("nutriment" = 1, "sugar" = 1) tastes = list("ice cream" = 1) -/obj/item/reagent_containers/food/snacks/frozen/icecream/Initialize(mapload) +/obj/item/food/snacks/frozen/icecream/Initialize(mapload) . = ..() update_icon(UPDATE_OVERLAYS) -/obj/item/reagent_containers/food/snacks/frozen/icecream/update_overlays() +/obj/item/food/snacks/frozen/icecream/update_overlays() . = ..() var/mutable_appearance/filling = mutable_appearance('icons/obj/food/frozen_treats.dmi', "icecream_color") var/list/reagent_colors = rgb2num(mix_color_from_reagents(reagents.reagent_list), COLORSPACE_HSV) //switching to HSV colorspace lets us easily manipulate the saturation and brightness independently @@ -62,7 +62,7 @@ filling.color = rgb(reagent_colors[1], ((1.5 * reagent_colors[2]) - 10), (clamp(reagent_colors[3], 85, 100) - 10), space = COLORSPACE_HSV) . += filling -/obj/item/reagent_containers/food/snacks/frozen/icecream/icecreamcone +/obj/item/food/snacks/frozen/icecream/icecreamcone name = "ice cream cone" desc = "Delicious ice cream." icon_state = "icecream_cone" @@ -70,7 +70,7 @@ bitesize = 3 list_reagents = list("nutriment" = 3, "sugar" = 7, "ice" = 2) -/obj/item/reagent_containers/food/snacks/frozen/icecream/wafflecone +/obj/item/food/snacks/frozen/icecream/wafflecone name = "ice cream in a waffle cone" desc = "Delicious ice cream." icon_state = "icecream_cone_waffle" @@ -78,7 +78,7 @@ bitesize = 3 list_reagents = list("nutriment" = 3, "sugar" = 7, "ice" = 2) -/obj/item/reagent_containers/food/snacks/frozen/icecream/icecreamcup +/obj/item/food/snacks/frozen/icecream/icecreamcup name = "chocolate ice cream cone" desc = "Delicious ice cream." icon_state = "icecream_cone_chocolate" @@ -86,7 +86,7 @@ bitesize = 3 list_reagents = list("nutriment" = 5, "chocolate" = 8, "ice" = 2) -/obj/item/reagent_containers/food/snacks/wafflecone +/obj/item/food/snacks/wafflecone name = "waffle cone" desc = "Delicious waffle cone, but no ice cream." icon = 'icons/obj/food/frozen_treats.dmi' @@ -94,49 +94,49 @@ list_reagents = list("nutriment" = 5) tastes = list("cream" = 2, "waffle" = 1) -/obj/item/reagent_containers/food/snacks/frozen/icecreamsandwich +/obj/item/food/snacks/frozen/icecreamsandwich name = "icecream sandwich" desc = "Portable ice cream in its own packaging." icon_state = "icecreamsandwich" list_reagents = list("nutriment" = 2, "ice" = 2) tastes = list("ice cream" = 1) -/obj/item/reagent_containers/food/snacks/frozen/berryicecreamsandwich +/obj/item/food/snacks/frozen/berryicecreamsandwich name = "strawberry icecream sandwich" desc = "Portable ice cream in its own packaging." icon_state = "strawberryicecreamsandwich" list_reagents = list("nutriment" = 2, "ice" = 2) tastes = list("ice cream" = 1, "strawberry" = 1) -/obj/item/reagent_containers/food/snacks/frozen/sundae +/obj/item/food/snacks/frozen/sundae name = "sundae" desc = "A classic dessert." icon_state = "sundae" list_reagents = list("nutriment" = 6, "banana" = 5, "vitamin" = 2) tastes = list("ice cream" = 1, "banana" = 1) -/obj/item/reagent_containers/food/snacks/frozen/honkdae +/obj/item/food/snacks/frozen/honkdae name = "honkdae" desc = "The clown's favorite dessert." icon_state = "honkdae" list_reagents = list("nutriment" = 6, "banana" = 10, "vitamin" = 4) tastes = list("ice cream" = 1, "banana" = 1, "a bad joke" = 1) -/obj/item/reagent_containers/food/snacks/frozen/cornuto +/obj/item/food/snacks/frozen/cornuto name = "cornuto" desc = "A neapolitan vanilla and chocolate ice cream cone. It menaces with a sprinkling of caramelized nuts." icon_state = "cornuto" list_reagents = list("nutriment" = 6, "hot_coco" = 4, "cream" = 2, "vanilla" = 4, "sugar" = 2) tastes = list("chopped hazelnuts" = 3, "waffle" = 5) -/obj/item/reagent_containers/food/snacks/frozen/peanutbuttermochi +/obj/item/food/snacks/frozen/peanutbuttermochi name = "peanut butter ice cream mochi" desc = "A classic dessert at the Arabia Street Night Market in Prospect, peanut butter ice cream mochi is made with a peanut-butter flavoured ice cream as the main filling, and coated in crushed peanuts in the Taiwanese tradition." icon_state = "pb_ice_cream_mochi" list_reagents = list("nutriment" = 4, "sugar" = 6, "peanutbutter" = 4, "milk" = 2) tastes = list("peanut butter" = 1, "mochi" = 1) -/obj/item/reagent_containers/food/snacks/frozen/spacefreezy +/obj/item/food/snacks/frozen/spacefreezy name = "spacefreezy" desc = "The best ice cream in space." icon_state = "spacefreezy" @@ -147,113 +147,113 @@ // Snow Cones // ////////////////// -/obj/item/reagent_containers/food/snacks/frozen/snowcone +/obj/item/food/snacks/frozen/snowcone name = "flavorless snowcone" desc = "It's just shaved ice. Still fun to chew on." icon_state = "flavorless_sc" - trash = /obj/item/reagent_containers/food/drinks/sillycup + trash = /obj/item/reagent_containers/drinks/sillycup list_reagents = list("water" = 10, "ice" = 5) tastes = list("cold water" = 1) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/apple +/obj/item/food/snacks/frozen/snowcone/apple name = "apple snowcone" desc = "Apple syrup drizzled over a snowball in a paper cup." icon_state = "amber_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "applejuice" = 5) tastes = list("ice" = 1, "water" = 1, "apples" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/berry +/obj/item/food/snacks/frozen/snowcone/berry name = "berry snowcone" desc = "Berry syrup drizzled over a snowball in a paper cup." icon_state = "berry_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "berryjuice" = 5) tastes = list("ice" = 1, "water" = 1, "berries" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/bluecherry +/obj/item/food/snacks/frozen/snowcone/bluecherry name = "bluecherry snowcone" desc = "Bluecherry syrup drizzled over a snowball in a paper cup, how rare!" icon_state = "blue_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "bluecherryjelly" = 5) tastes = list("ice" = 1, "water" = 1, "bluecherries" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/cherry +/obj/item/food/snacks/frozen/snowcone/cherry name = "cherry snowcone" desc = "Cherry syrup drizzled over a snowball in a paper cup." icon_state = "red_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "cherryjelly" = 5) tastes = list("ice" = 1, "water" = 1, "cherries" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/fruitsalad +/obj/item/food/snacks/frozen/snowcone/fruitsalad name = "fruit salad snowcone" desc = "A delightful mix of citrus syrups drizzled over a snowball in a paper cup." icon_state = "fruitsalad_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "limejuice" = 5, "lemonjuice" = 5, "orangejuice" = 5) tastes = list("ice" = 1, "water" = 1, "oranges" = 5, "lemons" = 5, "limes" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/grape +/obj/item/food/snacks/frozen/snowcone/grape name = "grape snowcone" desc = "Grape syrup drizzled over a snowball in a paper cup." icon_state = "grape_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "grapejuice" = 5) tastes = list("ice" = 1, "water" = 1, "grapes" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/honey +/obj/item/food/snacks/frozen/snowcone/honey name = "honey snowcone" desc = "Honey drizzled over a snowball in a paper cup." icon_state = "amber_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "honey" = 5) tastes = list("ice" = 1, "water" = 1, "honey" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/lemon +/obj/item/food/snacks/frozen/snowcone/lemon name = "lemon snowcone" desc = "Lemon syrup drizzled over a snowball in a paper cup." icon_state = "lemon_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "lemonjuice" = 5) tastes = list("ice" = 1, "water" = 1, "lemons" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/lime +/obj/item/food/snacks/frozen/snowcone/lime name = "lime snowcone" desc = "Lime syrup drizzled over a snowball in a paper cup." icon_state = "lime_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "limejuice" = 5) tastes = list("ice" = 1, "water" = 1, "limes" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/mime +/obj/item/food/snacks/frozen/snowcone/mime name = "mime snowcone" desc = "..." icon_state = "mime_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "nothing" = 5) tastes = list("ice" = 1, "water" = 1, "silence" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/orange +/obj/item/food/snacks/frozen/snowcone/orange name = "orange snowcone" desc = "Orange syrup drizzled over a snowball in a paper cup." icon_state = "orange_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "orangejuice" = 5) tastes = list("ice" = 1, "water" = 1, "oranges" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/pineapple +/obj/item/food/snacks/frozen/snowcone/pineapple name = "pineapple snowcone" desc = "Pineapple syrup drizzled over a snowball in a paper cup." icon_state = "pineapple_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "pineapplejuice" = 5) tastes = list("ice" = 1, "water" = 1, "pineapple" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/rainbow +/obj/item/food/snacks/frozen/snowcone/rainbow name = "rainbow snowcone" desc = "A very colorful snowball in a paper cup." icon_state = "rainbow_sc" list_reagents = list("water" = 10, "ice" = 5, "colorful_reagent" = 5) tastes = list("ice" = 1, "water" = 1, "rainbows" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/cola +/obj/item/food/snacks/frozen/snowcone/cola name = "space cola snowcone" desc = "Space Cola drizzled over a snowball in a paper cup." icon_state = "soda_sc" list_reagents = list("water" = 10, "ice" = 5, "nutriment" = 1, "cola" = 5) tastes = list("ice" = 1, "water" = 1, "soda" = 5) -/obj/item/reagent_containers/food/snacks/frozen/snowcone/spacemountain +/obj/item/food/snacks/frozen/snowcone/spacemountain name = "space mountain wind snowcone" desc = "Space Mountain Wind drizzled over a snowball in a paper cup." icon_state = "mountainwind_sc" @@ -264,7 +264,7 @@ // Popsicles // ///////////////// -/obj/item/reagent_containers/food/snacks/frozen/popsicle +/obj/item/food/snacks/frozen/popsicle name = "jumbo icecream" desc = "A luxurious ice cream covered in rich chocolate. It seems smaller than you remember it being." icon_state = "jumbo" @@ -272,63 +272,63 @@ list_reagents = list("nutriment" = 4, "sugar" = 4, "chocolate" = 3) tastes = list("ice cream" = 1, "chocolate" = 1, "vanilla" = 1) -/obj/item/reagent_containers/food/snacks/frozen/popsicle/bananatop +/obj/item/food/snacks/frozen/popsicle/bananatop name = "banana topsicle" desc = "A frozen treat made from tofu and banana juice blended smooth, then frozen. Popular in rural Japan in the summer." icon_state = "topsicle_banana" list_reagents = list("vitamin" = 4, "sugar" = 6, "banana" = 4) tastes = list("bananas" = 1, "tofu" = 1) -/obj/item/reagent_containers/food/snacks/frozen/popsicle/berrytop +/obj/item/food/snacks/frozen/popsicle/berrytop name = "berry topsicle" desc = "A frozen treat made from tofu and berry juice blended smooth, then frozen. Supposedly a favourite of bears, but that makes no sense..." icon_state = "topsicle_berry" list_reagents = list("vitamin" = 4, "sugar" = 6, "berryjuice" = 4) tastes = list("berries" = 1, "tofu" = 1) -/obj/item/reagent_containers/food/snacks/frozen/popsicle/pineappletop +/obj/item/food/snacks/frozen/popsicle/pineappletop name = "pineapple topsicle" desc = "A frozen treat made from tofu and pineapple juice blended smooth, then frozen. As seen on TV." icon_state = "topsicle_pineapple" list_reagents = list("vitamin" = 4, "sugar" = 6, "pineapplejuice" = 4) tastes = list("pineapples" = 1, "tofu" = 1) -/obj/item/reagent_containers/food/snacks/frozen/popsicle/licoricecream +/obj/item/food/snacks/frozen/popsicle/licoricecream name = "licorice creamsicle" desc = "A salty licorice ice cream. A salty frozen treat." icon_state = "licorice_creamsicle" list_reagents = list("nutriment" = 4, "cream" = 2, "vanilla" = 1, "sugar" = 4, "salt" = 1) tastes = list("salty licorice" = 1) -/obj/item/reagent_containers/food/snacks/frozen/popsicle/orangecream +/obj/item/food/snacks/frozen/popsicle/orangecream name = "orange creamsicle" desc = "A classic orange creamsicle. A sunny frozen treat." icon_state = "creamsicle_o" list_reagents = list("orangejuice" = 4, "cream" = 2, "vanilla" = 2, "sugar" = 4) tastes = list("ice cream" = 1, "oranges" = 1, "vanilla" = 1) -/obj/item/reagent_containers/food/snacks/frozen/popsicle/berrycream +/obj/item/food/snacks/frozen/popsicle/berrycream name = "berry creamsicle" desc = "A vibrant berry creamsicle. A berry good frozen treat." icon_state = "creamsicle_m" list_reagents = list("berryjuice" = 4, "cream" = 2, "vanilla" = 2, "sugar" = 4) tastes = list("ice cream" = 1, "berries" = 1, "vanilla" = 1) -/obj/item/reagent_containers/food/snacks/frozen/popsicle/frozenpineapple +/obj/item/food/snacks/frozen/popsicle/frozenpineapple name = "frozen pineapple pop" desc = "Few cultures love pineapple as much as the Martians, and this dessert proves that- frozen pineapple, on a stick, with just a little dunk of dark chocolate." icon_state = "pineapple_pop" list_reagents = list("pineapplejuice" = 4, "sugar" = 4, "nutriment" = 2, "vitamin" = 2) tastes = list("cold pineapple" = 1, "chocolate" = 1) -/obj/item/reagent_containers/food/snacks/frozen/popsicle/sea_salt +/obj/item/food/snacks/frozen/popsicle/sea_salt name = "sea salt ice-cream bar" desc = "This sky-blue ice-cream bar is flavoured with only the finest imported sea salt. Salty... no, sweet!" icon_state = "sea_salt_pop" list_reagents = list("salt" = 1, "nutriment" = 2, "cream" = 2, "vanilla" = 2, "sugar"= 4,) tastes = list("salt" = 1, "sweet" = 1) -/obj/item/reagent_containers/food/snacks/frozen/popsicle/ant +/obj/item/food/snacks/frozen/popsicle/ant name = "ant popsicle" desc = "A colony of ants suspended in hardened sugar. Those things are dead, right?" icon_state = "ant_pop" diff --git a/code/modules/food_and_drinks/food/foods/ingredients.dm b/code/modules/food_and_drinks/food/foods/ingredients.dm index b6b9baa121b3..a0cf80c61b6a 100644 --- a/code/modules/food_and_drinks/food/foods/ingredients.dm +++ b/code/modules/food_and_drinks/food/foods/ingredients.dm @@ -3,7 +3,7 @@ // Tofu & Soy // ////////////////////// -/obj/item/reagent_containers/food/snacks/tofu +/obj/item/food/snacks/tofu name = "tofu" icon_state = "tofu" desc = "We all love tofu." @@ -13,7 +13,7 @@ tastes = list("tofu" = 1) ingredient_name = "tofu chunk" -/obj/item/reagent_containers/food/snacks/fried_tofu +/obj/item/food/snacks/fried_tofu name = "fried tofu" icon_state = "tofu" desc = "Proof that even vegetarians crave unhealthy foods." @@ -22,7 +22,7 @@ list_reagents = list("plantmatter" = 3) tastes = list("tofu" = 1) -/obj/item/reagent_containers/food/snacks/soydope +/obj/item/food/snacks/soydope name = "soy dope" icon_state = "soydope" desc = "Like regular dope, but for the health conscious consumer." @@ -36,27 +36,27 @@ // Cheese // ////////////////////// -/obj/item/reagent_containers/food/snacks/sliceable/cheesewheel +/obj/item/food/snacks/sliceable/cheesewheel name = "cheese wheel" desc = "A big wheel of delicious Cheddar." icon_state = "cheesewheel" - slice_path = /obj/item/reagent_containers/food/snacks/cheesewedge + slice_path = /obj/item/food/snacks/cheesewedge slices_num = 5 filling_color = "#FFF700" list_reagents = list("nutriment" = 15, "vitamin" = 5, "cheese" = 20) tastes = list("cheese" = 1) -/obj/item/reagent_containers/food/snacks/cheesewedge +/obj/item/food/snacks/cheesewedge name = "cheese wedge" desc = "A wedge of delicious Cheddar. The cheese wheel it was cut from can't have gone far." icon_state = "cheesewedge" filling_color = "#FFF700" tastes = list("cheese" = 1) -/obj/item/reagent_containers/food/snacks/cheesewedge/presliced +/obj/item/food/snacks/cheesewedge/presliced list_reagents = list("nutriment" = 3, "vitamin" = 1, "cheese" = 4) - -/obj/item/reagent_containers/food/snacks/weirdcheesewedge + +/obj/item/food/snacks/weirdcheesewedge name = "weird cheese" desc = "Some kind of... gooey, messy, gloopy thing. Similar to cheese, but only in the broad sense of the word." icon_state = "weirdcheesewedge" @@ -68,7 +68,7 @@ // Plants // ////////////////////// -/obj/item/reagent_containers/food/snacks/hugemushroomslice +/obj/item/food/snacks/hugemushroomslice name = "huge mushroom slice" desc = "A slice from a huge mushroom." icon_state = "hugemushroomslice" @@ -77,14 +77,14 @@ list_reagents = list("plantmatter" = 3, "vitamin" = 1) tastes = list("mushroom" = 1) -/obj/item/reagent_containers/food/snacks/watermelonslice +/obj/item/food/snacks/watermelonslice name = "watermelon slice" desc = "A slice of watery goodness." icon_state = "watermelonslice" // Sprite created by https://github.com/binarysudoku for Goonstation, They have relicensed it for our use. filling_color = "#FF3867" tastes = list("watermelon" = 1) -/obj/item/reagent_containers/food/snacks/tomatoslice +/obj/item/food/snacks/tomatoslice name = "tomato slice" desc = "A fresh slice of tomato." icon_state = "tomatoslice" @@ -92,7 +92,7 @@ list_reagents = list("plantmatter" = 2) tastes = list("tomato" = 1) -/obj/item/reagent_containers/food/snacks/pineappleslice +/obj/item/food/snacks/pineappleslice name = "pineapple slices" desc = "Rings of pineapple." icon_state = "pineappleslice" // Sprite created by https://github.com/binarysudoku for Goonstation, They have relicensed it for our use. @@ -104,7 +104,7 @@ // Dough // ////////////////////// -/obj/item/reagent_containers/food/snacks/dough +/obj/item/food/snacks/dough name = "dough" desc = "A piece of dough." icon = 'icons/obj/food/food_ingredients.dmi' @@ -113,10 +113,10 @@ tastes = list("dough" = 1) // Dough + rolling pin = flat dough -/obj/item/reagent_containers/food/snacks/dough/attackby(obj/item/I, mob/user, params) +/obj/item/food/snacks/dough/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/kitchen/rollingpin)) if(isturf(loc)) - new /obj/item/reagent_containers/food/snacks/sliceable/flatdough(loc) + new /obj/item/food/snacks/sliceable/flatdough(loc) to_chat(user, "You flatten [src].") qdel(src) else @@ -125,18 +125,18 @@ ..() // slicable into 3xdoughslices -/obj/item/reagent_containers/food/snacks/sliceable/flatdough +/obj/item/food/snacks/sliceable/flatdough name = "flat dough" desc = "Some flattened dough." icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "flat dough" - slice_path = /obj/item/reagent_containers/food/snacks/doughslice + slice_path = /obj/item/food/snacks/doughslice slices_num = 3 list_reagents = list("nutriment" = 6) tastes = list("dough" = 1) -/obj/item/reagent_containers/food/snacks/doughslice +/obj/item/food/snacks/doughslice name = "dough slice" desc = "The building block of an impressive dish." icon = 'icons/obj/food/food_ingredients.dmi' @@ -147,7 +147,7 @@ ///cookies by Ume -/obj/item/reagent_containers/food/snacks/cookiedough +/obj/item/food/snacks/cookiedough var/flat = FALSE name = "pastry dough" icon = 'icons/obj/food/food_ingredients.dmi' @@ -156,19 +156,19 @@ list_reagents = list("nutriment" = 5, "sugar" = 5) tastes = list("dough" = 1, "sugar" = 1) -/obj/item/reagent_containers/food/snacks/cookiedough/update_name() +/obj/item/food/snacks/cookiedough/update_name() . = ..() if(flat) name = "flat pastry dough" -/obj/item/reagent_containers/food/snacks/cookiedough/update_icon_state() +/obj/item/food/snacks/cookiedough/update_icon_state() if(flat) icon_state = "cookiedough_flat" else icon_state = "cookiedough" // Dough + rolling pin = flat cookie dough // Flat dough + circular cutter = unbaked cookies -/obj/item/reagent_containers/food/snacks/cookiedough/attackby(obj/item/I, mob/user, params) +/obj/item/food/snacks/cookiedough/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/kitchen/rollingpin) && !flat) if(isturf(loc)) to_chat(user, "You flatten [src].") @@ -178,7 +178,7 @@ to_chat(user, "You need to put [src] on a surface to roll it out!") else if(istype(I, /obj/item/kitchen/cutter) && flat) if(isturf(loc)) - new /obj/item/reagent_containers/food/snacks/rawcookies(loc) + new /obj/item/food/snacks/rawcookies(loc) to_chat(user, "You cut [src] into cookies.") qdel(src) else @@ -187,17 +187,17 @@ return ..() -/obj/item/reagent_containers/food/snacks/rawcookies +/obj/item/food/snacks/rawcookies name = "raw cookies" desc = "Ready for oven!" icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "unbaked_cookies" list_reagents = list("nutriment" = 5, "sugar" = 5) -/obj/item/reagent_containers/food/snacks/rawcookies/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers/food/snacks/choc_pile)) +/obj/item/food/snacks/rawcookies/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/food/snacks/choc_pile)) if(isturf(loc)) - new /obj/item/reagent_containers/food/snacks/rawcookies/chocochips(loc) + new /obj/item/food/snacks/rawcookies/chocochips(loc) to_chat(user, "You sprinkle [I] all over the cookies.") qdel(src) qdel(I) @@ -206,7 +206,7 @@ else return ..() -/obj/item/reagent_containers/food/snacks/rawcookies/chocochips +/obj/item/food/snacks/rawcookies/chocochips name = "raw cookies" desc = "Ready for oven! They have little pieces of chocolate all over them" icon = 'icons/obj/food/food_ingredients.dmi' @@ -218,7 +218,7 @@ // Chocolate // ////////////////////// -/obj/item/reagent_containers/food/snacks/chocolatebar +/obj/item/food/snacks/chocolatebar name = "chocolate bar" desc = "Such sweet, fattening food." icon_state = "chocolatebar" @@ -227,10 +227,10 @@ tastes = list("chocolate" = 1) ///Chocolate crumbles/pile -/obj/item/reagent_containers/food/snacks/chocolatebar/attackby(obj/item/I, mob/user, params) +/obj/item/food/snacks/chocolatebar/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/kitchen/knife)) if(isturf(loc)) - new /obj/item/reagent_containers/food/snacks/choc_pile(loc) + new /obj/item/food/snacks/choc_pile(loc) to_chat(user, "You cut [src] into little crumbles.") qdel(src) else @@ -239,7 +239,7 @@ return ..() -/obj/item/reagent_containers/food/snacks/choc_pile //for reagent chocolate being spilled on turfs +/obj/item/food/snacks/choc_pile //for reagent chocolate being spilled on turfs name = "pile of chocolate" desc = "A pile of pure chocolate pieces." icon_state = "cocoa" @@ -252,7 +252,7 @@ // Misc // ////////////////////// -/obj/item/reagent_containers/food/snacks/ectoplasm +/obj/item/food/snacks/ectoplasm name = "ectoplasm" desc = "A luminescent blob of what scientists refer to as 'ghost goo'." icon = 'icons/obj/wizard.dmi' diff --git a/code/modules/food_and_drinks/food/foods/junkfood.dm b/code/modules/food_and_drinks/food/foods/junkfood.dm index 3c3397fa0c92..f410d2db2ff6 100644 --- a/code/modules/food_and_drinks/food/foods/junkfood.dm +++ b/code/modules/food_and_drinks/food/foods/junkfood.dm @@ -3,7 +3,7 @@ // Vendor // ////////////////////// -/obj/item/reagent_containers/food/snacks/chips +/obj/item/food/snacks/chips name = "chips" desc = "Commander Riker's What-The-Crisps." icon_state = "chips" @@ -15,7 +15,7 @@ list_reagents = list("nutriment" = 1, "sodiumchloride" = 1, "sugar" = 3) tastes = list("crisps" = 1) -/obj/item/reagent_containers/food/snacks/sosjerky +/obj/item/food/snacks/sosjerky name = "Scaredy's Private Reserve Beef Jerky" icon_state = "sosjerky" desc = "Beef jerky made from the finest space cows." @@ -26,7 +26,7 @@ list_reagents = list("protein" = 1, "sugar" = 3) tastes = list("chewy beef" = 1) -/obj/item/reagent_containers/food/snacks/pistachios +/obj/item/food/snacks/pistachios name = "pistachios" icon_state = "pistachios" desc = "Deliciously salted pistachios. A perfectly valid choice..." @@ -37,7 +37,7 @@ list_reagents = list("plantmatter" = 2, "sodiumchloride" = 1, "sugar" = 4) tastes = list("pistachios" = 1) -/obj/item/reagent_containers/food/snacks/no_raisin +/obj/item/food/snacks/no_raisin name = "4no Raisins" icon_state = "4no_raisins" desc = "Best raisins in the universe. Not sure why." @@ -48,7 +48,7 @@ list_reagents = list("plantmatter" = 2, "sugar" = 4) tastes = list("dried raisins" = 1) -/obj/item/reagent_containers/food/snacks/spacetwinkie +/obj/item/food/snacks/spacetwinkie name = "Space Twinkie" icon_state = "space_twinkie" desc = "Guaranteed to survive longer then you will." @@ -58,7 +58,7 @@ list_reagents = list("sugar" = 4) tastes = list("twinkies" = 1) -/obj/item/reagent_containers/food/snacks/cheesiehonkers +/obj/item/food/snacks/cheesiehonkers name = "Cheesie Honkers" icon_state = "cheesie_honkers" desc = "Bite sized cheesie snacks that will honk all over your mouth." @@ -69,7 +69,7 @@ list_reagents = list("nutriment" = 1, "fake_cheese" = 2, "sugar" = 3) tastes = list("cheese" = 1, "crisps" = 2) -/obj/item/reagent_containers/food/snacks/syndicake +/obj/item/food/snacks/syndicake name = "Syndi-Cakes" icon_state = "syndi_cakes" desc = "An extremely moist snack cake that tastes just as good after being nuked." @@ -80,7 +80,7 @@ list_reagents = list("nutriment" = 4, "salglu_solution" = 5) tastes = list("sweetness" = 3, "cake" = 1) -/obj/item/reagent_containers/food/snacks/tastybread +/obj/item/food/snacks/tastybread name = "bread tube" desc = "Bread in a tube. Chewy and surprisingly tasty." icon_state = "tastybread" @@ -91,7 +91,7 @@ list_reagents = list("nutriment" = 2, "sugar" = 4) tastes = list("bread" = 1) -/obj/item/reagent_containers/food/snacks/stroopwafel +/obj/item/food/snacks/stroopwafel name = "stroopwafel" desc = "Straight from the snack factories of Space Den Haag comes a classic dutch treat!" icon_state = "stroopwafel" @@ -100,7 +100,7 @@ list_reagents = list("nutriment" = 10, "sugar" = 4) tastes = list("syrup" = 3, "waffle" = 2) -/obj/item/reagent_containers/food/snacks/twimsts +/obj/item/food/snacks/twimsts name = "Twimsts" desc = "Sweet twisted sticks made of liquorice, can be used to make edible handcuffs!" icon_state = "twimsts" @@ -111,7 +111,7 @@ list_reagents = list("nutriment" = 2, "sugar" = 10) tastes = list("sweetness" = 3, "liquorice" = 2) -/obj/item/reagent_containers/food/snacks/twimsts/attack_self(mob/user) +/obj/item/food/snacks/twimsts/attack_self(mob/user) var/obj/item/restraints/handcuffs/twimsts/L = new /obj/item/restraints/handcuffs/twimsts L.create_reagents(100) reagents.copy_to(L, reagents.total_volume) @@ -125,13 +125,13 @@ // Homemade // ////////////////////// -/obj/item/reagent_containers/food/snacks/sosjerky/healthy +/obj/item/food/snacks/sosjerky/healthy name = "homemade beef jerky" desc = "Homemade beef jerky made from the finest space cows." list_reagents = list("nutriment" = 3, "vitamin" = 1) junkiness = 0 -/obj/item/reagent_containers/food/snacks/no_raisin/healthy +/obj/item/food/snacks/no_raisin/healthy name = "homemade raisins" desc = "homemade raisins, the best in all of spess." list_reagents = list("nutriment" = 3, "vitamin" = 2) diff --git a/code/modules/food_and_drinks/food/foods/meat.dm b/code/modules/food_and_drinks/food/foods/meat.dm index 921a42adf7d8..f03044731ce8 100644 --- a/code/modules/food_and_drinks/food/foods/meat.dm +++ b/code/modules/food_and_drinks/food/foods/meat.dm @@ -3,7 +3,7 @@ // Raw Meat // ////////////////////// -/obj/item/reagent_containers/food/snacks/meat +/obj/item/food/snacks/meat name = "meat" desc = "A slab of meat." icon = 'icons/obj/food/meat.dmi' @@ -15,11 +15,11 @@ ingredient_name = "slab of meat" ingredient_name_plural = "slabs of meat" -/obj/item/reagent_containers/food/snacks/meat/attackby(obj/item/W, mob/user, params) +/obj/item/food/snacks/meat/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/kitchen/knife) || istype(W, /obj/item/scalpel)) - new /obj/item/reagent_containers/food/snacks/rawcutlet(src) - new /obj/item/reagent_containers/food/snacks/rawcutlet(src) - new /obj/item/reagent_containers/food/snacks/rawcutlet(src) + new /obj/item/food/snacks/rawcutlet(src) + new /obj/item/food/snacks/rawcutlet(src) + new /obj/item/food/snacks/rawcutlet(src) user.visible_message( \ "[user] cuts [src] with [W]!", \ "You cut [src] with [W]!" \ @@ -28,42 +28,42 @@ else ..() -/obj/item/reagent_containers/food/snacks/meat/syntiflesh +/obj/item/food/snacks/meat/syntiflesh name = "synthetic meat" desc = "A synthetic slab of flesh." -/obj/item/reagent_containers/food/snacks/meat/human +/obj/item/food/snacks/meat/human name = "-meat" var/subjectname = "" var/subjectjob = null tastes = list("salty meat" = 1) -/obj/item/reagent_containers/food/snacks/meat/slab/meatproduct +/obj/item/food/snacks/meat/slab/meatproduct name = "meat product" desc = "A slab of reclaimed and chemically processed meat product." -/obj/item/reagent_containers/food/snacks/meat/slab/gorilla +/obj/item/food/snacks/meat/slab/gorilla name = "gorilla meat" desc = "Much meatier than monkey meat." list_reagents = list("nutriment" = 5, "vitamin" = 1) -/obj/item/reagent_containers/food/snacks/meat/monkey +/obj/item/food/snacks/meat/monkey //same as plain meat -/obj/item/reagent_containers/food/snacks/meat/corgi +/obj/item/food/snacks/meat/corgi name = "corgi meat" desc = "Tastes like the Head of Personnel's hopes and dreams." -/obj/item/reagent_containers/food/snacks/meat/pug +/obj/item/food/snacks/meat/pug name = "pug meat" desc = "Slightly less adorable in sliced form." -/obj/item/reagent_containers/food/snacks/meat/ham +/obj/item/food/snacks/meat/ham name = "ham" desc = "For when you need to go ham." list_reagents = list("protein" = 3, "porktonium" = 10) -/obj/item/reagent_containers/food/snacks/meat/meatwheat +/obj/item/food/snacks/meat/meatwheat name = "meatwheat clump" desc = "This doesn't look like meat, but your standards aren't that high to begin with." list_reagents = list("nutriment" = 3, "vitamin" = 2, "blood" = 5) @@ -71,7 +71,7 @@ icon_state = "meatwheat_clump" bitesize = 4 -/obj/item/reagent_containers/food/snacks/meat/tomatomeat +/obj/item/food/snacks/meat/tomatomeat name = "tomato meat slice" desc = "A slice from a huge tomato." icon_state = "tomatomeat" @@ -80,7 +80,7 @@ list_reagents = list("protein" = 2) tastes = list("tomato" = 1) -/obj/item/reagent_containers/food/snacks/rawcutlet +/obj/item/food/snacks/rawcutlet name = "raw cutlet" desc = "A thin strip of raw meat." icon = 'icons/obj/food/food_ingredients.dmi' @@ -88,13 +88,13 @@ bitesize = 1 list_reagents = list("protein" = 1) -/obj/item/reagent_containers/food/snacks/rawcutlet/attackby(obj/item/W, mob/user, params) +/obj/item/food/snacks/rawcutlet/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/kitchen/knife) || istype(W, /obj/item/scalpel)) user.visible_message( \ "[user] cuts the raw cutlet with [W]!", \ "You cut the raw cutlet with [W]!" \ ) - var/obj/item/reagent_containers/food/snacks/raw_bacon/bacon = new(get_turf(src)) + var/obj/item/food/snacks/raw_bacon/bacon = new(get_turf(src)) if(ishuman(loc)) var/mob/living/carbon/human/H = loc qdel(src) @@ -108,7 +108,7 @@ // Cannot be used in the usual meat-based food recipies but can be used as cloning pod biomass. -/obj/item/reagent_containers/food/snacks/monstermeat +/obj/item/food/snacks/monstermeat // Abstract object used for inheritance. I don't see why you would want one. // It's just a convenience to set all monstermeats as biomass-able at once, // in the GLOB.cloner_biomass_items list. @@ -118,7 +118,7 @@ icon = 'icons/obj/food/meat.dmi' icon_state = "bearmeat" -/obj/item/reagent_containers/food/snacks/monstermeat/bearmeat +/obj/item/food/snacks/monstermeat/bearmeat name = "bear meat" desc = "A very manly slab of meat." icon_state = "bearmeat" @@ -127,7 +127,7 @@ list_reagents = list("protein" = 12, "morphine" = 5, "vitamin" = 2) tastes = list("meat" = 1, "salmon" = 1) -/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat +/obj/item/food/snacks/monstermeat/xenomeat name = "meat" desc = "A slab of meat. It's green!" icon_state = "xenomeat" @@ -136,7 +136,7 @@ list_reagents = list("protein" = 3, "vitamin" = 1) tastes = list("meat" = 1, "acid" = 1) -/obj/item/reagent_containers/food/snacks/monstermeat/spidermeat +/obj/item/food/snacks/monstermeat/spidermeat name = "spider meat" desc = "A slab of spider meat. Not very appetizing." icon_state = "spidermeat" @@ -144,7 +144,7 @@ list_reagents = list("protein" = 3, "toxin" = 3, "vitamin" = 1) tastes = list("cobwebs" = 1) -/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat +/obj/item/food/snacks/monstermeat/lizardmeat name = "mutant lizard meat" desc = "A peculiar slab of meat. It looks scaly and radioactive." icon_state = "xenomeat" @@ -153,14 +153,14 @@ list_reagents = list("protein" = 3, "toxin" = 3) tastes = list("tough meat" = 1) -/obj/item/reagent_containers/food/snacks/monstermeat/spiderleg +/obj/item/food/snacks/monstermeat/spiderleg name = "spider leg" desc = "A still twitching leg of a giant spider. You don't really want to eat this, do you?" icon_state = "spiderleg" list_reagents = list("protein" = 2, "toxin" = 2) tastes = list("cobwebs" = 1, "creepy motion" = 1) -/obj/item/reagent_containers/food/snacks/raw_bacon +/obj/item/food/snacks/raw_bacon name = "raw bacon" desc = "God's gift to man in uncooked form." icon = 'icons/obj/food/meat.dmi' @@ -168,30 +168,30 @@ list_reagents = list("nutriment" = 1, "porktonium" = 10) tastes = list("bacon" = 1) -/obj/item/reagent_containers/food/snacks/monstermeat/spidereggs +/obj/item/food/snacks/monstermeat/spidereggs name = "spider eggs" desc = "A cluster of juicy spider eggs. A great side dish for when you don't care about your health." icon_state = "spidereggs" list_reagents = list("protein" = 2, "toxin" = 2) tastes = list("cobwebs" = 1, "spider juice" = 1) -/obj/item/reagent_containers/food/snacks/monstermeat/goliath +/obj/item/food/snacks/monstermeat/goliath name = "goliath meat" desc = "A slab of goliath meat. It's not very edible now, but it cooks great in lava." icon_state = "goliathmeat" list_reagents = list("protein" = 3, "toxin" = 5) tastes = list("tough meat" = 1) -/obj/item/reagent_containers/food/snacks/monstermeat/goliath/burn() +/obj/item/food/snacks/monstermeat/goliath/burn() visible_message("[src] finishes cooking!") - new /obj/item/reagent_containers/food/snacks/goliath_steak(loc) + new /obj/item/food/snacks/goliath_steak(loc) qdel(src) ////////////////////// // Cooked Meat // ////////////////////// -/obj/item/reagent_containers/food/snacks/meatsteak +/obj/item/food/snacks/meatsteak name = "meat steak" desc = "A piece of hot spicy meat." icon = 'icons/obj/food/meat.dmi' @@ -202,7 +202,7 @@ list_reagents = list("nutriment" = 5) tastes = list("meat" = 1) -/obj/item/reagent_containers/food/snacks/bacon +/obj/item/food/snacks/bacon name = "bacon" desc = "It looks crispy and tastes amazing! Mmm... Bacon." icon = 'icons/obj/food/meat.dmi' @@ -210,7 +210,7 @@ list_reagents = list("nutriment" = 4, "porktonium" = 10, "msg" = 4) tastes = list("bacon" = 1) -/obj/item/reagent_containers/food/snacks/telebacon +/obj/item/food/snacks/telebacon name = "tele bacon" desc = "It tastes a little odd but it's still delicious." icon = 'icons/obj/food/meat.dmi' @@ -219,21 +219,21 @@ list_reagents = list("nutriment" = 4, "porktonium" = 10) tastes = list("bacon" = 1) -/obj/item/reagent_containers/food/snacks/telebacon/Initialize(mapload) +/obj/item/food/snacks/telebacon/Initialize(mapload) . = ..() baconbeacon = new /obj/item/radio/beacon/bacon(src) -/obj/item/reagent_containers/food/snacks/telebacon/Destroy() +/obj/item/food/snacks/telebacon/Destroy() QDEL_NULL(baconbeacon) return ..() -/obj/item/reagent_containers/food/snacks/telebacon/On_Consume(mob/M, mob/user) +/obj/item/food/snacks/telebacon/On_Consume(mob/M, mob/user) if(!reagents.total_volume) baconbeacon.forceMove(user) baconbeacon.digest_delay() baconbeacon = null -/obj/item/reagent_containers/food/snacks/meatball +/obj/item/food/snacks/meatball name = "meatball" desc = "A great meal all round." icon = 'icons/obj/food/meat.dmi' @@ -242,7 +242,7 @@ list_reagents = list("protein" = 4, "vitamin" = 1) tastes = list("meat" = 1) -/obj/item/reagent_containers/food/snacks/sausage +/obj/item/food/snacks/sausage name = "sausage" desc = "A piece of mixed and cased meat." icon = 'icons/obj/food/meat.dmi' @@ -251,7 +251,7 @@ list_reagents = list("protein" = 6, "vitamin" = 1, "porktonium" = 10) tastes = list("meat" = 1) -/obj/item/reagent_containers/food/snacks/cutlet +/obj/item/food/snacks/cutlet name = "cutlet" desc = "A tasty meat slice." icon = 'icons/obj/food/food_ingredients.dmi' @@ -259,7 +259,7 @@ list_reagents = list("protein" = 2) tastes = list("meat" = 1) -/obj/item/reagent_containers/food/snacks/spidereggsham +/obj/item/food/snacks/spidereggsham name = "green eggs and ham" desc = "Would you eat them on a train? Would you eat them on a plane? Would you eat them on a state of the art corporate deathtrap floating through space?" icon = 'icons/obj/food/meat.dmi' @@ -269,7 +269,7 @@ list_reagents = list("nutriment" = 6) tastes = list("cobwebs" = 1, "the colour green" = 1) -/obj/item/reagent_containers/food/snacks/boiledspiderleg +/obj/item/food/snacks/boiledspiderleg name = "boiled spider leg" desc = "A giant spider's leg that's still twitching after being cooked. Gross!" icon = 'icons/obj/food/meat.dmi' @@ -279,7 +279,7 @@ list_reagents = list("nutriment" = 3, "capsaicin" = 2) tastes = list("cobwebs" = 1, "hot peppers" = 1) -/obj/item/reagent_containers/food/snacks/wingfangchu +/obj/item/food/snacks/wingfangchu name = "wing fang chu" desc = "A savory dish of alien wing wang in soy. Wait, what?" icon = 'icons/obj/food/soupsalad.dmi' @@ -289,7 +289,7 @@ list_reagents = list("nutriment" = 6, "soysauce" = 5, "vitamin" = 2) tastes = list("soy" = 1) -/obj/item/reagent_containers/food/snacks/goliath_steak +/obj/item/food/snacks/goliath_steak name = "goliath steak" desc = "A delicious, lava cooked steak." resistance_flags = LAVA_PROOF | FIRE_PROOF @@ -299,7 +299,7 @@ list_reagents = list("protein" = 6, "vitamin" = 2) tastes = list("meat" = 1) -/obj/item/reagent_containers/food/snacks/fried_vox +/obj/item/food/snacks/fried_vox name = "Kentucky Fried Vox" desc = "Bucket of voxxy, yaya!" icon = 'icons/obj/food/meat.dmi' @@ -312,7 +312,7 @@ // Cubes // ////////////////////// -/obj/item/reagent_containers/food/snacks/monkeycube +/obj/item/food/snacks/monkeycube name = "monkey cube" desc = "Just add water!" icon_state = "monkeycube" @@ -323,17 +323,17 @@ list_reagents = list("nutriment" = 2) tastes = list("the jungle" = 1, "bananas" = 1) -/obj/item/reagent_containers/food/snacks/monkeycube/water_act(volume, temperature, source, method = REAGENT_TOUCH) +/obj/item/food/snacks/monkeycube/water_act(volume, temperature, source, method = REAGENT_TOUCH) . = ..() if(volume >= 1) return Expand() -/obj/item/reagent_containers/food/snacks/monkeycube/wash(mob/user, atom/source) +/obj/item/food/snacks/monkeycube/wash(mob/user, atom/source) user.drop_item() forceMove(get_turf(source)) return 1 -/obj/item/reagent_containers/food/snacks/monkeycube/proc/Expand() +/obj/item/food/snacks/monkeycube/proc/Expand() if(LAZYLEN(SSmobs.cubemonkeys) >= GLOB.configuration.general.monkey_cube_cap) if(fingerprintslast) to_chat(get_mob_by_ckey(fingerprintslast), "Bluespace harmonics prevent the spawning of more than [GLOB.configuration.general.monkey_cube_cap] monkeys on the station at one time!") @@ -355,22 +355,22 @@ SSmobs.cubemonkeys += creature qdel(src) -/obj/item/reagent_containers/food/snacks/monkeycube/syndicate +/obj/item/food/snacks/monkeycube/syndicate faction = list("neutral", "syndicate") -/obj/item/reagent_containers/food/snacks/monkeycube/farwacube +/obj/item/food/snacks/monkeycube/farwacube name = "farwa cube" monkey_type = /datum/species/monkey/tajaran -/obj/item/reagent_containers/food/snacks/monkeycube/wolpincube +/obj/item/food/snacks/monkeycube/wolpincube name = "wolpin cube" monkey_type = /datum/species/monkey/vulpkanin -/obj/item/reagent_containers/food/snacks/monkeycube/stokcube +/obj/item/food/snacks/monkeycube/stokcube name = "stok cube" monkey_type = /datum/species/monkey/unathi -/obj/item/reagent_containers/food/snacks/monkeycube/neaeracube +/obj/item/food/snacks/monkeycube/neaeracube name = "neaera cube" monkey_type = /datum/species/monkey/skrell @@ -379,7 +379,7 @@ // Eggs // ////////////////////// -/obj/item/reagent_containers/food/snacks/egg +/obj/item/food/snacks/egg name = "egg" desc = "An egg!" icon = 'icons/obj/food/breakfast.dmi' @@ -387,8 +387,9 @@ filling_color = "#FDFFD1" list_reagents = list("protein" = 1, "egg" = 5) tastes = list("egg" = 1) + var/amount_grown = 0 -/obj/item/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom) +/obj/item/food/snacks/egg/throw_impact(atom/hit_atom) ..() var/turf/T = get_turf(hit_atom) new/obj/effect/decal/cleanable/egg_smudge(T) @@ -396,7 +397,7 @@ reagents.reaction(hit_atom, REAGENT_TOUCH) qdel(src) -/obj/item/reagent_containers/food/snacks/egg/attackby(obj/item/W, mob/user, params) +/obj/item/food/snacks/egg/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/toy/crayon)) var/obj/item/toy/crayon/C = W var/clr = C.colourName @@ -411,49 +412,49 @@ else ..() -/obj/item/reagent_containers/food/snacks/egg/blue +/obj/item/food/snacks/egg/blue icon_state = "egg-blue" item_color = "blue" -/obj/item/reagent_containers/food/snacks/egg/green +/obj/item/food/snacks/egg/green icon_state = "egg-green" item_color = "green" -/obj/item/reagent_containers/food/snacks/egg/mime +/obj/item/food/snacks/egg/mime icon_state = "egg-mime" item_color = "mime" -/obj/item/reagent_containers/food/snacks/egg/orange +/obj/item/food/snacks/egg/orange icon_state = "egg-orange" item_color = "orange" -/obj/item/reagent_containers/food/snacks/egg/purple +/obj/item/food/snacks/egg/purple icon_state = "egg-purple" item_color = "purple" -/obj/item/reagent_containers/food/snacks/egg/rainbow +/obj/item/food/snacks/egg/rainbow icon_state = "egg-rainbow" item_color = "rainbow" -/obj/item/reagent_containers/food/snacks/egg/red +/obj/item/food/snacks/egg/red icon_state = "egg-red" item_color = "red" -/obj/item/reagent_containers/food/snacks/egg/yellow +/obj/item/food/snacks/egg/yellow icon_state = "egg-yellow" item_color = "yellow" -/obj/item/reagent_containers/food/snacks/egg/gland +/obj/item/food/snacks/egg/gland desc = "An egg! It looks weird..." -/obj/item/reagent_containers/food/snacks/egg/gland/Initialize(mapload) +/obj/item/food/snacks/egg/gland/Initialize(mapload) . = ..() reagents.add_reagent(get_random_reagent_id(), 15) var/reagent_color = mix_color_from_reagents(reagents.reagent_list) color = reagent_color -/obj/item/reagent_containers/food/snacks/friedegg +/obj/item/food/snacks/friedegg name = "fried egg" desc = "A fried egg, with a touch of salt and pepper." icon = 'icons/obj/food/breakfast.dmi' @@ -463,7 +464,7 @@ list_reagents = list("nutriment" = 3, "egg" = 5) tastes = list("egg" = 1, "salt" = 1, "pepper" = 1) -/obj/item/reagent_containers/food/snacks/boiledegg +/obj/item/food/snacks/boiledegg name = "boiled egg" desc = "A hard boiled egg." icon = 'icons/obj/food/breakfast.dmi' @@ -471,7 +472,7 @@ filling_color = "#FFFFFF" list_reagents = list("nutriment" = 2, "egg" = 5, "vitamin" = 1) -/obj/item/reagent_containers/food/snacks/chocolateegg +/obj/item/food/snacks/chocolateegg name = "chocolate egg" desc = "Such sweet, fattening food." icon = 'icons/obj/food/breakfast.dmi' @@ -479,7 +480,7 @@ filling_color = "#7D5F46" list_reagents = list("nutriment" = 4, "sugar" = 2, "cocoa" = 2) -/obj/item/reagent_containers/food/snacks/omelette +/obj/item/food/snacks/omelette name = "omelette du fromage" desc = "That's all you can say!" icon = 'icons/obj/food/breakfast.dmi' @@ -490,7 +491,7 @@ bitesize = 1 tastes = list("egg" = 1, "cheese" = 1) -/obj/item/reagent_containers/food/snacks/benedict +/obj/item/food/snacks/benedict name = "eggs benedict" desc = "There is only one egg on this, how rude." icon = 'icons/obj/food/breakfast.dmi' @@ -504,7 +505,7 @@ // Misc // ////////////////////// -/obj/item/reagent_containers/food/snacks/hotdog +/obj/item/food/snacks/hotdog name = "hotdog" desc = "Not made with actual dogs. Hopefully." icon = 'icons/obj/food/burgerbread.dmi' @@ -513,7 +514,7 @@ list_reagents = list("nutriment" = 6, "ketchup" = 3, "vitamin" = 3) tastes = list("bun" = 3, "meat" = 2) -/obj/item/reagent_containers/food/snacks/meatbun +/obj/item/food/snacks/meatbun name = "meat bun" desc = "Has the potential to not be dog." icon = 'icons/obj/food/meat.dmi' @@ -522,17 +523,17 @@ list_reagents = list("nutriment" = 6, "vitamin" = 2) tastes = list("bun" = 3, "meat" = 2) -/obj/item/reagent_containers/food/snacks/sliceable/turkey +/obj/item/food/snacks/sliceable/turkey name = "turkey" desc = "A traditional turkey served with stuffing." icon = 'icons/obj/food/meat.dmi' icon_state = "turkey" - slice_path = /obj/item/reagent_containers/food/snacks/turkeyslice + slice_path = /obj/item/food/snacks/turkeyslice slices_num = 6 list_reagents = list("protein" = 24, "nutriment" = 18, "vitamin" = 5) tastes = list("turkey" = 2, "stuffing" = 2) -/obj/item/reagent_containers/food/snacks/turkeyslice +/obj/item/food/snacks/turkeyslice name = "turkey serving" desc = "A serving of some tender and delicious turkey." icon = 'icons/obj/food/meat.dmi' @@ -541,7 +542,7 @@ filling_color = "#B97A57" tastes = list("turkey" = 1) -/obj/item/reagent_containers/food/snacks/organ +/obj/item/food/snacks/organ name = "organ" desc = "Technically qualifies as organic." icon = 'icons/obj/surgery.dmi' @@ -550,7 +551,7 @@ bitesize = 3 list_reagents = list("protein" = 4, "vitamin" = 4) -/obj/item/reagent_containers/food/snacks/appendix +/obj/item/food/snacks/appendix //yes, this is the same as meat. I might do something different in future name = "appendix" desc = "An appendix which looks perfectly healthy." @@ -560,13 +561,13 @@ bitesize = 3 list_reagents = list("protein" = 3, "vitamin" = 2) -/obj/item/reagent_containers/food/snacks/appendix/inflamed +/obj/item/food/snacks/appendix/inflamed name = "inflamed appendix" desc = "An appendix which appears to be inflamed." icon_state = "appendixinflamed" filling_color = "#E00D7A" -/obj/item/reagent_containers/food/snacks/bbqribs +/obj/item/food/snacks/bbqribs name = "BBQ ribs" desc = "Sweet, smokey, savory, and gets everywhere. Perfect for Grilling." icon = 'icons/obj/food/meat.dmi' diff --git a/code/modules/food_and_drinks/food/foods/misc_food.dm b/code/modules/food_and_drinks/food/foods/misc_food.dm index 870fa54b00bf..26624dbd595e 100644 --- a/code/modules/food_and_drinks/food/foods/misc_food.dm +++ b/code/modules/food_and_drinks/food/foods/misc_food.dm @@ -3,7 +3,7 @@ // Meals // ////////////////////// -/obj/item/reagent_containers/food/snacks/eggplantparm +/obj/item/food/snacks/eggplantparm name = "eggplant parmigiana" desc = "The only good recipe for eggplant." icon_state = "eggplantparm" @@ -12,7 +12,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 2) tastes = list("eggplant" = 2, "cheese" = 2) -/obj/item/reagent_containers/food/snacks/soylentgreen +/obj/item/food/snacks/soylentgreen name = "soylent green" desc = "Not made of people. Honest." //Totally people. icon_state = "soylent_green" @@ -21,7 +21,7 @@ list_reagents = list("nutriment" = 10, "vitamin" = 1) tastes = list("waffles" = 7, "people" = 1) -/obj/item/reagent_containers/food/snacks/soylentviridians +/obj/item/food/snacks/soylentviridians name = "soylent virdians" desc = "Not made of people. Honest." //Actually honest for once. icon_state = "soylent_yellow" @@ -30,7 +30,7 @@ list_reagents = list("nutriment" = 10, "vitamin" = 1) tastes = list("waffles" = 1) -/obj/item/reagent_containers/food/snacks/monkeysdelight +/obj/item/food/snacks/monkeysdelight name = "monkey's delight" desc = "Eeee Eee!" icon_state = "monkeysdelight" @@ -40,7 +40,7 @@ list_reagents = list("nutriment" = 10, "banana" = 5, "vitamin" = 5) tastes = list("banana" = 1, "the jungle" = 1) -/obj/item/reagent_containers/food/snacks/dionaroast +/obj/item/food/snacks/dionaroast name = "roast diona" desc = "It's like an enormous leathery carrot... With an eye." icon_state = "dionaroast" @@ -49,7 +49,7 @@ list_reagents = list("plantmatter" = 4, "nutriment" = 2, "radium" = 2, "vitamin" = 4) tastes = list("chewy vegetables" = 1) -/obj/item/reagent_containers/food/snacks/tofurkey +/obj/item/food/snacks/tofurkey name = "tofurkey" desc = "A fake turkey made from tofu." icon_state = "tofurkey" @@ -63,7 +63,7 @@ // Salads // ////////////////////// -/obj/item/reagent_containers/food/snacks/salad +/obj/item/food/snacks/salad name = "salad" desc = "This salad is blander than the jokes of the clown, but is also low in carbohydrates!" icon = 'icons/obj/food/soupsalad.dmi' @@ -74,70 +74,70 @@ list_reagents = list("nutriment" = 6,"vitamin" = 4) tastes = list("lettuce" = 1) -/obj/item/reagent_containers/food/snacks/salad/aesir +/obj/item/food/snacks/salad/aesir name = "aesir salad" desc = "Probably too incredible for mortal men to fully enjoy." icon_state = "aesirsalad" list_reagents = list("nutriment" = 8, "omnizine" = 8, "vitamin" = 6) tastes = list("divinity" = 1, "lettuce" = 1) -/obj/item/reagent_containers/food/snacks/salad/antipasto +/obj/item/food/snacks/salad/antipasto name = "antipasto salad" desc = "A traditional Italian salad made of salami, mozzarella cheese, olives, and tomatoes. Often served as a first course meal." icon_state = "antipasto_salad" list_reagents = list("nutriment" = 12, "protein" = 6, "vitamin" = 6) tastes = list("lettuce" = 2, "salami" = 2, "mozzarella cheese" = 2, "tomatoes" = 2, "dressing" = 1) -/obj/item/reagent_containers/food/snacks/salad/caesar +/obj/item/food/snacks/salad/caesar name = "Caesar salad" desc = "A simple yet flavorful salad of onions, lettuce, croutons, and shreds of cheese dressed in oil. Comes with a slice of pita bread!" icon_state = "caesar_salad" list_reagents = list("nutriment" = 12, "vitamin" = 6) tastes = list("healthy greens" = 2, "olive dressing" = 2, "feta cheese" = 2, "pita bread" = 1) -/obj/item/reagent_containers/food/snacks/salad/fruit +/obj/item/food/snacks/salad/fruit name = "fruit salad" desc = "Your standard fruit salad." icon_state = "fruitsalad" list_reagents = list("nutriment" = 9, "vitamin" = 4) tastes = list("fruit" = 1) -/obj/item/reagent_containers/food/snacks/salad/greek +/obj/item/food/snacks/salad/greek name = "Greek salad" desc = "A popular salad made of tomatoes, onions, feta cheese, and olives all drizzled in olive oil. Though it feels like it's missing something..." icon_state = "greek_salad" list_reagents = list("nutriment" = 13, "vitamin" = 14) tastes = list("healthy greens" = 2, "olive dressing" = 1, "feta cheese" = 1) -/obj/item/reagent_containers/food/snacks/salad/citrusdelight +/obj/item/food/snacks/salad/citrusdelight name = "citrus delight" desc = "Citrus overload!" icon_state = "citrusdelight" list_reagents = list("nutriment" = 11, "vitamin" = 7) tastes = list("sourness" = 1, "leaves" = 1) -/obj/item/reagent_containers/food/snacks/salad/jungle +/obj/item/food/snacks/salad/jungle name = "jungle salad" desc = "Exotic fruits in a bowl." icon_state = "junglesalad" list_reagents = list("banana" = 5, "nutriment" = 11, "vitamin" = 7) tastes = list("fruit" = 1, "the jungle" = 1) -/obj/item/reagent_containers/food/snacks/salad/kale +/obj/item/food/snacks/salad/kale name = "kale salad" desc = "A healthy kale salad drizzled in oil, perfect for warm summer months." icon_state = "kale_salad" list_reagents = list("nutriment" = 12, "vitamin" = 12) tastes = list("healthy greens" = 2, "olive dressing" = 1) -/obj/item/reagent_containers/food/snacks/salad/potato +/obj/item/food/snacks/salad/potato name = "potato salad" desc = "A dish of boiled potatoes mixed with boiled eggs, onions, and mayonnaise. A staple of every self-respecting barbeque." icon_state = "potato_salad" list_reagents = list("nutriment" = 10, "protein" = 4) tastes = list("potato" = 2, "egg" = 2, "mayonnaise" = 2) -/obj/item/reagent_containers/food/snacks/salad/melonfruitbowl +/obj/item/food/snacks/salad/melonfruitbowl name = "melon fruit bowl" desc = "For people who wants edible fruit bowls." icon_state = "melonfruitbowl" @@ -145,7 +145,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 4) tastes = list("melon" = 1) -/obj/item/reagent_containers/food/snacks/salad/herb +/obj/item/food/snacks/salad/herb name = "herb salad" desc = "A tasty salad with apples on top." icon_state = "herbsalad" @@ -153,7 +153,7 @@ list_reagents = list("nutriment" = 8, "vitamin" = 2) tastes = list("lettuce" = 1, "apple" = 1) -/obj/item/reagent_containers/food/snacks/salad/valid +/obj/item/food/snacks/salad/valid name = "valid salad" desc = "It's just an herb salad with meatballs and fried potato slices. Nothing suspicious about it." icon_state = "validsalad" @@ -166,7 +166,7 @@ // Donk Pockets // ////////////////////// -/obj/item/reagent_containers/food/snacks/donkpocket +/obj/item/food/snacks/donkpocket name = "Donk-pocket" desc = "The food of choice for the seasoned traitor." icon_state = "donkpocket" @@ -175,7 +175,7 @@ tastes = list("meat" = 2, "dough" = 2, "laziness" = 1) ingredient_name = "turnover" -/obj/item/reagent_containers/food/snacks/warmdonkpocket +/obj/item/food/snacks/warmdonkpocket name = "warm Donk-pocket" desc = "The food of choice for the seasoned traitor." icon_state = "donkpocket" @@ -191,20 +191,20 @@ /// This tracks how much time the donk pocket has already been cooling for when its timer is paused var/subtracted_time = 0 -/obj/item/reagent_containers/food/snacks/warmdonkpocket/Initialize(mapload) +/obj/item/food/snacks/warmdonkpocket/Initialize(mapload) . = ..() donk_heat() -/obj/item/reagent_containers/food/snacks/warmdonkpocket/proc/donk_heat() +/obj/item/food/snacks/warmdonkpocket/proc/donk_heat() heated_at = world.time cool_timer = addtimer(CALLBACK(src, PROC_REF(donk_cool)), 7 MINUTES - subtracted_time, TIMER_UNIQUE|TIMER_STOPPABLE) -/obj/item/reagent_containers/food/snacks/warmdonkpocket/proc/donk_cool() +/obj/item/food/snacks/warmdonkpocket/proc/donk_cool() name = "cold Donk-pocket" desc = "The food of choice for the seasoned traitor. This one is cold." warm = FALSE -/obj/item/reagent_containers/food/snacks/warmdonkpocket/on_enter_storage(obj/item/storage/S) +/obj/item/food/snacks/warmdonkpocket/on_enter_storage(obj/item/storage/S) . = ..() if(!cool_timer) return @@ -213,25 +213,25 @@ subtracted_time += (world.time - heated_at) cool_timer = null -/obj/item/reagent_containers/food/snacks/warmdonkpocket/on_exit_storage(obj/item/storage/S) +/obj/item/food/snacks/warmdonkpocket/on_exit_storage(obj/item/storage/S) . = ..() if(warm) donk_heat() -/obj/item/reagent_containers/food/snacks/warmdonkpocket/Post_Consume(mob/living/M) +/obj/item/food/snacks/warmdonkpocket/Post_Consume(mob/living/M) if(warm) M.reagents.add_reagent("omnizine", 15) return M.reagents.add_reagent("weak_omnizine", 5) -/obj/item/reagent_containers/food/snacks/warmdonkpocket_weak +/obj/item/food/snacks/warmdonkpocket_weak name = "lukewarm Donk-pocket" desc = "The food of choice for the seasoned traitor. This one is lukewarm." icon_state = "donkpocket" filling_color = "#DEDEAB" list_reagents = list("nutriment" = 4, "weak_omnizine" = 3) -/obj/item/reagent_containers/food/snacks/syndidonkpocket +/obj/item/food/snacks/syndidonkpocket name = "Donk-pocket" desc = "This donk-pocket is emitting a small amount of heat." icon_state = "donkpocket" @@ -239,7 +239,7 @@ bitesize = 100 //nom the whole thing at once. list_reagents = list("nutriment" = 1) -/obj/item/reagent_containers/food/snacks/syndidonkpocket/Post_Consume(mob/living/M) +/obj/item/food/snacks/syndidonkpocket/Post_Consume(mob/living/M) M.reagents.add_reagent("omnizine", 15) M.reagents.add_reagent("teporone", 15) M.reagents.add_reagent("synaptizine", 15) @@ -252,7 +252,7 @@ // Misc // ////////////////////// -/obj/item/reagent_containers/food/snacks/boiledslimecore +/obj/item/food/snacks/boiledslimecore name = "boiled slime core" desc = "A boiled red thing." icon_state = "boiledrorocore" @@ -260,7 +260,7 @@ list_reagents = list("slimejelly" = 5) tastes = list("jelly" = 1) -/obj/item/reagent_containers/food/snacks/popcorn +/obj/item/food/snacks/popcorn name = "popcorn" desc = "Now let's find some cinema." icon_state = "popcorn" @@ -271,17 +271,17 @@ list_reagents = list("nutriment" = 2) tastes = list("popcorn" = 3, "butter" = 1) -/obj/item/reagent_containers/food/snacks/popcorn/Initialize(mapload) +/obj/item/food/snacks/popcorn/Initialize(mapload) . = ..() unpopped = rand(1,10) -/obj/item/reagent_containers/food/snacks/popcorn/On_Consume(mob/M, mob/user) +/obj/item/food/snacks/popcorn/On_Consume(mob/M, mob/user) if(prob(unpopped)) //lol ...what's the point? to_chat(user, "You bite down on an un-popped kernel!") unpopped = max(0, unpopped-1) ..() -/obj/item/reagent_containers/food/snacks/liquidfood +/obj/item/food/snacks/liquidfood name = "\improper LiquidFood ration" desc = "A prepackaged grey slurry of all the essential nutrients for a spacefarer on the go. Should this be crunchy?" icon_state = "liquidfood" diff --git a/code/modules/food_and_drinks/food/foods/pasta.dm b/code/modules/food_and_drinks/food/foods/pasta.dm index bd6be224225c..984fb60c1a8e 100644 --- a/code/modules/food_and_drinks/food/foods/pasta.dm +++ b/code/modules/food_and_drinks/food/foods/pasta.dm @@ -3,7 +3,7 @@ // Raw Pasta // ////////////////////// -/obj/item/reagent_containers/food/snacks/spaghetti +/obj/item/food/snacks/spaghetti name = "spaghetti" desc = "A bundle of raw spaghetti." icon = 'icons/obj/food/pasta.dmi' @@ -12,7 +12,7 @@ list_reagents = list("nutriment" = 1, "vitamin" = 1) tastes = list("raw pasta" = 1) -/obj/item/reagent_containers/food/snacks/macaroni +/obj/item/food/snacks/macaroni name = "macaroni twists" desc = "These are little twists of raw macaroni." icon = 'icons/obj/food/pasta.dmi' @@ -26,7 +26,7 @@ // Pasta Dishes // ////////////////////// -/obj/item/reagent_containers/food/snacks/boiledspaghetti +/obj/item/food/snacks/boiledspaghetti name = "boiled spaghetti" desc = "A plain dish of noodles. This sucks." icon = 'icons/obj/food/pasta.dmi' @@ -36,7 +36,7 @@ list_reagents = list("nutriment" = 2, "vitamin" = 1) tastes = list("pasta" = 1) -/obj/item/reagent_containers/food/snacks/pastatomato +/obj/item/food/snacks/pastatomato name = "spaghetti" desc = "Spaghetti and crushed tomatoes. Just like your abusive father used to make!" icon = 'icons/obj/food/pasta.dmi' @@ -47,7 +47,7 @@ list_reagents = list("nutriment" = 6, "tomatojuice" = 10, "vitamin" = 4) tastes = list("pasta" = 1, "tomato" = 1) -/obj/item/reagent_containers/food/snacks/meatballspaghetti +/obj/item/food/snacks/meatballspaghetti name = "spaghetti & meatballs" desc = "Now that's a nice'a meatball!" icon = 'icons/obj/food/pasta.dmi' @@ -57,7 +57,7 @@ list_reagents = list("nutriment" = 8, "synaptizine" = 5, "vitamin" = 4) tastes = list("pasta" = 1, "tomato" = 1, "meat" = 1) -/obj/item/reagent_containers/food/snacks/spesslaw +/obj/item/food/snacks/spesslaw name = "spesslaw" desc = "A lawyer's favourite." icon = 'icons/obj/food/pasta.dmi' @@ -66,7 +66,7 @@ list_reagents = list("nutriment" = 8, "synaptizine" = 10, "vitamin" = 6) tastes = list("pasta" = 1, "tomato" = 1, "meat" = 2) -/obj/item/reagent_containers/food/snacks/macncheese +/obj/item/food/snacks/macncheese name = "mac 'n' cheese" desc = "One of the most comforting foods in the world. Apparently." trash = /obj/item/trash/snack_bowl @@ -76,7 +76,7 @@ list_reagents = list("nutriment" = 5, "vitamin" = 2, "cheese" = 4) tastes = list("pasta" = 1, "cheese" = 1, "comfort" = 1) -/obj/item/reagent_containers/food/snacks/lasagna +/obj/item/food/snacks/lasagna name = "lasagna" desc = "Tajara love to eat this, for some reason." icon = 'icons/obj/food/pasta.dmi' diff --git a/code/modules/food_and_drinks/food/foods/pizza.dm b/code/modules/food_and_drinks/food/foods/pizza.dm index 4b3e20b08808..d157b6067e30 100644 --- a/code/modules/food_and_drinks/food/foods/pizza.dm +++ b/code/modules/food_and_drinks/food/foods/pizza.dm @@ -3,21 +3,21 @@ // Pizzas // ////////////////////// -/obj/item/reagent_containers/food/snacks/sliceable/pizza +/obj/item/food/snacks/sliceable/pizza icon = 'icons/obj/food/pizza.dmi' slices_num = 6 filling_color = "#BAA14C" tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1) // Margherita -/obj/item/reagent_containers/food/snacks/sliceable/pizza/margheritapizza +/obj/item/food/snacks/sliceable/pizza/margheritapizza name = "margherita pizza" desc = "The golden standard of pizzas." icon_state = "margheritapizza" - slice_path = /obj/item/reagent_containers/food/snacks/margheritapizzaslice + slice_path = /obj/item/food/snacks/margheritapizzaslice list_reagents = list("nutriment" = 30, "tomatojuice" = 6, "vitamin" = 5) -/obj/item/reagent_containers/food/snacks/margheritapizzaslice +/obj/item/food/snacks/margheritapizzaslice name = "margherita slice" desc = "A slice of the classic pizza." icon = 'icons/obj/food/pizza.dmi' @@ -26,15 +26,15 @@ tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1) // Meat Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza +/obj/item/food/snacks/sliceable/pizza/meatpizza name = "meat pizza" desc = "A pizza with meat topping." icon_state = "meatpizza" - slice_path = /obj/item/reagent_containers/food/snacks/meatpizzaslice + slice_path = /obj/item/food/snacks/meatpizzaslice list_reagents = list("protein" = 30, "tomatojuice" = 6, "vitamin" = 8) tastes = list("crust" = 1, "cheese" = 1, "meat" = 1) -/obj/item/reagent_containers/food/snacks/meatpizzaslice +/obj/item/food/snacks/meatpizzaslice name = "meat pizza slice" desc = "A slice of a meaty pizza." icon = 'icons/obj/food/pizza.dmi' @@ -43,15 +43,15 @@ tastes = list("crust" = 1, "cheese" = 1, "meat" = 1) // Mushroom Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza +/obj/item/food/snacks/sliceable/pizza/mushroompizza name = "mushroom pizza" desc = "Very special pizza." icon_state = "mushroompizza" - slice_path = /obj/item/reagent_containers/food/snacks/mushroompizzaslice + slice_path = /obj/item/food/snacks/mushroompizzaslice list_reagents = list("plantmatter" = 30, "vitamin" = 5) tastes = list("crust" = 1, "cheese" = 1, "mushroom" = 1) -/obj/item/reagent_containers/food/snacks/mushroompizzaslice +/obj/item/food/snacks/mushroompizzaslice name = "mushroom pizza slice" desc = "Maybe it is the last slice of pizza in your life." icon = 'icons/obj/food/pizza.dmi' @@ -60,15 +60,15 @@ tastes = list("crust" = 1, "cheese" = 1, "mushroom" = 1) // Vegetable Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza +/obj/item/food/snacks/sliceable/pizza/vegetablepizza name = "vegetable pizza" desc = "No Tomato Sapiens were harmed during the making of this pizza." icon_state = "vegetablepizza" - slice_path = /obj/item/reagent_containers/food/snacks/vegetablepizzaslice + slice_path = /obj/item/food/snacks/vegetablepizzaslice list_reagents = list("plantmatter" = 25, "tomatojuice" = 6, "oculine" = 12, "vitamin" = 5) tastes = list("crust" = 1, "tomato" = 1, "carrot" = 1, "vegetables" = 1) -/obj/item/reagent_containers/food/snacks/vegetablepizzaslice +/obj/item/food/snacks/vegetablepizzaslice name = "vegetable pizza slice" desc = "A slice of the most green pizza of all pizzas not containing green ingredients." icon = 'icons/obj/food/pizza.dmi' @@ -77,15 +77,15 @@ tastes = list("crust" = 1, "tomato" = 1, "carrot" = 1, "vegetables" = 1) // Hawaiian Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/hawaiianpizza +/obj/item/food/snacks/sliceable/pizza/hawaiianpizza name = "hawaiian pizza" desc = "Love it or hate it, this pizza divides opinions. Complete with juicy pineapple." icon_state = "hawaiianpizza" - slice_path = /obj/item/reagent_containers/food/snacks/hawaiianpizzaslice + slice_path = /obj/item/food/snacks/hawaiianpizzaslice list_reagents = list("protein" = 15, "tomatojuice" = 6, "plantmatter" = 20, "pineapplejuice" = 6, "vitamin" = 5) tastes = list("crust" = 1, "cheese" = 1, "pineapple" = 1) -/obj/item/reagent_containers/food/snacks/hawaiianpizzaslice +/obj/item/food/snacks/hawaiianpizzaslice name = "hawaiian pizza slice" desc = "A slice of polarising pizza." icon = 'icons/obj/food/pizza.dmi' @@ -94,16 +94,16 @@ tastes = list("crust" = 1, "cheese" = 1, "pineapple" = 1) // Mac 'n' Cheese Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/macpizza +/obj/item/food/snacks/sliceable/pizza/macpizza name = "mac 'n' cheese pizza" desc = "Gastronomists have yet to classify this dish as 'pizza'." icon_state = "macpizza" - slice_path = /obj/item/reagent_containers/food/snacks/macpizzaslice + slice_path = /obj/item/food/snacks/macpizzaslice list_reagents = list("nutriment" = 40, "vitamin" = 5) //More nutriment because carbs, but it's not any more vitaminicious filling_color = "#ffe45d" tastes = list("crust" = 1, "cheese" = 2, "pasta" = 1) -/obj/item/reagent_containers/food/snacks/macpizzaslice +/obj/item/food/snacks/macpizzaslice name = "mac 'n' cheese pizza slice" desc = "A delicious slice of pizza topped with macaroni & cheese... wait, what the hell? Who would do this?!" icon = 'icons/obj/food/pizza.dmi' @@ -112,16 +112,16 @@ tastes = list("crust" = 1, "tomato" = 1, "cheese" = 2, "pasta" = 1) // Pepperoni Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/pepperonipizza +/obj/item/food/snacks/sliceable/pizza/pepperonipizza name = "pepperoni pizza" desc = "What did the pepperoni say to the pizza?" icon_state = "pepperonipizza" - slice_path = /obj/item/reagent_containers/food/snacks/pepperonipizzaslice + slice_path = /obj/item/food/snacks/pepperonipizzaslice list_reagents = list("protein" = 30, "tomatojuice" = 6, "vitamin" = 8) filling_color = "#ffe45d" tastes = list("cheese" = 3, "pepperoni" = 3, "grease" = 1) -/obj/item/reagent_containers/food/snacks/pepperonipizzaslice +/obj/item/food/snacks/pepperonipizzaslice name = "pepperoni pizza slice" desc = "Nice to meat you!" icon = 'icons/obj/food/pizza.dmi' @@ -130,14 +130,14 @@ tastes = list("cheese" = 3, "pepperoni" = 3, "grease" = 1) // Cheese Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/cheesepizza +/obj/item/food/snacks/sliceable/pizza/cheesepizza name = "cheese pizza" desc = "Cheese, bread, cheese, tomato, and cheese." icon_state = "cheesepizza" - slice_path = /obj/item/reagent_containers/food/snacks/cheesepizzaslice + slice_path = /obj/item/food/snacks/cheesepizzaslice list_reagents = list("nutriment" = 40, "tomatojuice" = 6, "vitamin" = 5) -/obj/item/reagent_containers/food/snacks/cheesepizzaslice +/obj/item/food/snacks/cheesepizzaslice name = "cheese pizza slice" desc = "Dangerously cheesy?" icon = 'icons/obj/food/pizza.dmi' @@ -146,15 +146,15 @@ tastes = list("crust" = 1, "tomato" = 1, "cheese" = 3) // Donk-pocket Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/donkpocketpizza +/obj/item/food/snacks/sliceable/pizza/donkpocketpizza name = "donk-pocket pizza" desc = "Who thought this would be a good idea?" icon_state = "donkpocketpizza" - slice_path = /obj/item/reagent_containers/food/snacks/donkpocketpizzaslice + slice_path = /obj/item/food/snacks/donkpocketpizzaslice list_reagents = list("nutriment" = 35, "tomatojuice" = 6, "vitamin" = 2, "weak_omnizine" = 6) tastes = list("crust" = 1, "meat" = 1, "laziness" = 1) -/obj/item/reagent_containers/food/snacks/donkpocketpizzaslice +/obj/item/food/snacks/donkpocketpizzaslice name = "donk-pocket pizza slice" desc = "Smells like lukewarm donk-pocket." icon = 'icons/obj/food/pizza.dmi' @@ -163,15 +163,15 @@ tastes = list("crust" = 1, "meat" = 1, "laziness" = 1) // Dank Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/dankpizza +/obj/item/food/snacks/sliceable/pizza/dankpizza name = "dank pizza" desc = "The hippie's pizza of choice." icon_state = "dankpizza" - slice_path = /obj/item/reagent_containers/food/snacks/dankpizzaslice + slice_path = /obj/item/food/snacks/dankpizzaslice list_reagents = list("nutriment" = 30, "tomatojuice" = 6, "vitamin" = 5, "cbd" = 6, "thc" = 6) tastes = list("crust" = 1, "cheese" = 1, "special herbs" = 2) -/obj/item/reagent_containers/food/snacks/dankpizzaslice +/obj/item/food/snacks/dankpizzaslice name = "dank pizza slice" desc = "So good, man..." icon = 'icons/obj/food/pizza.dmi' @@ -180,15 +180,15 @@ tastes = list("crust" = 1, "cheese" = 1, "special herbs" = 2) // Firecracker Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/firecrackerpizza +/obj/item/food/snacks/sliceable/pizza/firecrackerpizza name = "firecracker pizza" desc = "Tastes HOT HOT HOT!" icon_state = "firecrackerpizza" - slice_path = /obj/item/reagent_containers/food/snacks/firecrackerpizzaslice + slice_path = /obj/item/food/snacks/firecrackerpizzaslice list_reagents = list("nutriment" = 30, "vitamin" = 5, "capsaicin" = 12) tastes = list("crust" = 1, "cheese" = 1, "HOTNESS" = 1) -/obj/item/reagent_containers/food/snacks/firecrackerpizzaslice +/obj/item/food/snacks/firecrackerpizzaslice name = "firecracker pizza slice" desc = "A spicy slice of something quite nice" icon = 'icons/obj/food/pizza.dmi' @@ -197,15 +197,15 @@ tastes = list("crust" = 1, "cheese" = 1, "HOTNESS" = 1) // "Pesto" Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/pestopizza +/obj/item/food/snacks/sliceable/pizza/pestopizza name = "\"pesto\" pizza" desc = "Wait a second...this doesn't taste like pesto!" icon_state = "pestopizza" - slice_path = /obj/item/reagent_containers/food/snacks/pestopizzaslice + slice_path = /obj/item/food/snacks/pestopizzaslice list_reagents = list("nutriment" = 30, "tomatojuice" = 12, "vitamin" = 5, "wasabi" = 12) tastes = list("tomato" = 1, "cheese" = 1, "wasabi" = 1) -/obj/item/reagent_containers/food/snacks/pestopizzaslice +/obj/item/food/snacks/pestopizzaslice name = "\"pesto\" pizza slice" desc = "Delicious and suspicious(ly green)." icon = 'icons/obj/food/pizza.dmi' @@ -214,15 +214,15 @@ tastes = list("tomato" = 1, "cheese" = 1, "wasabi" = 1) // Garlic Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/garlicpizza +/obj/item/food/snacks/sliceable/pizza/garlicpizza name = "garlic pizza" desc = "Ahh, garlic. A universally loved ingredient, except possibly by vampires." icon_state = "garlicpizza" - slice_path = /obj/item/reagent_containers/food/snacks/garlicpizzaslice + slice_path = /obj/item/food/snacks/garlicpizzaslice list_reagents = list("plantmatter" = 30, "vitamin" = 5, "garlic" = 12) tastes = list("crust" = 1, "cheese" = 1, "garlic" = 1) -/obj/item/reagent_containers/food/snacks/garlicpizzaslice +/obj/item/food/snacks/garlicpizzaslice name = "garlic pizza slice" desc = "What's not to love?" icon = 'icons/obj/food/pizza.dmi' @@ -243,7 +243,7 @@ var/open = FALSE // Is the box open? var/is_messy = FALSE // Fancy mess on the lid - var/obj/item/reagent_containers/food/snacks/sliceable/pizza/pizza // Content pizza + var/obj/item/food/snacks/sliceable/pizza/pizza // Content pizza var/list/boxes = list() // If the boxes are stacked, they come here var/box_tag = "" @@ -322,7 +322,7 @@ ..() if(length(boxes) || !Adjacent(user)) return - open = !open + open = !open update_appearance(UPDATE_DESC|UPDATE_ICON) /obj/item/pizzabox/attack_self(mob/user) @@ -356,7 +356,7 @@ to_chat(user, "Close [box] first!") return - if(istype(I, /obj/item/reagent_containers/food/snacks/sliceable/pizza/)) // Long ass fucking object name + if(istype(I, /obj/item/food/snacks/sliceable/pizza)) // Long ass fucking object name if(open) user.drop_item() I.loc = src @@ -383,42 +383,42 @@ /obj/item/pizzabox/margherita/Initialize(mapload) - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/margheritapizza(src) + pizza = new /obj/item/food/snacks/sliceable/pizza/margheritapizza(src) box_tag = "margherita deluxe" . = ..() /obj/item/pizzabox/vegetable/Initialize(mapload) - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza(src) + pizza = new /obj/item/food/snacks/sliceable/pizza/vegetablepizza(src) box_tag = "gourmet vegetable" . = ..() /obj/item/pizzabox/mushroom/Initialize(mapload) - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza(src) + pizza = new /obj/item/food/snacks/sliceable/pizza/mushroompizza(src) box_tag = "mushroom special" . = ..() /obj/item/pizzabox/meat/Initialize(mapload) - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza(src) + pizza = new /obj/item/food/snacks/sliceable/pizza/meatpizza(src) box_tag = "meatlover's supreme" . = ..() /obj/item/pizzabox/hawaiian/Initialize(mapload) - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/hawaiianpizza(src) + pizza = new /obj/item/food/snacks/sliceable/pizza/hawaiianpizza(src) box_tag = "Hawaiian feast" . = ..() /obj/item/pizzabox/pepperoni/Initialize(mapload) - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/pepperonipizza(src) + pizza = new /obj/item/food/snacks/sliceable/pizza/pepperonipizza(src) box_tag = "classic pepperoni" . = ..() /obj/item/pizzabox/garlic/Initialize(mapload) - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/garlicpizza(src) + pizza = new /obj/item/food/snacks/sliceable/pizza/garlicpizza(src) box_tag = "triple garlic" . = ..() /obj/item/pizzabox/firecracker/Initialize(mapload) - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/firecrackerpizza(src) + pizza = new /obj/item/food/snacks/sliceable/pizza/firecrackerpizza(src) box_tag = "extra spicy pie" . = ..() diff --git a/code/modules/food_and_drinks/food/foods/sandwiches.dm b/code/modules/food_and_drinks/food/foods/sandwiches.dm index e912b6fbafca..05d584229845 100644 --- a/code/modules/food_and_drinks/food/foods/sandwiches.dm +++ b/code/modules/food_and_drinks/food/foods/sandwiches.dm @@ -5,13 +5,13 @@ // Abstract object used for inheritance. Should never spawn. Needed to not break recipes that use plain burgers; recipes that use "burger" would accept any burger and transfer reagents otherwise. -/obj/item/reagent_containers/food/snacks/burger +/obj/item/food/snacks/burger name = "burger" desc = "If you got this, something broke! Contact a coder if this somehow spawns." icon = 'icons/obj/food/burgerbread.dmi' icon_state = "burger" -/obj/item/reagent_containers/food/snacks/burger/plain +/obj/item/food/snacks/burger/plain name = "burger" desc = "The cornerstone of every nutritious breakfast." icon_state = "hburger" @@ -20,7 +20,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "meat" = 1) -/obj/item/reagent_containers/food/snacks/burger/brain +/obj/item/food/snacks/burger/brain name = "brainburger" desc = "A strange looking burger. It appears almost sentient." icon_state = "brainburger" @@ -29,7 +29,7 @@ list_reagents = list("nutriment" = 6, "prions" = 10, "vitamin" = 1) tastes = list("bun" = 4, "brains" = 2) -/obj/item/reagent_containers/food/snacks/burger/ghost +/obj/item/food/snacks/burger/ghost name = "ghost burger" desc = "Spooky! It doesn't look very filling." icon_state = "ghostburger" @@ -38,12 +38,12 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "ectoplasm" = 2) -/obj/item/reagent_containers/food/snacks/human +/obj/item/food/snacks/human var/hname = "" var/job = null filling_color = "#D63C3C" -/obj/item/reagent_containers/food/snacks/human/burger +/obj/item/food/snacks/human/burger name = "-burger" desc = "A bloody burger." icon = 'icons/obj/food/burgerbread.dmi' @@ -52,7 +52,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "tender meat" = 2) -/obj/item/reagent_containers/food/snacks/burger/cheese +/obj/item/food/snacks/burger/cheese name = "cheeseburger" desc = "The cheese adds a good flavor." icon_state = "cheeseburger" @@ -60,7 +60,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "meat" = 1, "cheese" = 1) -/obj/item/reagent_containers/food/snacks/burger/tofu +/obj/item/food/snacks/burger/tofu name = "tofu burger" desc = "Making this should probably be a criminal offense." icon_state = "tofuburger" @@ -69,7 +69,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "tofu" = 4) -/obj/item/reagent_containers/food/snacks/burger/hamborger +/obj/item/food/snacks/burger/hamborger name = "hamborger" desc = "Looking at this makes your flesh feel like a weakness." icon_state = "roburger" @@ -78,11 +78,11 @@ list_reagents = list("nutriment" = 6, "nanomachines" = 10, "vitamin" = 1) tastes = list("bun" = 4, "lettuce" = 2, "sludge" = 1) -/obj/item/reagent_containers/food/snacks/burger/hamborger/Initialize(mapload) +/obj/item/food/snacks/burger/hamborger/Initialize(mapload) . = ..() message_admins("A [name] has been created at [ADMIN_COORDJMP(src)].") -/obj/item/reagent_containers/food/snacks/burger/xeno +/obj/item/food/snacks/burger/xeno name = "xenoburger" desc = "Smells caustic and tastes like heresy." icon_state = "xburger" @@ -91,7 +91,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "acid" = 4) -/obj/item/reagent_containers/food/snacks/burger/clown +/obj/item/food/snacks/burger/clown name = "clown burger" desc = "This tastes funny..." icon_state = "clownburger" @@ -100,7 +100,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "banana" = 1, "magic" = 2) -/obj/item/reagent_containers/food/snacks/burger/mime +/obj/item/food/snacks/burger/mime name = "mime burger" desc = "Its taste defies language." icon_state = "mimeburger" @@ -109,7 +109,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "silence" = 2) -/obj/item/reagent_containers/food/snacks/burger/baseball +/obj/item/food/snacks/burger/baseball name = "home run baseball burger" desc = "It's still warm. Batter up!" icon_state = "baseball" @@ -118,7 +118,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "a homerun" = 3) -/obj/item/reagent_containers/food/snacks/burger/spell +/obj/item/food/snacks/burger/spell name = "spell burger" desc = "This is absolutely Ei Nath." icon_state = "spellburger" @@ -127,7 +127,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "magic" = 2) -/obj/item/reagent_containers/food/snacks/burger/bigbite +/obj/item/food/snacks/burger/bigbite name = "BigBite burger" desc = "Forget the Big Mac, THIS is the future!" icon_state = "bigbiteburger" @@ -136,7 +136,7 @@ list_reagents = list("nutriment" = 10, "vitamin" = 2) tastes = list("bun" = 4, "meat" = 2, "cheese" = 2, "type two diabetes" = 10) -/obj/item/reagent_containers/food/snacks/burger/superbite +/obj/item/food/snacks/burger/superbite name = "SuperBite burger" desc = "This is a mountain of a burger. FOOD!" icon_state = "superbiteburger" @@ -145,7 +145,7 @@ list_reagents = list("nutriment" = 40, "vitamin" = 5) tastes = list("bun" = 4, "meat" = 2, "cheese" = 2, "type two diabetes" = 10) -/obj/item/reagent_containers/food/snacks/burger/crazy +/obj/item/food/snacks/burger/crazy name = "crazy hamburger" desc = "This looks like the sort of food that a demented clown in a trenchcoat would make." icon_state = "crazyburger" @@ -154,7 +154,7 @@ list_reagents = list("nutriment" = 10, "vitamin" = 2, "capsaicin" = 3, "condensedcapsaicin" = 2) tastes = list("bun" = 2, "meat" = 4, "cheese" = 2, "beef soaked in chili" = 3, "a smoking flare" = 2) -/obj/item/reagent_containers/food/snacks/burger/ppatty/white +/obj/item/food/snacks/burger/ppatty/white name = "white pretty patty" desc = "Delicious titanium!" icon_state = "ppatty-mime" @@ -163,7 +163,7 @@ list_reagents = list("nutriment" = 7, "protein" = 1) tastes = list("bun" = 2, "meat" = 2, "white" = 2) -/obj/item/reagent_containers/food/snacks/burger/ppatty/red +/obj/item/food/snacks/burger/ppatty/red name = "red pretty patty" desc = "Perfect for hiding the fact that it's burnt to a crisp." icon_state = "ppatty-red" @@ -172,7 +172,7 @@ list_reagents = list("nutriment" = 7, "protein" = 1) tastes = list("bun" = 2, "meat" = 2, "red" = 2) -/obj/item/reagent_containers/food/snacks/burger/ppatty/orange +/obj/item/food/snacks/burger/ppatty/orange name = "orange pretty patty" desc = "Contains 0% juice." icon_state = "ppatty-orange" @@ -181,7 +181,7 @@ list_reagents = list("nutriment" = 7, "protein" = 1) tastes = list("bun" = 2, "meat" = 2, "orange" = 2) -/obj/item/reagent_containers/food/snacks/burger/ppatty/yellow +/obj/item/food/snacks/burger/ppatty/yellow name = "yellow pretty patty" desc = "Bright to the last bite." icon_state = "ppatty-yellow" @@ -190,7 +190,7 @@ list_reagents = list("nutriment" = 7, "protein" = 1) tastes = list("bun" = 2, "meat" = 2, "yellow" = 2) -/obj/item/reagent_containers/food/snacks/burger/ppatty/green +/obj/item/food/snacks/burger/ppatty/green name = "green pretty patty" desc = "It's not tainted meat, it's painted meat!" icon_state = "ppatty-green" @@ -199,7 +199,7 @@ list_reagents = list("nutriment" = 7, "protein" = 1) tastes = list("bun" = 2, "meat" = 2, "green" = 2) -/obj/item/reagent_containers/food/snacks/burger/ppatty/blue +/obj/item/food/snacks/burger/ppatty/blue name = "blue pretty patty" desc = "Is this blue rare?" icon_state = "ppatty-blue" @@ -208,7 +208,7 @@ list_reagents = list("nutriment" = 7, "protein" = 1) tastes = list("bun" = 2, "meat" = 2, "blue" = 2) -/obj/item/reagent_containers/food/snacks/burger/ppatty/purple +/obj/item/food/snacks/burger/ppatty/purple name = "purple pretty patty" desc = "Regal and low class at the same time." icon_state = "ppatty-purple" @@ -217,7 +217,7 @@ list_reagents = list("nutriment" = 7, "protein" = 1) tastes = list("bun" = 2, "meat" = 2, "purple" = 2) -/obj/item/reagent_containers/food/snacks/burger/ppatty/rainbow +/obj/item/food/snacks/burger/ppatty/rainbow name = "rainbow pretty patty" desc = "Taste the rainbow, eat the rainbow." icon_state = "ppatty-rainbow" @@ -226,7 +226,7 @@ list_reagents = list("nutriment" = 14, "protein" = 5, "omnizine" = 10) tastes = list("bun" = 2, "meat" = 2, "rainbow" = 5) -/obj/item/reagent_containers/food/snacks/burger/elec +/obj/item/food/snacks/burger/elec name = "empowered burger" desc = "It's shockingly good, if you live off of electricity that is." icon_state = "empoweredburger" @@ -235,7 +235,7 @@ list_reagents = list("nutriment" = 5, "protein" = 1, "plasma" = 2) tastes = list("bun" = 2, "pure electricity" = 5) -/obj/item/reagent_containers/food/snacks/burger/rat +/obj/item/food/snacks/burger/rat name = "mouse burger" desc = "Pretty much what you'd expect..." icon_state = "ratburger" @@ -244,7 +244,7 @@ list_reagents = list("nutriment" = 5, "protein" = 1) tastes = list("bun" = 2, "dead rat" = 5) -/obj/item/reagent_containers/food/snacks/burger/appendix +/obj/item/food/snacks/burger/appendix name = "appendix burger" desc = "Tastes like appendicitis." icon_state = "appendixburger" @@ -253,7 +253,7 @@ list_reagents = list("nutriment" = 2, "protein" = 6, "vitamin" = 6) tastes = list("bun" = 1, "grass" = 1) -/obj/item/reagent_containers/food/snacks/burger/bacon +/obj/item/food/snacks/burger/bacon name = "bacon burger" desc = "The perfect combination of all things American." icon_state = "baconburger" @@ -263,7 +263,7 @@ tastes = list("bun" = 1, "bacon" = 1) -/obj/item/reagent_containers/food/snacks/burger/bearger +/obj/item/food/snacks/burger/bearger name = "bearger" desc = "Best served rawr." icon_state = "bearger" @@ -272,7 +272,7 @@ list_reagents = list("nutriment" = 3, "protein" = 6, "vitamin" = 2) tastes = list("bun" = 1, "meat" = 1, "salmon" = 1) -/obj/item/reagent_containers/food/snacks/burger/fivealarm +/obj/item/food/snacks/burger/fivealarm name = "five alarm burger" desc = "HOT! HOT!" icon_state = "fivealarmburger" @@ -281,7 +281,7 @@ list_reagents = list("nutriment" = 4, "protein" = 6, "condensedcapsaicin" = 5, "capsaicin" = 5) tastes = list("bun" = 1, "extreme heat" = 1) -/obj/item/reagent_containers/food/snacks/burger/mcguffin +/obj/item/food/snacks/burger/mcguffin name = "mcGuffin" desc = "A cheap and greasy imitation of an eggs benedict." icon_state = "mcguffin" @@ -290,7 +290,7 @@ list_reagents = list("nutriment" = 2, "protein" = 7, "vitamin" = 1) tastes = list("muffin" = 1, "bacon" = 1) -/obj/item/reagent_containers/food/snacks/burger/mcrib +/obj/item/food/snacks/burger/mcrib name = "mcRib" desc = "An elusive rib shaped burger with limited availablity across the galaxy. Not as good as you remember it." icon_state = "mcrib" @@ -299,7 +299,7 @@ list_reagents = list("nutriment" = 2, "protein" = 7, "vitamin" = 4, "bbqsauce" = 1) tastes = list("bun" = 1, "pork" = 1, "patty" = 1) -/obj/item/reagent_containers/food/snacks/burger/jelly +/obj/item/food/snacks/burger/jelly name = "jelly burger" desc = "Culinary delight...?" icon_state = "jellyburger" @@ -307,10 +307,10 @@ bitesize = 3 tastes = list("bun" = 4, "jelly" = 2) -/obj/item/reagent_containers/food/snacks/burger/jelly/slime +/obj/item/food/snacks/burger/jelly/slime list_reagents = list("nutriment" = 6, "slimejelly" = 5, "vitamin" = 1) -/obj/item/reagent_containers/food/snacks/burger/jelly/cherry +/obj/item/food/snacks/burger/jelly/cherry list_reagents = list("nutriment" = 6, "cherryjelly" = 5, "vitamin" = 1) @@ -318,7 +318,7 @@ // Sandwiches // ////////////////////// -/obj/item/reagent_containers/food/snacks/sandwich +/obj/item/food/snacks/sandwich name = "sandwich" desc = "A grand creation of meat, cheese, bread, and several leaves of lettuce! Arthur Dent would be proud." icon = 'icons/obj/food/burgerbread.dmi' @@ -327,7 +327,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("meat" = 2, "cheese" = 1, "bread" = 2, "lettuce" = 1) -/obj/item/reagent_containers/food/snacks/toastedsandwich +/obj/item/food/snacks/toastedsandwich name = "toasted sandwich" desc = "Now if you only had a pepper bar." icon = 'icons/obj/food/burgerbread.dmi' @@ -336,7 +336,7 @@ list_reagents = list("nutriment" = 6, "carbon" = 2) tastes = list("toast" = 1) -/obj/item/reagent_containers/food/snacks/grilledcheese +/obj/item/food/snacks/grilledcheese name = "grilled cheese sandwich" desc = "Goes great with tomato soup!" icon = 'icons/obj/food/burgerbread.dmi' @@ -345,7 +345,7 @@ list_reagents = list("nutriment" = 7, "vitamin" = 1) //why make a regualr sandwhich when you can make grilled cheese, with this nutriment value? tastes = list("toast" = 1, "grilled cheese" = 1) -/obj/item/reagent_containers/food/snacks/jellysandwich +/obj/item/food/snacks/jellysandwich name = "jelly sandwich" desc = "You wish you had some peanut butter to go with this..." icon = 'icons/obj/food/burgerbread.dmi' @@ -354,13 +354,13 @@ bitesize = 3 tastes = list("toast" = 1, "jelly" = 1) -/obj/item/reagent_containers/food/snacks/jellysandwich/slime +/obj/item/food/snacks/jellysandwich/slime list_reagents = list("nutriment" = 2, "slimejelly" = 5, "vitamin" = 2) -/obj/item/reagent_containers/food/snacks/jellysandwich/cherry +/obj/item/food/snacks/jellysandwich/cherry list_reagents = list("nutriment" = 2, "cherryjelly" = 5, "vitamin" = 2) -/obj/item/reagent_containers/food/snacks/notasandwich +/obj/item/food/snacks/notasandwich name = "not-a-sandwich" desc = "Something seems to be wrong with this, you can't quite figure what. Maybe it's his moustache." icon = 'icons/obj/food/burgerbread.dmi' @@ -368,7 +368,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 6) tastes = list("nothing suspicious" = 1) -/obj/item/reagent_containers/food/snacks/wrap +/obj/item/food/snacks/wrap name = "egg wrap" desc = "The precursor to Pigs in a Blanket." icon = 'icons/obj/food/food.dmi' @@ -376,7 +376,7 @@ list_reagents = list("nutriment" = 5) tastes = list("egg" = 1) -/obj/item/reagent_containers/food/snacks/blt +/obj/item/food/snacks/blt name = "\improper BLT" desc = "A classic bacon, lettuce, and tomato sandwich." icon = 'icons/obj/food/burgerbread.dmi' @@ -386,7 +386,7 @@ list_reagents = list("nutriment" = 5, "protein" = 2) tastes = list("bacon" = 3, "lettuce" = 2, "tomato" = 2, "bread" = 2) -/obj/item/reagent_containers/food/snacks/peanut_butter_jelly +/obj/item/food/snacks/peanut_butter_jelly name = "peanut butter and jelly sandwich" desc = "A classic PB&J sandwich, just like your mom used to make." icon = 'icons/obj/food/burgerbread.dmi' @@ -395,13 +395,13 @@ bitesize = 2 tastes = list("peanut butter" = 3, "jelly" = 3, "bread" = 2) -/obj/item/reagent_containers/food/snacks/peanut_butter_jelly/slime +/obj/item/food/snacks/peanut_butter_jelly/slime list_reagents = list("peanutbutter" = 2, "slimejelly" = 5, "nutriment" = 5, "protein" = 2) -/obj/item/reagent_containers/food/snacks/peanut_butter_jelly/cherry +/obj/item/food/snacks/peanut_butter_jelly/cherry list_reagents = list("peanutbutter" = 2, "cherryjelly" = 5, "nutriment" = 5, "protein" = 2) -/obj/item/reagent_containers/food/snacks/philly_cheesesteak +/obj/item/food/snacks/philly_cheesesteak name = "Philly cheesesteak" desc = "A popular sandwich made of sliced meat, onions, melted cheese in a long hoagie roll. Mouthwatering doesn't even begin to describe it." icon = 'icons/obj/food/burgerbread.dmi' @@ -411,7 +411,7 @@ list_reagents = list("nutriment" = 10, "protein" = 4) tastes = list("steak" = 3, "melted cheese" = 3, "onions" = 2, "bread" = 2) -/obj/item/reagent_containers/food/snacks/peanut_butter_banana +/obj/item/food/snacks/peanut_butter_banana name = "peanut butter and banana sandwich" desc = "A peanut butter sandwich with banana slices mixed in, a good high protein treat." icon = 'icons/obj/food/burgerbread.dmi' diff --git a/code/modules/food_and_drinks/food/foods/seafood.dm b/code/modules/food_and_drinks/food/foods/seafood.dm index 72114a5d5549..629886de6b54 100644 --- a/code/modules/food_and_drinks/food/foods/seafood.dm +++ b/code/modules/food_and_drinks/food/foods/seafood.dm @@ -1,5 +1,5 @@ -/obj/item/reagent_containers/food/snacks/carpmeat +/obj/item/food/snacks/carpmeat name = "carp fillet" desc = "A fillet of spess carp meat." icon = 'icons/obj/food/seafood.dmi' @@ -11,7 +11,7 @@ ingredient_name = "fillet of meat" ingredient_name_plural = "fillets of meat" -/obj/item/reagent_containers/food/snacks/salmonmeat +/obj/item/food/snacks/salmonmeat name = "raw salmon" desc = "A fillet of raw salmon." icon = 'icons/obj/food/seafood.dmi' @@ -21,7 +21,7 @@ list_reagents = list("protein" = 3, "vitamin" = 2) tastes = list("raw salmon" = 1) -/obj/item/reagent_containers/food/snacks/salmonsteak +/obj/item/food/snacks/salmonsteak name = "salmon steak" desc = "A fillet of freshly-grilled salmon meat." icon = 'icons/obj/food/seafood.dmi' @@ -32,7 +32,7 @@ list_reagents = list("nutriment" = 4, "vitamin" = 2) tastes = list("cooked salmon" = 1) -/obj/item/reagent_containers/food/snacks/catfishmeat +/obj/item/food/snacks/catfishmeat name = "raw catfish" desc = "A fillet of raw catfish." icon = 'icons/obj/food/seafood.dmi' @@ -42,7 +42,7 @@ list_reagents = list("protein" = 3, "vitamin" = 2) tastes = list("catfish" = 1) -/obj/item/reagent_containers/food/snacks/fishfingers +/obj/item/food/snacks/fishfingers name = "fish fingers" desc = "A finger of fish." icon = 'icons/obj/food/seafood.dmi' @@ -52,7 +52,7 @@ list_reagents = list("nutriment" = 4) tastes = list("fish" = 1, "bread" = 1) -/obj/item/reagent_containers/food/snacks/fishburger +/obj/item/food/snacks/fishburger name = "Fillet-O-Carp sandwich" desc = "Almost like a carp is yelling somewhere... Give me back that fillet -o- carp, give me that carp." icon = 'icons/obj/food/seafood.dmi' @@ -62,7 +62,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4, "fish" = 4) -/obj/item/reagent_containers/food/snacks/cubancarp +/obj/item/food/snacks/cubancarp name = "cuban carp" desc = "A grifftastic sandwich that burns your tongue and then leaves it numb!" icon = 'icons/obj/food/seafood.dmi' @@ -73,7 +73,7 @@ list_reagents = list("nutriment" = 6, "capsaicin" = 1) tastes = list("fish" = 4, "batter" = 1, "hot peppers" = 1) -/obj/item/reagent_containers/food/snacks/fishandchips +/obj/item/food/snacks/fishandchips name = "fish and chips" desc = "I do say so myself old chap. Indubitably!" icon = 'icons/obj/food/seafood.dmi' @@ -83,7 +83,7 @@ list_reagents = list("nutriment" = 6) tastes = list("fish" = 1, "chips" = 1) -/obj/item/reagent_containers/food/snacks/sashimi +/obj/item/food/snacks/sashimi name = "carp sashimi" desc = "Celebrate surviving attack from hostile alien lifeforms by hospitalising yourself." icon = 'icons/obj/food/seafood.dmi' @@ -92,7 +92,7 @@ list_reagents = list("nutriment" = 6, "capsaicin" = 5) tastes = list("raw carp" = 1, "hot peppers" = 1) -/obj/item/reagent_containers/food/snacks/fried_shrimp +/obj/item/food/snacks/fried_shrimp name = "fried shrimp" desc = "Just one of the many things you can do with shrimp!" icon = 'icons/obj/food/seafood.dmi' @@ -101,7 +101,7 @@ list_reagents = list("nutriment" = 2) tastes = list("shrimp" = 1, "bread crumbs" = 1) -/obj/item/reagent_containers/food/snacks/boiled_shrimp +/obj/item/food/snacks/boiled_shrimp name = "boiled shrimp" desc = "Just one of the many things you can do with shrimp!" icon = 'icons/obj/food/seafood.dmi' @@ -110,7 +110,7 @@ list_reagents = list("nutriment" = 2) tastes = list("shrimp" = 1) -/obj/item/reagent_containers/food/snacks/shrimp_skewer +/obj/item/food/snacks/shrimp_skewer name = "shrimp skewer" desc = "Four shrimp lightly grilled on a skewer. Yummy!" trash = /obj/item/stack/rods @@ -120,7 +120,7 @@ list_reagents = list("nutriment" = 8) tastes = list("shrimp" = 4) -/obj/item/reagent_containers/food/snacks/fish_skewer +/obj/item/food/snacks/fish_skewer name = "fish skewer" desc = "A whole fish battered and grilled on a skewer. Hope you're hungry!" trash = /obj/item/stack/rods @@ -130,18 +130,18 @@ list_reagents = list("protein" = 6, "vitamin" = 4) tastes = list("shrimp" = 1, "batter" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/Ebi_maki +/obj/item/food/snacks/sliceable/Ebi_maki name = "ebi maki roll" desc = "A large unsliced roll of Ebi Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Ebi_maki" - slice_path = /obj/item/reagent_containers/food/snacks/sushi_Ebi + slice_path = /obj/item/food/snacks/sushi_Ebi slices_num = 4 bitesize = 3 list_reagents = list("nutriment" = 8) tastes = list("shrimp" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_Ebi +/obj/item/food/snacks/sushi_Ebi name = "ebi sushi" desc = "A simple sushi consisting of cooked shrimp and rice." icon = 'icons/obj/food/seafood.dmi' @@ -150,18 +150,18 @@ list_reagents = list("nutriment" = 2) tastes = list("shrimp" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/Ikura_maki +/obj/item/food/snacks/sliceable/Ikura_maki name = "ikura maki roll" desc = "A large unsliced roll of Ikura Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Ikura_maki" - slice_path = /obj/item/reagent_containers/food/snacks/sushi_Ikura + slice_path = /obj/item/food/snacks/sushi_Ikura slices_num = 4 bitesize = 3 list_reagents = list("nutriment" = 8, "protein" = 4) tastes = list("salmon roe" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_Ikura +/obj/item/food/snacks/sushi_Ikura name = "ikura sushi" desc = "A simple sushi consisting of salmon roe." icon = 'icons/obj/food/seafood.dmi' @@ -170,18 +170,18 @@ list_reagents = list("nutriment" = 2, "protein" = 1) tastes = list("salmon roe" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/Sake_maki +/obj/item/food/snacks/sliceable/Sake_maki name = "sake maki roll" desc = "A large unsliced roll of Sake Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Sake_maki" - slice_path = /obj/item/reagent_containers/food/snacks/sushi_Sake + slice_path = /obj/item/food/snacks/sushi_Sake slices_num = 4 bitesize = 3 list_reagents = list("nutriment" = 8) tastes = list("raw salmon" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_Sake +/obj/item/food/snacks/sushi_Sake name = "sake sushi" desc = "A simple sushi consisting of raw salmon and rice." icon = 'icons/obj/food/seafood.dmi' @@ -190,18 +190,18 @@ list_reagents = list("nutriment" = 2) tastes = list("raw salmon" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/SmokedSalmon_maki +/obj/item/food/snacks/sliceable/SmokedSalmon_maki name = "smoked salmon maki roll" desc = "A large unsliced roll of Smoked Salmon Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "SmokedSalmon_maki" - slice_path = /obj/item/reagent_containers/food/snacks/sushi_SmokedSalmon + slice_path = /obj/item/food/snacks/sushi_SmokedSalmon slices_num = 4 bitesize = 3 list_reagents = list("nutriment" = 8) tastes = list("smoked salmon" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_SmokedSalmon +/obj/item/food/snacks/sushi_SmokedSalmon name = "smoked salmon sushi" desc = "A simple sushi consisting of cooked salmon and rice." icon = 'icons/obj/food/seafood.dmi' @@ -210,18 +210,18 @@ list_reagents = list("nutriment" = 2) tastes = list("smoked salmon" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/Tamago_maki +/obj/item/food/snacks/sliceable/Tamago_maki name = "tamago maki roll" desc = "A large unsliced roll of Tamago Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Tamago_maki" - slice_path = /obj/item/reagent_containers/food/snacks/sushi_Tamago + slice_path = /obj/item/food/snacks/sushi_Tamago slices_num = 4 bitesize = 3 list_reagents = list("nutriment" = 8) tastes = list("egg" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_Tamago +/obj/item/food/snacks/sushi_Tamago name = "tamago sushi" desc = "A simple sushi consisting of egg and rice." icon = 'icons/obj/food/seafood.dmi' @@ -230,18 +230,18 @@ list_reagents = list("nutriment" = 2) tastes = list("egg" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/Inari_maki +/obj/item/food/snacks/sliceable/Inari_maki name = "inari maki roll" desc = "A large unsliced roll of Inari Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Inari_maki" - slice_path = /obj/item/reagent_containers/food/snacks/sushi_Inari + slice_path = /obj/item/food/snacks/sushi_Inari slices_num = 4 bitesize = 3 list_reagents = list("nutriment" = 8) tastes = list("fried tofu" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_Inari +/obj/item/food/snacks/sushi_Inari name = "inari sushi" desc = "A piece of fried tofu stuffed with rice." icon = 'icons/obj/food/seafood.dmi' @@ -250,18 +250,18 @@ list_reagents = list("nutriment" = 2) tastes = list("fried tofu" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/Masago_maki +/obj/item/food/snacks/sliceable/Masago_maki name = "masago maki roll" desc = "A large unsliced roll of Masago Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Masago_maki" - slice_path = /obj/item/reagent_containers/food/snacks/sushi_Masago + slice_path = /obj/item/food/snacks/sushi_Masago slices_num = 4 bitesize = 3 list_reagents = list("nutriment" = 8, "protein" = 4) tastes = list("goldfish roe" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_Masago +/obj/item/food/snacks/sushi_Masago name = "masago sushi" desc = "A simple sushi consisting of goldfish roe." icon = 'icons/obj/food/seafood.dmi' @@ -270,18 +270,18 @@ list_reagents = list("nutriment" = 2, "protein" = 1) tastes = list("goldfish roe" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/Tobiko_maki +/obj/item/food/snacks/sliceable/Tobiko_maki name = "tobiko maki roll" desc = "A large unsliced roll of Tobkio Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Tobiko_maki" - slice_path = /obj/item/reagent_containers/food/snacks/sushi_Tobiko + slice_path = /obj/item/food/snacks/sushi_Tobiko slices_num = 4 bitesize = 3 list_reagents = list("nutriment" = 8, "protein" = 4) tastes = list("shark roe" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_Tobiko +/obj/item/food/snacks/sushi_Tobiko name = "tobiko sushi" desc = "A simple sushi consisting of shark roe." icon = 'icons/obj/food/seafood.dmi' @@ -290,18 +290,18 @@ list_reagents = list("nutriment" = 2, "protein" = 1) tastes = list("shark roe" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/TobikoEgg_maki +/obj/item/food/snacks/sliceable/TobikoEgg_maki name = "tobiko and egg maki roll" desc = "A large unsliced roll of Tobkio and Egg Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "TobikoEgg_maki" - slice_path = /obj/item/reagent_containers/food/snacks/sushi_TobikoEgg + slice_path = /obj/item/food/snacks/sushi_TobikoEgg slices_num = 4 bitesize = 3 list_reagents = list("nutriment" = 8, "protein" = 4) tastes = list("shark roe" = 1, "rice" = 1, "egg" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_TobikoEgg +/obj/item/food/snacks/sushi_TobikoEgg name = "tobiko and egg sushi" desc = "A sushi consisting of shark roe and an egg." icon = 'icons/obj/food/seafood.dmi' @@ -310,18 +310,18 @@ list_reagents = list("nutriment" = 2, "protein" = 1) tastes = list("shark roe" = 1, "rice" = 1, "egg" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sliceable/Tai_maki +/obj/item/food/snacks/sliceable/Tai_maki name = "tai maki roll" desc = "A large unsliced roll of Tai Sushi." icon = 'icons/obj/food/seafood.dmi' icon_state = "Tai_maki" - slice_path = /obj/item/reagent_containers/food/snacks/sushi_Tai + slice_path = /obj/item/food/snacks/sushi_Tai slices_num = 4 bitesize = 3 list_reagents = list("nutriment" = 8) tastes = list("catfish" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_Tai +/obj/item/food/snacks/sushi_Tai name = "tai sushi" desc = "A simple sushi consisting of catfish and rice." icon = 'icons/obj/food/seafood.dmi' @@ -330,7 +330,7 @@ list_reagents = list("nutriment" = 2) tastes = list("catfish" = 1, "rice" = 1, "seaweed" = 1) -/obj/item/reagent_containers/food/snacks/sushi_Unagi +/obj/item/food/snacks/sushi_Unagi name = "unagi sushi" desc = "A simple sushi consisting of eel and rice." icon = 'icons/obj/food/seafood.dmi' diff --git a/code/modules/food_and_drinks/food/foods/side_dishes.dm b/code/modules/food_and_drinks/food/foods/side_dishes.dm index ec73c20f8123..fbfdf0394622 100644 --- a/code/modules/food_and_drinks/food/foods/side_dishes.dm +++ b/code/modules/food_and_drinks/food/foods/side_dishes.dm @@ -3,7 +3,7 @@ // Raw // ////////////////////// -/obj/item/reagent_containers/food/snacks/rawsticks +/obj/item/food/snacks/rawsticks name = "raw potato sticks" desc = "Raw fries, not very tasty." icon = 'icons/obj/food/food_ingredients.dmi' @@ -16,7 +16,7 @@ // Fried // ////////////////////// -/obj/item/reagent_containers/food/snacks/fries +/obj/item/food/snacks/fries name = "space fries" desc = "AKA: French Fries, Freedom Fries, etc." icon_state = "fries" @@ -25,7 +25,7 @@ list_reagents = list("nutriment" = 4) tastes = list("fries" = 3, "salt" = 1) -/obj/item/reagent_containers/food/snacks/cheesyfries +/obj/item/food/snacks/cheesyfries name = "cheesy fries" desc = "Fries. Covered in cheese. Duh." icon_state = "cheesyfries" @@ -34,7 +34,7 @@ list_reagents = list("nutriment" = 6) tastes = list("fries" = 3, "cheese" = 1) -/obj/item/reagent_containers/food/snacks/tatortot +/obj/item/food/snacks/tatortot name = "tator tot" desc = "A large fried potato nugget that may or may not try to valid you." icon_state = "tatortot" @@ -42,7 +42,7 @@ filling_color = "FFD700" tastes = list("fried potato" = 3, "valids" = 1) -/obj/item/reagent_containers/food/snacks/onionrings +/obj/item/food/snacks/onionrings name = "onion rings" desc = "Onion slices coated in batter." icon_state = "onionrings" @@ -51,7 +51,7 @@ gender = PLURAL tastes = list("onion" = 3, "batter" = 1) -/obj/item/reagent_containers/food/snacks/carrotfries +/obj/item/food/snacks/carrotfries name = "carrot fries" desc = "Tasty fries from fresh carrots." icon_state = "carrotfries" @@ -65,14 +65,14 @@ // Misc // ////////////////////// -/obj/item/reagent_containers/food/snacks/beans +/obj/item/food/snacks/beans name = "tin of beans" desc = "Musical fruit in a slightly less musical container." icon_state = "beans" list_reagents = list("nutriment" = 10, "beans" = 10, "vitamin" = 3) tastes = list("beans" = 1) -/obj/item/reagent_containers/food/snacks/mashed_potatoes //mashed taters +/obj/item/food/snacks/mashed_potatoes //mashed taters name = "mashed potatoes" desc = "Some soft, creamy, and irresistible mashed potatoes." icon_state = "mashedtaters" @@ -81,7 +81,7 @@ list_reagents = list("nutriment" = 5, "gravy" = 5, "mashedpotatoes" = 10, "vitamin" = 2) tastes = list("mashed potato" = 3, "gravy" = 1) -/obj/item/reagent_containers/food/snacks/stuffing +/obj/item/food/snacks/stuffing name = "stuffing" desc = "Moist, peppery breadcrumbs for filling the body cavities of dead birds. Dig in!" icon_state = "stuffing" @@ -89,7 +89,7 @@ list_reagents = list("nutriment" = 3) tastes = list("bread crumbs" = 1, "herbs" = 1) -/obj/item/reagent_containers/food/snacks/loadedbakedpotato +/obj/item/food/snacks/loadedbakedpotato name = "loaded baked potato" desc = "Totally baked." icon_state = "loadedbakedpotato" @@ -97,7 +97,7 @@ list_reagents = list("nutriment" = 6) tastes = list("potato" = 1, "cheese" = 1, "herbs" = 1) -/obj/item/reagent_containers/food/snacks/boiledrice +/obj/item/food/snacks/boiledrice name = "boiled rice" desc = "A boring dish of boring rice." icon_state = "boiledrice" @@ -107,7 +107,7 @@ tastes = list("rice" = 1) -/obj/item/reagent_containers/food/snacks/roastparsnip +/obj/item/food/snacks/roastparsnip name = "roast parsnip" desc = "Sweet and crunchy." icon_state = "roastparsnip" diff --git a/code/modules/food_and_drinks/food/foods/soups.dm b/code/modules/food_and_drinks/food/foods/soups.dm index efe2cc630fe2..d60b10a0d6e8 100644 --- a/code/modules/food_and_drinks/food/foods/soups.dm +++ b/code/modules/food_and_drinks/food/foods/soups.dm @@ -4,7 +4,7 @@ ////////////////////// // Base object for soups, should never appear ingame. -/obj/item/reagent_containers/food/snacks/soup +/obj/item/food/snacks/soup name = "impossible soup" desc = "This soup is so good, it shouldn't even exist!" icon = 'icons/obj/food/soupsalad.dmi' @@ -13,7 +13,7 @@ trash = /obj/item/trash/snack_bowl bitesize = 5 -/obj/item/reagent_containers/food/snacks/soup/meatballsoup +/obj/item/food/snacks/soup/meatballsoup name = "meatball soup" desc = "You've got balls kid, BALLS!" icon_state = "meatballsoup" @@ -21,7 +21,7 @@ list_reagents = list("nutriment" = 8, "water" = 5, "vitamin" = 4) tastes = list("meatball" = 1) -/obj/item/reagent_containers/food/snacks/soup/slimesoup +/obj/item/food/snacks/soup/slimesoup name = "slime soup" desc = "If no water is available, you may substitute tears." icon_state = "slimesoup" @@ -29,7 +29,7 @@ list_reagents = list("nutriment" = 5, "slimejelly" = 5, "water" = 5, "vitamin" = 4) tastes = list("slime" = 1) -/obj/item/reagent_containers/food/snacks/soup/bloodsoup +/obj/item/food/snacks/soup/bloodsoup name = "tomato soup" desc = "Smells like copper." icon_state = "tomatosoup" @@ -37,7 +37,7 @@ list_reagents = list("nutriment" = 2, "blood" = 10, "water" = 5, "vitamin" = 4) tastes = list("iron" = 1) -/obj/item/reagent_containers/food/snacks/soup/clownstears +/obj/item/food/snacks/soup/clownstears name = "clown's tears" desc = "Not very funny." icon_state = "clownstears" @@ -45,7 +45,7 @@ list_reagents = list("nutriment" = 4, "banana" = 5, "water" = 5, "vitamin" = 8) tastes = list("a bad joke" = 1) -/obj/item/reagent_containers/food/snacks/soup/vegetablesoup +/obj/item/food/snacks/soup/vegetablesoup name = "vegetable soup" desc = "A true vegan meal." //TODO icon_state = "vegetablesoup" @@ -53,7 +53,7 @@ list_reagents = list("nutriment" = 8, "water" = 5, "vitamin" = 4) tastes = list("vegetables" = 1) -/obj/item/reagent_containers/food/snacks/soup/nettlesoup +/obj/item/food/snacks/soup/nettlesoup name = "nettle soup" desc = "To think, the botanist would've beaten you to death with one of these." icon_state = "nettlesoup" @@ -61,7 +61,7 @@ list_reagents = list("nutriment" = 8, "water" = 5, "vitamin" = 4) tastes = list("nettles" = 1) -/obj/item/reagent_containers/food/snacks/soup/mysterysoup +/obj/item/food/snacks/soup/mysterysoup name = "mystery soup" desc = "The mystery is, why aren't you eating it?" icon_state = "mysterysoup" @@ -69,12 +69,12 @@ list_reagents = list("nutriment" = 6) tastes = list("chaos" = 1) -/obj/item/reagent_containers/food/snacks/soup/mysterysoup/Initialize(mapload) +/obj/item/food/snacks/soup/mysterysoup/Initialize(mapload) . = ..() extra_reagent = pick("capsaicin", "frostoil", "omnizine", "banana", "blood", "slimejelly", "toxin", "banana", "carbon", "oculine") reagents.add_reagent("[extra_reagent]", 5) -/obj/item/reagent_containers/food/snacks/soup/wishsoup +/obj/item/food/snacks/soup/wishsoup name = "wish soup" desc = "I wish this was soup." icon_state = "wishsoup" @@ -82,14 +82,14 @@ list_reagents = list("water" = 10) tastes = list("wishes" = 1) -/obj/item/reagent_containers/food/snacks/soup/wishsoup/Initialize(mapload) +/obj/item/food/snacks/soup/wishsoup/Initialize(mapload) . = ..() if(prob(25)) desc = "A wish come true!" // hue reagents.add_reagent("nutriment", 9) reagents.add_reagent("vitamin", 1) -/obj/item/reagent_containers/food/snacks/soup/tomatosoup +/obj/item/food/snacks/soup/tomatosoup name = "tomato soup" desc = "Drinking this feels like being a vampire! A tomato vampire..." icon_state = "tomatosoup" @@ -97,14 +97,14 @@ list_reagents = list("nutriment" = 5, "tomatojuice" = 10, "vitamin" = 3) tastes = list("tomato" = 1) -/obj/item/reagent_containers/food/snacks/soup/misosoup +/obj/item/food/snacks/soup/misosoup name = "miso soup" desc = "The universe's best soup! Yum!!!" icon_state = "misosoup" list_reagents = list("nutriment" = 7, "vitamin" = 2) tastes = list("miso" = 1) -/obj/item/reagent_containers/food/snacks/soup/mushroomsoup +/obj/item/food/snacks/soup/mushroomsoup name = "chantrelle soup" desc = "A delicious and hearty mushroom soup." icon_state = "mushroomsoup" @@ -112,7 +112,7 @@ list_reagents = list("nutriment" = 8, "vitamin" = 4) tastes = list("mushroom" = 1) -/obj/item/reagent_containers/food/snacks/soup/beetsoup +/obj/item/food/snacks/soup/beetsoup name = "beet soup" desc = "Wait, how do you spell it again..?" icon_state = "beetsoup" @@ -120,11 +120,11 @@ list_reagents = list("nutriment" = 7, "vitamin" = 2) tastes = list("beet" = 1) -/obj/item/reagent_containers/food/snacks/soup/beetsoup/Initialize(mapload) +/obj/item/food/snacks/soup/beetsoup/Initialize(mapload) . = ..() name = pick("borsch", "bortsch", "borstch", "borsh", "borshch", "borscht") -/obj/item/reagent_containers/food/snacks/soup/eyesoup +/obj/item/food/snacks/soup/eyesoup name = "eyeball soup" desc = "It looks back at you..." icon_state = "eyeballsoup" @@ -132,63 +132,63 @@ list_reagents = list("nutriment" = 7, "protein" = 2) tastes = list("squirming" = 2, "tomato" = 2) -/obj/item/reagent_containers/food/snacks/soup/sweetpotatosoup +/obj/item/food/snacks/soup/sweetpotatosoup name = "sweet potato soup" desc = "Delicious sweet potato in soup form." icon_state = "sweetpotatosoup" list_reagents = list("nutriment" = 5) tastes = list("sweet potato" = 1) -/obj/item/reagent_containers/food/snacks/soup/redbeetsoup +/obj/item/food/snacks/soup/redbeetsoup name = "red beet soup" desc = "Quite a delicacy." icon_state = "redbeetsoup" list_reagents = list("nutriment" = 5) tastes = list("red beet" = 1) -/obj/item/reagent_containers/food/snacks/soup/frenchonionsoup +/obj/item/food/snacks/soup/frenchonionsoup name = "french onion soup" desc = "Good enough to make a grown mime cry." icon_state = "onionsoup" list_reagents = list("nutriment" = 8) tastes = list("caramelized onions" = 3, "cheese" = 1) -/obj/item/reagent_containers/food/snacks/soup/zurek +/obj/item/food/snacks/soup/zurek name = "zurek" desc = "A traditional Polish soup composed of vegetables, meat, and an egg. Goes great with bread." icon_state = "zurek" list_reagents = list("nutriment" = 10, "protein" = 4) tastes = list("creamy vegetables" = 3, "sausage" = 2) -/obj/item/reagent_containers/food/snacks/soup/cullenskink +/obj/item/food/snacks/soup/cullenskink name = "cullen skink" desc = "A thick Scottish soup made of smoked fish, potatoes and onions." icon_state = "cullen_skink" list_reagents = list("nutriment" = 10, "protein" = 4) tastes = list("creamy broth" = 2, "fish" = 2, "vegetables" = 2) -/obj/item/reagent_containers/food/snacks/soup/chicken_noodle_soup +/obj/item/food/snacks/soup/chicken_noodle_soup name = "chicken noodle soup" desc = "A hearty bowl of chicken noodle soup, perfect for when you're stuck at home and sick." icon_state = "chicken_noodle_soup" list_reagents = list("nutriment" = 10, "protein" = 4) tastes = list("broth" = 1, "chicken" = 1, "carrots" = 1, "noodles" = 1) -/obj/item/reagent_containers/food/snacks/soup/cornchowder +/obj/item/food/snacks/soup/cornchowder name = "corn chowder" desc = "A creamy bowl of corn chowder, with bacon bits and mixed vegetables. One bowl is never enough." icon_state = "corn_chowder" list_reagents = list("nutriment" = 10, "protein" = 4) tastes = list("creamy broth" = 1, "bacon" = 1, "mixed vegetables" = 1) -/obj/item/reagent_containers/food/snacks/soup/meatball_noodles +/obj/item/food/snacks/soup/meatball_noodles name = "meatball noodle soup" desc = "A hearty noodle soup made from meatballs and pasta in a rich broth. Commonly topped with a handful of chopped nuts." icon_state = "meatball_noodles" list_reagents = list("nutriment" = 10, "protein" = 4) tastes = list("bone broth" = 1, "meat" = 1, "gnocchi" = 1, "peanuts" = 1) -/obj/item/reagent_containers/food/snacks/soup/seedsoup +/obj/item/food/snacks/soup/seedsoup name = "Misklmæsch" //miskl = seed, mæsch = soup desc = "A seed based soup, made by germinating seeds and then boiling them. \ Produces a particularly bitter broth which is usually balanced by the addition of vinegar." @@ -200,7 +200,7 @@ // Stews // ////////////////////// -/obj/item/reagent_containers/food/snacks/soup/stew +/obj/item/food/snacks/soup/stew name = "stew" desc = "A nice and warm stew. Healthy and strong." icon_state = "stew" @@ -209,7 +209,7 @@ list_reagents = list("nutriment" = 10, "oculine" = 5, "tomatojuice" = 5, "vitamin" = 5) tastes = list("tomato" = 1, "carrot" = 1) -/obj/item/reagent_containers/food/snacks/stewedsoymeat +/obj/item/food/snacks/stewedsoymeat name = "stewed soy meat" desc = "Even non-vegetarians will LOVE this!" icon = 'icons/obj/food/soupsalad.dmi' @@ -218,28 +218,28 @@ list_reagents = list("nutriment" = 8) tastes = list("soy" = 1, "vegetables" = 1) -/obj/item/reagent_containers/food/snacks/soup/beanstew +/obj/item/food/snacks/soup/beanstew name = "Prickeldröndolhaskl" //prickeld = spicy, röndol = bean, haskl = stew desc = "A spicy bean stew with lots of veggies, commonly served aboard the fleet as a filling and satisfying meal with rice or bread." icon_state = "moth_bean_stew" list_reagents = list("nutriment" = 10) tastes = list("beans" = 1, "cabbage" = 1, "spicy sauce" = 1) -/obj/item/reagent_containers/food/snacks/soup/oatstew +/obj/item/food/snacks/soup/oatstew name = "Häfmisklhaskl" //häfmiskl = oat (häf from German hafer meaning oat, miskl meaning seed), haskl = stew desc = "A spicy bean stew with lots of veggies, commonly served aboard the fleet as a filling and satisfying meal with rice or bread." icon_state = "moth_oat_stew" list_reagents = list("nutriment" = 10) tastes = list("oats" = 1, "sweet potato" = 1, "carrot" = 1, "pumpkin" = 1, "parsnip" = 1) -/obj/item/reagent_containers/food/snacks/soup/hong_kong_borscht +/obj/item/food/snacks/soup/hong_kong_borscht name = "hong kong borscht" desc = "Also known as luo song tang or Russian soup, this dish bears little to no resemblance to Eastern European borscht- indeed, it's a tomato-based soup with no beets in sight." icon_state = "hong_kong_borscht" list_reagents = list("nutriment" = 10, "protein" = 2) tastes = list("tomato" = 1, "cabbage" = 1, "meat" = 1) -/obj/item/reagent_containers/food/snacks/soup/hong_kong_macaroni +/obj/item/food/snacks/soup/hong_kong_macaroni name = "hong kong macaroni" desc = "A favourite from Hong Kong's Cha Chaan Tengs, this macaroni soup came to Mars with Cantonese settlers under Cybersun Industries, and has become as much of a breakfast staple there as it is in its homeland." icon_state = "hong_kong_macaroni" @@ -250,7 +250,7 @@ // Chili // ////////////////////// -/obj/item/reagent_containers/food/snacks/soup/hotchili +/obj/item/food/snacks/soup/hotchili name = "hot chili" desc = "A five alarm Texan Chili!" icon_state = "hotchili" @@ -258,7 +258,7 @@ list_reagents = list("nutriment" = 5, "capsaicin" = 1, "tomatojuice" = 2, "vitamin" = 2) tastes = list("hot peppers" = 1, "tomato" = 1) -/obj/item/reagent_containers/food/snacks/soup/coldchili +/obj/item/food/snacks/soup/coldchili name = "cold chili" desc = "This slush is barely a liquid!" icon_state = "coldchili" @@ -266,7 +266,7 @@ list_reagents = list("nutriment" = 5, "frostoil" = 1, "tomatojuice" = 2, "vitamin" = 2) tastes = list("tomato" = 1, "mint" = 1) -/obj/item/reagent_containers/food/snacks/soup/clownchili +/obj/item/food/snacks/soup/clownchili name = "chili con carnival" desc = "A delicious stew of meat, chiles, and salty, salty clown tears." icon_state = "clownchili" diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index db1d85d77ed3..6a46a51c9259 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -1,6 +1,6 @@ #define MAX_WEIGHT_CLASS WEIGHT_CLASS_SMALL //Food items that are eaten normally and don't leave anything behind. -/obj/item/reagent_containers/food/snacks +/obj/item/food/snacks name = "snack" desc = "yummy" icon = 'icons/obj/food/food.dmi' @@ -16,8 +16,8 @@ var/total_w_class = 0 //for the total weight an item of food can carry var/list/tastes // for example list("crisps" = 2, "salt" = 1) -/obj/item/reagent_containers/food/snacks/add_initial_reagents() - if(tastes && tastes.len) +/obj/item/food/snacks/add_initial_reagents() + if(tastes && length(tastes)) if(list_reagents) for(var/rid in list_reagents) var/amount = list_reagents[rid] @@ -29,13 +29,13 @@ ..() //Placeholder for effect that trigger on eating that aren't tied to reagents. -/obj/item/reagent_containers/food/snacks/proc/On_Consume(mob/M, mob/user) +/obj/item/food/snacks/proc/On_Consume(mob/M, mob/user) if(!user) return if(!reagents.total_volume) if(M == user) - to_chat(user, "You finish eating \the [src].") - user.visible_message("[M] finishes eating \the [src].") + to_chat(user, "You finish eating [src].") + user.visible_message("[M] finishes eating [src].") user.unEquip(src) //so icons update :[ Post_Consume(M) var/obj/item/trash_item = generate_trash(usr) @@ -43,13 +43,13 @@ qdel(src) return -/obj/item/reagent_containers/food/snacks/proc/Post_Consume(mob/living/M) +/obj/item/food/snacks/proc/Post_Consume(mob/living/M) return -/obj/item/reagent_containers/food/snacks/attack_self(mob/user) +/obj/item/food/snacks/attack_self(mob/user) return -/obj/item/reagent_containers/food/snacks/attack(mob/M, mob/user, def_zone) +/obj/item/food/snacks/attack(mob/M, mob/user, def_zone) if(reagents && !reagents.total_volume) //Shouldn't be needed but it checks to see if it has anything left in it. to_chat(user, "None of [src] left, oh no!") M.unEquip(src) //so icons update :[ @@ -64,10 +64,10 @@ return TRUE return FALSE -/obj/item/reagent_containers/food/snacks/afterattack(obj/target, mob/user, proximity) +/obj/item/food/snacks/afterattack(obj/target, mob/user, proximity) return -/obj/item/reagent_containers/food/snacks/examine(mob/user) +/obj/item/food/snacks/examine(mob/user) . = ..() if(in_range(user, src)) if(bitecount > 0) @@ -79,7 +79,7 @@ . += "[src] was bitten multiple times!" -/obj/item/reagent_containers/food/snacks/attackby(obj/item/W, mob/user, params) +/obj/item/food/snacks/attackby(obj/item/W, mob/user, params) if(is_pen(W)) rename_interactive(user, W, use_prefix = FALSE, prompt = "What would you like to name this dish?") return @@ -105,7 +105,7 @@ I.color = filling_color U.overlays += I - var/obj/item/reagent_containers/food/snacks/collected = new type + var/obj/item/food/snacks/collected = new type collected.name = name collected.loc = U collected.reagents.remove_any(collected.reagents.total_volume) @@ -126,7 +126,7 @@ else return ..() -/obj/item/reagent_containers/food/snacks/proc/generate_trash(atom/location) +/obj/item/food/snacks/proc/generate_trash(atom/location) if(trash) if(ispath(trash, /obj/item)) . = new trash(location) @@ -139,13 +139,13 @@ trash = null return -/obj/item/reagent_containers/food/snacks/Destroy() +/obj/item/food/snacks/Destroy() if(contents) for(var/atom/movable/something in contents) something.loc = get_turf(src) return ..() -/obj/item/reagent_containers/food/snacks/attack_animal(mob/M) +/obj/item/food/snacks/attack_animal(mob/M) if(isanimal(M)) M.changeNext_move(CLICK_CD_MELEE) if(isdog(M)) @@ -173,11 +173,11 @@ N.adjustHealth(-2) N.taste(reagents) -/obj/item/reagent_containers/food/snacks/sliceable/examine(mob/user) +/obj/item/food/snacks/sliceable/examine(mob/user) . = ..() . += "Alt-click to put something small inside." -/obj/item/reagent_containers/food/snacks/sliceable/AltClick(mob/user) +/obj/item/food/snacks/sliceable/AltClick(mob/user) var/obj/item/I = user.get_active_hand() if(!I) return @@ -199,7 +199,7 @@ add_fingerprint(user) I.forceMove(src) -/obj/item/reagent_containers/food/snacks/sliceable/attackby(obj/item/I, mob/user, params) +/obj/item/food/snacks/sliceable/attackby(obj/item/I, mob/user, params) if((slices_num <= 0 || !slices_num) || !slice_path) return FALSE @@ -259,25 +259,14 @@ // bitesize of 2, then it'll take 3 bites to eat. Unlike the old system, the contained reagents are evenly spread among all // the bites. No more contained reagents = no more bites. -//Here is an example of the new formatting for anyone who wants to add more food items. -///obj/item/reagent_containers/food/snacks/xenoburger //Identification path for the object. -// name = "Xenoburger" //Name that displays in the UI. -// desc = "Smells caustic. Tastes like heresy." //Duh -// icon_state = "xburger" //Refers to an icon in food/food.dmi -// New() //Don't mess with this. -// ..() //Same here. -// reagents.add_reagent("xenomicrobes", 10) //This is what is in the food item. you may copy/paste -// reagents.add_reagent("nutriment", 2) // this line of code for all the contents. -// bitesize = 3 //This is the amount each bite consumes. - -/obj/item/reagent_containers/food/snacks/badrecipe +/obj/item/food/snacks/badrecipe name = "burned mess" desc = "Someone should be demoted from chef for this." icon_state = "badrecipe" filling_color = "#211F02" list_reagents = list("????" = 30) -/obj/item/reagent_containers/food/snacks/badrecipe/Initialize(mapload) +/obj/item/food/snacks/badrecipe/Initialize(mapload) . = ..() // it's burned! it should start off being classed as any cooktype that burns cooktype["grilled"] = TRUE @@ -285,14 +274,14 @@ // MISC -/obj/item/reagent_containers/food/snacks/cereal +/obj/item/food/snacks/cereal name = "box of cereal" desc = "A box of cereal." icon = 'icons/obj/food/food.dmi' icon_state = "cereal_box" list_reagents = list("nutriment" = 3) -/obj/item/reagent_containers/food/snacks/deepfryholder +/obj/item/food/snacks/deepfryholder name = "Deep Fried Foods Holder Obj" desc = "If you can see this description the code for the deep fryer fucked up." icon = 'icons/obj/food/food.dmi' diff --git a/code/modules/food_and_drinks/food_base.dm b/code/modules/food_and_drinks/food_base.dm index 51bca61fe51c..30f9e964635d 100644 --- a/code/modules/food_and_drinks/food_base.dm +++ b/code/modules/food_and_drinks/food_base.dm @@ -1,19 +1,17 @@ //////////////////////////////////////////////////////////////////////////////// /// Food. //////////////////////////////////////////////////////////////////////////////// -/obj/item/reagent_containers/food - possible_transfer_amounts = null - visible_transfer_rate = FALSE - volume = 50 - /// Used by sandwiches - var/filling_color = "#FFFFFF" - /// Used by junk food to lower satiety - var/junkiness = 0 + +/obj/item/food + resistance_flags = FLAMMABLE + container_type = INJECTABLE + var/filling_color = "#FFFFFF" //Used by sandwiches. + var/junkiness = 0 //for junk food. used to lower human satiety. var/bitesize = 2 var/consume_sound = 'sound/items/eatfood.ogg' - /// Will ants infest it? + /// Will ants come near it? var/antable = TRUE - /// Location checked every 5 minutes. If its the same place, the food has a chance to spawn ants + /// location checked every 5 minutes. If its the same place, the food has a chance to spawn ants var/ant_location /// Things that suppress food from being infested by ants when on the same turf var/static/list/ant_suppressors @@ -22,10 +20,15 @@ /// Name of the food to show up in kitchen machines (microwaves, ovens, etc) var/ingredient_name var/ingredient_name_plural - resistance_flags = FLAMMABLE - container_type = INJECTABLE + /// Sets the default container amount for all food items. + var/volume = 50 + /// The list of reagents to create on Initialize() + var/list/list_reagents = list() -/obj/item/reagent_containers/food/Initialize(mapload) + var/temperature_min = 0 // To limit the temperature of a reagent container can attain when exposed to heat/cold + var/temperature_max = 10000 + +/obj/item/food/Initialize(mapload) . = ..() if(!antable) return @@ -40,19 +43,27 @@ ant_location = get_turf(src) last_ant_time = world.time -/obj/item/reagent_containers/food/Destroy() + if(!reagents) // Some subtypes create their own reagents + create_reagents(volume, temperature_min, temperature_max) + add_initial_reagents() + +/obj/item/food/Destroy() ant_location = null if(isprocessing) STOP_PROCESSING(SSobj, src) return ..() -/obj/item/reagent_containers/food/process() +/obj/item/food/proc/add_initial_reagents() // This literally is only a proc for junk food + if(list_reagents) + reagents.add_reagent_list(list_reagents) + +/obj/item/food/process() if(!antable) return PROCESS_KILL if(world.time > last_ant_time + 5 MINUTES) check_for_ants() -/obj/item/reagent_containers/food/proc/check_for_ants() +/obj/item/food/proc/check_for_ants() last_ant_time = world.time // Are we unshielded from the fury of space ants? @@ -77,3 +88,10 @@ antable = FALSE desc += " It appears to be infested with ants. Yuck!" reagents.add_reagent("ants", 1) // Don't eat things with ants in it you weirdo. + +/obj/item/food/ex_act() + if(reagents) + for(var/datum/reagent/R in reagents.reagent_list) + R.on_ex_act() + if(!QDELETED(src)) + ..() diff --git a/code/modules/food_and_drinks/kitchen_machinery/cereal_maker.dm b/code/modules/food_and_drinks/kitchen_machinery/cereal_maker.dm index 59fe4b78bcdb..a0d534809432 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/cereal_maker.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/cereal_maker.dm @@ -19,6 +19,6 @@ setme.desc = "[name.desc] It has been [thiscooktype]" /obj/machinery/cooker/cerealmaker/gettype() - var/obj/item/reagent_containers/food/snacks/cereal/type = new(get_turf(src)) + var/obj/item/food/snacks/cereal/type = new(get_turf(src)) return type diff --git a/code/modules/food_and_drinks/kitchen_machinery/cooker.dm b/code/modules/food_and_drinks/kitchen_machinery/cooker.dm index e6b9d5dadc0f..6ea19108e8b8 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/cooker.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/cooker.dm @@ -34,13 +34,13 @@ return ..() // checks if the snack has been cooked in a certain way -/obj/machinery/cooker/proc/checkCooked(obj/item/reagent_containers/food/snacks/D) +/obj/machinery/cooker/proc/checkCooked(obj/item/food/snacks/D) if(D.cooktype[thiscooktype]) return 1 return 0 // Sets the new snack's cooktype list to the same as the old one - no more cooking something in the same machine more than once! -/obj/machinery/cooker/proc/setCooked(obj/item/reagent_containers/food/snacks/oldtypes, obj/item/reagent_containers/food/snacks/newtypes) +/obj/machinery/cooker/proc/setCooked(obj/item/food/snacks/oldtypes, obj/item/food/snacks/newtypes) var/ct for(ct in oldtypes.cooktype) newtypes.cooktype[ct] = oldtypes.cooktype[ct] @@ -115,7 +115,7 @@ return FALSE if(has_specials && checkSpecials(check)) return TRUE - if(istype(check, /obj/item/reagent_containers/food/snacks) || emagged) + if(istype(check, /obj/item/food/snacks) || emagged) if(istype(check, /obj/item/disk/nuclear)) //(1984 voice) you will not deep fry the NAD to_chat(user, "The disk is more useful raw than [thiscooktype].") return FALSE @@ -147,7 +147,7 @@ // if burns = FALSE then it'll just tell you that the item is already that foodtype and it would do nothing // if you wanted a different side effect set burns to 1 and override burn_food() /obj/machinery/cooker/proc/burn_food(mob/user, obj/item/reagent_containers/props) - var/obj/item/reagent_containers/food/snacks/badrecipe/burnt = new(get_turf(src)) + var/obj/item/food/snacks/badrecipe/burnt = new(get_turf(src)) setRegents(props, burnt) soundloop.stop() to_chat(user, "You smell burning coming from [src]!") @@ -177,7 +177,7 @@ // Override this with the correct snack type /obj/machinery/cooker/proc/gettype() - var/obj/item/reagent_containers/food/snacks/type = new(get_turf(src)) + var/obj/item/food/snacks/type = new(get_turf(src)) return type /obj/machinery/cooker/attackby(obj/item/I, mob/user, params) @@ -197,7 +197,7 @@ if(!checkValid(I, user)) return if(!burns) - if(istype(I, /obj/item/reagent_containers/food/snacks)) + if(istype(I, /obj/item/food/snacks)) if(checkCooked(I)) to_chat(user, "That is already [thiscooktype], it would do nothing!") return @@ -226,17 +226,17 @@ cookSpecial(special) //Handle cooking the item as appropriate turnoff(I) //Shut off the machine and qdel the original item return - if(istype(I, /obj/item/reagent_containers/food/snacks)) + if(istype(I, /obj/item/food/snacks)) if(checkCooked(I)) burn_food(user, I) turnoff(I) return - var/obj/item/reagent_containers/food/snacks/newfood = gettype() + var/obj/item/food/snacks/newfood = gettype() setIcon(I, newfood) changename(I, newfood) if(istype(I, /obj/item/reagent_containers)) setRegents(I, newfood) - if(istype(I, /obj/item/reagent_containers/food/snacks)) + if(istype(I, /obj/item/food/snacks)) setCooked(I, newfood) newfood.cooktype[thiscooktype] = TRUE turnoff(I) diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm index 2d51e0762af9..f5dfe6000190 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm @@ -40,11 +40,11 @@ cooktime = (200 - (E * 20)) //Effectively each laser improves cooktime by 20 per rating beyond the first (200 base, 80 max upgrade) /obj/machinery/cooker/deepfryer/gettype() - var/obj/item/reagent_containers/food/snacks/deepfryholder/type = new(get_turf(src)) + var/obj/item/food/snacks/deepfryholder/type = new(get_turf(src)) return type /obj/machinery/cooker/deepfryer/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/food/drinks/ice)) + if(istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/drinks/ice)) var/ice_amount = I.reagents.get_reagent_amount("ice") if(ice_amount) I.reagents.remove_all(I.reagents.total_volume) @@ -156,44 +156,44 @@ return istype(I, input) /datum/deepfryer_special/shrimp - input = /obj/item/reagent_containers/food/snacks/shrimp - output = /obj/item/reagent_containers/food/snacks/fried_shrimp + input = /obj/item/food/snacks/shrimp + output = /obj/item/food/snacks/fried_shrimp /datum/deepfryer_special/banana - input = /obj/item/reagent_containers/food/snacks/grown/banana - output = /obj/item/reagent_containers/food/snacks/friedbanana + input = /obj/item/food/snacks/grown/banana + output = /obj/item/food/snacks/friedbanana /datum/deepfryer_special/fries - input = /obj/item/reagent_containers/food/snacks/rawsticks - output = /obj/item/reagent_containers/food/snacks/fries + input = /obj/item/food/snacks/rawsticks + output = /obj/item/food/snacks/fries /datum/deepfryer_special/corn_chips - input = /obj/item/reagent_containers/food/snacks/grown/corn - output = /obj/item/reagent_containers/food/snacks/cornchips + input = /obj/item/food/snacks/grown/corn + output = /obj/item/food/snacks/cornchips /datum/deepfryer_special/fried_tofu - input = /obj/item/reagent_containers/food/snacks/tofu - output = /obj/item/reagent_containers/food/snacks/fried_tofu + input = /obj/item/food/snacks/tofu + output = /obj/item/food/snacks/fried_tofu /datum/deepfryer_special/chimichanga - input = /obj/item/reagent_containers/food/snacks/burrito - output = /obj/item/reagent_containers/food/snacks/chimichanga + input = /obj/item/food/snacks/burrito + output = /obj/item/food/snacks/chimichanga /datum/deepfryer_special/potato_chips - input = /obj/item/reagent_containers/food/snacks/grown/potato/wedges - output = /obj/item/reagent_containers/food/snacks/chips + input = /obj/item/food/snacks/grown/potato/wedges + output = /obj/item/food/snacks/chips /datum/deepfryer_special/carrotfries - input = /obj/item/reagent_containers/food/snacks/grown/carrot/wedges - output = /obj/item/reagent_containers/food/snacks/carrotfries + input = /obj/item/food/snacks/grown/carrot/wedges + output = /obj/item/food/snacks/carrotfries /datum/deepfryer_special/onionrings - input = /obj/item/reagent_containers/food/snacks/onion_slice - output = /obj/item/reagent_containers/food/snacks/onionrings + input = /obj/item/food/snacks/onion_slice + output = /obj/item/food/snacks/onionrings /datum/deepfryer_special/fried_vox input = /obj/item/organ/external - output = /obj/item/reagent_containers/food/snacks/fried_vox + output = /obj/item/food/snacks/fried_vox /datum/deepfryer_special/fried_vox/validate(obj/item/I) if(!..()) diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index 515af3acb849..cc354f726b36 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -259,13 +259,13 @@ var/slab_name = occupant.name var/slab_count = 3 - var/slab_type = /obj/item/reagent_containers/food/snacks/meat/human //gibber can only gib humans on paracode, no need to check meat type + var/slab_type = /obj/item/food/snacks/meat/human //gibber can only gib humans on paracode, no need to check meat type var/slab_nutrition = occupant.nutrition / 15 slab_nutrition /= slab_count for(var/i=1 to slab_count) - var/obj/item/reagent_containers/food/snacks/meat/new_meat = new slab_type(src) + var/obj/item/food/snacks/meat/new_meat = new slab_type(src) new_meat.name = "[slab_name] [new_meat.name]" new_meat.reagents.add_reagent("nutriment", slab_nutrition) diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm index f28d4f13e509..437e0658e614 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm @@ -40,7 +40,7 @@ to_chat(user, "You add [I] to [src]") updateUsrDialog() return - if(istype(I, /obj/item/reagent_containers/food/snacks/frozen/icecream)) + if(istype(I, /obj/item/food/snacks/frozen/icecream)) if(!I.reagents.has_reagent("sprinkles")) if(I.reagents.total_volume > 29) I.reagents.remove_any(1) @@ -147,7 +147,7 @@ else if(href_list["createchoco"]) var/name = generate_name(reagents.get_master_reagent_name()) name += " Chocolate Cone" - var/obj/item/reagent_containers/food/snacks/frozen/icecream/icecreamcup/C = new(loc) + var/obj/item/food/snacks/frozen/icecream/icecreamcup/C = new(loc) C.name = "[name]" C.pixel_x = rand(-8, 8) C.pixel_y = -16 @@ -159,7 +159,7 @@ else if(href_list["createcone"]) var/name = generate_name(reagents.get_master_reagent_name()) name += " Cone" - var/obj/item/reagent_containers/food/snacks/frozen/icecream/icecreamcone/C = new(loc) + var/obj/item/food/snacks/frozen/icecream/icecreamcone/C = new(loc) C.name = "[name]" C.pixel_x = rand(-8, 8) C.pixel_y = -16 @@ -171,7 +171,7 @@ else if(href_list["createwaffle"]) var/name = generate_name(reagents.get_master_reagent_name()) name += " Waffle Cone" - var/obj/item/reagent_containers/food/snacks/frozen/icecream/wafflecone/C = new(loc) + var/obj/item/food/snacks/frozen/icecream/wafflecone/C = new(loc) C.name = "[name]" C.pixel_x = rand(-8, 8) C.pixel_y = -16 diff --git a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm index fc4a4fe78592..8db5fa8e3199 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm @@ -65,7 +65,7 @@ GLOB.cooking_reagents[recipe_type] |= reagent else qdel(recipe) - GLOB.cooking_ingredients[recipe_type] |= /obj/item/reagent_containers/food/snacks/grown + GLOB.cooking_ingredients[recipe_type] |= /obj/item/food/snacks/grown /******************* * Item Adding @@ -108,7 +108,7 @@ add_item(S, user) else add_item(O, user) - else if(is_type_in_list(O, list(/obj/item/reagent_containers/glass, /obj/item/reagent_containers/food/drinks, /obj/item/reagent_containers/food/condiment))) + else if(is_type_in_list(O, list(/obj/item/reagent_containers/glass, /obj/item/reagent_containers/drinks, /obj/item/reagent_containers/condiment))) if(!O.reagents) return TRUE for(var/datum/reagent/R in O.reagents.reagent_list) @@ -199,8 +199,8 @@ var/list/name_overrides = list() for(var/obj/O in contents) var/display_name = O.name - if(istype(O, /obj/item/reagent_containers/food)) - var/obj/item/reagent_containers/food/food = O + if(isfood(O)) + var/obj/item/food/food = O if(!items_counts[display_name]) if(food.ingredient_name) name_overrides[display_name] = food.ingredient_name @@ -364,7 +364,7 @@ /obj/machinery/kitchen_machine/proc/has_extra_item() for(var/obj/O in contents) - if(!is_type_in_list(O, list(/obj/item/reagent_containers/food, /obj/item/grown, /obj/item/mixing_bowl))) + if(!is_type_in_list(O, list(/obj/item/food, /obj/item/grown, /obj/item/mixing_bowl))) return TRUE return FALSE @@ -416,7 +416,7 @@ amount += reagents.total_volume reagents.clear_reagents() if(amount) - var/obj/item/reagent_containers/food/snacks/badrecipe/mysteryfood = new(src) + var/obj/item/food/snacks/badrecipe/mysteryfood = new(src) mysteryfood.reagents.add_reagent("carbon", amount / 2) mysteryfood.reagents.add_reagent("????", amount / 15) mysteryfood.forceMove(get_turf(src)) @@ -446,10 +446,16 @@ ui_interact(user) -/obj/machinery/kitchen_machine/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/kitchen_machine/attack_ghost(mob/user) + ui_interact(user) + +/obj/machinery/kitchen_machine/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/kitchen_machine/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "KitchenMachine", name, 400, 300, master_ui, state) + ui = new(user, src, "KitchenMachine", name) ui.open() /obj/machinery/kitchen_machine/ui_data(mob/user) @@ -470,8 +476,8 @@ var/list/name_overrides = list() for(var/obj/O in contents) var/display_name = O.name - if(istype(O, /obj/item/reagent_containers/food)) - var/obj/item/reagent_containers/food/food = O + if(istype(O, /obj/item/food)) + var/obj/item/food/food = O if(!items_counts[display_name]) if(food.ingredient_name) name_overrides[display_name] = food.ingredient_name diff --git a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm index 8510e6bce62e..512d3359c990 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm @@ -14,7 +14,7 @@ GLOBAL_LIST_EMPTY(monkey_recyclers) var/required_grind = 5 var/cube_production = 1 var/cycle_through = 0 - var/obj/item/reagent_containers/food/snacks/monkeycube/cube_type = /obj/item/reagent_containers/food/snacks/monkeycube + var/obj/item/food/snacks/monkeycube/cube_type = /obj/item/food/snacks/monkeycube var/list/connected = list() /obj/machinery/monkey_recycler/Initialize(mapload) @@ -73,15 +73,15 @@ GLOBAL_LIST_EMPTY(monkey_recyclers) cycle_through++ switch(cycle_through) if(1) - cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/farwacube + cube_type = /obj/item/food/snacks/monkeycube/farwacube if(2) - cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/wolpincube + cube_type = /obj/item/food/snacks/monkeycube/wolpincube if(3) - cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/stokcube + cube_type = /obj/item/food/snacks/monkeycube/stokcube if(4) - cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/neaeracube + cube_type = /obj/item/food/snacks/monkeycube/neaeracube if(5) - cube_type = /obj/item/reagent_containers/food/snacks/monkeycube + cube_type = /obj/item/food/snacks/monkeycube cycle_through = 0 to_chat(user, "You change the monkeycube type to [initial(cube_type.name)].") else diff --git a/code/modules/food_and_drinks/kitchen_machinery/oven.dm b/code/modules/food_and_drinks/kitchen_machinery/oven.dm index 0b571d393c37..40fad0fd59f0 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/oven.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/oven.dm @@ -22,7 +22,7 @@ return else var/obj/item/F = I - var/obj/item/reagent_containers/food/snacks/customizable/C + var/obj/item/food/snacks/customizable/C C = input("Select food to make.", "Cooking", C) in food_choices if(!C) return @@ -59,8 +59,8 @@ /obj/machinery/cooking/oven/updatefood() for(var/U in food_choices) food_choices.Remove(U) - for(var/U in subtypesof(/obj/item/reagent_containers/food/snacks/customizable/cook)) - var/obj/item/reagent_containers/food/snacks/customizable/cook/V = new U + for(var/U in subtypesof(/obj/item/food/snacks/customizable/cook)) + var/obj/item/food/snacks/customizable/cook/V = new U food_choices += V return @@ -74,7 +74,7 @@ /obj/machinery/cooking/candy/updatefood() for(var/U in food_choices) food_choices.Remove(U) - for(var/U in subtypesof(/obj/item/reagent_containers/food/snacks/customizable/candy)) - var/obj/item/reagent_containers/food/snacks/customizable/candy/V = new U + for(var/U in subtypesof(/obj/item/food/snacks/customizable/candy)) + var/obj/item/food/snacks/customizable/candy/V = new U food_choices += V return diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm index 6ce311cc558f..f28bc1775c71 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm @@ -88,36 +88,36 @@ /////OBJECT RECIPIES///// ///////////////////////// /datum/food_processor_process/meat - input = /obj/item/reagent_containers/food/snacks/meat - output = /obj/item/reagent_containers/food/snacks/meatball + input = /obj/item/food/snacks/meat + output = /obj/item/food/snacks/meatball /datum/food_processor_process/potato - input = /obj/item/reagent_containers/food/snacks/grown/potato - output = /obj/item/reagent_containers/food/snacks/rawsticks + input = /obj/item/food/snacks/grown/potato + output = /obj/item/food/snacks/rawsticks /datum/food_processor_process/rawsticks - input = /obj/item/reagent_containers/food/snacks/rawsticks - output = /obj/item/reagent_containers/food/snacks/tatortot + input = /obj/item/food/snacks/rawsticks + output = /obj/item/food/snacks/tatortot /datum/food_processor_process/soybeans - input = /obj/item/reagent_containers/food/snacks/grown/soybeans - output = /obj/item/reagent_containers/food/snacks/soydope + input = /obj/item/food/snacks/grown/soybeans + output = /obj/item/food/snacks/soydope /datum/food_processor_process/spaghetti - input = /obj/item/reagent_containers/food/snacks/doughslice - output = /obj/item/reagent_containers/food/snacks/spaghetti + input = /obj/item/food/snacks/doughslice + output = /obj/item/food/snacks/spaghetti /datum/food_processor_process/macaroni - input = /obj/item/reagent_containers/food/snacks/spaghetti - output = /obj/item/reagent_containers/food/snacks/macaroni + input = /obj/item/food/snacks/spaghetti + output = /obj/item/food/snacks/macaroni /datum/food_processor_process/parsnip - input = /obj/item/reagent_containers/food/snacks/grown/parsnip - output = /obj/item/reagent_containers/food/snacks/roastparsnip + input = /obj/item/food/snacks/grown/parsnip + output = /obj/item/food/snacks/roastparsnip /datum/food_processor_process/carrot - input = /obj/item/reagent_containers/food/snacks/grown/carrot - output = /obj/item/reagent_containers/food/snacks/grown/carrot/wedges + input = /obj/item/food/snacks/grown/carrot + output = /obj/item/food/snacks/grown/carrot/wedges /datum/food_processor_process/towercap input = /obj/item/grown/log diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index 50e6ed0066de..cfe1baa8d2ae 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -82,7 +82,7 @@ update_icon(UPDATE_OVERLAYS) // Accepted items accepted_items_typecache = typecacheof(list( - /obj/item/reagent_containers/food/snacks/grown, + /obj/item/food/snacks/grown, /obj/item/seeds, /obj/item/grown, )) @@ -248,10 +248,13 @@ to_chat(user, "[failed] item\s [failed == 1 ? "is" : "are"] refused.") return TRUE -/obj/machinery/smartfridge/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/smartfridge/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/smartfridge/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Smartfridge", name, 500, 500) + ui = new(user, src, "Smartfridge", name) ui.open() /obj/machinery/smartfridge/ui_data(mob/user) @@ -418,18 +421,18 @@ . = ..() accepted_items_typecache = typecacheof(list( /obj/item/kitchen, - /obj/item/reagent_containers/food)) + /obj/item/food)) // Syndicate Druglab Ruin /obj/machinery/smartfridge/food/syndicate_druglab starting_items = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 2, - /obj/item/reagent_containers/food/snacks/macncheese = 1, - /obj/item/reagent_containers/food/snacks/syndicake = 3, - /obj/item/reagent_containers/food/snacks/beans = 4, + /obj/item/food/snacks/boiledrice = 2, + /obj/item/food/snacks/macncheese = 1, + /obj/item/food/snacks/syndicake = 3, + /obj/item/food/snacks/beans = 4, /obj/item/reagent_containers/glass/beaker/waterbottle/large = 7, - /obj/item/reagent_containers/food/drinks/bottle/kahlua = 1, - /obj/item/reagent_containers/food/drinks/bottle/orangejuice = 2) + /obj/item/reagent_containers/drinks/bottle/kahlua = 1, + /obj/item/reagent_containers/drinks/bottle/orangejuice = 2) /** * # Seed Storage @@ -471,9 +474,9 @@ /obj/machinery/smartfridge/foodcart/Initialize(mapload) . = ..() accepted_items_typecache = typecacheof(list( - /obj/item/reagent_containers/food/snacks, - /obj/item/reagent_containers/food/drinks, - /obj/item/reagent_containers/food/condiment, + /obj/item/food/snacks, + /obj/item/reagent_containers/drinks, + /obj/item/reagent_containers/condiment, )) /obj/machinery/smartfridge/foodcart/screwdriver_act(mob/living/user, obj/item/I) @@ -802,8 +805,8 @@ . = ..() accepted_items_typecache = typecacheof(list( /obj/item/reagent_containers/glass, - /obj/item/reagent_containers/food/drinks, - /obj/item/reagent_containers/food/condiment, + /obj/item/reagent_containers/drinks, + /obj/item/reagent_containers/condiment, )) /** @@ -832,7 +835,7 @@ component_parts = null // Accepted items accepted_items_typecache = typecacheof(list( - /obj/item/reagent_containers/food/snacks, + /obj/item/food/snacks, /obj/item/stack/sheet/wetleather, )) @@ -881,8 +884,8 @@ /obj/machinery/smartfridge/drying_rack/accept_check(obj/item/O) . = ..() // If it's a food, reject non driable ones - if(istype(O, /obj/item/reagent_containers/food/snacks)) - var/obj/item/reagent_containers/food/snacks/S = O + if(istype(O, /obj/item/food/snacks)) + var/obj/item/food/snacks/S = O if(!S.dried_type) return FALSE @@ -903,7 +906,7 @@ * Called in [/obj/machinery/smartfridge/drying_rack/process] to dry the contents. */ /obj/machinery/smartfridge/drying_rack/proc/rack_dry() - for(var/obj/item/reagent_containers/food/snacks/S in contents) + for(var/obj/item/food/snacks/S in contents) if(S.dried_type == S.type)//if the dried type is the same as the object's type, don't bother creating a whole new item... S.color = "#ad7257" S.dry = TRUE diff --git a/code/modules/food_and_drinks/recipes/recipes_candy.dm b/code/modules/food_and_drinks/recipes/recipes_candy.dm index 2339acd3ffaa..e47449af1935 100644 --- a/code/modules/food_and_drinks/recipes/recipes_candy.dm +++ b/code/modules/food_and_drinks/recipes/recipes_candy.dm @@ -3,7 +3,7 @@ * /datum/recipe/candy/ * reagents = list() * items = list() -* result = /obj/item/reagent_containers/food/snacks/ +* result = /obj/item/food/snacks/ * byproduct = /obj/item/ // only set this if the recipe has a byproduct, like returning it's mould * * NOTE: If using a mould, make sure to list it in *BOTH* the items and byproduct lists if it is to be returned. @@ -18,74 +18,74 @@ /datum/recipe/candy/chocolate_bar reagents = list("soymilk" = 2, "cocoa" = 2, "sugar" = 2) items = list() - result = /obj/item/reagent_containers/food/snacks/chocolatebar + result = /obj/item/food/snacks/chocolatebar /datum/recipe/candy/chocolate_bar2 reagents = list("milk" = 2, "cocoa" = 2, "sugar" = 2) items = list() - result = /obj/item/reagent_containers/food/snacks/chocolatebar + result = /obj/item/food/snacks/chocolatebar /datum/recipe/candy/fudge_peanut reagents = list("sugar" = 5, "milk" = 5) - items = list(/obj/item/reagent_containers/food/snacks/chocolatebar, /obj/item/reagent_containers/food/snacks/grown/peanuts, - /obj/item/reagent_containers/food/snacks/grown/peanuts, /obj/item/reagent_containers/food/snacks/grown/peanuts) - result = /obj/item/reagent_containers/food/snacks/candy/fudge/peanut + items = list(/obj/item/food/snacks/chocolatebar, /obj/item/food/snacks/grown/peanuts, + /obj/item/food/snacks/grown/peanuts, /obj/item/food/snacks/grown/peanuts) + result = /obj/item/food/snacks/candy/fudge/peanut /datum/recipe/candy/fudge_cherry reagents = list("sugar" = 5, "milk" = 5) - items = list(/obj/item/reagent_containers/food/snacks/chocolatebar, /obj/item/reagent_containers/food/snacks/grown/cherries, - /obj/item/reagent_containers/food/snacks/grown/cherries, /obj/item/reagent_containers/food/snacks/grown/cherries) - result = /obj/item/reagent_containers/food/snacks/candy/fudge/cherry + items = list(/obj/item/food/snacks/chocolatebar, /obj/item/food/snacks/grown/cherries, + /obj/item/food/snacks/grown/cherries, /obj/item/food/snacks/grown/cherries) + result = /obj/item/food/snacks/candy/fudge/cherry /datum/recipe/candy/fudge_cookies_n_cream reagents = list("sugar" = 5, "milk" = 5, "cream" = 5) items = list( - /obj/item/reagent_containers/food/snacks/chocolatebar, - /obj/item/reagent_containers/food/snacks/cookie, + /obj/item/food/snacks/chocolatebar, + /obj/item/food/snacks/cookie, ) - result = /obj/item/reagent_containers/food/snacks/candy/fudge/cookies_n_cream + result = /obj/item/food/snacks/candy/fudge/cookies_n_cream /datum/recipe/candy/fudge_turtle reagents = list("sugar" = 5, "milk" = 5) items = list( - /obj/item/reagent_containers/food/snacks/chocolatebar, - /obj/item/reagent_containers/food/snacks/candy/caramel, - /obj/item/reagent_containers/food/snacks/grown/peanuts + /obj/item/food/snacks/chocolatebar, + /obj/item/food/snacks/candy/caramel, + /obj/item/food/snacks/grown/peanuts ) - result = /obj/item/reagent_containers/food/snacks/candy/fudge/turtle + result = /obj/item/food/snacks/candy/fudge/turtle /datum/recipe/candy/fudge reagents = list("sugar" = 5, "milk" = 5) - items = list(/obj/item/reagent_containers/food/snacks/chocolatebar) - result = /obj/item/reagent_containers/food/snacks/candy/fudge + items = list(/obj/item/food/snacks/chocolatebar) + result = /obj/item/food/snacks/candy/fudge /datum/recipe/candy/caramel reagents = list("sugar" = 5, "cream" = 5) items = list() - result = /obj/item/reagent_containers/food/snacks/candy/caramel + result = /obj/item/food/snacks/candy/caramel /datum/recipe/candy/toffee reagents = list("sugar" = 5, "flour" = 10) - result = /obj/item/reagent_containers/food/snacks/candy/toffee + result = /obj/item/food/snacks/candy/toffee /datum/recipe/candy/taffy reagents = list("salglu_solution" = 15) items = list() - result = /obj/item/reagent_containers/food/snacks/candy/taffy + result = /obj/item/food/snacks/candy/taffy /datum/recipe/candy/nougat reagents = list("sugar" = 5, "cornoil" = 5) - items = list(/obj/item/reagent_containers/food/snacks/egg) - result = /obj/item/reagent_containers/food/snacks/candy/nougat + items = list(/obj/item/food/snacks/egg) + result = /obj/item/food/snacks/candy/nougat /datum/recipe/candy/nougat/make_food(obj/container) - var/obj/item/reagent_containers/food/snacks/candy/nougat/being_cooked = ..() + var/obj/item/food/snacks/candy/nougat/being_cooked = ..() being_cooked.reagents.del_reagent("egg") return being_cooked /datum/recipe/candy/wafflecone reagents = list("milk" = 1, "sugar" = 1) - result = /obj/item/reagent_containers/food/snacks/wafflecone + result = /obj/item/food/snacks/wafflecone // *********************************************************** // Base Candy Recipes (unflavored / plain) @@ -96,14 +96,14 @@ items = list( /obj/item/c_tube, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton + result = /obj/item/food/snacks/candy/cotton /datum/recipe/candy/gummybear reagents = list("sugar" = 5, "water" = 5, "cornoil" = 5) items = list( /obj/item/kitchen/mould/bear, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummybear + result = /obj/item/food/snacks/candy/gummybear byproduct = /obj/item/kitchen/mould/bear /datum/recipe/candy/gummyworm @@ -111,7 +111,7 @@ items = list( /obj/item/kitchen/mould/worm, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummyworm + result = /obj/item/food/snacks/candy/gummyworm byproduct = /obj/item/kitchen/mould/worm /datum/recipe/candy/jellybean @@ -119,7 +119,7 @@ items = list( /obj/item/kitchen/mould/bean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean + result = /obj/item/food/snacks/candy/jellybean byproduct = /obj/item/kitchen/mould/bean /datum/recipe/candy/jawbreaker @@ -127,44 +127,44 @@ items = list( /obj/item/kitchen/mould/ball, ) - result = /obj/item/reagent_containers/food/snacks/candy/jawbreaker + result = /obj/item/food/snacks/candy/jawbreaker byproduct = /obj/item/kitchen/mould/ball /datum/recipe/candy/candycane reagents = list("sugar" = 5) items = list( /obj/item/kitchen/mould/cane, - /obj/item/reagent_containers/food/snacks/mint, + /obj/item/food/snacks/mint, ) - result = /obj/item/reagent_containers/food/snacks/candy/candycane + result = /obj/item/food/snacks/candy/candycane byproduct = /obj/item/kitchen/mould/cane /datum/recipe/candy/gum reagents = list("sugar" = 5, "water" = 5, "cornoil" = 5) items = list() - result = /obj/item/reagent_containers/food/snacks/candy/gum + result = /obj/item/food/snacks/candy/gum /datum/recipe/candy/candybar reagents = list("sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/chocolatebar, + /obj/item/food/snacks/chocolatebar, ) - result = /obj/item/reagent_containers/food/snacks/candy/candybar + result = /obj/item/food/snacks/candy/candybar /datum/recipe/candy/cash items = list( /obj/item/kitchen/mould/cash, - /obj/item/reagent_containers/food/snacks/chocolatebar, + /obj/item/food/snacks/chocolatebar, ) - result = /obj/item/reagent_containers/food/snacks/candy/cash + result = /obj/item/food/snacks/candy/cash byproduct = /obj/item/kitchen/mould/cash /datum/recipe/candy/coin items = list( /obj/item/kitchen/mould/coin, - /obj/item/reagent_containers/food/snacks/chocolatebar, + /obj/item/food/snacks/chocolatebar, ) - result = /obj/item/reagent_containers/food/snacks/candy/coin + result = /obj/item/food/snacks/candy/coin byproduct = /obj/item/kitchen/mould/coin /datum/recipe/candy/sucker @@ -172,7 +172,7 @@ items = list( /obj/item/kitchen/mould/loli, ) - result = /obj/item/reagent_containers/food/snacks/candy/sucker + result = /obj/item/food/snacks/candy/sucker byproduct = /obj/item/kitchen/mould/loli // *********************************************************** @@ -182,84 +182,84 @@ /datum/recipe/candy/cottoncandy_red reagents = list("cherryjelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/cotton, + /obj/item/food/snacks/candy/cotton, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton/red + result = /obj/item/food/snacks/candy/cotton/red /datum/recipe/candy/cottoncandy_blue reagents = list("berryjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/cotton, + /obj/item/food/snacks/candy/cotton, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton/blue + result = /obj/item/food/snacks/candy/cotton/blue /datum/recipe/candy/cottoncandy_poison reagents = list("poisonberryjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/cotton, + /obj/item/food/snacks/candy/cotton, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton/poison + result = /obj/item/food/snacks/candy/cotton/poison /datum/recipe/candy/cottoncandy_green reagents = list("limejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/cotton, + /obj/item/food/snacks/candy/cotton, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton/green + result = /obj/item/food/snacks/candy/cotton/green /datum/recipe/candy/cottoncandy_yellow reagents = list("lemonjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/cotton, + /obj/item/food/snacks/candy/cotton, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton/yellow + result = /obj/item/food/snacks/candy/cotton/yellow /datum/recipe/candy/cottoncandy_orange reagents = list("orangejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/cotton, + /obj/item/food/snacks/candy/cotton, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton/orange + result = /obj/item/food/snacks/candy/cotton/orange /datum/recipe/candy/cottoncandy_purple reagents = list("grapejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/cotton, + /obj/item/food/snacks/candy/cotton, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton/purple + result = /obj/item/food/snacks/candy/cotton/purple /datum/recipe/candy/cottoncandy_pink reagents = list("watermelonjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/cotton, + /obj/item/food/snacks/candy/cotton, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton/pink + result = /obj/item/food/snacks/candy/cotton/pink /datum/recipe/candy/cottoncandy_rainbow reagents = list() items = list( - /obj/item/reagent_containers/food/snacks/candy/cotton/red, - /obj/item/reagent_containers/food/snacks/candy/cotton/blue, - /obj/item/reagent_containers/food/snacks/candy/cotton/green, - /obj/item/reagent_containers/food/snacks/candy/cotton/yellow, - /obj/item/reagent_containers/food/snacks/candy/cotton/orange, - /obj/item/reagent_containers/food/snacks/candy/cotton/purple, - /obj/item/reagent_containers/food/snacks/candy/cotton/pink, + /obj/item/food/snacks/candy/cotton/red, + /obj/item/food/snacks/candy/cotton/blue, + /obj/item/food/snacks/candy/cotton/green, + /obj/item/food/snacks/candy/cotton/yellow, + /obj/item/food/snacks/candy/cotton/orange, + /obj/item/food/snacks/candy/cotton/purple, + /obj/item/food/snacks/candy/cotton/pink, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton/rainbow + result = /obj/item/food/snacks/candy/cotton/rainbow /datum/recipe/candy/cottoncandy_rainbow2 reagents = list() items = list( - /obj/item/reagent_containers/food/snacks/candy/cotton/red, - /obj/item/reagent_containers/food/snacks/candy/cotton/poison, - /obj/item/reagent_containers/food/snacks/candy/cotton/green, - /obj/item/reagent_containers/food/snacks/candy/cotton/yellow, - /obj/item/reagent_containers/food/snacks/candy/cotton/orange, - /obj/item/reagent_containers/food/snacks/candy/cotton/purple, - /obj/item/reagent_containers/food/snacks/candy/cotton/pink, + /obj/item/food/snacks/candy/cotton/red, + /obj/item/food/snacks/candy/cotton/poison, + /obj/item/food/snacks/candy/cotton/green, + /obj/item/food/snacks/candy/cotton/yellow, + /obj/item/food/snacks/candy/cotton/orange, + /obj/item/food/snacks/candy/cotton/purple, + /obj/item/food/snacks/candy/cotton/pink, ) - result = /obj/item/reagent_containers/food/snacks/candy/cotton/bad_rainbow + result = /obj/item/food/snacks/candy/cotton/bad_rainbow // *********************************************************** // Gummy Bear Recipes (flavored) @@ -268,63 +268,63 @@ /datum/recipe/candy/gummybear_red reagents = list("cherryjelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummybear, + /obj/item/food/snacks/candy/gummybear, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummybear/red + result = /obj/item/food/snacks/candy/gummybear/red /datum/recipe/candy/gummybear_blue reagents = list("berryjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummybear, + /obj/item/food/snacks/candy/gummybear, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummybear/blue + result = /obj/item/food/snacks/candy/gummybear/blue /datum/recipe/candy/gummybear_poison reagents = list("poisonberryjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummybear, + /obj/item/food/snacks/candy/gummybear, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummybear/poison + result = /obj/item/food/snacks/candy/gummybear/poison /datum/recipe/candy/gummybear_green reagents = list("limejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummybear, + /obj/item/food/snacks/candy/gummybear, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummybear/green + result = /obj/item/food/snacks/candy/gummybear/green /datum/recipe/candy/gummybear_yellow reagents = list("lemonjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummybear, + /obj/item/food/snacks/candy/gummybear, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummybear/yellow + result = /obj/item/food/snacks/candy/gummybear/yellow /datum/recipe/candy/gummybear_orange reagents = list("orangejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummybear, + /obj/item/food/snacks/candy/gummybear, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummybear/orange + result = /obj/item/food/snacks/candy/gummybear/orange /datum/recipe/candy/gummybear_purple reagents = list("grapejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummybear, + /obj/item/food/snacks/candy/gummybear, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummybear/purple + result = /obj/item/food/snacks/candy/gummybear/purple /datum/recipe/candy/gummybear_wtf reagents = list("space_drugs" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummybear, + /obj/item/food/snacks/candy/gummybear, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummybear/wtf + result = /obj/item/food/snacks/candy/gummybear/wtf /datum/recipe/candy/gummybear_wtf2 reagents = list() - items = list(/obj/item/reagent_containers/food/snacks/candy/gummybear, /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris) - result = /obj/item/reagent_containers/food/snacks/candy/gummybear/wtf + items = list(/obj/item/food/snacks/candy/gummybear, /obj/item/food/snacks/grown/ambrosia/vulgaris) + result = /obj/item/food/snacks/candy/gummybear/wtf // *********************************************************** // Gummy Worm Recipes (flavored) @@ -333,62 +333,62 @@ /datum/recipe/candy/gummyworm_red reagents = list("cherryjelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummyworm, + /obj/item/food/snacks/candy/gummyworm, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummyworm/red + result = /obj/item/food/snacks/candy/gummyworm/red /datum/recipe/candy/gummyworm_blue reagents = list("berryjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummyworm, + /obj/item/food/snacks/candy/gummyworm, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummyworm/blue + result = /obj/item/food/snacks/candy/gummyworm/blue /datum/recipe/candy/gummyworm_poison reagents = list("poisonberryjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummyworm, + /obj/item/food/snacks/candy/gummyworm, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummyworm/poison + result = /obj/item/food/snacks/candy/gummyworm/poison /datum/recipe/candy/gummyworm_green reagents = list("limejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummyworm, + /obj/item/food/snacks/candy/gummyworm, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummyworm/green + result = /obj/item/food/snacks/candy/gummyworm/green /datum/recipe/candy/gummyworm_yellow reagents = list("lemonjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummyworm, + /obj/item/food/snacks/candy/gummyworm, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummyworm/yellow + result = /obj/item/food/snacks/candy/gummyworm/yellow /datum/recipe/candy/gummyworm_orange reagents = list("orangejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummyworm, + /obj/item/food/snacks/candy/gummyworm, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummyworm/orange + result = /obj/item/food/snacks/candy/gummyworm/orange /datum/recipe/candy/gummyworm_purple reagents = list("grapejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummyworm, + /obj/item/food/snacks/candy/gummyworm, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummyworm/purple + result = /obj/item/food/snacks/candy/gummyworm/purple /datum/recipe/candy/gummyworm_wtf reagents = list("space_drugs" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/gummyworm, + /obj/item/food/snacks/candy/gummyworm, ) - result = /obj/item/reagent_containers/food/snacks/candy/gummyworm/wtf + result = /obj/item/food/snacks/candy/gummyworm/wtf /datum/recipe/candy/gummyworm_wtf2 - items = list(/obj/item/reagent_containers/food/snacks/candy/gummyworm, /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris) - result = /obj/item/reagent_containers/food/snacks/candy/gummyworm/wtf + items = list(/obj/item/food/snacks/candy/gummyworm, /obj/item/food/snacks/grown/ambrosia/vulgaris) + result = /obj/item/food/snacks/candy/gummyworm/wtf // *********************************************************** // Jelly Bean Recipes (flavored) @@ -397,99 +397,99 @@ /datum/recipe/candy/jellybean_red reagents = list("cherryjelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/red + result = /obj/item/food/snacks/candy/jellybean/red /datum/recipe/candy/jellybean_blue reagents = list("berryjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/blue + result = /obj/item/food/snacks/candy/jellybean/blue /datum/recipe/candy/jellybean_poison reagents = list("poisonberryjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/poison + result = /obj/item/food/snacks/candy/jellybean/poison /datum/recipe/candy/jellybean_green reagents = list("limejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/green + result = /obj/item/food/snacks/candy/jellybean/green /datum/recipe/candy/jellybean_yellow reagents = list("lemonjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/yellow + result = /obj/item/food/snacks/candy/jellybean/yellow /datum/recipe/candy/jellybean_orange reagents = list("orangejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/orange + result = /obj/item/food/snacks/candy/jellybean/orange /datum/recipe/candy/jellybean_purple reagents = list("grapejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/purple + result = /obj/item/food/snacks/candy/jellybean/purple /datum/recipe/candy/jellybean_chocolate reagents = list() items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, - /obj/item/reagent_containers/food/snacks/chocolatebar, + /obj/item/food/snacks/candy/jellybean, + /obj/item/food/snacks/chocolatebar, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/chocolate + result = /obj/item/food/snacks/candy/jellybean/chocolate /datum/recipe/candy/jellybean_cola reagents = list("cola" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/cola + result = /obj/item/food/snacks/candy/jellybean/cola /datum/recipe/candy/jellybean_popcorn reagents = list() items = list( - /obj/item/reagent_containers/food/snacks/popcorn, - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/popcorn, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/popcorn + result = /obj/item/food/snacks/candy/jellybean/popcorn /datum/recipe/candy/jellybean_coffee reagents = list("coffee" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/cola + result = /obj/item/food/snacks/candy/jellybean/cola /datum/recipe/candy/jellybean_drgibb reagents = list("dr_gibb" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/cola + result = /obj/item/food/snacks/candy/jellybean/cola /datum/recipe/candy/jellybean_wtf reagents = list("space_drugs" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/jellybean, + /obj/item/food/snacks/candy/jellybean, ) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/wtf + result = /obj/item/food/snacks/candy/jellybean/wtf /datum/recipe/candy/jellybean_wtf2 - items = list(/obj/item/reagent_containers/food/snacks/candy/jellybean, /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris) - result = /obj/item/reagent_containers/food/snacks/candy/jellybean/wtf + items = list(/obj/item/food/snacks/candy/jellybean, /obj/item/food/snacks/grown/ambrosia/vulgaris) + result = /obj/item/food/snacks/candy/jellybean/wtf // *********************************************************** // Candybar Recipes (flavored) @@ -498,39 +498,39 @@ /datum/recipe/candy/malper reagents = list() items = list( - /obj/item/reagent_containers/food/snacks/candy/candybar, - /obj/item/reagent_containers/food/snacks/candy/caramel, + /obj/item/food/snacks/candy/candybar, + /obj/item/food/snacks/candy/caramel, ) - result = /obj/item/reagent_containers/food/snacks/candy/confectionery/caramel + result = /obj/item/food/snacks/candy/confectionery/caramel /datum/recipe/candy/toolerone reagents = list() items = list( - /obj/item/reagent_containers/food/snacks/candy/candybar, - /obj/item/reagent_containers/food/snacks/candy/nougat, + /obj/item/food/snacks/candy/candybar, + /obj/item/food/snacks/candy/nougat, ) - result = /obj/item/reagent_containers/food/snacks/candy/confectionery/nougat + result = /obj/item/food/snacks/candy/confectionery/nougat /datum/recipe/candy/yumbaton reagents = list() items = list( - /obj/item/reagent_containers/food/snacks/candy/candybar, - /obj/item/reagent_containers/food/snacks/candy/toffee, + /obj/item/food/snacks/candy/candybar, + /obj/item/food/snacks/candy/toffee, ) - result = /obj/item/reagent_containers/food/snacks/candy/confectionery/toffee + result = /obj/item/food/snacks/candy/confectionery/toffee /datum/recipe/candy/crunch reagents = list("rice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/candy/candybar, + /obj/item/food/snacks/candy/candybar, ) - result = /obj/item/reagent_containers/food/snacks/candy/confectionery/rice + result = /obj/item/food/snacks/candy/confectionery/rice /datum/recipe/candy/toxinstest reagents = list() items = list( - /obj/item/reagent_containers/food/snacks/candy/candybar, - /obj/item/reagent_containers/food/snacks/candy/caramel, - /obj/item/reagent_containers/food/snacks/candy/nougat, + /obj/item/food/snacks/candy/candybar, + /obj/item/food/snacks/candy/caramel, + /obj/item/food/snacks/candy/nougat, ) - result = /obj/item/reagent_containers/food/snacks/candy/confectionery/caramel_nougat + result = /obj/item/food/snacks/candy/confectionery/caramel_nougat diff --git a/code/modules/food_and_drinks/recipes/recipes_grill.dm b/code/modules/food_and_drinks/recipes/recipes_grill.dm index a12287ee8905..cbe5f7bcf92d 100644 --- a/code/modules/food_and_drinks/recipes/recipes_grill.dm +++ b/code/modules/food_and_drinks/recipes/recipes_grill.dm @@ -3,289 +3,289 @@ /datum/recipe/grill/bacon items = list( - /obj/item/reagent_containers/food/snacks/raw_bacon, + /obj/item/food/snacks/raw_bacon, ) - result = /obj/item/reagent_containers/food/snacks/bacon + result = /obj/item/food/snacks/bacon /datum/recipe/grill/telebacon items = list( - /obj/item/reagent_containers/food/snacks/meat, + /obj/item/food/snacks/meat, /obj/item/assembly/signaler ) - result = /obj/item/reagent_containers/food/snacks/telebacon + result = /obj/item/food/snacks/telebacon /datum/recipe/grill/syntitelebacon items = list( - /obj/item/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/food/snacks/meat/syntiflesh, /obj/item/assembly/signaler ) - result = /obj/item/reagent_containers/food/snacks/telebacon + result = /obj/item/food/snacks/telebacon /datum/recipe/grill/friedegg reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/egg + /obj/item/food/snacks/egg ) - result = /obj/item/reagent_containers/food/snacks/friedegg + result = /obj/item/food/snacks/friedegg /datum/recipe/grill/meatsteak reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/meat + /obj/item/food/snacks/meat ) - result = /obj/item/reagent_containers/food/snacks/meatsteak + result = /obj/item/food/snacks/meatsteak /datum/recipe/grill/salmonsteak reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/salmonmeat + /obj/item/food/snacks/salmonmeat ) - result = /obj/item/reagent_containers/food/snacks/salmonsteak + result = /obj/item/food/snacks/salmonsteak /datum/recipe/grill/syntisteak reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/meat/syntiflesh + /obj/item/food/snacks/meat/syntiflesh ) - result = /obj/item/reagent_containers/food/snacks/meatsteak + result = /obj/item/food/snacks/meatsteak /datum/recipe/grill/waffles reagents = list("sugar" = 10) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough ) - result = /obj/item/reagent_containers/food/snacks/waffles + result = /obj/item/food/snacks/waffles /datum/recipe/grill/rofflewaffles reagents = list("psilocybin" = 5, "sugar" = 10) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, ) - result = /obj/item/reagent_containers/food/snacks/rofflewaffles + result = /obj/item/food/snacks/rofflewaffles /datum/recipe/grill/grilledcheese items = list( - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/grilledcheese + result = /obj/item/food/snacks/grilledcheese /datum/recipe/grill/sausage items = list( - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/cutlet, + /obj/item/food/snacks/meatball, + /obj/item/food/snacks/cutlet, ) - result = /obj/item/reagent_containers/food/snacks/sausage + result = /obj/item/food/snacks/sausage /datum/recipe/grill/fishfingers reagents = list("flour" = 10) items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/carpmeat, + /obj/item/food/snacks/egg, + /obj/item/food/snacks/carpmeat, ) - result = /obj/item/reagent_containers/food/snacks/fishfingers + result = /obj/item/food/snacks/fishfingers /datum/recipe/grill/fishfingers/make_food(obj/container) - var/obj/item/reagent_containers/food/snacks/fishfingers/being_cooked = ..() + var/obj/item/food/snacks/fishfingers/being_cooked = ..() being_cooked.reagents.del_reagent("egg") return being_cooked /datum/recipe/grill/cutlet items = list( - /obj/item/reagent_containers/food/snacks/rawcutlet + /obj/item/food/snacks/rawcutlet ) - result = /obj/item/reagent_containers/food/snacks/cutlet + result = /obj/item/food/snacks/cutlet /datum/recipe/grill/omelette items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/egg, + /obj/item/food/snacks/egg, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/omelette + result = /obj/item/food/snacks/omelette /datum/recipe/grill/wingfangchu reagents = list("soysauce" = 5) items = list( - /obj/item/reagent_containers/food/snacks/monstermeat/xenomeat + /obj/item/food/snacks/monstermeat/xenomeat ) - result = /obj/item/reagent_containers/food/snacks/wingfangchu + result = /obj/item/food/snacks/wingfangchu /datum/recipe/grill/human/kabob items = list( /obj/item/stack/rods, - /obj/item/reagent_containers/food/snacks/meat/human, - /obj/item/reagent_containers/food/snacks/meat/human, + /obj/item/food/snacks/meat/human, + /obj/item/food/snacks/meat/human, ) - result = /obj/item/reagent_containers/food/snacks/human/kabob + result = /obj/item/food/snacks/human/kabob /datum/recipe/grill/monkeykabob items = list( /obj/item/stack/rods, - /obj/item/reagent_containers/food/snacks/meat/monkey, - /obj/item/reagent_containers/food/snacks/meat/monkey, + /obj/item/food/snacks/meat/monkey, + /obj/item/food/snacks/meat/monkey, ) - result = /obj/item/reagent_containers/food/snacks/monkeykabob + result = /obj/item/food/snacks/monkeykabob /datum/recipe/grill/syntikabob items = list( /obj/item/stack/rods, - /obj/item/reagent_containers/food/snacks/meat/syntiflesh, - /obj/item/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/food/snacks/meat/syntiflesh, + /obj/item/food/snacks/meat/syntiflesh, ) - result = /obj/item/reagent_containers/food/snacks/monkeykabob + result = /obj/item/food/snacks/monkeykabob /datum/recipe/grill/tofukabob items = list( /obj/item/stack/rods, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/tofu, + /obj/item/food/snacks/tofu, + /obj/item/food/snacks/tofu, ) - result = /obj/item/reagent_containers/food/snacks/tofukabob + result = /obj/item/food/snacks/tofukabob /datum/recipe/grill/picoss_kabob reagents = list("vinegar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/carpmeat, - /obj/item/reagent_containers/food/snacks/carpmeat, - /obj/item/reagent_containers/food/snacks/grown/onion, - /obj/item/reagent_containers/food/snacks/grown/chili, + /obj/item/food/snacks/carpmeat, + /obj/item/food/snacks/carpmeat, + /obj/item/food/snacks/grown/onion, + /obj/item/food/snacks/grown/chili, /obj/item/stack/rods ) - result = /obj/item/reagent_containers/food/snacks/picoss_kabob + result = /obj/item/food/snacks/picoss_kabob /datum/recipe/grill/sushi_Tamago reagents = list("sake" = 5) items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/boiledrice, + /obj/item/food/snacks/egg, + /obj/item/food/snacks/boiledrice, ) - result = /obj/item/reagent_containers/food/snacks/sushi_Tamago + result = /obj/item/food/snacks/sushi_Tamago /datum/recipe/grill/sushi_Unagi reagents = list("sake" = 5) items = list( /obj/item/fish/electric_eel, - /obj/item/reagent_containers/food/snacks/boiledrice, + /obj/item/food/snacks/boiledrice, ) - result = /obj/item/reagent_containers/food/snacks/sushi_Unagi + result = /obj/item/food/snacks/sushi_Unagi /datum/recipe/grill/sushi_Ebi items = list( - /obj/item/reagent_containers/food/snacks/boiledrice, - /obj/item/reagent_containers/food/snacks/boiled_shrimp, + /obj/item/food/snacks/boiledrice, + /obj/item/food/snacks/boiled_shrimp, ) - result = /obj/item/reagent_containers/food/snacks/sushi_Ebi + result = /obj/item/food/snacks/sushi_Ebi /datum/recipe/grill/sushi_Ikura items = list( - /obj/item/reagent_containers/food/snacks/boiledrice, + /obj/item/food/snacks/boiledrice, /obj/item/fish_eggs/salmon, ) - result = /obj/item/reagent_containers/food/snacks/sushi_Ikura + result = /obj/item/food/snacks/sushi_Ikura /datum/recipe/grill/sushi_Inari items = list( - /obj/item/reagent_containers/food/snacks/boiledrice, - /obj/item/reagent_containers/food/snacks/fried_tofu, + /obj/item/food/snacks/boiledrice, + /obj/item/food/snacks/fried_tofu, ) - result = /obj/item/reagent_containers/food/snacks/sushi_Inari + result = /obj/item/food/snacks/sushi_Inari /datum/recipe/grill/sushi_Sake items = list( - /obj/item/reagent_containers/food/snacks/boiledrice, - /obj/item/reagent_containers/food/snacks/salmonmeat, + /obj/item/food/snacks/boiledrice, + /obj/item/food/snacks/salmonmeat, ) - result = /obj/item/reagent_containers/food/snacks/sushi_Sake + result = /obj/item/food/snacks/sushi_Sake /datum/recipe/grill/sushi_SmokedSalmon items = list( - /obj/item/reagent_containers/food/snacks/boiledrice, - /obj/item/reagent_containers/food/snacks/salmonsteak, + /obj/item/food/snacks/boiledrice, + /obj/item/food/snacks/salmonsteak, ) - result = /obj/item/reagent_containers/food/snacks/sushi_SmokedSalmon + result = /obj/item/food/snacks/sushi_SmokedSalmon /datum/recipe/grill/sushi_Masago items = list( - /obj/item/reagent_containers/food/snacks/boiledrice, + /obj/item/food/snacks/boiledrice, /obj/item/fish_eggs/goldfish, ) - result = /obj/item/reagent_containers/food/snacks/sushi_Masago + result = /obj/item/food/snacks/sushi_Masago /datum/recipe/grill/sushi_Tobiko items = list( - /obj/item/reagent_containers/food/snacks/boiledrice, + /obj/item/food/snacks/boiledrice, /obj/item/fish_eggs/shark, ) - result = /obj/item/reagent_containers/food/snacks/sushi_Tobiko + result = /obj/item/food/snacks/sushi_Tobiko /datum/recipe/grill/sushi_TobikoEgg items = list( - /obj/item/reagent_containers/food/snacks/sushi_Tobiko, - /obj/item/reagent_containers/food/snacks/egg, + /obj/item/food/snacks/sushi_Tobiko, + /obj/item/food/snacks/egg, ) - result = /obj/item/reagent_containers/food/snacks/sushi_TobikoEgg + result = /obj/item/food/snacks/sushi_TobikoEgg /datum/recipe/grill/sushi_Tai items = list( - /obj/item/reagent_containers/food/snacks/boiledrice, - /obj/item/reagent_containers/food/snacks/catfishmeat, + /obj/item/food/snacks/boiledrice, + /obj/item/food/snacks/catfishmeat, ) - result = /obj/item/reagent_containers/food/snacks/sushi_Tai + result = /obj/item/food/snacks/sushi_Tai /datum/recipe/grill/goliath - items = list(/obj/item/reagent_containers/food/snacks/monstermeat/goliath) - result = /obj/item/reagent_containers/food/snacks/goliath_steak + items = list(/obj/item/food/snacks/monstermeat/goliath) + result = /obj/item/food/snacks/goliath_steak /datum/recipe/grill/shrimp_skewer items = list( - /obj/item/reagent_containers/food/snacks/shrimp, - /obj/item/reagent_containers/food/snacks/shrimp, - /obj/item/reagent_containers/food/snacks/shrimp, - /obj/item/reagent_containers/food/snacks/shrimp, + /obj/item/food/snacks/shrimp, + /obj/item/food/snacks/shrimp, + /obj/item/food/snacks/shrimp, + /obj/item/food/snacks/shrimp, /obj/item/stack/rods, ) - result = /obj/item/reagent_containers/food/snacks/shrimp_skewer + result = /obj/item/food/snacks/shrimp_skewer /datum/recipe/grill/fish_skewer reagents = list("flour" = 10) items = list( - /obj/item/reagent_containers/food/snacks/salmonmeat, - /obj/item/reagent_containers/food/snacks/salmonmeat, + /obj/item/food/snacks/salmonmeat, + /obj/item/food/snacks/salmonmeat, /obj/item/stack/rods, ) - result = /obj/item/reagent_containers/food/snacks/fish_skewer + result = /obj/item/food/snacks/fish_skewer /datum/recipe/grill/pancake items = list( - /obj/item/reagent_containers/food/snacks/cookiedough + /obj/item/food/snacks/cookiedough ) - result = /obj/item/reagent_containers/food/snacks/pancake + result = /obj/item/food/snacks/pancake /datum/recipe/grill/berry_pancake items = list( - /obj/item/reagent_containers/food/snacks/cookiedough, - /obj/item/reagent_containers/food/snacks/grown/berries + /obj/item/food/snacks/cookiedough, + /obj/item/food/snacks/grown/berries ) - result = /obj/item/reagent_containers/food/snacks/pancake/berry_pancake + result = /obj/item/food/snacks/pancake/berry_pancake /datum/recipe/grill/choc_chip_pancake items = list( - /obj/item/reagent_containers/food/snacks/cookiedough, - /obj/item/reagent_containers/food/snacks/choc_pile + /obj/item/food/snacks/cookiedough, + /obj/item/food/snacks/choc_pile ) - result = /obj/item/reagent_containers/food/snacks/pancake/choc_chip_pancake + result = /obj/item/food/snacks/pancake/choc_chip_pancake /datum/recipe/grill/bbqribs reagents = list("bbqsauce" = 5) items = list( - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, /obj/item/stack/rods ) - result = /obj/item/reagent_containers/food/snacks/bbqribs + result = /obj/item/food/snacks/bbqribs diff --git a/code/modules/food_and_drinks/recipes/recipes_microwave.dm b/code/modules/food_and_drinks/recipes/recipes_microwave.dm index 112dcc6ca87a..53904858aaa9 100644 --- a/code/modules/food_and_drinks/recipes/recipes_microwave.dm +++ b/code/modules/food_and_drinks/recipes/recipes_microwave.dm @@ -5,791 +5,791 @@ /datum/recipe/microwave/boiledegg reagents = list("water" = 5) items = list( - /obj/item/reagent_containers/food/snacks/egg + /obj/item/food/snacks/egg ) - result = /obj/item/reagent_containers/food/snacks/boiledegg + result = /obj/item/food/snacks/boiledegg /datum/recipe/microwave/dionaroast reagents = list("facid" = 5) //It dissolves the carapace. Still poisonous, though. - items = list(/obj/item/holder/diona, /obj/item/reagent_containers/food/snacks/grown/apple) - result = /obj/item/reagent_containers/food/snacks/dionaroast + items = list(/obj/item/holder/diona, /obj/item/food/snacks/grown/apple) + result = /obj/item/food/snacks/dionaroast /datum/recipe/microwave/jellydonut reagents = list("berryjuice" = 5, "sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough + /obj/item/food/snacks/dough ) - result = /obj/item/reagent_containers/food/snacks/donut/jelly + result = /obj/item/food/snacks/donut/jelly /datum/recipe/microwave/jellydonut/slime reagents = list("slimejelly" = 5, "sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough + /obj/item/food/snacks/dough ) - result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly + result = /obj/item/food/snacks/donut/jelly/slimejelly /datum/recipe/microwave/jellydonut/cherry reagents = list("cherryjelly" = 5, "sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough + /obj/item/food/snacks/dough ) - result = /obj/item/reagent_containers/food/snacks/donut/jelly/cherryjelly + result = /obj/item/food/snacks/donut/jelly/cherryjelly /datum/recipe/microwave/donut reagents = list("sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough + /obj/item/food/snacks/dough ) - result = /obj/item/reagent_containers/food/snacks/donut + result = /obj/item/food/snacks/donut /datum/recipe/microwave/donut/sprinkles reagents = list("sugar" = 5, "sprinkles" = 2) items = list( - /obj/item/reagent_containers/food/snacks/dough + /obj/item/food/snacks/dough ) - result = /obj/item/reagent_containers/food/snacks/donut/sprinkles + result = /obj/item/food/snacks/donut/sprinkles /datum/recipe/microwave/human/burger items = list( - /obj/item/reagent_containers/food/snacks/meat/human, - /obj/item/reagent_containers/food/snacks/bun + /obj/item/food/snacks/meat/human, + /obj/item/food/snacks/bun ) - result = /obj/item/reagent_containers/food/snacks/human/burger + result = /obj/item/food/snacks/human/burger /datum/recipe/microwave/plainburger items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat //do not place this recipe before /datum/recipe/microwave/humanburger + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat //do not place this recipe before /datum/recipe/microwave/humanburger ) - result = /obj/item/reagent_containers/food/snacks/burger/plain + result = /obj/item/food/snacks/burger/plain /datum/recipe/microwave/syntiburger items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat/syntiflesh + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat/syntiflesh ) - result = /obj/item/reagent_containers/food/snacks/burger/plain + result = /obj/item/food/snacks/burger/plain /datum/recipe/microwave/brainburger items = list( - /obj/item/reagent_containers/food/snacks/bun, + /obj/item/food/snacks/bun, /obj/item/organ/internal/brain ) - result = /obj/item/reagent_containers/food/snacks/burger/brain + result = /obj/item/food/snacks/burger/brain /datum/recipe/microwave/hamborger items = list( - /obj/item/reagent_containers/food/snacks/bun, + /obj/item/food/snacks/bun, /obj/item/robot_parts/head ) - result = /obj/item/reagent_containers/food/snacks/burger/hamborger + result = /obj/item/food/snacks/burger/hamborger /datum/recipe/microwave/xenoburger items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/monstermeat/xenomeat ) - result = /obj/item/reagent_containers/food/snacks/burger/xeno + /obj/item/food/snacks/bun, + /obj/item/food/snacks/monstermeat/xenomeat) + result = /obj/item/food/snacks/burger/xeno /datum/recipe/microwave/fishburger items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/carpmeat + /obj/item/food/snacks/bun, + /obj/item/food/snacks/carpmeat ) - result = /obj/item/reagent_containers/food/snacks/fishburger + result = /obj/item/food/snacks/fishburger /datum/recipe/microwave/tofuburger items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/tofu + /obj/item/food/snacks/bun, + /obj/item/food/snacks/tofu ) - result = /obj/item/reagent_containers/food/snacks/burger/tofu + result = /obj/item/food/snacks/burger/tofu /datum/recipe/microwave/ghostburger items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/ectoplasm //where do you even find this stuff + /obj/item/food/snacks/bun, + /obj/item/food/snacks/ectoplasm //where do you even find this stuff ) - result = /obj/item/reagent_containers/food/snacks/burger/ghost + result = /obj/item/food/snacks/burger/ghost /datum/recipe/microwave/clownburger items = list( - /obj/item/reagent_containers/food/snacks/bun, + /obj/item/food/snacks/bun, /obj/item/clothing/mask/gas/clown_hat, ) - result = /obj/item/reagent_containers/food/snacks/burger/clown + result = /obj/item/food/snacks/burger/clown /datum/recipe/microwave/mimeburger items = list( - /obj/item/reagent_containers/food/snacks/bun, + /obj/item/food/snacks/bun, /obj/item/clothing/head/beret ) - result = /obj/item/reagent_containers/food/snacks/burger/mime + result = /obj/item/food/snacks/burger/mime /datum/recipe/microwave/baseballburger items = list( - /obj/item/reagent_containers/food/snacks/bun, + /obj/item/food/snacks/bun, /obj/item/melee/baseball_bat ) - result = /obj/item/reagent_containers/food/snacks/burger/baseball + result = /obj/item/food/snacks/burger/baseball /datum/recipe/microwave/cheeseburger items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/burger/cheese + result = /obj/item/food/snacks/burger/cheese /datum/recipe/microwave/appendixburger items = list( - /obj/item/reagent_containers/food/snacks/bun, + /obj/item/food/snacks/bun, /obj/item/organ/internal/appendix ) - result = /obj/item/reagent_containers/food/snacks/burger/appendix + result = /obj/item/food/snacks/burger/appendix /datum/recipe/microwave/appendixburger_bitten items = list( - /obj/item/reagent_containers/food/snacks/appendix, - /obj/item/reagent_containers/food/snacks/bun + /obj/item/food/snacks/appendix, + /obj/item/food/snacks/bun ) - result = /obj/item/reagent_containers/food/snacks/burger/appendix + result = /obj/item/food/snacks/burger/appendix /datum/recipe/microwave/bearger items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/monstermeat/bearmeat + /obj/item/food/snacks/bun, + /obj/item/food/snacks/monstermeat/bearmeat ) - result = /obj/item/reagent_containers/food/snacks/burger/bearger + result = /obj/item/food/snacks/burger/bearger /datum/recipe/microwave/fivealarmburger items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/grown/ghost_chili, - /obj/item/reagent_containers/food/snacks/grown/ghost_chili + /obj/item/food/snacks/bun, + /obj/item/food/snacks/grown/ghost_chili, + /obj/item/food/snacks/grown/ghost_chili ) - result = /obj/item/reagent_containers/food/snacks/burger/fivealarm + result = /obj/item/food/snacks/burger/fivealarm /datum/recipe/microwave/baconburger items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/bacon, - /obj/item/reagent_containers/food/snacks/bacon, - /obj/item/reagent_containers/food/snacks/cheesewedge + /obj/item/food/snacks/bun, + /obj/item/food/snacks/bacon, + /obj/item/food/snacks/bacon, + /obj/item/food/snacks/cheesewedge ) - result = /obj/item/reagent_containers/food/snacks/burger/bacon + result = /obj/item/food/snacks/burger/bacon /datum/recipe/microwave/mcrib items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/bbqribs, - /obj/item/reagent_containers/food/snacks/onion_slice + /obj/item/food/snacks/bun, + /obj/item/food/snacks/bbqribs, + /obj/item/food/snacks/onion_slice ) - result = /obj/item/reagent_containers/food/snacks/burger/mcrib + result = /obj/item/food/snacks/burger/mcrib /datum/recipe/microwave/mcguffin items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/bacon, - /obj/item/reagent_containers/food/snacks/bacon, - /obj/item/reagent_containers/food/snacks/friedegg + /obj/item/food/snacks/bun, + /obj/item/food/snacks/bacon, + /obj/item/food/snacks/bacon, + /obj/item/food/snacks/friedegg ) - result = /obj/item/reagent_containers/food/snacks/burger/mcguffin + result = /obj/item/food/snacks/burger/mcguffin /datum/recipe/microwave/hotdog items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/sausage + /obj/item/food/snacks/bun, + /obj/item/food/snacks/sausage ) - result = /obj/item/reagent_containers/food/snacks/hotdog + result = /obj/item/food/snacks/hotdog /datum/recipe/microwave/donkpocket items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/meatball + /obj/item/food/snacks/dough, + /obj/item/food/snacks/meatball ) - result = /obj/item/reagent_containers/food/snacks/donkpocket + result = /obj/item/food/snacks/donkpocket /datum/recipe/microwave/warmdonkpocket duplicate = FALSE items = list( - /obj/item/reagent_containers/food/snacks/donkpocket + /obj/item/food/snacks/donkpocket ) - result = /obj/item/reagent_containers/food/snacks/warmdonkpocket + result = /obj/item/food/snacks/warmdonkpocket /datum/recipe/microwave/reheatwarmdonkpocket duplicate = FALSE items = list( - /obj/item/reagent_containers/food/snacks/warmdonkpocket + /obj/item/food/snacks/warmdonkpocket ) - result = /obj/item/reagent_containers/food/snacks/warmdonkpocket + result = /obj/item/food/snacks/warmdonkpocket /datum/recipe/microwave/eggplantparm items = list( - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/eggplant + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/eggplant ) - result = /obj/item/reagent_containers/food/snacks/eggplantparm + result = /obj/item/food/snacks/eggplantparm /datum/recipe/microwave/soylentviridians reagents = list("flour" = 10) - items = list(/obj/item/reagent_containers/food/snacks/grown/soybeans) - result = /obj/item/reagent_containers/food/snacks/soylentviridians + items = list(/obj/item/food/snacks/grown/soybeans) + result = /obj/item/food/snacks/soylentviridians /datum/recipe/microwave/soylentgreen reagents = list("flour" = 10) items = list( - /obj/item/reagent_containers/food/snacks/meat/human, - /obj/item/reagent_containers/food/snacks/meat/human, + /obj/item/food/snacks/meat/human, + /obj/item/food/snacks/meat/human, ) - result = /obj/item/reagent_containers/food/snacks/soylentgreen + result = /obj/item/food/snacks/soylentgreen /datum/recipe/microwave/chaosdonut reagents = list("frostoil" = 5, "capsaicin" = 5, "sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough + /obj/item/food/snacks/dough ) - result = /obj/item/reagent_containers/food/snacks/donut/chaos + result = /obj/item/food/snacks/donut/chaos /datum/recipe/microwave/cheesyfries items = list( - /obj/item/reagent_containers/food/snacks/fries, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/fries, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/cheesyfries + result = /obj/item/food/snacks/cheesyfries /datum/recipe/microwave/cubancarp items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/carpmeat, - /obj/item/reagent_containers/food/snacks/grown/chili + /obj/item/food/snacks/dough, + /obj/item/food/snacks/carpmeat, + /obj/item/food/snacks/grown/chili ) - result = /obj/item/reagent_containers/food/snacks/cubancarp + result = /obj/item/food/snacks/cubancarp /datum/recipe/microwave/popcorn - items = list(/obj/item/reagent_containers/food/snacks/grown/corn) - result = /obj/item/reagent_containers/food/snacks/popcorn + items = list(/obj/item/food/snacks/grown/corn) + result = /obj/item/food/snacks/popcorn /datum/recipe/microwave/spacylibertyduff reagents = list("water" = 5, "vodka" = 5) - items = list(/obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap, /obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap, - /obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap) - result = /obj/item/reagent_containers/food/snacks/spacylibertyduff + items = list(/obj/item/food/snacks/grown/mushroom/libertycap, /obj/item/food/snacks/grown/mushroom/libertycap, + /obj/item/food/snacks/grown/mushroom/libertycap) + result = /obj/item/food/snacks/spacylibertyduff /datum/recipe/microwave/amanitajelly reagents = list("water" = 5, "vodka" = 5) - items = list(/obj/item/reagent_containers/food/snacks/grown/mushroom/amanita, /obj/item/reagent_containers/food/snacks/grown/mushroom/amanita, - /obj/item/reagent_containers/food/snacks/grown/mushroom/amanita) - result = /obj/item/reagent_containers/food/snacks/amanitajelly + items = list(/obj/item/food/snacks/grown/mushroom/amanita, /obj/item/food/snacks/grown/mushroom/amanita, + /obj/item/food/snacks/grown/mushroom/amanita) + result = /obj/item/food/snacks/amanitajelly /datum/recipe/microwave/amanitajelly/make_food(obj/container) - var/obj/item/reagent_containers/food/snacks/amanitajelly/being_cooked = ..() + var/obj/item/food/snacks/amanitajelly/being_cooked = ..() being_cooked.reagents.del_reagent("amanitin") return being_cooked /datum/recipe/microwave/meatballsoup reagents = list("water" = 10) - items = list(/obj/item/reagent_containers/food/snacks/meatball, /obj/item/reagent_containers/food/snacks/grown/potato, /obj/item/reagent_containers/food/snacks/grown/carrot) - result = /obj/item/reagent_containers/food/snacks/soup/meatballsoup + items = list(/obj/item/food/snacks/meatball, /obj/item/food/snacks/grown/potato, /obj/item/food/snacks/grown/carrot) + result = /obj/item/food/snacks/soup/meatballsoup /datum/recipe/microwave/vegetablesoup reagents = list("water" = 10) - items = list(/obj/item/reagent_containers/food/snacks/grown/potato, /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/grown/corn, /obj/item/reagent_containers/food/snacks/grown/eggplant) - result = /obj/item/reagent_containers/food/snacks/soup/vegetablesoup + items = list(/obj/item/food/snacks/grown/potato, /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/grown/corn, /obj/item/food/snacks/grown/eggplant) + result = /obj/item/food/snacks/soup/vegetablesoup /datum/recipe/microwave/nettlesoup reagents = list("water" = 10) - items = list(/obj/item/reagent_containers/food/snacks/egg, /obj/item/grown/nettle/basic, /obj/item/reagent_containers/food/snacks/grown/potato) - result = /obj/item/reagent_containers/food/snacks/soup/nettlesoup + items = list(/obj/item/food/snacks/egg, /obj/item/grown/nettle/basic, /obj/item/food/snacks/grown/potato) + result = /obj/item/food/snacks/soup/nettlesoup /datum/recipe/microwave/wishsoup reagents = list("water" = 20) - result = /obj/item/reagent_containers/food/snacks/soup/wishsoup + result = /obj/item/food/snacks/soup/wishsoup /datum/recipe/microwave/hotchili - items = list(/obj/item/reagent_containers/food/snacks/meat, /obj/item/reagent_containers/food/snacks/grown/chili, /obj/item/reagent_containers/food/snacks/grown/tomato) - result = /obj/item/reagent_containers/food/snacks/soup/hotchili + items = list(/obj/item/food/snacks/meat, /obj/item/food/snacks/grown/chili, /obj/item/food/snacks/grown/tomato) + result = /obj/item/food/snacks/soup/hotchili /datum/recipe/microwave/coldchili - items = list(/obj/item/reagent_containers/food/snacks/meat, /obj/item/reagent_containers/food/snacks/grown/icepepper, /obj/item/reagent_containers/food/snacks/grown/tomato) - result = /obj/item/reagent_containers/food/snacks/soup/coldchili + items = list(/obj/item/food/snacks/meat, /obj/item/food/snacks/grown/icepepper, /obj/item/food/snacks/grown/tomato) + result = /obj/item/food/snacks/soup/coldchili /datum/recipe/microwave/spellburger items = list( - /obj/item/reagent_containers/food/snacks/bun, + /obj/item/food/snacks/bun, /obj/item/clothing/head/wizard/fake, ) - result = /obj/item/reagent_containers/food/snacks/burger/spell + result = /obj/item/food/snacks/burger/spell /datum/recipe/microwave/spellburger items = list( - /obj/item/reagent_containers/food/snacks/bun, + /obj/item/food/snacks/bun, /obj/item/clothing/head/wizard, ) - result = /obj/item/reagent_containers/food/snacks/burger/spell + result = /obj/item/food/snacks/burger/spell /datum/recipe/microwave/bigbiteburger items = list( - /obj/item/reagent_containers/food/snacks/burger/plain, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/egg, + /obj/item/food/snacks/burger/plain, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/egg, ) - result = /obj/item/reagent_containers/food/snacks/burger/bigbite + result = /obj/item/food/snacks/burger/bigbite /datum/recipe/microwave/enchiladas items = list( - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/grown/chili, - /obj/item/reagent_containers/food/snacks/grown/chili, - /obj/item/reagent_containers/food/snacks/grown/corn) - result = /obj/item/reagent_containers/food/snacks/enchiladas + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/grown/chili, + /obj/item/food/snacks/grown/chili, + /obj/item/food/snacks/grown/corn) + result = /obj/item/food/snacks/enchiladas /datum/recipe/microwave/burrito reagents = list("capsaicin" = 5, "rice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/beans, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/beans, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/sliceable/flatdough, ) - result = /obj/item/reagent_containers/food/snacks/burrito + result = /obj/item/food/snacks/burrito /datum/recipe/microwave/monkeysdelight reagents = list("sodiumchloride" = 1, "blackpepper" = 1, "flour" = 10) items = list( - /obj/item/reagent_containers/food/snacks/monkeycube, - /obj/item/reagent_containers/food/snacks/grown/banana) - result = /obj/item/reagent_containers/food/snacks/monkeysdelight + /obj/item/food/snacks/monkeycube, + /obj/item/food/snacks/grown/banana) + result = /obj/item/food/snacks/monkeysdelight /datum/recipe/microwave/fishandchips items = list( - /obj/item/reagent_containers/food/snacks/fries, - /obj/item/reagent_containers/food/snacks/carpmeat, + /obj/item/food/snacks/fries, + /obj/item/food/snacks/carpmeat, ) - result = /obj/item/reagent_containers/food/snacks/fishandchips + result = /obj/item/food/snacks/fishandchips /datum/recipe/microwave/sandwich items = list( - /obj/item/reagent_containers/food/snacks/meatsteak, - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/meatsteak, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/sandwich + result = /obj/item/food/snacks/sandwich /datum/recipe/microwave/tomatosoup reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/tomato) - result = /obj/item/reagent_containers/food/snacks/soup/tomatosoup + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/tomato) + result = /obj/item/food/snacks/soup/tomatosoup /datum/recipe/microwave/stew reagents = list("water" = 10) items= list( - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/grown/eggplant, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/meat) - result = /obj/item/reagent_containers/food/snacks/soup/stew + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/grown/eggplant, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/meat) + result = /obj/item/food/snacks/soup/stew /datum/recipe/microwave/slimetoast reagents = list("slimejelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, ) - result = /obj/item/reagent_containers/food/snacks/jelliedtoast/slime + result = /obj/item/food/snacks/jelliedtoast/slime /datum/recipe/microwave/jelliedtoast reagents = list("cherryjelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, ) - result = /obj/item/reagent_containers/food/snacks/jelliedtoast/cherry + result = /obj/item/food/snacks/jelliedtoast/cherry /datum/recipe/microwave/misosoup reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/soydope, - /obj/item/reagent_containers/food/snacks/soydope, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/tofu, + /obj/item/food/snacks/soydope, + /obj/item/food/snacks/soydope, + /obj/item/food/snacks/tofu, + /obj/item/food/snacks/tofu, ) - result = /obj/item/reagent_containers/food/snacks/soup/misosoup + result = /obj/item/food/snacks/soup/misosoup /datum/recipe/microwave/stewedsoymeat - items = list(/obj/item/reagent_containers/food/snacks/soydope, /obj/item/reagent_containers/food/snacks/soydope, - /obj/item/reagent_containers/food/snacks/grown/carrot, /obj/item/reagent_containers/food/snacks/grown/tomato) - result = /obj/item/reagent_containers/food/snacks/stewedsoymeat + items = list(/obj/item/food/snacks/soydope, /obj/item/food/snacks/soydope, + /obj/item/food/snacks/grown/carrot, /obj/item/food/snacks/grown/tomato) + result = /obj/item/food/snacks/stewedsoymeat /datum/recipe/microwave/boiledspaghetti reagents = list("water" = 5) items = list( - /obj/item/reagent_containers/food/snacks/spaghetti, + /obj/item/food/snacks/spaghetti, ) - result = /obj/item/reagent_containers/food/snacks/boiledspaghetti + result = /obj/item/food/snacks/boiledspaghetti /datum/recipe/microwave/boiledrice reagents = list("water" = 5, "rice" = 10) - result = /obj/item/reagent_containers/food/snacks/boiledrice + result = /obj/item/food/snacks/boiledrice /datum/recipe/microwave/ricepudding reagents = list("milk" = 5, "rice" = 10) - result = /obj/item/reagent_containers/food/snacks/ricepudding + result = /obj/item/food/snacks/ricepudding /datum/recipe/microwave/pastatomato reagents = list("water" = 5) - items = list(/obj/item/reagent_containers/food/snacks/spaghetti, /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/tomato) - result = /obj/item/reagent_containers/food/snacks/pastatomato + items = list(/obj/item/food/snacks/spaghetti, /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/tomato) + result = /obj/item/food/snacks/pastatomato /datum/recipe/microwave/poppypretzel - items = list(/obj/item/seeds/poppy, /obj/item/reagent_containers/food/snacks/dough) - result = /obj/item/reagent_containers/food/snacks/poppypretzel + items = list(/obj/item/seeds/poppy, /obj/item/food/snacks/dough) + result = /obj/item/food/snacks/poppypretzel /datum/recipe/microwave/meatballspaggetti reagents = list("water" = 5) items = list( - /obj/item/reagent_containers/food/snacks/spaghetti, - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/meatball, + /obj/item/food/snacks/spaghetti, + /obj/item/food/snacks/meatball, + /obj/item/food/snacks/meatball, ) - result = /obj/item/reagent_containers/food/snacks/meatballspaghetti + result = /obj/item/food/snacks/meatballspaghetti /datum/recipe/microwave/spesslaw reagents = list("water" = 5) items = list( - /obj/item/reagent_containers/food/snacks/spaghetti, - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/meatball, + /obj/item/food/snacks/spaghetti, + /obj/item/food/snacks/meatball, + /obj/item/food/snacks/meatball, + /obj/item/food/snacks/meatball, + /obj/item/food/snacks/meatball, ) - result = /obj/item/reagent_containers/food/snacks/spesslaw + result = /obj/item/food/snacks/spesslaw /datum/recipe/microwave/macncheese reagents = list("water" = 5, "milk" = 5) items = list( - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/macaroni, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/macaroni, ) - result = /obj/item/reagent_containers/food/snacks/macncheese + result = /obj/item/food/snacks/macncheese /datum/recipe/microwave/superbiteburger reagents = list("sodiumchloride" = 5, "blackpepper" = 5) items = list( - /obj/item/reagent_containers/food/snacks/burger/bigbite, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/boiledegg, - /obj/item/reagent_containers/food/snacks/tomatoslice + /obj/item/food/snacks/burger/bigbite, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/boiledegg, + /obj/item/food/snacks/tomatoslice ) - result = /obj/item/reagent_containers/food/snacks/burger/superbite + result = /obj/item/food/snacks/burger/superbite /datum/recipe/microwave/crazyburger reagents = list("cornoil" = 15) items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/grown/chili, + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/grown/chili, /obj/item/toy/crayon/green, /obj/item/flashlight/flare ) - result = /obj/item/reagent_containers/food/snacks/burger/crazy + result = /obj/item/food/snacks/burger/crazy /datum/recipe/microwave/blt items = list( - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/tomatoslice, - /obj/item/reagent_containers/food/snacks/bacon + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/tomatoslice, + /obj/item/food/snacks/bacon ) - result = /obj/item/reagent_containers/food/snacks/blt + result = /obj/item/food/snacks/blt /datum/recipe/microwave/peanut_butter_jelly/cherry reagents = list("cherryjelly" = 5, "peanutbutter" = 5) items = list( - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice ) - result = /obj/item/reagent_containers/food/snacks/peanut_butter_jelly/cherry + result = /obj/item/food/snacks/peanut_butter_jelly/cherry /datum/recipe/microwave/peanut_butter_jelly/slime reagents = list("slimejelly" = 5, "peanutbutter" = 5) items = list( - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice ) - result = /obj/item/reagent_containers/food/snacks/peanut_butter_jelly/slime + result = /obj/item/food/snacks/peanut_butter_jelly/slime /datum/recipe/microwave/peanut_butter_banana reagents = list("peanutbutter" = 5) items = list( - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/grown/banana + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/grown/banana ) - result = /obj/item/reagent_containers/food/snacks/peanut_butter_banana + result = /obj/item/food/snacks/peanut_butter_banana /datum/recipe/microwave/philly_cheesesteak items = list( - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/onion + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/onion ) - result = /obj/item/reagent_containers/food/snacks/philly_cheesesteak + result = /obj/item/food/snacks/philly_cheesesteak /datum/recipe/microwave/ppattyred reagents = list("cherryjelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat ) - result = /obj/item/reagent_containers/food/snacks/burger/ppatty/red + result = /obj/item/food/snacks/burger/ppatty/red /datum/recipe/microwave/ppattyorange reagents = list("orangejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat ) - result = /obj/item/reagent_containers/food/snacks/burger/ppatty/orange + result = /obj/item/food/snacks/burger/ppatty/orange /datum/recipe/microwave/ppattyyellow reagents = list("lemonjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat ) - result = /obj/item/reagent_containers/food/snacks/burger/ppatty/yellow + result = /obj/item/food/snacks/burger/ppatty/yellow /datum/recipe/microwave/ppattygreen reagents = list("limejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat ) - result = /obj/item/reagent_containers/food/snacks/burger/ppatty/green + result = /obj/item/food/snacks/burger/ppatty/green /datum/recipe/microwave/ppattyblue reagents = list("berryjuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat ) - result = /obj/item/reagent_containers/food/snacks/burger/ppatty/blue + result = /obj/item/food/snacks/burger/ppatty/blue /datum/recipe/microwave/ppattypurple reagents = list("grapejuice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat ) - result = /obj/item/reagent_containers/food/snacks/burger/ppatty/purple + result = /obj/item/food/snacks/burger/ppatty/purple /datum/recipe/microwave/ppattywhite reagents = list("sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/meat + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat ) - result = /obj/item/reagent_containers/food/snacks/burger/ppatty/white + result = /obj/item/food/snacks/burger/ppatty/white /datum/recipe/microwave/ppattyrainbow items = list( - /obj/item/reagent_containers/food/snacks/burger/ppatty/red, - /obj/item/reagent_containers/food/snacks/burger/ppatty/orange, - /obj/item/reagent_containers/food/snacks/burger/ppatty/yellow, - /obj/item/reagent_containers/food/snacks/burger/ppatty/green, - /obj/item/reagent_containers/food/snacks/burger/ppatty/blue, - /obj/item/reagent_containers/food/snacks/burger/ppatty/purple, - /obj/item/reagent_containers/food/snacks/burger/ppatty/white + /obj/item/food/snacks/burger/ppatty/red, + /obj/item/food/snacks/burger/ppatty/orange, + /obj/item/food/snacks/burger/ppatty/yellow, + /obj/item/food/snacks/burger/ppatty/green, + /obj/item/food/snacks/burger/ppatty/blue, + /obj/item/food/snacks/burger/ppatty/purple, + /obj/item/food/snacks/burger/ppatty/white ) - result = /obj/item/reagent_containers/food/snacks/burger/ppatty/rainbow + result = /obj/item/food/snacks/burger/ppatty/rainbow /datum/recipe/microwave/elecburger items = list( - /obj/item/reagent_containers/food/snacks/bun, + /obj/item/food/snacks/bun, /obj/item/stack/sheet/mineral/plasma, /obj/item/stack/sheet/mineral/plasma ) - result = /obj/item/reagent_containers/food/snacks/burger/elec + result = /obj/item/food/snacks/burger/elec /datum/recipe/microwave/ratburger items = list( - /obj/item/reagent_containers/food/snacks/bun, + /obj/item/food/snacks/bun, /obj/item/holder/mouse ) - result = /obj/item/reagent_containers/food/snacks/burger/rat + result = /obj/item/food/snacks/burger/rat /datum/recipe/microwave/candiedapple reagents = list("water" = 5, "sugar" = 5) - items = list(/obj/item/reagent_containers/food/snacks/grown/apple) - result = /obj/item/reagent_containers/food/snacks/candiedapple + items = list(/obj/item/food/snacks/grown/apple) + result = /obj/item/food/snacks/candiedapple /datum/recipe/microwave/slimeburger reagents = list("slimejelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/bun + /obj/item/food/snacks/bun ) - result = /obj/item/reagent_containers/food/snacks/burger/jelly/slime + result = /obj/item/food/snacks/burger/jelly/slime /datum/recipe/microwave/jellyburger reagents = list("cherryjelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/bun + /obj/item/food/snacks/bun ) - result = /obj/item/reagent_containers/food/snacks/burger/jelly/cherry + result = /obj/item/food/snacks/burger/jelly/cherry /datum/recipe/microwave/twobread reagents = list("wine" = 5) items = list( - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, ) - result = /obj/item/reagent_containers/food/snacks/twobread + result = /obj/item/food/snacks/twobread /datum/recipe/microwave/slimesandwich reagents = list("slimejelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, ) - result = /obj/item/reagent_containers/food/snacks/jellysandwich/slime + result = /obj/item/food/snacks/jellysandwich/slime /datum/recipe/microwave/cherrysandwich reagents = list("cherryjelly" = 5) items = list( - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, ) - result = /obj/item/reagent_containers/food/snacks/jellysandwich/cherry + result = /obj/item/food/snacks/jellysandwich/cherry /datum/recipe/microwave/bloodsoup reagents = list("blood" = 10) - items = list(/obj/item/reagent_containers/food/snacks/grown/tomato/blood, /obj/item/reagent_containers/food/snacks/grown/tomato/blood) - result = /obj/item/reagent_containers/food/snacks/soup/bloodsoup + items = list(/obj/item/food/snacks/grown/tomato/blood, /obj/item/food/snacks/grown/tomato/blood) + result = /obj/item/food/snacks/soup/bloodsoup /datum/recipe/microwave/slimesoup reagents = list("water" = 10, "slimejelly" = 5) - result = /obj/item/reagent_containers/food/snacks/soup/slimesoup + result = /obj/item/food/snacks/soup/slimesoup /datum/recipe/microwave/clownstears reagents = list("water" = 10) items = list( /obj/item/stack/ore/bananium, - /obj/item/reagent_containers/food/snacks/grown/banana + /obj/item/food/snacks/grown/banana ) - result = /obj/item/reagent_containers/food/snacks/soup/clownstears + result = /obj/item/food/snacks/soup/clownstears /datum/recipe/microwave/clownchili reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/grown/chili, - /obj/item/reagent_containers/food/snacks/grown/tomato, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/grown/chili, + /obj/item/food/snacks/grown/tomato, /obj/item/clothing/shoes/clown_shoes ) - result = /obj/item/reagent_containers/food/snacks/soup/clownchili + result = /obj/item/food/snacks/soup/clownchili /datum/recipe/microwave/eyesoup reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/tomato, /obj/item/organ/internal/eyes ) - result = /obj/item/reagent_containers/food/snacks/soup/eyesoup + result = /obj/item/food/snacks/soup/eyesoup /datum/recipe/microwave/sweetpotatosoup reagents = list("water" = 10, "milk" = 10) items = list( - /obj/item/reagent_containers/food/snacks/grown/potato/sweet, - /obj/item/reagent_containers/food/snacks/grown/potato/sweet + /obj/item/food/snacks/grown/potato/sweet, + /obj/item/food/snacks/grown/potato/sweet ) - result = /obj/item/reagent_containers/food/snacks/soup/sweetpotatosoup + result = /obj/item/food/snacks/soup/sweetpotatosoup /datum/recipe/microwave/redbeetsoup reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/grown/redbeet, - /obj/item/reagent_containers/food/snacks/grown/redbeet, - /obj/item/reagent_containers/food/snacks/grown/cabbage + /obj/item/food/snacks/grown/redbeet, + /obj/item/food/snacks/grown/redbeet, + /obj/item/food/snacks/grown/cabbage ) - result = /obj/item/reagent_containers/food/snacks/soup/redbeetsoup + result = /obj/item/food/snacks/soup/redbeetsoup /datum/recipe/microwave/frenchonionsoup reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/grown/onion, - /obj/item/reagent_containers/food/snacks/cheesewedge + /obj/item/food/snacks/grown/onion, + /obj/item/food/snacks/cheesewedge ) - result = /obj/item/reagent_containers/food/snacks/soup/frenchonionsoup + result = /obj/item/food/snacks/soup/frenchonionsoup /datum/recipe/microwave/zurek reagents = list("water" = 10, "flour" = 10) items = list( - /obj/item/reagent_containers/food/snacks/boiledegg, - /obj/item/reagent_containers/food/snacks/sausage, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/grown/onion + /obj/item/food/snacks/boiledegg, + /obj/item/food/snacks/sausage, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/grown/onion ) - result = /obj/item/reagent_containers/food/snacks/soup/zurek + result = /obj/item/food/snacks/soup/zurek /datum/recipe/microwave/cullenskink reagents = list("water" = 10, "milk" = 10, "blackpepper" = 4) items = list( - /obj/item/reagent_containers/food/snacks/salmonmeat, - /obj/item/reagent_containers/food/snacks/grown/onion, - /obj/item/reagent_containers/food/snacks/grown/potato + /obj/item/food/snacks/salmonmeat, + /obj/item/food/snacks/grown/onion, + /obj/item/food/snacks/grown/potato ) - result = /obj/item/reagent_containers/food/snacks/soup/cullenskink + result = /obj/item/food/snacks/soup/cullenskink /datum/recipe/microwave/chicken_noodle_soup reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/boiledspaghetti + /obj/item/food/snacks/meat, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/boiledspaghetti ) - result = /obj/item/reagent_containers/food/snacks/soup/chicken_noodle_soup + result = /obj/item/food/snacks/soup/chicken_noodle_soup /datum/recipe/microwave/cornchowder reagents = list("water" = 10, "cream" = 5) items = list( - /obj/item/reagent_containers/food/snacks/grown/corn, - /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/bacon + /obj/item/food/snacks/grown/corn, + /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/bacon ) - result = /obj/item/reagent_containers/food/snacks/soup/cornchowder + result = /obj/item/food/snacks/soup/cornchowder /datum/recipe/microwave/meatball_noodles reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/grown/onion, - /obj/item/reagent_containers/food/snacks/grown/peanuts, - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/spaghetti + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/grown/onion, + /obj/item/food/snacks/grown/peanuts, + /obj/item/food/snacks/meatball, + /obj/item/food/snacks/meatball, + /obj/item/food/snacks/spaghetti ) - result = /obj/item/reagent_containers/food/snacks/soup/meatball_noodles + result = /obj/item/food/snacks/soup/meatball_noodles /datum/recipe/microwave/seedsoup reagents = list("water" = 10, "vinegar" = 10) @@ -798,218 +798,218 @@ /obj/item/seeds/poppy/lily, /obj/item/seeds/ambrosia ) - result = /obj/item/reagent_containers/food/snacks/soup/seedsoup + result = /obj/item/food/snacks/soup/seedsoup /datum/recipe/microwave/beanstew reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/beans, - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/onion, - /obj/item/reagent_containers/food/snacks/grown/chili, - /obj/item/reagent_containers/food/snacks/grown/corn + /obj/item/food/snacks/beans, + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/onion, + /obj/item/food/snacks/grown/chili, + /obj/item/food/snacks/grown/corn ) - result = /obj/item/reagent_containers/food/snacks/soup/beanstew + result = /obj/item/food/snacks/soup/beanstew /datum/recipe/microwave/oatstew reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/grown/oat, - /obj/item/reagent_containers/food/snacks/grown/potato/sweet, - /obj/item/reagent_containers/food/snacks/grown/parsnip, - /obj/item/reagent_containers/food/snacks/grown/carrot + /obj/item/food/snacks/grown/oat, + /obj/item/food/snacks/grown/potato/sweet, + /obj/item/food/snacks/grown/parsnip, + /obj/item/food/snacks/grown/carrot ) - result = /obj/item/reagent_containers/food/snacks/soup/oatstew + result = /obj/item/food/snacks/soup/oatstew /datum/recipe/microwave/hong_kong_borscht reagents = list("water" = 10, "soysauce" = 5) items = list( - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/grown/onion, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/cutlet + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/grown/onion, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/cutlet ) - result = /obj/item/reagent_containers/food/snacks/soup/hong_kong_borscht + result = /obj/item/food/snacks/soup/hong_kong_borscht /datum/recipe/microwave/hong_kong_macaroni reagents = list("water" = 10, "cream" = 10) items = list( - /obj/item/reagent_containers/food/snacks/boiledspaghetti, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/bacon + /obj/item/food/snacks/boiledspaghetti, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/bacon ) - result = /obj/item/reagent_containers/food/snacks/soup/hong_kong_macaroni + result = /obj/item/food/snacks/soup/hong_kong_macaroni /datum/recipe/microwave/boiledslimeextract reagents = list("water" = 5) items = list( /obj/item/slime_extract, ) - result = /obj/item/reagent_containers/food/snacks/boiledslimecore + result = /obj/item/food/snacks/boiledslimecore /datum/recipe/microwave/mint reagents = list("toxin" = 5) - result = /obj/item/reagent_containers/food/snacks/mint + result = /obj/item/food/snacks/mint /datum/recipe/microwave/chocolateegg items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/chocolatebar, + /obj/item/food/snacks/egg, + /obj/item/food/snacks/chocolatebar, ) - result = /obj/item/reagent_containers/food/snacks/chocolateegg + result = /obj/item/food/snacks/chocolateegg /datum/recipe/microwave/mysterysoup reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/badrecipe, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/badrecipe, + /obj/item/food/snacks/tofu, + /obj/item/food/snacks/egg, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/soup/mysterysoup + result = /obj/item/food/snacks/soup/mysterysoup /datum/recipe/microwave/mushroomsoup reagents = list("water" = 5, "milk" = 5) - items = list(/obj/item/reagent_containers/food/snacks/grown/mushroom) - result = /obj/item/reagent_containers/food/snacks/soup/mushroomsoup + items = list(/obj/item/food/snacks/grown/mushroom) + result = /obj/item/food/snacks/soup/mushroomsoup /datum/recipe/microwave/chawanmushi reagents = list("water" = 5, "soysauce" = 5) items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/grown/mushroom + /obj/item/food/snacks/egg, + /obj/item/food/snacks/egg, + /obj/item/food/snacks/grown/mushroom ) - result = /obj/item/reagent_containers/food/snacks/chawanmushi + result = /obj/item/food/snacks/chawanmushi /datum/recipe/microwave/beetsoup reagents = list("water" = 10) - items = list(/obj/item/reagent_containers/food/snacks/grown/whitebeet, /obj/item/reagent_containers/food/snacks/grown/cabbage) - result = /obj/item/reagent_containers/food/snacks/soup/beetsoup + items = list(/obj/item/food/snacks/grown/whitebeet, /obj/item/food/snacks/grown/cabbage) + result = /obj/item/food/snacks/soup/beetsoup /datum/recipe/microwave/salad items = list( - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/grown/cabbage + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/grown/cabbage ) - result = /obj/item/reagent_containers/food/snacks/salad + result = /obj/item/food/snacks/salad /datum/recipe/microwave/antipasto_salad items = list( - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/grown/olive, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/cheesewedge + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/grown/olive, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/cheesewedge ) - result = /obj/item/reagent_containers/food/snacks/salad/antipasto + result = /obj/item/food/snacks/salad/antipasto /datum/recipe/microwave/caesar_salad reagents = list("oliveoil" = 5) items = list( - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/onion_slice/red, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/breadslice + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/onion_slice/red, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/breadslice ) - result = /obj/item/reagent_containers/food/snacks/salad/caesar + result = /obj/item/food/snacks/salad/caesar /datum/recipe/microwave/citrusdelight items = list( - /obj/item/reagent_containers/food/snacks/grown/citrus/lime, - /obj/item/reagent_containers/food/snacks/grown/citrus/orange, - /obj/item/reagent_containers/food/snacks/grown/citrus/lemon + /obj/item/food/snacks/grown/citrus/lime, + /obj/item/food/snacks/grown/citrus/orange, + /obj/item/food/snacks/grown/citrus/lemon ) - result = /obj/item/reagent_containers/food/snacks/salad/citrusdelight + result = /obj/item/food/snacks/salad/citrusdelight /datum/recipe/microwave/fruitsalad items = list( - /obj/item/reagent_containers/food/snacks/grown/citrus/orange, - /obj/item/reagent_containers/food/snacks/grown/apple, - /obj/item/reagent_containers/food/snacks/grown/grapes, - /obj/item/reagent_containers/food/snacks/watermelonslice + /obj/item/food/snacks/grown/citrus/orange, + /obj/item/food/snacks/grown/apple, + /obj/item/food/snacks/grown/grapes, + /obj/item/food/snacks/watermelonslice ) - result = /obj/item/reagent_containers/food/snacks/salad/fruit + result = /obj/item/food/snacks/salad/fruit /datum/recipe/microwave/greek_salad reagents = list("oliveoil" = 5) items = list( - /obj/item/reagent_containers/food/snacks/grown/olive, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/onion_slice/red, - /obj/item/reagent_containers/food/snacks/onion_slice/red, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge + /obj/item/food/snacks/grown/olive, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/onion_slice/red, + /obj/item/food/snacks/onion_slice/red, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge ) - result = /obj/item/reagent_containers/food/snacks/salad/greek + result = /obj/item/food/snacks/salad/greek /datum/recipe/microwave/junglesalad items = list( - /obj/item/reagent_containers/food/snacks/grown/apple, - /obj/item/reagent_containers/food/snacks/grown/grapes, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/watermelonslice, - /obj/item/reagent_containers/food/snacks/watermelonslice + /obj/item/food/snacks/grown/apple, + /obj/item/food/snacks/grown/grapes, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/watermelonslice, + /obj/item/food/snacks/watermelonslice ) - result = /obj/item/reagent_containers/food/snacks/salad/jungle + result = /obj/item/food/snacks/salad/jungle /datum/recipe/microwave/kale_salad reagents = list("oliveoil" = 5) items = list( - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/onion_slice/red, - /obj/item/reagent_containers/food/snacks/onion_slice/red + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/onion_slice/red, + /obj/item/food/snacks/onion_slice/red ) - result = /obj/item/reagent_containers/food/snacks/salad/kale + result = /obj/item/food/snacks/salad/kale /datum/recipe/microwave/potato_salad reagents = list("mayonnaise" = 5) items = list( - /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/boiledegg + /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/boiledegg ) - result = /obj/item/reagent_containers/food/snacks/salad/potato + result = /obj/item/food/snacks/salad/potato /datum/recipe/microwave/melonfruitbowl items = list( - /obj/item/reagent_containers/food/snacks/grown/watermelon, - /obj/item/reagent_containers/food/snacks/grown/apple, - /obj/item/reagent_containers/food/snacks/grown/ambrosia, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/citrus/orange, - /obj/item/reagent_containers/food/snacks/grown/citrus/lemon + /obj/item/food/snacks/grown/watermelon, + /obj/item/food/snacks/grown/apple, + /obj/item/food/snacks/grown/ambrosia, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/citrus/orange, + /obj/item/food/snacks/grown/citrus/lemon ) - result = /obj/item/reagent_containers/food/snacks/salad/melonfruitbowl + result = /obj/item/food/snacks/salad/melonfruitbowl /datum/recipe/microwave/herbsalad - items = list(/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, - /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, /obj/item/reagent_containers/food/snacks/grown/apple) - result = /obj/item/reagent_containers/food/snacks/salad/herb + items = list(/obj/item/food/snacks/grown/ambrosia/vulgaris, /obj/item/food/snacks/grown/ambrosia/vulgaris, + /obj/item/food/snacks/grown/ambrosia/vulgaris, /obj/item/food/snacks/grown/apple) + result = /obj/item/food/snacks/salad/herb /datum/recipe/microwave/herbsalad/make_food(obj/container) - var/obj/item/reagent_containers/food/snacks/salad/herb/being_cooked = ..() + var/obj/item/food/snacks/salad/herb/being_cooked = ..() being_cooked.reagents.del_reagent("toxin") return being_cooked /datum/recipe/microwave/aesirsalad - items = list(/obj/item/reagent_containers/food/snacks/grown/ambrosia/deus, /obj/item/reagent_containers/food/snacks/grown/ambrosia/deus, - /obj/item/reagent_containers/food/snacks/grown/ambrosia/deus, /obj/item/reagent_containers/food/snacks/grown/apple/gold) - result = /obj/item/reagent_containers/food/snacks/salad/aesir + items = list(/obj/item/food/snacks/grown/ambrosia/deus, /obj/item/food/snacks/grown/ambrosia/deus, + /obj/item/food/snacks/grown/ambrosia/deus, /obj/item/food/snacks/grown/apple/gold) + result = /obj/item/food/snacks/salad/aesir /datum/recipe/microwave/validsalad - items = list(/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, - /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/meatball) - result = /obj/item/reagent_containers/food/snacks/salad/valid + items = list(/obj/item/food/snacks/grown/ambrosia/vulgaris, /obj/item/food/snacks/grown/ambrosia/vulgaris, + /obj/item/food/snacks/grown/ambrosia/vulgaris, /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/meatball) + result = /obj/item/food/snacks/salad/valid /datum/recipe/microwave/validsalad/make_food(obj/container) - var/obj/item/reagent_containers/food/snacks/salad/valid/being_cooked = ..() + var/obj/item/food/snacks/salad/valid/being_cooked = ..() being_cooked.reagents.del_reagent("toxin") return being_cooked @@ -1017,325 +1017,325 @@ /datum/recipe/microwave/wrap reagents = list("soysauce" = 10) - items = list(/obj/item/reagent_containers/food/snacks/friedegg, /obj/item/reagent_containers/food/snacks/grown/cabbage ) - result = /obj/item/reagent_containers/food/snacks/wrap + items = list(/obj/item/food/snacks/friedegg, /obj/item/food/snacks/grown/cabbage ) + result = /obj/item/food/snacks/wrap /datum/recipe/microwave/beans reagents = list("ketchup" = 5) - items = list(/obj/item/reagent_containers/food/snacks/grown/soybeans, /obj/item/reagent_containers/food/snacks/grown/soybeans) - result = /obj/item/reagent_containers/food/snacks/beans + items = list(/obj/item/food/snacks/grown/soybeans, /obj/item/food/snacks/grown/soybeans) + result = /obj/item/food/snacks/beans /datum/recipe/microwave/benedict items = list( - /obj/item/reagent_containers/food/snacks/friedegg, - /obj/item/reagent_containers/food/snacks/meatsteak, - /obj/item/reagent_containers/food/snacks/breadslice, + /obj/item/food/snacks/friedegg, + /obj/item/food/snacks/meatsteak, + /obj/item/food/snacks/breadslice, ) - result = /obj/item/reagent_containers/food/snacks/benedict + result = /obj/item/food/snacks/benedict /datum/recipe/microwave/meatbun reagents = list("soysauce" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/grown/cabbage + /obj/item/food/snacks/dough, + /obj/item/food/snacks/meatball, + /obj/item/food/snacks/grown/cabbage ) - result = /obj/item/reagent_containers/food/snacks/meatbun + result = /obj/item/food/snacks/meatbun /datum/recipe/microwave/icecreamsandwich reagents = list("ice" = 5, "cream" = 5) items = list( - /obj/item/reagent_containers/food/snacks/frozen/icecream, + /obj/item/food/snacks/frozen/icecream, ) - result = /obj/item/reagent_containers/food/snacks/frozen/icecreamsandwich + result = /obj/item/food/snacks/frozen/icecreamsandwich /datum/recipe/microwave/berryicecreamsandwich reagents = list("ice" = 5, "cream" = 5) items = list( - /obj/item/reagent_containers/food/snacks/grown/cherries, - /obj/item/reagent_containers/food/snacks/grown/cherries, - /obj/item/reagent_containers/food/snacks/wafflecone + /obj/item/food/snacks/grown/cherries, + /obj/item/food/snacks/grown/cherries, + /obj/item/food/snacks/wafflecone ) - result = /obj/item/reagent_containers/food/snacks/frozen/berryicecreamsandwich + result = /obj/item/food/snacks/frozen/berryicecreamsandwich /datum/recipe/microwave/sundae reagents = list("cream" = 5) items = list( - /obj/item/reagent_containers/food/snacks/wafflecone, - /obj/item/reagent_containers/food/snacks/grown/cherries, - /obj/item/reagent_containers/food/snacks/grown/banana + /obj/item/food/snacks/wafflecone, + /obj/item/food/snacks/grown/cherries, + /obj/item/food/snacks/grown/banana ) - result = /obj/item/reagent_containers/food/snacks/frozen/sundae + result = /obj/item/food/snacks/frozen/sundae /datum/recipe/microwave/bananatopsicle reagents = list("sugar" = 5, "banana" = 5) items = list( /obj/item/popsicle_stick, - /obj/item/reagent_containers/food/snacks/tofu + /obj/item/food/snacks/tofu ) - result = /obj/item/reagent_containers/food/snacks/frozen/popsicle/bananatop + result = /obj/item/food/snacks/frozen/popsicle/bananatop /datum/recipe/microwave/berrytopsicle reagents = list("sugar" = 5, "berryjuice" = 5) items = list( /obj/item/popsicle_stick, - /obj/item/reagent_containers/food/snacks/tofu + /obj/item/food/snacks/tofu ) - result = /obj/item/reagent_containers/food/snacks/frozen/popsicle/berrytop + result = /obj/item/food/snacks/frozen/popsicle/berrytop /datum/recipe/microwave/pineappletopsicle reagents = list("sugar" = 5, "pineapplejuice" = 5) items = list( /obj/item/popsicle_stick, - /obj/item/reagent_containers/food/snacks/tofu + /obj/item/food/snacks/tofu ) - result = /obj/item/reagent_containers/food/snacks/frozen/popsicle/pineappletop + result = /obj/item/food/snacks/frozen/popsicle/pineappletop /datum/recipe/microwave/licoricecreamsicle reagents = list("sugar" = 2, "blumpkinjuice" = 4, "ice" = 2, "vanilla" = 2, "cream" = 2) items = list( /obj/item/popsicle_stick ) - result = /obj/item/reagent_containers/food/snacks/frozen/popsicle/licoricecream + result = /obj/item/food/snacks/frozen/popsicle/licoricecream /datum/recipe/microwave/orangecreamsicle reagents = list("sugar" = 2, "orangejuice" = 4, "ice" = 2, "vanilla" = 2, "cream" = 2) items = list( /obj/item/popsicle_stick ) - result = /obj/item/reagent_containers/food/snacks/frozen/popsicle/orangecream + result = /obj/item/food/snacks/frozen/popsicle/orangecream /datum/recipe/microwave/berrycreamsicle reagents = list("sugar" = 2, "berryjuice" = 4, "ice" = 2, "vanilla" = 2, "cream" = 2) items = list( /obj/item/popsicle_stick ) - result = /obj/item/reagent_containers/food/snacks/frozen/popsicle/berrycream + result = /obj/item/food/snacks/frozen/popsicle/berrycream /datum/recipe/microwave/frozenpineapplepop items = list( /obj/item/popsicle_stick, - /obj/item/reagent_containers/food/snacks/pineappleslice, - /obj/item/reagent_containers/food/snacks/chocolatebar + /obj/item/food/snacks/pineappleslice, + /obj/item/food/snacks/chocolatebar ) - result = /obj/item/reagent_containers/food/snacks/frozen/popsicle/frozenpineapple + result = /obj/item/food/snacks/frozen/popsicle/frozenpineapple /datum/recipe/microwave/jumboicecream reagents = list("sugar" = 2, "ice" = 2, "vanilla" = 3, "cream" = 2) items = list( /obj/item/popsicle_stick, - /obj/item/reagent_containers/food/snacks/chocolatebar + /obj/item/food/snacks/chocolatebar ) - result = /obj/item/reagent_containers/food/snacks/frozen/popsicle + result = /obj/item/food/snacks/frozen/popsicle /datum/recipe/microwave/seasalticecream reagents = list("sugar" = 5, "sodiumchloride" = 3, "cream" = 5) items = list( /obj/item/popsicle_stick ) - result = /obj/item/reagent_containers/food/snacks/frozen/popsicle/sea_salt + result = /obj/item/food/snacks/frozen/popsicle/sea_salt /datum/recipe/microwave/cornuto reagents = list("ice" = 2, "sugar" = 4, "cream" = 4) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/chocolatebar + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/chocolatebar ) - result = /obj/item/reagent_containers/food/snacks/frozen/cornuto + result = /obj/item/food/snacks/frozen/cornuto /datum/recipe/microwave/honkdae reagents = list("cream" = 5, "ice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/wafflecone, - /obj/item/reagent_containers/food/snacks/grown/cherries, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana, + /obj/item/food/snacks/wafflecone, + /obj/item/food/snacks/grown/cherries, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/banana, /obj/item/clothing/mask/gas/clown_hat ) - result = /obj/item/reagent_containers/food/snacks/frozen/honkdae + result = /obj/item/food/snacks/frozen/honkdae /datum/recipe/microwave/peanutbuttermochi reagents = list("cream" = 5, "rice" = 5, "sugar" = 5, "peanutbutter" = 2) items = list( - /obj/item/reagent_containers/food/snacks/wafflecone + /obj/item/food/snacks/wafflecone ) - result = /obj/item/reagent_containers/food/snacks/frozen/peanutbuttermochi + result = /obj/item/food/snacks/frozen/peanutbuttermochi /datum/recipe/microwave/spacefreezy reagents = list("bluecherryjelly" = 5,"spacemountainwind" = 15) items = list( - /obj/item/reagent_containers/food/snacks/frozen/icecream + /obj/item/food/snacks/frozen/icecream ) - result = /obj/item/reagent_containers/food/snacks/frozen/spacefreezy + result = /obj/item/food/snacks/frozen/spacefreezy /datum/recipe/microwave/snowcone/apple reagents = list("ice" = 15, "applejuice" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/apple + result = /obj/item/food/snacks/frozen/snowcone/apple /datum/recipe/microwave/snowcone/berry reagents = list("ice" = 15, "berryjuice" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/berry + result = /obj/item/food/snacks/frozen/snowcone/berry /datum/recipe/microwave/snowcone/bluecherry reagents = list("ice" = 15, "bluecherryjelly" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/bluecherry + result = /obj/item/food/snacks/frozen/snowcone/bluecherry /datum/recipe/microwave/snowcone/cherry reagents = list("ice" = 15, "cherryjelly" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/cherry + result = /obj/item/food/snacks/frozen/snowcone/cherry /datum/recipe/microwave/snowcone/flavorless reagents = list("ice" = 15) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone + result = /obj/item/food/snacks/frozen/snowcone /datum/recipe/microwave/snowcone/fruitsalad reagents = list("ice" = 15, "orangejuice" = 5, "limejuice" = 5, "lemonjuice" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/fruitsalad + result = /obj/item/food/snacks/frozen/snowcone/fruitsalad /datum/recipe/microwave/snowcone/grape reagents = list("ice" = 15, "grapejuice" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/grape + result = /obj/item/food/snacks/frozen/snowcone/grape /datum/recipe/microwave/snowcone/honey reagents = list("ice" = 15, "honey" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/honey + result = /obj/item/food/snacks/frozen/snowcone/honey /datum/recipe/microwave/snowcone/lemon reagents = list("ice" = 15, "lemonjuice" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/lemon + result = /obj/item/food/snacks/frozen/snowcone/lemon /datum/recipe/microwave/snowcone/lime reagents = list("ice" = 15, "limejuice" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/lime + result = /obj/item/food/snacks/frozen/snowcone/lime /datum/recipe/microwave/snowcone/mime reagents = list("ice" = 15, "nothing" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/mime + result = /obj/item/food/snacks/frozen/snowcone/mime /datum/recipe/microwave/snowcone/orange reagents = list("ice" = 15, "orangejuice" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/orange + result = /obj/item/food/snacks/frozen/snowcone/orange /datum/recipe/microwave/snowcone/pineapple reagents = list("ice" = 15, "pineapplejuice" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/pineapple + result = /obj/item/food/snacks/frozen/snowcone/pineapple /datum/recipe/microwave/snowcone/rainbow reagents = list("ice" = 15, "colorful_reagent" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/rainbow + result = /obj/item/food/snacks/frozen/snowcone/rainbow /datum/recipe/microwave/snowcone/cola reagents = list("ice" = 15, "cola" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/cola + result = /obj/item/food/snacks/frozen/snowcone/cola /datum/recipe/microwave/snowcone/spacemountainwind reagents = list("ice" = 15, "spacemountainwind" = 5) items = list( - /obj/item/reagent_containers/food/drinks/sillycup + /obj/item/reagent_containers/drinks/sillycup ) - result = /obj/item/reagent_containers/food/snacks/frozen/snowcone/spacemountain + result = /obj/item/food/snacks/frozen/snowcone/spacemountain /datum/recipe/microwave/antpopsicle reagents = list("sugar" = 5, "water" = 5, "ants" = 10) items = list( /obj/item/popsicle_stick ) - result = /obj/item/reagent_containers/food/snacks/frozen/popsicle/ant + result = /obj/item/food/snacks/frozen/popsicle/ant /datum/recipe/microwave/notasandwich items = list( - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/breadslice, /obj/item/clothing/mask/fakemoustache, ) - result = /obj/item/reagent_containers/food/snacks/notasandwich + result = /obj/item/food/snacks/notasandwich /datum/recipe/microwave/friedbanana reagents = list("sugar" = 10, "cornoil" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/grown/banana + /obj/item/food/snacks/dough, + /obj/item/food/snacks/grown/banana ) - result = /obj/item/reagent_containers/food/snacks/friedbanana + result = /obj/item/food/snacks/friedbanana /datum/recipe/microwave/stuffing reagents = list("water" = 5, "sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/bread, + /obj/item/food/snacks/sliceable/bread, ) - result = /obj/item/reagent_containers/food/snacks/stuffing + result = /obj/item/food/snacks/stuffing /datum/recipe/microwave/boiledspiderleg reagents = list("water" = 10) items = list( - /obj/item/reagent_containers/food/snacks/monstermeat/spiderleg + /obj/item/food/snacks/monstermeat/spiderleg ) - result = /obj/item/reagent_containers/food/snacks/boiledspiderleg + result = /obj/item/food/snacks/boiledspiderleg /datum/recipe/microwave/spidereggsham reagents = list("sodiumchloride" = 1) items = list( - /obj/item/reagent_containers/food/snacks/monstermeat/spidereggs, - /obj/item/reagent_containers/food/snacks/monstermeat/spidermeat + /obj/item/food/snacks/monstermeat/spidereggs, + /obj/item/food/snacks/monstermeat/spidermeat ) - result = /obj/item/reagent_containers/food/snacks/spidereggsham + result = /obj/item/food/snacks/spidereggsham /datum/recipe/microwave/sashimi reagents = list("soysauce" = 5) items = list( - /obj/item/reagent_containers/food/snacks/monstermeat/spidereggs, - /obj/item/reagent_containers/food/snacks/carpmeat, + /obj/item/food/snacks/monstermeat/spidereggs, + /obj/item/food/snacks/carpmeat, ) - result = /obj/item/reagent_containers/food/snacks/sashimi + result = /obj/item/food/snacks/sashimi /datum/recipe/microwave/mashedtaters reagents = list("gravy" = 5) - items = list(/obj/item/reagent_containers/food/snacks/grown/potato) - result = /obj/item/reagent_containers/food/snacks/mashed_potatoes + items = list(/obj/item/food/snacks/grown/potato) + result = /obj/item/food/snacks/mashed_potatoes ////////////////////////////////////////// // bs12 food port stuff @@ -1343,19 +1343,19 @@ /datum/recipe/microwave/taco items = list( - /obj/item/reagent_containers/food/snacks/doughslice, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/cheesewedge + /obj/item/food/snacks/doughslice, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/cheesewedge ) - result = /obj/item/reagent_containers/food/snacks/taco + result = /obj/item/food/snacks/taco /datum/recipe/microwave/mint_2 reagents = list("sugar" = 5, "frostoil" = 5) - result = /obj/item/reagent_containers/food/snacks/mint + result = /obj/item/food/snacks/mint /datum/recipe/microwave/boiled_shrimp reagents = list("water" = 5) items = list( - /obj/item/reagent_containers/food/snacks/shrimp + /obj/item/food/snacks/shrimp ) - result = /obj/item/reagent_containers/food/snacks/boiled_shrimp + result = /obj/item/food/snacks/boiled_shrimp diff --git a/code/modules/food_and_drinks/recipes/recipes_oven.dm b/code/modules/food_and_drinks/recipes/recipes_oven.dm index a06b87d8883c..e95dad37b108 100644 --- a/code/modules/food_and_drinks/recipes/recipes_oven.dm +++ b/code/modules/food_and_drinks/recipes/recipes_oven.dm @@ -4,209 +4,209 @@ /datum/recipe/oven/bun items = list( - /obj/item/reagent_containers/food/snacks/dough + /obj/item/food/snacks/dough ) - result = /obj/item/reagent_containers/food/snacks/bun + result = /obj/item/food/snacks/bun /datum/recipe/oven/meatbread items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/meatbread + result = /obj/item/food/snacks/sliceable/meatbread /datum/recipe/oven/syntibread items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/meat/syntiflesh, - /obj/item/reagent_containers/food/snacks/meat/syntiflesh, - /obj/item/reagent_containers/food/snacks/meat/syntiflesh, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/meat/syntiflesh, + /obj/item/food/snacks/meat/syntiflesh, + /obj/item/food/snacks/meat/syntiflesh, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/meatbread + result = /obj/item/food/snacks/sliceable/meatbread /datum/recipe/oven/xenomeatbread items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/monstermeat/xenomeat, - /obj/item/reagent_containers/food/snacks/monstermeat/xenomeat, - /obj/item/reagent_containers/food/snacks/monstermeat/xenomeat, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/monstermeat/xenomeat, + /obj/item/food/snacks/monstermeat/xenomeat, + /obj/item/food/snacks/monstermeat/xenomeat, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread + result = /obj/item/food/snacks/sliceable/xenomeatbread /datum/recipe/oven/bananabread reagents = list("milk" = 5, "sugar" = 15) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/grown/banana + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/grown/banana ) - result = /obj/item/reagent_containers/food/snacks/sliceable/bananabread + result = /obj/item/food/snacks/sliceable/bananabread /datum/recipe/oven/banarnarbread reagents = list("milk" = 5, "sugar" = 5, "blood" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/grown/banana + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/grown/banana ) - result = /obj/item/reagent_containers/food/snacks/sliceable/banarnarbread + result = /obj/item/food/snacks/sliceable/banarnarbread /datum/recipe/oven/muffin reagents = list("milk" = 5, "sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, + /obj/item/food/snacks/dough, ) - result = /obj/item/reagent_containers/food/snacks/muffin + result = /obj/item/food/snacks/muffin /datum/recipe/oven/carrotcake reagents = list("milk" = 5, "sugar" = 15) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/grown/carrot + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/grown/carrot ) - result = /obj/item/reagent_containers/food/snacks/sliceable/carrotcake + result = /obj/item/food/snacks/sliceable/carrotcake /datum/recipe/oven/cheesecake reagents = list("milk" = 5, "sugar" = 15) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/cheesecake + result = /obj/item/food/snacks/sliceable/cheesecake /datum/recipe/oven/plaincake reagents = list("milk" = 5, "sugar" = 15) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/plaincake + result = /obj/item/food/snacks/sliceable/plaincake /datum/recipe/oven/clowncake reagents = list("milk" = 5, "sugar" = 15) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/frozen/sundae, - /obj/item/reagent_containers/food/snacks/frozen/sundae, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/frozen/sundae, + /obj/item/food/snacks/frozen/sundae, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/banana ) - result = /obj/item/reagent_containers/food/snacks/sliceable/clowncake + result = /obj/item/food/snacks/sliceable/clowncake /datum/recipe/oven/meatpie items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/meat, + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/meat, ) - result = /obj/item/reagent_containers/food/snacks/meatpie + result = /obj/item/food/snacks/meatpie /datum/recipe/oven/tofupie items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/tofu, + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/tofu, ) - result = /obj/item/reagent_containers/food/snacks/tofupie + result = /obj/item/food/snacks/tofupie /datum/recipe/oven/xemeatpie items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/monstermeat/xenomeat + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/monstermeat/xenomeat ) - result = /obj/item/reagent_containers/food/snacks/xemeatpie + result = /obj/item/food/snacks/xemeatpie /datum/recipe/oven/pie reagents = list("sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/banana + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/banana ) - result = /obj/item/reagent_containers/food/snacks/pie + result = /obj/item/food/snacks/pie /datum/recipe/oven/cherrypie reagents = list("sugar" = 10) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/cherries + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/cherries ) - result = /obj/item/reagent_containers/food/snacks/cherrypie + result = /obj/item/food/snacks/cherrypie /datum/recipe/oven/berryclafoutis items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/berries + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/berries ) - result = /obj/item/reagent_containers/food/snacks/berryclafoutis + result = /obj/item/food/snacks/berryclafoutis /datum/recipe/oven/tofubread items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/tofu, + /obj/item/food/snacks/tofu, + /obj/item/food/snacks/tofu, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/tofubread + result = /obj/item/food/snacks/sliceable/tofubread /datum/recipe/oven/loadedbakedpotato items = list( - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/potato + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/potato ) - result = /obj/item/reagent_containers/food/snacks/loadedbakedpotato + result = /obj/item/food/snacks/loadedbakedpotato /datum/recipe/oven/yakiimo items = list( - /obj/item/reagent_containers/food/snacks/grown/potato/sweet + /obj/item/food/snacks/grown/potato/sweet ) - result = /obj/item/reagent_containers/food/snacks/yakiimo + result = /obj/item/food/snacks/yakiimo ////cookies by Ume /datum/recipe/oven/cookies items = list( - /obj/item/reagent_containers/food/snacks/rawcookies/chocochips, + /obj/item/food/snacks/rawcookies/chocochips, ) result = /obj/item/storage/bag/tray/cookies_tray /datum/recipe/oven/sugarcookies items = list( - /obj/item/reagent_containers/food/snacks/rawcookies, + /obj/item/food/snacks/rawcookies, ) result = /obj/item/storage/bag/tray/cookies_tray/sugarcookie @@ -216,15 +216,15 @@ /datum/recipe/oven/fortunecookie reagents = list("sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/doughslice, + /obj/item/food/snacks/doughslice, /obj/item/paper, ) - result = /obj/item/reagent_containers/food/snacks/fortunecookie + result = /obj/item/food/snacks/fortunecookie /datum/recipe/oven/fortunecookie/make_food(obj/container) var/obj/item/paper/P = locate() in container P.loc = null //So we don't delete the paper while cooking the cookie - var/obj/item/reagent_containers/food/snacks/fortunecookie/being_cooked = ..() + var/obj/item/food/snacks/fortunecookie/being_cooked = ..() if(P.info) //If there's anything written on the paper, just move it into the fortune cookie P.forceMove(being_cooked) //Prevents the oven deleting our paper being_cooked.trash = P //so the paper is left behind as trash without special-snowflake(TM Nodrak) code ~carn @@ -235,367 +235,367 @@ // Pizzas /datum/recipe/oven/pizzamargherita items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/margheritapizza + result = /obj/item/food/snacks/sliceable/pizza/margheritapizza /datum/recipe/oven/meatpizza items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/tomato + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/tomato ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza + result = /obj/item/food/snacks/sliceable/pizza/meatpizza /datum/recipe/oven/mushroompizza items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/grown/tomato + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/grown/tomato ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza + result = /obj/item/food/snacks/sliceable/pizza/mushroompizza /datum/recipe/oven/vegetablepizza items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/eggplant, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/grown/corn, - /obj/item/reagent_containers/food/snacks/grown/tomato + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/eggplant, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/grown/corn, + /obj/item/food/snacks/grown/tomato ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza + result = /obj/item/food/snacks/sliceable/pizza/vegetablepizza /datum/recipe/oven/hawaiianpizza items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/pineappleslice, - /obj/item/reagent_containers/food/snacks/pineappleslice, - /obj/item/reagent_containers/food/snacks/meat, + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/pineappleslice, + /obj/item/food/snacks/pineappleslice, + /obj/item/food/snacks/meat, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/hawaiianpizza + result = /obj/item/food/snacks/sliceable/pizza/hawaiianpizza /datum/recipe/oven/macncheesepizza items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/macncheese, + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/macncheese, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/macpizza + result = /obj/item/food/snacks/sliceable/pizza/macpizza /datum/recipe/oven/cheesepizza items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/cheesepizza + result = /obj/item/food/snacks/sliceable/pizza/cheesepizza /datum/recipe/oven/pepperonipizza items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/sausage + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/sausage ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/pepperonipizza + result = /obj/item/food/snacks/sliceable/pizza/pepperonipizza /datum/recipe/oven/donkpocketpizza items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/donkpocket, - /obj/item/reagent_containers/food/snacks/donkpocket + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/donkpocket, + /obj/item/food/snacks/donkpocket ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/donkpocketpizza + result = /obj/item/food/snacks/sliceable/pizza/donkpocketpizza /datum/recipe/oven/dankpizza items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/cannabis, - /obj/item/reagent_containers/food/snacks/grown/cannabis, - /obj/item/reagent_containers/food/snacks/grown/cannabis, - /obj/item/reagent_containers/food/snacks/grown/cannabis + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/cannabis, + /obj/item/food/snacks/grown/cannabis, + /obj/item/food/snacks/grown/cannabis, + /obj/item/food/snacks/grown/cannabis ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/dankpizza + result = /obj/item/food/snacks/sliceable/pizza/dankpizza /datum/recipe/oven/firecrackerpizza reagents = list("capsaicin" = 5) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/chili, - /obj/item/reagent_containers/food/snacks/grown/chili + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/chili, + /obj/item/food/snacks/grown/chili ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/firecrackerpizza + result = /obj/item/food/snacks/sliceable/pizza/firecrackerpizza /datum/recipe/oven/pestopizza reagents = list("wasabi" = 5) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/cheesewedge + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/cheesewedge ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/pestopizza + result = /obj/item/food/snacks/sliceable/pizza/pestopizza /datum/recipe/oven/garlicpizza reagents = list("garlic" = 5) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/garlic, - /obj/item/reagent_containers/food/snacks/grown/garlic, - /obj/item/reagent_containers/food/snacks/cheesewedge + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/garlic, + /obj/item/food/snacks/grown/garlic, + /obj/item/food/snacks/cheesewedge ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/garlicpizza + result = /obj/item/food/snacks/sliceable/pizza/garlicpizza /datum/recipe/oven/amanita_pie items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/mushroom/amanita + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/mushroom/amanita ) - result = /obj/item/reagent_containers/food/snacks/amanita_pie + result = /obj/item/food/snacks/amanita_pie /datum/recipe/oven/plump_pie items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/mushroom/plumphelmet + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/mushroom/plumphelmet ) - result = /obj/item/reagent_containers/food/snacks/plump_pie + result = /obj/item/food/snacks/plump_pie /datum/recipe/oven/plumphelmetbiscuit reagents = list("water" = 5, "flour" = 5) - items = list(/obj/item/reagent_containers/food/snacks/grown/mushroom/plumphelmet) - result = /obj/item/reagent_containers/food/snacks/plumphelmetbiscuit + items = list(/obj/item/food/snacks/grown/mushroom/plumphelmet) + result = /obj/item/food/snacks/plumphelmetbiscuit /datum/recipe/oven/creamcheesebread items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/creamcheesebread + result = /obj/item/food/snacks/sliceable/creamcheesebread /datum/recipe/oven/baguette reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, ) - result = /obj/item/reagent_containers/food/snacks/baguette + result = /obj/item/food/snacks/baguette /datum/recipe/oven/croissant items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/egg + /obj/item/food/snacks/dough, + /obj/item/food/snacks/egg ) reagents = list("sodiumchloride" = 1, "milk" = 5, "sugar" = 5) - result = /obj/item/reagent_containers/food/snacks/croissant + result = /obj/item/food/snacks/croissant /datum/recipe/oven/birthdaycake reagents = list("milk" = 5, "sugar" = 15, "vanilla" = 10) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, /obj/item/candle, /obj/item/candle, /obj/item/candle, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/birthdaycake + result = /obj/item/food/snacks/sliceable/birthdaycake /datum/recipe/oven/bread items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/egg + /obj/item/food/snacks/dough, + /obj/item/food/snacks/egg ) - result = /obj/item/reagent_containers/food/snacks/sliceable/bread + result = /obj/item/food/snacks/sliceable/bread /datum/recipe/oven/bread/make_food(obj/container) - var/obj/item/reagent_containers/food/snacks/sliceable/bread/being_cooked = ..() + var/obj/item/food/snacks/sliceable/bread/being_cooked = ..() being_cooked.reagents.del_reagent("egg") return being_cooked /datum/recipe/oven/applepie items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/apple + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/apple ) - result = /obj/item/reagent_containers/food/snacks/applepie + result = /obj/item/food/snacks/applepie /datum/recipe/oven/applecake reagents = list("milk" = 5, "sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/grown/apple, - /obj/item/reagent_containers/food/snacks/grown/apple + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/grown/apple, + /obj/item/food/snacks/grown/apple ) - result = /obj/item/reagent_containers/food/snacks/sliceable/applecake + result = /obj/item/food/snacks/sliceable/applecake /datum/recipe/oven/orangecake reagents = list("milk" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/grown/citrus/orange, - /obj/item/reagent_containers/food/snacks/grown/citrus/orange + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/grown/citrus/orange, + /obj/item/food/snacks/grown/citrus/orange ) - result = /obj/item/reagent_containers/food/snacks/sliceable/orangecake + result = /obj/item/food/snacks/sliceable/orangecake /datum/recipe/oven/bananacake reagents = list("milk" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/banana ) - result = /obj/item/reagent_containers/food/snacks/sliceable/bananacake + result = /obj/item/food/snacks/sliceable/bananacake /datum/recipe/oven/limecake reagents = list("milk" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/grown/citrus/lime, - /obj/item/reagent_containers/food/snacks/grown/citrus/lime + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/grown/citrus/lime, + /obj/item/food/snacks/grown/citrus/lime ) - result = /obj/item/reagent_containers/food/snacks/sliceable/limecake + result = /obj/item/food/snacks/sliceable/limecake /datum/recipe/oven/lemoncake reagents = list("milk" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/grown/citrus/lemon, - /obj/item/reagent_containers/food/snacks/grown/citrus/lemon + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/grown/citrus/lemon, + /obj/item/food/snacks/grown/citrus/lemon ) - result = /obj/item/reagent_containers/food/snacks/sliceable/lemoncake + result = /obj/item/food/snacks/sliceable/lemoncake /datum/recipe/oven/chocolatecake reagents = list("milk" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/chocolatebar, - /obj/item/reagent_containers/food/snacks/chocolatebar, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/chocolatebar, + /obj/item/food/snacks/chocolatebar, ) - result = /obj/item/reagent_containers/food/snacks/sliceable/chocolatecake + result = /obj/item/food/snacks/sliceable/chocolatecake /datum/recipe/oven/braincake reagents = list("milk" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/dough, /obj/item/organ/internal/brain ) - result = /obj/item/reagent_containers/food/snacks/sliceable/braincake + result = /obj/item/food/snacks/sliceable/braincake /datum/recipe/oven/pumpkinpie reagents = list("milk" = 5, "sugar" = 5) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/grown/pumpkin + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/grown/pumpkin ) - result = /obj/item/reagent_containers/food/snacks/sliceable/pumpkinpie + result = /obj/item/food/snacks/sliceable/pumpkinpie /datum/recipe/oven/appletart reagents = list("sugar" = 5, "milk" = 5, "flour" = 10) items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/grown/apple/gold + /obj/item/food/snacks/egg, + /obj/item/food/snacks/grown/apple/gold ) - result = /obj/item/reagent_containers/food/snacks/appletart + result = /obj/item/food/snacks/appletart /datum/recipe/oven/appletart/make_food(obj/container) - var/obj/item/reagent_containers/food/snacks/appletart/being_cooked = ..() + var/obj/item/food/snacks/appletart/being_cooked = ..() being_cooked.reagents.del_reagent("egg") return being_cooked /datum/recipe/oven/cracker reagents = list("sodiumchloride" = 1) items = list( - /obj/item/reagent_containers/food/snacks/doughslice + /obj/item/food/snacks/doughslice ) - result = /obj/item/reagent_containers/food/snacks/cracker + result = /obj/item/food/snacks/cracker /datum/recipe/oven/sugarcookie/make_food(obj/container) - var/obj/item/reagent_containers/food/snacks/sugarcookie/being_cooked = ..() + var/obj/item/food/snacks/sugarcookie/being_cooked = ..() being_cooked.reagents.del_reagent("egg") return being_cooked /datum/recipe/oven/flatbread items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough + /obj/item/food/snacks/sliceable/flatdough ) - result = /obj/item/reagent_containers/food/snacks/flatbread + result = /obj/item/food/snacks/flatbread /datum/recipe/oven/toastedsandwich items = list( - /obj/item/reagent_containers/food/snacks/sandwich + /obj/item/food/snacks/sandwich ) - result = /obj/item/reagent_containers/food/snacks/toastedsandwich + result = /obj/item/food/snacks/toastedsandwich /datum/recipe/oven/turkey // Magic items = list( - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/stuffing, - /obj/item/reagent_containers/food/snacks/stuffing + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/stuffing, + /obj/item/food/snacks/stuffing ) - result = /obj/item/reagent_containers/food/snacks/sliceable/turkey + result = /obj/item/food/snacks/sliceable/turkey /datum/recipe/oven/tofurkey items = list( - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/tofu, - /obj/item/reagent_containers/food/snacks/stuffing, + /obj/item/food/snacks/tofu, + /obj/item/food/snacks/tofu, + /obj/item/food/snacks/stuffing, ) - result = /obj/item/reagent_containers/food/snacks/tofurkey + result = /obj/item/food/snacks/tofurkey /datum/recipe/oven/lasagna items = list( - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/dough + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/dough ) - result = /obj/item/reagent_containers/food/snacks/lasagna + result = /obj/item/food/snacks/lasagna diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm index c13c81bb5ab0..5aaf7023d7fc 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm @@ -11,11 +11,11 @@ /datum/crafting_recipe/sandwich name = "Sandwich" reqs = list( - /obj/item/reagent_containers/food/snacks/meatsteak = 1, - /obj/item/reagent_containers/food/snacks/breadslice = 2, - /obj/item/reagent_containers/food/snacks/cheesewedge = 1, + /obj/item/food/snacks/meatsteak = 1, + /obj/item/food/snacks/breadslice = 2, + /obj/item/food/snacks/cheesewedge = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/sandwich) + result = list(/obj/item/food/snacks/sandwich) category = CAT_FOOD subcategory = CAT_SANDWICH @@ -23,9 +23,9 @@ name = "Slime Jelly Sandwich" reqs = list( /datum/reagent/slimejelly = 5, - /obj/item/reagent_containers/food/snacks/breadslice = 2, + /obj/item/food/snacks/breadslice = 2, ) - result = list(/obj/item/reagent_containers/food/snacks/jellysandwich/slime) + result = list(/obj/item/food/snacks/jellysandwich/slime) category = CAT_FOOD subcategory = CAT_SANDWICH @@ -33,9 +33,9 @@ name = "Cherry Jelly Sandwich" reqs = list( /datum/reagent/consumable/cherryjelly = 5, - /obj/item/reagent_containers/food/snacks/breadslice = 2, + /obj/item/food/snacks/breadslice = 2, ) - result = list(/obj/item/reagent_containers/food/snacks/jellysandwich/cherry) + result = list(/obj/item/food/snacks/jellysandwich/cherry) category = CAT_FOOD subcategory = CAT_SANDWICH @@ -43,9 +43,9 @@ name = "Slime Jelly Burger" reqs = list( /datum/reagent/slimejelly = 5, - /obj/item/reagent_containers/food/snacks/bun = 1, + /obj/item/food/snacks/bun = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/burger/jelly/slime) + result = list(/obj/item/food/snacks/burger/jelly/slime) category = CAT_FOOD subcategory = CAT_SANDWICH @@ -53,9 +53,9 @@ name = "Cherry Jelly Burger" reqs = list( /datum/reagent/consumable/cherryjelly = 5, - /obj/item/reagent_containers/food/snacks/bun = 1, + /obj/item/food/snacks/bun = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/burger/jelly/cherry) + result = list(/obj/item/food/snacks/burger/jelly/cherry) category = CAT_FOOD subcategory = CAT_SANDWICH @@ -63,208 +63,208 @@ name = "Home run baseball burger" reqs = list( /obj/item/melee/baseball_bat = 1, - /obj/item/reagent_containers/food/snacks/bun = 1, + /obj/item/food/snacks/bun = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/burger/baseball) + result = list(/obj/item/food/snacks/burger/baseball) category = CAT_FOOD subcategory = CAT_SANDWICH /datum/crafting_recipe/notasandwich name = "not-a-sandwich" reqs = list( - /obj/item/reagent_containers/food/snacks/breadslice = 2, + /obj/item/food/snacks/breadslice = 2, /obj/item/clothing/mask/fakemoustache = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/notasandwich) + result = list(/obj/item/food/snacks/notasandwich) category = CAT_FOOD subcategory = CAT_SANDWICH /datum/crafting_recipe/sushi_Ebi name = "Ebi Sushi" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, - /obj/item/reagent_containers/food/snacks/boiled_shrimp = 1, + /obj/item/food/snacks/boiledrice = 1, + /obj/item/food/snacks/boiled_shrimp = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/sushi_Ebi) + result = list(/obj/item/food/snacks/sushi_Ebi) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/Ebi_maki name = "Ebi Maki Roll" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, - /obj/item/reagent_containers/food/snacks/boiled_shrimp = 4, + /obj/item/food/snacks/boiledrice = 1, + /obj/item/food/snacks/boiled_shrimp = 4, ) pathtools = list(/obj/item/kitchen/sushimat) - result = list(/obj/item/reagent_containers/food/snacks/sliceable/Ebi_maki) + result = list(/obj/item/food/snacks/sliceable/Ebi_maki) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/sushi_Ikura name = "Ikura Sushi" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, + /obj/item/food/snacks/boiledrice = 1, /obj/item/fish_eggs/salmon = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/sushi_Ikura) + result = list(/obj/item/food/snacks/sushi_Ikura) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/Ikura_maki name = "Ikura Maki Roll" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, + /obj/item/food/snacks/boiledrice = 1, /obj/item/fish_eggs/salmon = 4, ) pathtools = list(/obj/item/kitchen/sushimat) - result = list(/obj/item/reagent_containers/food/snacks/sliceable/Ikura_maki) + result = list(/obj/item/food/snacks/sliceable/Ikura_maki) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/sushi_Inari name = "Inari Sushi" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, - /obj/item/reagent_containers/food/snacks/fried_tofu = 1, + /obj/item/food/snacks/boiledrice = 1, + /obj/item/food/snacks/fried_tofu = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/sushi_Inari) + result = list(/obj/item/food/snacks/sushi_Inari) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/Inari_maki name = "Inari Maki Roll" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, - /obj/item/reagent_containers/food/snacks/fried_tofu = 4, + /obj/item/food/snacks/boiledrice = 1, + /obj/item/food/snacks/fried_tofu = 4, ) pathtools = list(/obj/item/kitchen/sushimat) - result = list(/obj/item/reagent_containers/food/snacks/sliceable/Inari_maki) + result = list(/obj/item/food/snacks/sliceable/Inari_maki) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/sushi_Sake name = "Sake Sushi" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, - /obj/item/reagent_containers/food/snacks/salmonmeat = 1, + /obj/item/food/snacks/boiledrice = 1, + /obj/item/food/snacks/salmonmeat = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/sushi_Sake) + result = list(/obj/item/food/snacks/sushi_Sake) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/Sake_maki name = "Sake Maki Roll" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, - /obj/item/reagent_containers/food/snacks/salmonmeat = 4, + /obj/item/food/snacks/boiledrice = 1, + /obj/item/food/snacks/salmonmeat = 4, ) pathtools = list(/obj/item/kitchen/sushimat) - result = list(/obj/item/reagent_containers/food/snacks/sliceable/Sake_maki) + result = list(/obj/item/food/snacks/sliceable/Sake_maki) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/sushi_SmokedSalmon name = "Smoked Salmon Sushi" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, - /obj/item/reagent_containers/food/snacks/salmonsteak = 1, + /obj/item/food/snacks/boiledrice = 1, + /obj/item/food/snacks/salmonsteak = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/sushi_SmokedSalmon) + result = list(/obj/item/food/snacks/sushi_SmokedSalmon) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/SmokedSalmon_maki name = "Smoked Salmon Maki Roll" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, - /obj/item/reagent_containers/food/snacks/salmonsteak = 4, + /obj/item/food/snacks/boiledrice = 1, + /obj/item/food/snacks/salmonsteak = 4, ) pathtools = list(/obj/item/kitchen/sushimat) - result = list(/obj/item/reagent_containers/food/snacks/sliceable/SmokedSalmon_maki) + result = list(/obj/item/food/snacks/sliceable/SmokedSalmon_maki) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/sushi_Masago name = "Masago Sushi" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, + /obj/item/food/snacks/boiledrice = 1, /obj/item/fish_eggs/goldfish = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/sushi_Masago) + result = list(/obj/item/food/snacks/sushi_Masago) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/Masago_maki name = "Masago Maki Roll" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, + /obj/item/food/snacks/boiledrice = 1, /obj/item/fish_eggs/goldfish = 4, ) pathtools = list(/obj/item/kitchen/sushimat) - result = list(/obj/item/reagent_containers/food/snacks/sliceable/Masago_maki) + result = list(/obj/item/food/snacks/sliceable/Masago_maki) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/sushi_Tobiko name = "Tobiko Sushi" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, + /obj/item/food/snacks/boiledrice = 1, /obj/item/fish_eggs/shark = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/sushi_Tobiko) + result = list(/obj/item/food/snacks/sushi_Tobiko) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/Tobiko_maki name = "Tobiko Maki Roll" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, + /obj/item/food/snacks/boiledrice = 1, /obj/item/fish_eggs/shark = 4, ) pathtools = list(/obj/item/kitchen/sushimat) - result = list(/obj/item/reagent_containers/food/snacks/sliceable/Tobiko_maki) + result = list(/obj/item/food/snacks/sliceable/Tobiko_maki) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/sushi_TobikoEgg name = "Tobiko and Egg Sushi" reqs = list( - /obj/item/reagent_containers/food/snacks/sushi_Tobiko = 1, - /obj/item/reagent_containers/food/snacks/egg = 1, + /obj/item/food/snacks/sushi_Tobiko = 1, + /obj/item/food/snacks/egg = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/sushi_TobikoEgg) + result = list(/obj/item/food/snacks/sushi_TobikoEgg) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/TobikoEgg_maki name = "Tobiko and Egg Maki Roll" reqs = list( - /obj/item/reagent_containers/food/snacks/sushi_Tobiko = 4, - /obj/item/reagent_containers/food/snacks/egg = 4, + /obj/item/food/snacks/sushi_Tobiko = 4, + /obj/item/food/snacks/egg = 4, ) pathtools = list(/obj/item/kitchen/sushimat) - result = list(/obj/item/reagent_containers/food/snacks/sliceable/TobikoEgg_maki) + result = list(/obj/item/food/snacks/sliceable/TobikoEgg_maki) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/sushi_Tai name = "Tai Sushi" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, - /obj/item/reagent_containers/food/snacks/catfishmeat = 1, + /obj/item/food/snacks/boiledrice = 1, + /obj/item/food/snacks/catfishmeat = 1, ) - result = list(/obj/item/reagent_containers/food/snacks/sushi_Tai) + result = list(/obj/item/food/snacks/sushi_Tai) category = CAT_FOOD subcategory = CAT_SUSHI /datum/crafting_recipe/Tai_maki name = "Tai Maki Roll" reqs = list( - /obj/item/reagent_containers/food/snacks/boiledrice = 1, - /obj/item/reagent_containers/food/snacks/catfishmeat = 4, + /obj/item/food/snacks/boiledrice = 1, + /obj/item/food/snacks/catfishmeat = 4, ) pathtools = list(/obj/item/kitchen/sushimat) - result = list(/obj/item/reagent_containers/food/snacks/sliceable/Tai_maki) + result = list(/obj/item/food/snacks/sliceable/Tai_maki) category = CAT_FOOD subcategory = CAT_SUSHI @@ -278,8 +278,8 @@ reqs = list( /obj/item/organ/internal/brain = 1, /obj/item/organ/internal/heart = 1, - /obj/item/reagent_containers/food/snacks/sliceable/birthdaycake = 1, - /obj/item/reagent_containers/food/snacks/meat = 3, + /obj/item/food/snacks/sliceable/birthdaycake = 1, + /obj/item/food/snacks/meat = 3, /datum/reagent/blood = 30, /datum/reagent/consumable/sprinkles = 5, /datum/reagent/teslium = 1, diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 9a64098491b4..4ef0b8ddc332 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -354,7 +354,6 @@ dat += "Which card will you remove next?
" dat += "Turn the hand over" var/datum/browser/popup = new(user, "cardhand", "Hand of Cards", 400, 240) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) popup.set_content(dat) popup.open() diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm index 57a5eb504ed5..20919459e93b 100644 --- a/code/modules/hydroponics/beekeeping/beebox.dm +++ b/code/modules/hydroponics/beekeeping/beebox.dm @@ -95,7 +95,7 @@ if(queen_bee) if(bee_resources >= BEE_RESOURCE_HONEYCOMB_COST && honeycombs.len < get_max_honeycomb()) bee_resources = max(bee_resources-BEE_RESOURCE_HONEYCOMB_COST, 0) - var/obj/item/reagent_containers/food/snacks/honeycomb/HC = new(src) + var/obj/item/food/snacks/honeycomb/HC = new(src) if(queen_bee.beegent) HC.set_reagent(queen_bee.beegent.id) honeycombs += HC @@ -240,7 +240,7 @@ var/amtH = HF.honeycomb_capacity var/fallen = 0 while(honeycombs.len && amtH) //let's pretend you always grab the frame with the most honeycomb on it - var/obj/item/reagent_containers/food/snacks/honeycomb/HC = pick_n_take(honeycombs) + var/obj/item/food/snacks/honeycomb/HC = pick_n_take(honeycombs) if(HC) HC.forceMove(get_turf(src)) amtH-- diff --git a/code/modules/hydroponics/beekeeping/honeycomb.dm b/code/modules/hydroponics/beekeeping/honeycomb.dm index ce9d923f43cb..7f27bdb9841b 100644 --- a/code/modules/hydroponics/beekeeping/honeycomb.dm +++ b/code/modules/hydroponics/beekeeping/honeycomb.dm @@ -1,24 +1,20 @@ -/obj/item/reagent_containers/food/snacks/honeycomb +/obj/item/food/snacks/honeycomb name = "honeycomb" desc = "A hexagonal mesh of honeycomb." icon = 'icons/obj/hydroponics/harvest.dmi' icon_state = "honeycomb" - possible_transfer_amounts = null - disease_amount = 0 volume = 10 - amount_per_transfer_from_this = 0 - visible_transfer_rate = FALSE list_reagents = list("honey" = 5) var/honey_color = "" -/obj/item/reagent_containers/food/snacks/honeycomb/Initialize(mapload) +/obj/item/food/snacks/honeycomb/Initialize(mapload) . = ..() pixel_x = rand(8,-8) pixel_y = rand(8,-8) update_icon(UPDATE_OVERLAYS) -/obj/item/reagent_containers/food/snacks/honeycomb/update_overlays() +/obj/item/food/snacks/honeycomb/update_overlays() . = ..() var/image/honey if(honey_color) @@ -29,7 +25,7 @@ . += honey -/obj/item/reagent_containers/food/snacks/honeycomb/proc/set_reagent(reagent) +/obj/item/food/snacks/honeycomb/proc/set_reagent(reagent) var/datum/reagent/R = GLOB.chemical_reagents_list[reagent] if(istype(R)) name = "honeycomb ([R.name])" diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 447083963f48..24a936cbb3c1 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -127,7 +127,7 @@ return var/obj/item/storage/bag/plants/PB = O - for(var/obj/item/reagent_containers/food/snacks/grown/G in PB.contents) + for(var/obj/item/food/snacks/grown/G in PB.contents) if(length(stored_plants) >= max_storable_plants) break PB.remove_from_storage(G, src) @@ -141,7 +141,7 @@ SStgui.update_uis(src) return TRUE - else if(istype(O, /obj/item/reagent_containers/food/snacks/grown)) + else if(istype(O, /obj/item/food/snacks/grown)) if(length(stored_plants) >= max_storable_plants) to_chat(user, "[src] can't hold any more plants!") return @@ -166,7 +166,7 @@ files.AddDesign2Known(D.blueprint) processing = FALSE - update_ui_product_list() + update_ui_product_list(user) return TRUE else to_chat(user, "You cannot put this in [name]!") @@ -174,7 +174,7 @@ /** * Builds/Updates the `product_list` used by the UI. */ -/obj/machinery/biogenerator/proc/update_ui_product_list() +/obj/machinery/biogenerator/proc/update_ui_product_list(mob/user) product_list = list() for(var/category in categories) product_list[category] = list() @@ -190,7 +190,8 @@ "cost" = D.materials[MAT_BIOMASS] / efficiency ) - SStgui.update_uis(src, update_static_data = TRUE) + update_static_data(user) + SStgui.update_uis(src) /obj/machinery/biogenerator/attack_hand(mob/user) if(..()) @@ -200,10 +201,13 @@ /obj/machinery/biogenerator/attack_ghost(mob/user) ui_interact(user) -/obj/machinery/biogenerator/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/biogenerator/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/biogenerator/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Biogenerator", "Biogenerator", 390, 600, master_ui, state) + ui = new(user, src, "Biogenerator", "Biogenerator") ui.set_autoupdate(FALSE) ui.open() diff --git a/code/modules/hydroponics/compost_bin.dm b/code/modules/hydroponics/compost_bin.dm index 18519207f6ba..50ff4c918da7 100644 --- a/code/modules/hydroponics/compost_bin.dm +++ b/code/modules/hydroponics/compost_bin.dm @@ -40,7 +40,7 @@ return default_deconstruction_crowbar(user, I, ignore_panel = TRUE) // Accepts inserted plants and converts them to biomass -/obj/machinery/compost_bin/proc/make_biomass(obj/item/reagent_containers/food/snacks/grown/O) +/obj/machinery/compost_bin/proc/make_biomass(obj/item/food/snacks/grown/O) // calculate biomass from plant nutriment and plant matter var/plant_biomass = O.reagents.get_reagent_amount("nutriment") + O.reagents.get_reagent_amount("plantmatter") biomass += clamp(plant_biomass * 10, 1, biomass_capacity - biomass) @@ -58,7 +58,7 @@ return var/obj/item/storage/bag/plants/PB = O - for(var/obj/item/reagent_containers/food/snacks/grown/G in PB.contents) + for(var/obj/item/food/snacks/grown/G in PB.contents) PB.remove_from_storage(G, src) make_biomass(G) @@ -74,7 +74,7 @@ update_icon_state() return TRUE - if(istype(O, /obj/item/reagent_containers/food/snacks/grown)) + if(istype(O, /obj/item/food/snacks/grown)) if(biomass >= biomass_capacity) to_chat(user, "[src] can't hold any more plants!") return @@ -118,10 +118,13 @@ /obj/machinery/compost_bin/attack_hand(mob/user) ui_interact(user) -/obj/machinery/compost_bin/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/compost_bin/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/compost_bin/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "CompostBin", "Compost Bin", 390, 200, master_ui, state) + ui = new(user, src, "CompostBin", "Compost Bin") ui.set_autoupdate(FALSE) ui.open() diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm index ef4b978936f6..222525119560 100644 --- a/code/modules/hydroponics/fermenting_barrel.dm +++ b/code/modules/hydroponics/fermenting_barrel.dm @@ -19,7 +19,7 @@ . = ..() . += "It is currently [open ? "open, letting you pour liquids in." : "closed, letting you draw liquids from the tap."] " -/obj/structure/fermenting_barrel/proc/makeWine(obj/item/reagent_containers/food/snacks/grown/G) +/obj/structure/fermenting_barrel/proc/makeWine(obj/item/food/snacks/grown/G) if(G.reagents) G.reagents.trans_to(src, G.reagents.total_volume) var/amount = G.seed.potency / 4 @@ -39,7 +39,7 @@ playsound(src, 'sound/effects/bubbles.ogg', 50, TRUE) /obj/structure/fermenting_barrel/attackby(obj/item/I, mob/user, params) - var/obj/item/reagent_containers/food/snacks/grown/G = I + var/obj/item/food/snacks/grown/G = I if(istype(G)) if(!G.can_distill) to_chat(user, "You can't distill this into anything...") diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index de80880e5712..7d10426d9ed5 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -142,10 +142,13 @@ /obj/machinery/plantgenes/attack_ghost(mob/user) ui_interact(user) -/obj/machinery/plantgenes/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/plantgenes/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/plantgenes/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "GeneModder", name, 500, 700, master_ui, state) + ui = new(user, src, "GeneModder", name) ui.open() /obj/machinery/plantgenes/ui_data(mob/user) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 2e40c78ed7ec..eb3b7576058e 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -4,7 +4,7 @@ // *********************************************************** // Base type. Subtypes are found in /grown dir. -/obj/item/reagent_containers/food/snacks/grown +/obj/item/food/snacks/grown icon = 'icons/obj/hydroponics/harvest.dmi' var/obj/item/seeds/seed = null // type path, gets converted to item on New(). It's safe to assume it's always a seed item. var/plantname = "" @@ -18,7 +18,7 @@ resistance_flags = FLAMMABLE origin_tech = "biotech=1" -/obj/item/reagent_containers/food/snacks/grown/Initialize(mapload, obj/item/seeds/new_seed = null) +/obj/item/food/snacks/grown/Initialize(mapload, obj/item/seeds/new_seed = null) . = ..() if(!tastes) tastes = list("[name]" = 1) @@ -45,25 +45,25 @@ if(seed.variant) name += " \[[seed.variant]]" -/obj/item/reagent_containers/food/snacks/grown/Destroy() +/obj/item/food/snacks/grown/Destroy() QDEL_NULL(seed) return ..() -/obj/item/reagent_containers/food/snacks/grown/proc/add_juice() +/obj/item/food/snacks/grown/proc/add_juice() if(reagents) if(bitesize_mod) bitesize = 1 + round(reagents.total_volume / bitesize_mod) return 1 return 0 -/obj/item/reagent_containers/food/snacks/grown/examine(user) +/obj/item/food/snacks/grown/examine(user) . = ..() if(seed) for(var/datum/plant_gene/trait/T in seed.genes) if(T.examine_line) . += T.examine_line -/obj/item/reagent_containers/food/snacks/grown/attackby(obj/item/O, mob/user, params) +/obj/item/food/snacks/grown/attackby(obj/item/O, mob/user, params) ..() if(slices_num && slice_path) var/inaccurate = TRUE @@ -112,12 +112,12 @@ // Various gene procs -/obj/item/reagent_containers/food/snacks/grown/attack_self(mob/user) +/obj/item/food/snacks/grown/attack_self(mob/user) if(seed && seed.get_gene(/datum/plant_gene/trait/squash)) squash(user) ..() -/obj/item/reagent_containers/food/snacks/grown/throw_impact(atom/hit_atom) +/obj/item/food/snacks/grown/throw_impact(atom/hit_atom) if(!..()) //was it caught by a mob? if(seed) log_action(locateUID(thrownby), hit_atom, "Thrown [src] at") @@ -126,7 +126,7 @@ if(seed.get_gene(/datum/plant_gene/trait/squash)) squash(hit_atom) -/obj/item/reagent_containers/food/snacks/grown/proc/squash(atom/target) +/obj/item/food/snacks/grown/proc/squash(atom/target) var/turf/T = get_turf(target) if(ispath(splat_type, /obj/effect/decal/cleanable/plant_smudge)) if(filling_color) @@ -151,28 +151,28 @@ qdel(src) -/obj/item/reagent_containers/food/snacks/grown/On_Consume(mob/M, mob/user) +/obj/item/food/snacks/grown/On_Consume(mob/M, mob/user) if(iscarbon(M)) if(seed) for(var/datum/plant_gene/trait/T in seed.genes) T.on_consume(src, M) ..() -/obj/item/reagent_containers/food/snacks/grown/after_slip(mob/living/carbon/human/H) +/obj/item/food/snacks/grown/after_slip(mob/living/carbon/human/H) if(!seed) return for(var/datum/plant_gene/trait/T in seed.genes) T.on_slip(src, H) // Glow gene procs -/obj/item/reagent_containers/food/snacks/grown/generate_trash(atom/location) +/obj/item/food/snacks/grown/generate_trash(atom/location) if(trash && ispath(trash, /obj/item/grown)) . = new trash(location, seed) trash = null return return ..() -/obj/item/reagent_containers/food/snacks/grown/decompile_act(obj/item/matter_decompiler/C, mob/user) +/obj/item/food/snacks/grown/decompile_act(obj/item/matter_decompiler/C, mob/user) if(isdrone(user)) C.stored_comms["wood"] += 4 qdel(src) @@ -180,7 +180,7 @@ return ..() // For item-containing growns such as eggy or gatfruit -/obj/item/reagent_containers/food/snacks/grown/shell/attack_self(mob/user) +/obj/item/food/snacks/grown/shell/attack_self(mob/user) if(!do_after(user, 1.5 SECONDS, target = user)) return user.unEquip(src) @@ -191,14 +191,14 @@ qdel(src) // Diona Nymphs can eat these as well as weeds to gain nutrition. -/obj/item/reagent_containers/food/snacks/grown/attack_animal(mob/living/simple_animal/M) +/obj/item/food/snacks/grown/attack_animal(mob/living/simple_animal/M) if(isnymph(M)) var/mob/living/simple_animal/diona/D = M D.consume(src) else return ..() -/obj/item/reagent_containers/food/snacks/grown/proc/log_action(mob/user, atom/target, what_done) +/obj/item/food/snacks/grown/proc/log_action(mob/user, atom/target, what_done) var/reagent_str = reagents.log_list() var/genes_str = "No genes" if(seed && length(seed.genes)) @@ -211,7 +211,7 @@ add_attack_logs(user, target, "[what_done] ([reagent_str] | [genes_str])") -/obj/item/reagent_containers/food/snacks/grown/extinguish_light(force = FALSE) +/obj/item/food/snacks/grown/extinguish_light(force = FALSE) if(!force) return if(seed.get_gene(/datum/plant_gene/trait/glow/shadow)) diff --git a/code/modules/hydroponics/grown/ambrosia.dm b/code/modules/hydroponics/grown/ambrosia.dm index 9f1f8d8744ad..0cd8dfcdb5e2 100644 --- a/code/modules/hydroponics/grown/ambrosia.dm +++ b/code/modules/hydroponics/grown/ambrosia.dm @@ -1,5 +1,5 @@ // Ambrosia - base type -/obj/item/reagent_containers/food/snacks/grown/ambrosia +/obj/item/food/snacks/grown/ambrosia seed = /obj/item/seeds/ambrosia name = "ambrosia branch" desc = "This is a plant." @@ -20,7 +20,7 @@ icon_state = "seed-ambrosiavulgaris" species = "ambrosiavulgaris" plantname = "Ambrosia Vulgaris" - product = /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris + product = /obj/item/food/snacks/grown/ambrosia/vulgaris lifespan = 60 endurance = 25 yield = 6 @@ -30,7 +30,7 @@ mutatelist = list(/obj/item/seeds/ambrosia/deus) reagents_add = list("space_drugs" = 0.15, "bicaridine" = 0.1, "kelotane" = 0.1, "vitamin" = 0.04, "plantmatter" = 0.05, "toxin" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris +/obj/item/food/snacks/grown/ambrosia/vulgaris seed = /obj/item/seeds/ambrosia name = "ambrosia vulgaris branch" desc = "This is a plant containing various healing chemicals." @@ -44,12 +44,12 @@ icon_state = "seed-ambrosiadeus" species = "ambrosiadeus" plantname = "Ambrosia Deus" - product = /obj/item/reagent_containers/food/snacks/grown/ambrosia/deus + product = /obj/item/food/snacks/grown/ambrosia/deus mutatelist = list(/obj/item/seeds/ambrosia/gaia) reagents_add = list("weak_omnizine" = 0.15, "synaptizine" = 0.15, "space_drugs" = 0.1, "vitamin" = 0.04, "plantmatter" = 0.05) rarity = 40 -/obj/item/reagent_containers/food/snacks/grown/ambrosia/deus +/obj/item/food/snacks/grown/ambrosia/deus seed = /obj/item/seeds/ambrosia/deus name = "ambrosia deus branch" desc = "Eating this makes you feel immortal!" @@ -70,7 +70,7 @@ icon_state = "seed-ambrosia_gaia" species = "ambrosia_gaia" plantname = "Ambrosia Gaia" - product = /obj/item/reagent_containers/food/snacks/grown/ambrosia/gaia + product = /obj/item/food/snacks/grown/ambrosia/gaia mutatelist = list() reagents_add = list("earthsblood" = 0.05, "nutriment" = 0.06, "vitamin" = 0.05) rarity = 30 //These are some pretty good plants right here @@ -78,7 +78,7 @@ weed_rate = 4 weed_chance = 100 -/obj/item/reagent_containers/food/snacks/grown/ambrosia/gaia +/obj/item/food/snacks/grown/ambrosia/gaia name = "ambrosia gaia branch" desc = "Eating this makes you immortal." icon_state = "ambrosia_gaia" @@ -92,12 +92,12 @@ // Ambrosia Cruciatus /obj/item/seeds/ambrosia/cruciatus - product = /obj/item/reagent_containers/food/snacks/grown/ambrosia/cruciatus + product = /obj/item/food/snacks/grown/ambrosia/cruciatus potency = 10 mutatelist = list() reagents_add = list("thc" = 0.15, "kelotane" = 0.15, "bicaridine" = 0.1, "bath_salts" = 0.20, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/ambrosia/cruciatus +/obj/item/food/snacks/grown/ambrosia/cruciatus seed = /obj/item/seeds/ambrosia/cruciatus wine_power = 0.7 tastes = list("ambrosia cruciatus" = 1) diff --git a/code/modules/hydroponics/grown/apple.dm b/code/modules/hydroponics/grown/apple.dm index 7510c3cdfb6e..f1cd12752313 100644 --- a/code/modules/hydroponics/grown/apple.dm +++ b/code/modules/hydroponics/grown/apple.dm @@ -5,7 +5,7 @@ icon_state = "seed-apple" species = "apple" plantname = "Apple Tree" - product = /obj/item/reagent_containers/food/snacks/grown/apple + product = /obj/item/food/snacks/grown/apple lifespan = 55 endurance = 35 yield = 5 @@ -16,7 +16,7 @@ mutatelist = list(/obj/item/seeds/apple/gold) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/apple +/obj/item/food/snacks/grown/apple seed = /obj/item/seeds/apple name = "apple" desc = "It's a little piece of Eden." @@ -28,12 +28,12 @@ // Posioned Apple /obj/item/seeds/apple/poisoned - product = /obj/item/reagent_containers/food/snacks/grown/apple/poisoned + product = /obj/item/food/snacks/grown/apple/poisoned mutatelist = list() reagents_add = list("cyanide" = 0.5, "vitamin" = 0.04, "plantmatter" = 0.1) rarity = 50 // Source of cyanide, and hard (almost impossible) to obtain normally. -/obj/item/reagent_containers/food/snacks/grown/apple/poisoned +/obj/item/food/snacks/grown/apple/poisoned seed = /obj/item/seeds/apple/poisoned // Gold Apple @@ -43,14 +43,14 @@ icon_state = "seed-goldapple" species = "goldapple" plantname = "Golden Apple Tree" - product = /obj/item/reagent_containers/food/snacks/grown/apple/gold + product = /obj/item/food/snacks/grown/apple/gold maturation = 10 production = 10 mutatelist = list() reagents_add = list("gold" = 0.2, "vitamin" = 0.04, "plantmatter" = 0.1) rarity = 40 // Alchemy! -/obj/item/reagent_containers/food/snacks/grown/apple/gold +/obj/item/food/snacks/grown/apple/gold seed = /obj/item/seeds/apple/gold name = "golden apple" desc = "Emblazoned upon the apple is the word 'Kallisti'." diff --git a/code/modules/hydroponics/grown/banana.dm b/code/modules/hydroponics/grown/banana.dm index 67b3df02b901..57d8f8c7e5d2 100644 --- a/code/modules/hydroponics/grown/banana.dm +++ b/code/modules/hydroponics/grown/banana.dm @@ -5,7 +5,7 @@ icon_state = "seed-banana" species = "banana" plantname = "Banana Tree" - product = /obj/item/reagent_containers/food/snacks/grown/banana + product = /obj/item/food/snacks/grown/banana lifespan = 50 endurance = 30 growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' @@ -14,7 +14,7 @@ mutatelist = list(/obj/item/seeds/banana/mime, /obj/item/seeds/banana/bluespace) reagents_add = list("banana" = 0.1, "potassium" = 0.1, "vitamin" = 0.04, "plantmatter" = 0.02) -/obj/item/reagent_containers/food/snacks/grown/banana +/obj/item/food/snacks/grown/banana seed = /obj/item/seeds/banana name = "banana" desc = "It's an excellent prop for a clown." @@ -26,11 +26,11 @@ distill_reagent = "bananahonk" tastes = list("banana" = 1) -/obj/item/reagent_containers/food/snacks/grown/banana/Initialize(mapload) +/obj/item/food/snacks/grown/banana/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_CAN_POINT_WITH, ROUNDSTART_TRAIT) -/obj/item/reagent_containers/food/snacks/grown/banana/suicide_act(mob/user) +/obj/item/food/snacks/grown/banana/suicide_act(mob/user) user.visible_message("[user] is aiming [src] at [user.p_themselves()]! It looks like [user.p_theyre()] trying to commit suicide.") playsound(loc, 'sound/items/bikehorn.ogg', 50, 1, -1) sleep(25) @@ -81,13 +81,13 @@ icon_state = "seed-mimana" species = "mimana" plantname = "Mimana Tree" - product = /obj/item/reagent_containers/food/snacks/grown/banana/mime + product = /obj/item/food/snacks/grown/banana/mime growthstages = 4 mutatelist = list() reagents_add = list("nothing" = 0.1, "capulettium_plus" = 0.1, "nutriment" = 0.02) rarity = 15 -/obj/item/reagent_containers/food/snacks/grown/banana/mime +/obj/item/food/snacks/grown/banana/mime seed = /obj/item/seeds/banana/mime name = "mimana" desc = "It's an excellent prop for a mime." @@ -110,13 +110,13 @@ species = "bluespacebanana" icon_grow = "banana-grow" plantname = "Bluespace Banana Tree" - product = /obj/item/reagent_containers/food/snacks/grown/banana/bluespace + product = /obj/item/food/snacks/grown/banana/bluespace mutatelist = list() genes = list(/datum/plant_gene/trait/slip, /datum/plant_gene/trait/teleport, /datum/plant_gene/trait/repeated_harvest) reagents_add = list("singulo" = 0.2, "banana" = 0.1, "vitamin" = 0.04, "plantmatter" = 0.02) rarity = 30 -/obj/item/reagent_containers/food/snacks/grown/banana/bluespace +/obj/item/food/snacks/grown/banana/bluespace seed = /obj/item/seeds/banana/bluespace name = "bluespace banana" icon_state = "bluenana" diff --git a/code/modules/hydroponics/grown/beans.dm b/code/modules/hydroponics/grown/beans.dm index 3482fd89ecbf..4c0ad33b5f46 100644 --- a/code/modules/hydroponics/grown/beans.dm +++ b/code/modules/hydroponics/grown/beans.dm @@ -5,7 +5,7 @@ icon_state = "seed-soybean" species = "soybean" plantname = "Soybean Plants" - product = /obj/item/reagent_containers/food/snacks/grown/soybeans + product = /obj/item/food/snacks/grown/soybeans maturation = 4 production = 4 potency = 15 @@ -17,7 +17,7 @@ mutatelist = list(/obj/item/seeds/soya/koi) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.05, "soybeanoil" = 0.03) -/obj/item/reagent_containers/food/snacks/grown/soybeans +/obj/item/food/snacks/grown/soybeans seed = /obj/item/seeds/soya name = "soybeans" desc = "It's pretty bland, but oh the possibilities..." @@ -35,13 +35,13 @@ icon_state = "seed-koibean" species = "koibean" plantname = "Koibean Plants" - product = /obj/item/reagent_containers/food/snacks/grown/koibeans + product = /obj/item/food/snacks/grown/koibeans potency = 10 mutatelist = list() reagents_add = list("carpotoxin" = 0.1, "vitamin" = 0.04, "plantmatter" = 0.05) rarity = 20 -/obj/item/reagent_containers/food/snacks/grown/koibeans +/obj/item/food/snacks/grown/koibeans seed = /obj/item/seeds/soya/koi name = "koibean" desc = "Something about these seems fishy." diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm index 07eb158689e6..78f651294985 100644 --- a/code/modules/hydroponics/grown/berries.dm +++ b/code/modules/hydroponics/grown/berries.dm @@ -5,7 +5,7 @@ icon_state = "seed-berry" species = "berry" plantname = "Berry Bush" - product = /obj/item/reagent_containers/food/snacks/grown/berries + product = /obj/item/food/snacks/grown/berries lifespan = 20 maturation = 5 production = 5 @@ -17,7 +17,7 @@ mutatelist = list(/obj/item/seeds/berry/glow, /obj/item/seeds/berry/poison) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/berries +/obj/item/food/snacks/grown/berries seed = /obj/item/seeds/berry name = "bunch of berries" desc = "Nutritious!" @@ -35,12 +35,12 @@ icon_state = "seed-poisonberry" species = "poisonberry" plantname = "Poison-Berry Bush" - product = /obj/item/reagent_containers/food/snacks/grown/berries/poison + product = /obj/item/food/snacks/grown/berries/poison mutatelist = list(/obj/item/seeds/berry/death) reagents_add = list("cyanide" = 0.15, "tirizene" = 0.2, "vitamin" = 0.04, "plantmatter" = 0.1) rarity = 10 // Mildly poisonous berries are common in reality -/obj/item/reagent_containers/food/snacks/grown/berries/poison +/obj/item/food/snacks/grown/berries/poison seed = /obj/item/seeds/berry/poison name = "bunch of poison-berries" desc = "Taste so good, you could die!" @@ -57,14 +57,14 @@ icon_state = "seed-deathberry" species = "deathberry" plantname = "Death Berry Bush" - product = /obj/item/reagent_containers/food/snacks/grown/berries/death + product = /obj/item/food/snacks/grown/berries/death lifespan = 30 potency = 50 mutatelist = list() reagents_add = list("coniine" = 0.08, "tirizene" = 0.1, "vitamin" = 0.04, "plantmatter" = 0.1) rarity = 30 -/obj/item/reagent_containers/food/snacks/grown/berries/death +/obj/item/food/snacks/grown/berries/death seed = /obj/item/seeds/berry/death name = "bunch of death-berries" desc = "Taste so good, you could die!" @@ -81,7 +81,7 @@ icon_state = "seed-glowberry" species = "glowberry" plantname = "Glow-Berry Bush" - product = /obj/item/reagent_containers/food/snacks/grown/berries/glow + product = /obj/item/food/snacks/grown/berries/glow lifespan = 30 endurance = 25 mutatelist = list() @@ -89,7 +89,7 @@ reagents_add = list("uranium" = 0.25, "iodine" = 0.2, "vitamin" = 0.04, "plantmatter" = 0.1) rarity = 20 -/obj/item/reagent_containers/food/snacks/grown/berries/glow +/obj/item/food/snacks/grown/berries/glow seed = /obj/item/seeds/berry/glow name = "bunch of glow-berries" desc = "Nutritious!" @@ -109,7 +109,7 @@ icon_state = "seed-cherry" species = "cherry" plantname = "Cherry Tree" - product = /obj/item/reagent_containers/food/snacks/grown/cherries + product = /obj/item/food/snacks/grown/cherries lifespan = 35 endurance = 35 maturation = 5 @@ -122,7 +122,7 @@ mutatelist = list(/obj/item/seeds/cherry/blue) reagents_add = list("plantmatter" = 0.07, "sugar" = 0.07) -/obj/item/reagent_containers/food/snacks/grown/cherries +/obj/item/food/snacks/grown/cherries seed = /obj/item/seeds/cherry name = "cherries" desc = "Great for toppings!" @@ -140,12 +140,12 @@ icon_state = "seed-bluecherry" species = "bluecherry" plantname = "Blue Cherry Tree" - product = /obj/item/reagent_containers/food/snacks/grown/bluecherries + product = /obj/item/food/snacks/grown/bluecherries mutatelist = list() reagents_add = list("plantmatter" = 0.07, "sugar" = 0.07) rarity = 10 -/obj/item/reagent_containers/food/snacks/grown/bluecherries +/obj/item/food/snacks/grown/bluecherries seed = /obj/item/seeds/cherry/blue name = "blue cherries" desc = "They're cherries that are blue." @@ -162,7 +162,7 @@ icon_state = "seed-grapes" species = "grape" plantname = "Grape Vine" - product = /obj/item/reagent_containers/food/snacks/grown/grapes + product = /obj/item/food/snacks/grown/grapes lifespan = 50 endurance = 25 maturation = 3 @@ -176,12 +176,12 @@ mutatelist = list(/obj/item/seeds/grape/green) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.1, "sugar" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/grapes +/obj/item/food/snacks/grown/grapes seed = /obj/item/seeds/grape name = "bunch of grapes" desc = "Nutritious!" icon_state = "grapes" - dried_type = /obj/item/reagent_containers/food/snacks/no_raisin/healthy + dried_type = /obj/item/food/snacks/no_raisin/healthy filling_color = "#FF1493" bitesize_mod = 2 tastes = list("grapes" = 1) @@ -194,12 +194,12 @@ icon_state = "seed-greengrapes" species = "greengrape" plantname = "Green-Grape Vine" - product = /obj/item/reagent_containers/food/snacks/grown/grapes/green + product = /obj/item/food/snacks/grown/grapes/green reagents_add = list("kelotane" = 0.2, "vitamin" = 0.04, "plantmatter" = 0.1, "sugar" = 0.1) // No rarity: technically it's a beneficial mutant, but it's not exactly "new"... mutatelist = list() -/obj/item/reagent_containers/food/snacks/grown/grapes/green +/obj/item/food/snacks/grown/grapes/green seed = /obj/item/seeds/grape/green name = "bunch of green grapes" icon_state = "greengrapes" diff --git a/code/modules/hydroponics/grown/cannabis.dm b/code/modules/hydroponics/grown/cannabis.dm index 9dedaa18d837..ce96f21d6668 100644 --- a/code/modules/hydroponics/grown/cannabis.dm +++ b/code/modules/hydroponics/grown/cannabis.dm @@ -5,7 +5,7 @@ icon_state = "seed-cannabis" species = "cannabis" plantname = "Cannabis Plant" - product = /obj/item/reagent_containers/food/snacks/grown/cannabis + product = /obj/item/food/snacks/grown/cannabis maturation = 8 potency = 20 growthstages = 1 @@ -24,7 +24,7 @@ icon_state = "seed-megacannabis" species = "megacannabis" plantname = "Rainbow Weed" - product = /obj/item/reagent_containers/food/snacks/grown/cannabis/rainbow + product = /obj/item/food/snacks/grown/cannabis/rainbow mutatelist = list(/obj/item/seeds/cannabis/death, /obj/item/seeds/cannabis/ultimate) reagents_add = list("lsd" = 0.15, "thc" = 0.15, "cbd" = 0.15, "happiness" = 0.15) @@ -36,7 +36,7 @@ icon_state = "seed-blackcannabis" species = "blackcannabis" plantname = "Deathweed" - product = /obj/item/reagent_containers/food/snacks/grown/cannabis/death + product = /obj/item/food/snacks/grown/cannabis/death mutatelist = list() reagents_add = list("cyanide" = 0.35, "thc" = 0.15, "cbd" = 0.15) rarity = 40 @@ -47,7 +47,7 @@ icon_state = "seed-whitecannabis" species = "whitecannabis" plantname = "Lifeweed" - product = /obj/item/reagent_containers/food/snacks/grown/cannabis/white + product = /obj/item/food/snacks/grown/cannabis/white mutatelist = list(/obj/item/seeds/cannabis/death, /obj/item/seeds/cannabis/ultimate) reagents_add = list("omnizine" = 0.35, "thc" = 0.15, "cbd" = 0.15) @@ -60,7 +60,7 @@ icon_state = "seed-ocannabis" species = "ocannabis" plantname = "Omega Weed" - product = /obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate + product = /obj/item/food/snacks/grown/cannabis/ultimate mutatelist = list() reagents_add = list("lsd" = 0.05, "suicider" = 0.05, @@ -85,7 +85,7 @@ // --------------------------------------------------------------- -/obj/item/reagent_containers/food/snacks/grown/cannabis +/obj/item/food/snacks/grown/cannabis seed = /obj/item/seeds/cannabis icon = 'icons/goonstation/objects/hydroponics.dmi' name = "cannabis leaf" @@ -97,28 +97,28 @@ wine_power = 0.2 -/obj/item/reagent_containers/food/snacks/grown/cannabis/rainbow +/obj/item/food/snacks/grown/cannabis/rainbow seed = /obj/item/seeds/cannabis/rainbow name = "rainbow cannabis leaf" desc = "Is it supposed to be glowing like that...?" icon_state = "megacannabis" wine_power = 0.6 -/obj/item/reagent_containers/food/snacks/grown/cannabis/death +/obj/item/food/snacks/grown/cannabis/death seed = /obj/item/seeds/cannabis/death name = "death cannabis leaf" desc = "Looks a bit dark. Oh well." icon_state = "blackcannabis" wine_power = 0.4 -/obj/item/reagent_containers/food/snacks/grown/cannabis/white +/obj/item/food/snacks/grown/cannabis/white seed = /obj/item/seeds/cannabis/white name = "white cannabis leaf" desc = "It feels smooth and nice to the touch." icon_state = "whitecannabis" wine_power = 0.1 -/obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate +/obj/item/food/snacks/grown/cannabis/ultimate seed = /obj/item/seeds/cannabis/ultimate name = "omega cannibas leaf" desc = "You feel dizzy looking at it. What the fuck?" diff --git a/code/modules/hydroponics/grown/cereals.dm b/code/modules/hydroponics/grown/cereals.dm index 89b462a19e11..3ed266947518 100644 --- a/code/modules/hydroponics/grown/cereals.dm +++ b/code/modules/hydroponics/grown/cereals.dm @@ -5,7 +5,7 @@ icon_state = "seed-wheat" species = "wheat" plantname = "Wheat Stalks" - product = /obj/item/reagent_containers/food/snacks/grown/wheat + product = /obj/item/food/snacks/grown/wheat production = 1 yield = 4 potency = 15 @@ -13,7 +13,7 @@ mutatelist = list(/obj/item/seeds/wheat/oat, /obj/item/seeds/wheat/meat) reagents_add = list("plantmatter" = 0.04) -/obj/item/reagent_containers/food/snacks/grown/wheat +/obj/item/food/snacks/grown/wheat seed = /obj/item/seeds/wheat name = "wheat" desc = "Sigh... wheat... a-grain?" @@ -31,10 +31,10 @@ icon_state = "seed-oat" species = "oat" plantname = "Oat Stalks" - product = /obj/item/reagent_containers/food/snacks/grown/oat + product = /obj/item/food/snacks/grown/oat mutatelist = list() -/obj/item/reagent_containers/food/snacks/grown/oat +/obj/item/food/snacks/grown/oat seed = /obj/item/seeds/wheat/oat name = "oat" desc = "Eat oats, do squats." @@ -52,11 +52,11 @@ icon_state = "seed-rice" species = "rice" plantname = "Rice Stalks" - product = /obj/item/reagent_containers/food/snacks/grown/rice + product = /obj/item/food/snacks/grown/rice mutatelist = list() growthstages = 3 -/obj/item/reagent_containers/food/snacks/grown/rice +/obj/item/food/snacks/grown/rice seed = /obj/item/seeds/wheat/rice name = "rice" desc = "Rice to meet you." @@ -74,11 +74,11 @@ icon_state = "seed-meatwheat" species = "meatwheat" plantname = "Meatwheat" - product = /obj/item/reagent_containers/food/snacks/grown/meatwheat + product = /obj/item/food/snacks/grown/meatwheat mutatelist = list() reagents_add = list("protein" = 0.04) -/obj/item/reagent_containers/food/snacks/grown/meatwheat +/obj/item/food/snacks/grown/meatwheat name = "meatwheat" desc = "Some blood-drenched wheat stalks. You can crush them into what passes for meat if you squint hard enough." icon_state = "meatwheat" @@ -89,10 +89,10 @@ tastes = list("meatwheat" = 1) can_distill = FALSE -/obj/item/reagent_containers/food/snacks/grown/meatwheat/attack_self(mob/living/user) +/obj/item/food/snacks/grown/meatwheat/attack_self(mob/living/user) user.visible_message("[user] crushes [src] into meat.", "You crush [src] into something that resembles meat.") playsound(user, 'sound/effects/blobattack.ogg', 50, 1) - var/obj/item/reagent_containers/food/snacks/meat/meatwheat/M = new(get_turf(user)) + var/obj/item/food/snacks/meat/meatwheat/M = new(get_turf(user)) user.drop_item() qdel(src) user.put_in_hands(M) diff --git a/code/modules/hydroponics/grown/chili.dm b/code/modules/hydroponics/grown/chili.dm index 3908262a6a24..63202491bffc 100644 --- a/code/modules/hydroponics/grown/chili.dm +++ b/code/modules/hydroponics/grown/chili.dm @@ -5,7 +5,7 @@ icon_state = "seed-chili" species = "chili" plantname = "Chili Plants" - product = /obj/item/reagent_containers/food/snacks/grown/chili + product = /obj/item/food/snacks/grown/chili lifespan = 20 maturation = 5 production = 5 @@ -18,7 +18,7 @@ mutatelist = list(/obj/item/seeds/chili/ice, /obj/item/seeds/chili/ghost) reagents_add = list("capsaicin" = 0.25, "vitamin" = 0.04, "plantmatter" = 0.04) -/obj/item/reagent_containers/food/snacks/grown/chili +/obj/item/food/snacks/grown/chili seed = /obj/item/seeds/chili name = "chili" desc = "It's spicy! Wait... IT'S BURNING ME!!" @@ -35,7 +35,7 @@ icon_state = "seed-icepepper" species = "chiliice" plantname = "Chilly Pepper Plants" - product = /obj/item/reagent_containers/food/snacks/grown/icepepper + product = /obj/item/food/snacks/grown/icepepper lifespan = 25 maturation = 4 production = 4 @@ -43,7 +43,7 @@ mutatelist = list() reagents_add = list("frostoil" = 0.25, "vitamin" = 0.02, "plantmatter" = 0.02) -/obj/item/reagent_containers/food/snacks/grown/icepepper +/obj/item/food/snacks/grown/icepepper seed = /obj/item/seeds/chili/ice name = "chilly pepper" desc = "It's a mutant strain of chili" @@ -61,7 +61,7 @@ icon_state = "seed-chilighost" species = "chilighost" plantname = "Ghost Chili Plants" - product = /obj/item/reagent_containers/food/snacks/grown/ghost_chili + product = /obj/item/food/snacks/grown/ghost_chili endurance = 10 maturation = 10 production = 10 @@ -70,7 +70,7 @@ mutatelist = list() reagents_add = list("condensedcapsaicin" = 0.3, "capsaicin" = 0.55, "plantmatter" = 0.04) -/obj/item/reagent_containers/food/snacks/grown/ghost_chili +/obj/item/food/snacks/grown/ghost_chili seed = /obj/item/seeds/chili/ghost name = "ghost chili" desc = "It seems to be vibrating gently." diff --git a/code/modules/hydroponics/grown/citrus.dm b/code/modules/hydroponics/grown/citrus.dm index aeda25fc74dd..0f624c37e1d1 100644 --- a/code/modules/hydroponics/grown/citrus.dm +++ b/code/modules/hydroponics/grown/citrus.dm @@ -1,5 +1,5 @@ // Citrus - base type -/obj/item/reagent_containers/food/snacks/grown/citrus +/obj/item/food/snacks/grown/citrus seed = /obj/item/seeds/lime name = "citrus" desc = "It's so sour, your face will twist." @@ -14,7 +14,7 @@ icon_state = "seed-lime" species = "lime" plantname = "Lime Tree" - product = /obj/item/reagent_containers/food/snacks/grown/citrus/lime + product = /obj/item/food/snacks/grown/citrus/lime lifespan = 55 endurance = 50 yield = 4 @@ -24,7 +24,7 @@ mutatelist = list(/obj/item/seeds/orange) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/citrus/lime +/obj/item/food/snacks/grown/citrus/lime seed = /obj/item/seeds/lime name = "lime" desc = "It's so sour, your face will twist." @@ -39,7 +39,7 @@ icon_state = "seed-orange" species = "orange" plantname = "Orange Tree" - product = /obj/item/reagent_containers/food/snacks/grown/citrus/orange + product = /obj/item/food/snacks/grown/citrus/orange lifespan = 60 endurance = 50 yield = 5 @@ -51,7 +51,7 @@ mutatelist = list(/obj/item/seeds/lime) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/citrus/orange +/obj/item/food/snacks/grown/citrus/orange seed = /obj/item/seeds/orange name = "orange" desc = "It's an tangy fruit." @@ -67,7 +67,7 @@ icon_state = "seed-lemon" species = "lemon" plantname = "Lemon Tree" - product = /obj/item/reagent_containers/food/snacks/grown/citrus/lemon + product = /obj/item/food/snacks/grown/citrus/lemon lifespan = 55 endurance = 45 yield = 4 @@ -78,7 +78,7 @@ mutatelist = list(/obj/item/seeds/firelemon) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/citrus/lemon +/obj/item/food/snacks/grown/citrus/lemon seed = /obj/item/seeds/lemon name = "lemon" desc = "When life gives you lemons, make lemonade." @@ -93,7 +93,7 @@ icon_state = "seed-firelemon" species = "firelemon" plantname = "Combustible Lemon Tree" - product = /obj/item/reagent_containers/food/snacks/grown/firelemon + product = /obj/item/food/snacks/grown/firelemon growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' icon_grow = "lime-grow" icon_dead = "lime-dead" @@ -103,7 +103,7 @@ yield = 4 reagents_add = list("plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/firelemon +/obj/item/food/snacks/grown/firelemon seed = /obj/item/seeds/firelemon name = "combustible lemon" desc = "Made for burning houses down." @@ -113,7 +113,7 @@ tastes = list("burning lemon" = 1) wine_flavor = "fire" -/obj/item/reagent_containers/food/snacks/grown/firelemon/attack_self(mob/living/user) +/obj/item/food/snacks/grown/firelemon/attack_self(mob/living/user) var/area/A = get_area(user) user.visible_message("[user] primes [src]!", "You prime [src]!") investigate_log("[key_name(user)] primed a combustible lemon for detonation at [A] [COORD(user)].", INVESTIGATE_BOMB) @@ -126,19 +126,19 @@ playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) addtimer(CALLBACK(src, PROC_REF(prime)), rand(10, 60)) -/obj/item/reagent_containers/food/snacks/grown/firelemon/burn() +/obj/item/food/snacks/grown/firelemon/burn() prime() ..() -/obj/item/reagent_containers/food/snacks/grown/firelemon/proc/update_mob() +/obj/item/food/snacks/grown/firelemon/proc/update_mob() if(ismob(loc)) var/mob/M = loc M.unEquip(src) -/obj/item/reagent_containers/food/snacks/grown/firelemon/ex_act(severity) +/obj/item/food/snacks/grown/firelemon/ex_act(severity) qdel(src) //Ensuring that it's deleted by its own explosion -/obj/item/reagent_containers/food/snacks/grown/firelemon/proc/prime() +/obj/item/food/snacks/grown/firelemon/proc/prime() switch(seed.potency) //Combustible lemons are alot like IEDs, lots of flame, very little bang. if(0 to 30) update_mob() diff --git a/code/modules/hydroponics/grown/cocoa_vanilla.dm b/code/modules/hydroponics/grown/cocoa_vanilla.dm index b00c4b1aded9..9e21671169bd 100644 --- a/code/modules/hydroponics/grown/cocoa_vanilla.dm +++ b/code/modules/hydroponics/grown/cocoa_vanilla.dm @@ -5,7 +5,7 @@ icon_state = "seed-cocoapod" species = "cocoapod" plantname = "Cocao Tree" - product = /obj/item/reagent_containers/food/snacks/grown/cocoapod + product = /obj/item/food/snacks/grown/cocoapod lifespan = 20 maturation = 5 production = 5 @@ -18,7 +18,7 @@ mutatelist = list(/obj/item/seeds/cocoapod/vanillapod) reagents_add = list("cocoa" = 0.25, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/cocoapod +/obj/item/food/snacks/grown/cocoapod seed = /obj/item/seeds/cocoapod name = "cocoa pod" desc = "Fattening... Mmmmm... chucklate." @@ -34,12 +34,12 @@ icon_state = "seed-vanillapod" species = "vanillapod" plantname = "Vanilla Tree" - product = /obj/item/reagent_containers/food/snacks/grown/vanillapod + product = /obj/item/food/snacks/grown/vanillapod genes = list(/datum/plant_gene/trait/repeated_harvest) mutatelist = list() reagents_add = list("vanilla" = 0.25, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/vanillapod +/obj/item/food/snacks/grown/vanillapod seed = /obj/item/seeds/cocoapod/vanillapod name = "vanilla pod" desc = "Fattening... Mmmmm... vanilla." diff --git a/code/modules/hydroponics/grown/corn.dm b/code/modules/hydroponics/grown/corn.dm index ac7946b38643..256fc42e88c8 100644 --- a/code/modules/hydroponics/grown/corn.dm +++ b/code/modules/hydroponics/grown/corn.dm @@ -5,7 +5,7 @@ icon_state = "seed-corn" species = "corn" plantname = "Corn Stalks" - product = /obj/item/reagent_containers/food/snacks/grown/corn + product = /obj/item/food/snacks/grown/corn maturation = 8 potency = 20 growthstages = 3 @@ -15,12 +15,12 @@ mutatelist = list(/obj/item/seeds/corn/snapcorn) reagents_add = list("cornoil" = 0.2, "vitamin" = 0.04, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/corn +/obj/item/food/snacks/grown/corn seed = /obj/item/seeds/corn name = "ear of corn" desc = "Needs some butter!" icon_state = "corn" - cooked_type = /obj/item/reagent_containers/food/snacks/popcorn + cooked_type = /obj/item/food/snacks/popcorn filling_color = "#FFFF00" trash = /obj/item/grown/corncob bitesize_mod = 2 diff --git a/code/modules/hydroponics/grown/eggplant.dm b/code/modules/hydroponics/grown/eggplant.dm index 7aa15c61fa9d..e31e07e215bc 100644 --- a/code/modules/hydroponics/grown/eggplant.dm +++ b/code/modules/hydroponics/grown/eggplant.dm @@ -5,7 +5,7 @@ icon_state = "seed-eggplant" species = "eggplant" plantname = "Eggplants" - product = /obj/item/reagent_containers/food/snacks/grown/eggplant + product = /obj/item/food/snacks/grown/eggplant yield = 2 potency = 20 growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi' @@ -15,7 +15,7 @@ mutatelist = list(/obj/item/seeds/eggplant/eggy) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/eggplant +/obj/item/food/snacks/grown/eggplant seed = /obj/item/seeds/eggplant name = "eggplant" desc = "Maybe there's a chicken inside?" @@ -32,18 +32,18 @@ icon_state = "seed-eggy" species = "eggy" plantname = "Egg-Plants" - product = /obj/item/reagent_containers/food/snacks/grown/shell/eggy + product = /obj/item/food/snacks/grown/shell/eggy lifespan = 75 production = 12 mutatelist = list() reagents_add = list("nutriment" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/shell/eggy +/obj/item/food/snacks/grown/shell/eggy seed = /obj/item/seeds/eggplant/eggy name = "Egg-plant" desc = "There MUST be a chicken inside." icon_state = "eggyplant" - trash = /obj/item/reagent_containers/food/snacks/egg + trash = /obj/item/food/snacks/egg filling_color = "#F8F8FF" bitesize_mod = 2 tastes = list("egg-plant" = 1) diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm index ea4dc842233d..42d7eaa2e9c5 100644 --- a/code/modules/hydroponics/grown/flowers.dm +++ b/code/modules/hydroponics/grown/flowers.dm @@ -5,7 +5,7 @@ icon_state = "seed-poppy" species = "poppy" plantname = "Poppy Plants" - product = /obj/item/reagent_containers/food/snacks/grown/poppy + product = /obj/item/food/snacks/grown/poppy endurance = 10 maturation = 8 yield = 6 @@ -17,7 +17,7 @@ mutatelist = list(/obj/item/seeds/poppy/geranium, /obj/item/seeds/poppy/lily) reagents_add = list("bicaridine" = 0.2, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/poppy +/obj/item/food/snacks/grown/poppy seed = /obj/item/seeds/poppy name = "poppy" desc = "Long-used as a symbol of rest, peace, and death." @@ -37,10 +37,10 @@ plantname = "Lily Plants" icon_grow = "lily-grow" icon_dead = "lily-dead" - product = /obj/item/reagent_containers/food/snacks/grown/poppy/lily + product = /obj/item/food/snacks/grown/poppy/lily mutatelist = list() -/obj/item/reagent_containers/food/snacks/grown/poppy/lily +/obj/item/food/snacks/grown/poppy/lily seed = /obj/item/seeds/poppy/lily name = "lily" desc = "A beautiful white flower." @@ -57,10 +57,10 @@ plantname = "Geranium Plants" icon_grow = "geranium-grow" icon_dead = "geranium-dead" - product = /obj/item/reagent_containers/food/snacks/grown/poppy/geranium + product = /obj/item/food/snacks/grown/poppy/geranium mutatelist = list() -/obj/item/reagent_containers/food/snacks/grown/poppy/geranium +/obj/item/food/snacks/grown/poppy/geranium seed = /obj/item/seeds/poppy/geranium name = "geranium" desc = "A beautiful purple flower." @@ -76,7 +76,7 @@ icon_state = "seed-harebell" species = "harebell" plantname = "Harebells" - product = /obj/item/reagent_containers/food/snacks/grown/harebell + product = /obj/item/food/snacks/grown/harebell lifespan = 100 endurance = 20 maturation = 7 @@ -88,7 +88,7 @@ growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi' reagents_add = list("plantmatter" = 0.04) -/obj/item/reagent_containers/food/snacks/grown/harebell +/obj/item/food/snacks/grown/harebell seed = /obj/item/seeds/harebell name = "harebell" desc = "\"I'll sweeten thy sad grave: thou shalt not lack the flower that's like thy face, pale primrose, nor the azured hare-bell, like thy veins; no, nor the leaf of eglantine, whom not to slander, out-sweeten'd not thy breath.\"" @@ -144,12 +144,12 @@ plantname = "Moonflowers" icon_grow = "moonflower-grow" icon_dead = "sunflower-dead" - product = /obj/item/reagent_containers/food/snacks/grown/moonflower + product = /obj/item/food/snacks/grown/moonflower mutatelist = list() reagents_add = list("moonshine" = 0.2, "vitamin" = 0.02, "plantmatter" = 0.02) rarity = 15 -/obj/item/reagent_containers/food/snacks/grown/moonflower +/obj/item/food/snacks/grown/moonflower seed = /obj/item/seeds/sunflower/moonflower name = "moonflower" desc = "Store in a location at least 50 yards away from werewolves." diff --git a/code/modules/hydroponics/grown/garlic.dm b/code/modules/hydroponics/grown/garlic.dm index 3c1b2b38b1d4..82d802a0b927 100644 --- a/code/modules/hydroponics/grown/garlic.dm +++ b/code/modules/hydroponics/grown/garlic.dm @@ -4,14 +4,14 @@ icon_state = "seed-garlic" species = "garlic" plantname = "Garlic Sprouts" - product = /obj/item/reagent_containers/food/snacks/grown/garlic + product = /obj/item/food/snacks/grown/garlic yield = 6 potency = 25 growthstages = 3 growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi' reagents_add = list("garlic" = 0.15, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/garlic +/obj/item/food/snacks/grown/garlic seed = /obj/item/seeds/garlic name = "garlic" desc = "Delicious, but with a potentially overwhelming odor." diff --git a/code/modules/hydroponics/grown/grass_carpet.dm b/code/modules/hydroponics/grown/grass_carpet.dm index 832645c95cd1..84c177d2b070 100644 --- a/code/modules/hydroponics/grown/grass_carpet.dm +++ b/code/modules/hydroponics/grown/grass_carpet.dm @@ -5,7 +5,7 @@ icon_state = "seed-grass" species = "grass" plantname = "Grass" - product = /obj/item/reagent_containers/food/snacks/grown/grass + product = /obj/item/food/snacks/grown/grass lifespan = 40 endurance = 40 maturation = 2 @@ -18,7 +18,7 @@ mutatelist = list(/obj/item/seeds/grass/carpet) reagents_add = list("plantmatter" = 0.02, "hydrogen" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/grass +/obj/item/food/snacks/grown/grass seed = /obj/item/seeds/grass name = "grass" desc = "Green and lush." @@ -30,10 +30,10 @@ tastes = list("grass" = 1) wine_power = 0.15 -/obj/item/reagent_containers/food/snacks/grown/grass/attack_self(mob/user) +/obj/item/food/snacks/grown/grass/attack_self(mob/user) to_chat(user, "You prepare the astroturf.") var/grassAmt = 1 + round(seed.potency * tile_coefficient) // The grass we're holding - for(var/obj/item/reagent_containers/food/snacks/grown/grass/G in user.loc) // The grass on the floor + for(var/obj/item/food/snacks/grown/grass/G in user.loc) // The grass on the floor if(G.type != type) continue grassAmt += 1 + round(G.seed.potency * tile_coefficient) @@ -48,11 +48,11 @@ icon_state = "seed-carpet" species = "carpet" plantname = "Carpet" - product = /obj/item/reagent_containers/food/snacks/grown/grass/carpet + product = /obj/item/food/snacks/grown/grass/carpet mutatelist = list() rarity = 10 -/obj/item/reagent_containers/food/snacks/grown/grass/carpet +/obj/item/food/snacks/grown/grass/carpet seed = /obj/item/seeds/grass/carpet name = "carpet" desc = "The textile industry's dark secret." diff --git a/code/modules/hydroponics/grown/herbals.dm b/code/modules/hydroponics/grown/herbals.dm index e98247d8cb5b..87ff2959c047 100644 --- a/code/modules/hydroponics/grown/herbals.dm +++ b/code/modules/hydroponics/grown/herbals.dm @@ -4,14 +4,14 @@ icon_state = "seed-cabbage" species = "cabbage" plantname = "comfrey" - product = /obj/item/reagent_containers/food/snacks/grown/comfrey + product = /obj/item/food/snacks/grown/comfrey yield = 2 maturation = 3 growthstages = 1 growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi' reagents_add = list("styptic_powder" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/comfrey +/obj/item/food/snacks/grown/comfrey seed = /obj/item/seeds/comfrey name = "comfrey leaf" desc = "Mash to turn into a poultice." @@ -20,7 +20,7 @@ tastes = list("comfrey" = 1) bitesize_mod = 2 -/obj/item/reagent_containers/food/snacks/grown/comfrey/attack_self(mob/user) +/obj/item/food/snacks/grown/comfrey/attack_self(mob/user) var/obj/item/stack/medical/bruise_pack/comfrey/C = new(get_turf(user)) C.heal_brute = seed.potency to_chat(user, "You mash [src] into a poultice.") @@ -33,12 +33,12 @@ icon_state = "seed-ambrosiavulgaris" species = "ambrosiavulgaris" plantname = "Aloe Vera Plant" - product = /obj/item/reagent_containers/food/snacks/grown/aloe + product = /obj/item/food/snacks/grown/aloe yield = 2 icon_dead = "ambrosia-dead" reagents_add = list("silver_sulfadiazine" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/aloe +/obj/item/food/snacks/grown/aloe seed = /obj/item/seeds/aloe name = "aloe leaf" desc = "Mash to turn into a poultice." @@ -47,7 +47,7 @@ tastes = list("aloe" = 1) bitesize_mod = 2 -/obj/item/reagent_containers/food/snacks/grown/aloe/attack_self(mob/user) +/obj/item/food/snacks/grown/aloe/attack_self(mob/user) var/obj/item/stack/medical/ointment/aloe/A = new(get_turf(user)) A.heal_burn = seed.potency to_chat(user, "You mash [src] into a poultice.") @@ -61,7 +61,7 @@ icon_state = "seed-mint" species = "mint" plantname = "Mint Plant" - product = /obj/item/reagent_containers/food/snacks/grown/mint + product = /obj/item/food/snacks/grown/mint lifespan = 20 maturation = 4 production = 5 @@ -70,7 +70,7 @@ icon_dead = "mint-dead" reagents_add = list("mint" = 0.03, "plantmatter" = 0.03) -/obj/item/reagent_containers/food/snacks/grown/mint +/obj/item/food/snacks/grown/mint seed = /obj/item/seeds/mint name = "mint leaves" desc = "Process for mint. Distill for menthol. No need to experi-mint." //haha diff --git a/code/modules/hydroponics/grown/kudzu.dm b/code/modules/hydroponics/grown/kudzu.dm index fdaa9750a200..537356c9b474 100644 --- a/code/modules/hydroponics/grown/kudzu.dm +++ b/code/modules/hydroponics/grown/kudzu.dm @@ -6,7 +6,7 @@ icon_state = "seed-kudzu" species = "kudzu" plantname = "Kudzu" - product = /obj/item/reagent_containers/food/snacks/grown/kudzupod + product = /obj/item/food/snacks/grown/kudzupod genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/plant_type/weed_hardy) lifespan = 20 endurance = 10 @@ -88,7 +88,7 @@ adjust_potency(rand(15, -5)) -/obj/item/reagent_containers/food/snacks/grown/kudzupod +/obj/item/food/snacks/grown/kudzupod seed = /obj/item/seeds/kudzu name = "kudzu pod" desc = "Pueraria Virallis: An invasive species with vines that rapidly creep and wrap around whatever they contact." diff --git a/code/modules/hydroponics/grown/melon.dm b/code/modules/hydroponics/grown/melon.dm index e4e20fd1f7c1..702640618ab0 100644 --- a/code/modules/hydroponics/grown/melon.dm +++ b/code/modules/hydroponics/grown/melon.dm @@ -5,7 +5,7 @@ icon_state = "seed-watermelon" species = "watermelon" plantname = "Watermelon Vines" - product = /obj/item/reagent_containers/food/snacks/grown/watermelon + product = /obj/item/food/snacks/grown/watermelon lifespan = 50 endurance = 40 growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' @@ -21,12 +21,12 @@ qdel(src) return OBLITERATION -/obj/item/reagent_containers/food/snacks/grown/watermelon +/obj/item/food/snacks/grown/watermelon seed = /obj/item/seeds/watermelon name = "watermelon" desc = "It's full of watery goodness." icon_state = "watermelon" // Sprite created by https://github.com/binarysudoku for Goonstation, They have relicensed it for our use. - slice_path = /obj/item/reagent_containers/food/snacks/watermelonslice + slice_path = /obj/item/food/snacks/watermelonslice slices_num = 5 dried_type = null w_class = WEIGHT_CLASS_NORMAL @@ -42,12 +42,12 @@ icon_state = "seed-holymelon" species = "holymelon" plantname = "Holy Melon Vines" - product = /obj/item/reagent_containers/food/snacks/grown/holymelon + product = /obj/item/food/snacks/grown/holymelon mutatelist = list() reagents_add = list("holywater" = 0.2, "vitamin" = 0.04, "nutriment" = 0.1) rarity = 20 -/obj/item/reagent_containers/food/snacks/grown/holymelon +/obj/item/food/snacks/grown/holymelon seed = /obj/item/seeds/watermelon/holy name = "holymelon" desc = "The water within this melon has been blessed by some deity that's particularly fond of watermelon." diff --git a/code/modules/hydroponics/grown/misc_seeds.dm b/code/modules/hydroponics/grown/misc_seeds.dm index 1d34ff8a0eb3..6e4bf03af16f 100644 --- a/code/modules/hydroponics/grown/misc_seeds.dm +++ b/code/modules/hydroponics/grown/misc_seeds.dm @@ -34,7 +34,7 @@ icon_state = "seed-cabbage" species = "cabbage" plantname = "Cabbages" - product = /obj/item/reagent_containers/food/snacks/grown/cabbage + product = /obj/item/food/snacks/grown/cabbage lifespan = 50 endurance = 25 maturation = 3 @@ -46,7 +46,7 @@ mutatelist = list(/obj/item/seeds/replicapod) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/cabbage +/obj/item/food/snacks/grown/cabbage seed = /obj/item/seeds/cabbage name = "cabbage" desc = "Ewwwwwwwwww. Cabbage." @@ -64,7 +64,7 @@ icon_state = "seed-sugarcane" species = "sugarcane" plantname = "Sugarcane" - product = /obj/item/reagent_containers/food/snacks/grown/sugarcane + product = /obj/item/food/snacks/grown/sugarcane genes = list(/datum/plant_gene/trait/repeated_harvest) lifespan = 60 endurance = 50 @@ -73,7 +73,7 @@ growthstages = 3 reagents_add = list("sugar" = 0.25) -/obj/item/reagent_containers/food/snacks/grown/sugarcane +/obj/item/food/snacks/grown/sugarcane seed = /obj/item/seeds/sugarcane name = "sugarcane" desc = "Sickly sweet." @@ -91,7 +91,7 @@ icon_state = "seed-gatfruit" species = "gatfruit" plantname = "Gatfruit Tree" - product = /obj/item/reagent_containers/food/snacks/grown/shell/gatfruit + product = /obj/item/food/snacks/grown/shell/gatfruit genes = list(/datum/plant_gene/trait/repeated_harvest) lifespan = 20 endurance = 20 @@ -104,7 +104,7 @@ growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' reagents_add = list("sulfur" = 0.1, "carbon" = 0.1, "nitrogen" = 0.07, "potassium" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/shell/gatfruit +/obj/item/food/snacks/grown/shell/gatfruit seed = /obj/item/seeds/gatfruit name = "gatfruit" desc = "It smells like burning." @@ -122,12 +122,12 @@ icon_state = "seed-cherry_bomb" species = "cherry_bomb" plantname = "Cherry Bomb Tree" - product = /obj/item/reagent_containers/food/snacks/grown/cherry_bomb + product = /obj/item/food/snacks/grown/cherry_bomb mutatelist = list() reagents_add = list("plantmatter" = 0.1, "sugar" = 0.1, "blackpowder" = 0.7) rarity = 60 //See above -/obj/item/reagent_containers/food/snacks/grown/cherry_bomb +/obj/item/food/snacks/grown/cherry_bomb name = "cherry bombs" desc = "You think you can hear the hissing of a tiny fuse." icon_state = "cherry_bomb" @@ -139,7 +139,7 @@ max_integrity = 40 wine_power = 0.8 -/obj/item/reagent_containers/food/snacks/grown/cherry_bomb/attack_self(mob/living/user) +/obj/item/food/snacks/grown/cherry_bomb/attack_self(mob/living/user) var/area/A = get_area(user) user.visible_message("[user] plucks the stem from [src]!", "You pluck the stem from [src], which begins to hiss loudly!") message_admins("[user] ([user.key ? user.key : "no key"]) primed a cherry bomb for detonation at [A] ([user.x], [user.y], [user.z]) (JMP)") @@ -149,16 +149,16 @@ C.throw_mode_on() prime() -/obj/item/reagent_containers/food/snacks/grown/cherry_bomb/deconstruct(disassembled = TRUE) +/obj/item/food/snacks/grown/cherry_bomb/deconstruct(disassembled = TRUE) if(!disassembled) prime() if(!QDELETED(src)) qdel(src) -/obj/item/reagent_containers/food/snacks/grown/cherry_bomb/ex_act(severity) +/obj/item/food/snacks/grown/cherry_bomb/ex_act(severity) qdel(src) //Ensuring that it's deleted by its own explosion. Also prevents mass chain reaction with piles of cherry bombs -/obj/item/reagent_containers/food/snacks/grown/cherry_bomb/proc/prime() +/obj/item/food/snacks/grown/cherry_bomb/proc/prime() icon_state = "cherry_bomb_lit" playsound(src, 'sound/goonstation/misc/fuse.ogg', seed.potency, 0) reagents.set_reagent_temp(1000) //Sets off the black powder diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm index 9f516da18d56..88e447ec798b 100644 --- a/code/modules/hydroponics/grown/mushrooms.dm +++ b/code/modules/hydroponics/grown/mushrooms.dm @@ -1,4 +1,4 @@ -/obj/item/reagent_containers/food/snacks/grown/mushroom +/obj/item/food/snacks/grown/mushroom name = "mushroom" bitesize_mod = 2 wine_power = 0.4 @@ -11,7 +11,7 @@ icon_state = "mycelium-reishi" species = "reishi" plantname = "Reishi" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/reishi + product = /obj/item/food/snacks/grown/mushroom/reishi lifespan = 35 endurance = 35 maturation = 10 @@ -23,7 +23,7 @@ growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' reagents_add = list("morphine" = 0.35, "charcoal" = 0.35, "nutriment" = 0) -/obj/item/reagent_containers/food/snacks/grown/mushroom/reishi +/obj/item/food/snacks/grown/mushroom/reishi seed = /obj/item/seeds/reishi name = "reishi" desc = "Ganoderma lucidum: A special fungus known for its medicinal and stress relieving properties." @@ -39,7 +39,7 @@ icon_state = "mycelium-amanita" species = "amanita" plantname = "Fly Amanitas" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/amanita + product = /obj/item/food/snacks/grown/mushroom/amanita lifespan = 50 endurance = 35 maturation = 10 @@ -51,7 +51,7 @@ mutatelist = list(/obj/item/seeds/angel) reagents_add = list("psilocybin" = 0.04, "amanitin" = 0.35, "nutriment" = 0, "growthserum" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/mushroom/amanita +/obj/item/food/snacks/grown/mushroom/amanita seed = /obj/item/seeds/amanita name = "fly amanita" desc = "Amanita Muscaria: Learn poisonous mushrooms by heart. Only pick mushrooms you know." @@ -67,7 +67,7 @@ icon_state = "mycelium-angel" species = "angel" plantname = "Destroying Angels" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/angel + product = /obj/item/food/snacks/grown/mushroom/angel lifespan = 50 endurance = 35 maturation = 12 @@ -81,7 +81,7 @@ rarity = 30 origin_tech = "biotech=5" -/obj/item/reagent_containers/food/snacks/grown/mushroom/angel +/obj/item/food/snacks/grown/mushroom/angel seed = /obj/item/seeds/angel name = "destroying angel" desc = "Amanita Virosa: Deadly poisonous basidiomycete fungus filled with alpha amanitin." @@ -98,7 +98,7 @@ icon_state = "mycelium-liberty" species = "liberty" plantname = "Liberty-Caps" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap + product = /obj/item/food/snacks/grown/mushroom/libertycap maturation = 7 production = 1 yield = 5 @@ -108,7 +108,7 @@ growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' reagents_add = list("psilocybin" = 0.25, "nutriment" = 0.02) -/obj/item/reagent_containers/food/snacks/grown/mushroom/libertycap +/obj/item/food/snacks/grown/mushroom/libertycap seed = /obj/item/seeds/liberty name = "liberty-cap" desc = "Psilocybe Semilanceata: Liberate yourself!" @@ -126,7 +126,7 @@ icon_state = "mycelium-plump" species = "plump" plantname = "Plump-Helmet Mushrooms" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/plumphelmet + product = /obj/item/food/snacks/grown/mushroom/plumphelmet maturation = 8 production = 1 yield = 4 @@ -137,7 +137,7 @@ mutatelist = list(/obj/item/seeds/plump/walkingmushroom) reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/mushroom/plumphelmet +/obj/item/food/snacks/grown/mushroom/plumphelmet seed = /obj/item/seeds/plump name = "plump-helmet" desc = "Plumus Hellmus: Plump, soft and s-so inviting~" @@ -154,7 +154,7 @@ icon_state = "mycelium-walkingmushroom" species = "walkingmushroom" plantname = "Walking Mushrooms" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/walkingmushroom + product = /obj/item/food/snacks/grown/mushroom/walkingmushroom lifespan = 30 endurance = 30 maturation = 5 @@ -164,7 +164,7 @@ reagents_add = list("vitamin" = 0.05, "nutriment" = 0.15) rarity = 30 -/obj/item/reagent_containers/food/snacks/grown/mushroom/walkingmushroom +/obj/item/food/snacks/grown/mushroom/walkingmushroom seed = /obj/item/seeds/plump/walkingmushroom name = "walking mushroom" desc = "Plumus Locomotus: The beginning of the great walk." @@ -174,7 +174,7 @@ tastes = list("walking mushroom" = 1, "motion" = 1) can_distill = FALSE -/obj/item/reagent_containers/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user) +/obj/item/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user) if(isspaceturf(user.loc)) return var/mob/living/simple_animal/hostile/mushroom/M = new /mob/living/simple_animal/hostile/mushroom(user.loc) @@ -194,7 +194,7 @@ icon_state = "mycelium-chanter" species = "chanter" plantname = "Chanterelle Mushrooms" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle + product = /obj/item/food/snacks/grown/mushroom/chanterelle lifespan = 35 endurance = 20 maturation = 7 @@ -206,7 +206,7 @@ growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' reagents_add = list("nutriment" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle +/obj/item/food/snacks/grown/mushroom/chanterelle seed = /obj/item/seeds/chanter name = "chanterelle cluster" desc = "Cantharellus Cibarius: These jolly yellow little shrooms sure look tasty!" @@ -222,7 +222,7 @@ icon_state = "mycelium-glowshroom" species = "glowshroom" plantname = "Glowshrooms" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom + product = /obj/item/food/snacks/grown/mushroom/glowshroom lifespan = 100 //ten times that is the delay endurance = 30 maturation = 15 @@ -236,7 +236,7 @@ mutatelist = list(/obj/item/seeds/glowshroom/glowcap, /obj/item/seeds/glowshroom/shadowshroom) reagents_add = list("radium" = 0.1, "phosphorus" = 0.1, "nutriment" = 0.04) -/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom +/obj/item/food/snacks/grown/mushroom/glowshroom seed = /obj/item/seeds/glowshroom name = "glowshroom cluster" desc = "Mycena Bregprox: This species of mushroom glows in the dark." @@ -248,7 +248,7 @@ tastes = list("warmth" = 1, "light" = 1, "glowshroom" = 1) wine_power = 0.5 -/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/attack_self(mob/user) +/obj/item/food/snacks/grown/mushroom/glowshroom/attack_self(mob/user) if(isspaceturf(user.loc)) return FALSE if(!isturf(user.loc)) @@ -279,13 +279,13 @@ species = "glowcap" icon_harvest = "glowcap-harvest" plantname = "Glowcaps" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/glowcap + product = /obj/item/food/snacks/grown/mushroom/glowshroom/glowcap genes = list(/datum/plant_gene/trait/glow/red, /datum/plant_gene/trait/cell_charge, /datum/plant_gene/trait/plant_type/fungal_metabolism) mutatelist = list() reagents_add = list("teslium" = 0.1, "nutriment" = 0.04) rarity = 30 -/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/glowcap +/obj/item/food/snacks/grown/mushroom/glowshroom/glowcap seed = /obj/item/seeds/glowshroom/glowcap name = "glowcap cluster" desc = "Mycena Ruthenia: This species of mushroom glows in the dark, but isn't actually bioluminescent. They're warm to the touch..." @@ -305,7 +305,7 @@ icon_state = "mycelium-tower" species = "mold" plantname = "Fungus" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/fungus + product = /obj/item/food/snacks/grown/mushroom/fungus yield = 4 icon_grow = "mold-grow" icon_dead = "mold-dead" @@ -314,7 +314,7 @@ genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism) reagents_add = list("fungus" = 0.35) -/obj/item/reagent_containers/food/snacks/grown/mushroom/fungus +/obj/item/food/snacks/grown/mushroom/fungus seed = /obj/item/seeds/fungus name = "fungus" desc = "A fungus ideal for making antibacterials." @@ -331,13 +331,13 @@ icon_grow = "shadowshroom-grow" icon_dead = "shadowshroom-dead" plantname = "Shadowshrooms" - product = /obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/shadowshroom + product = /obj/item/food/snacks/grown/mushroom/glowshroom/shadowshroom genes = list(/datum/plant_gene/trait/glow/shadow, /datum/plant_gene/trait/plant_type/fungal_metabolism) mutatelist = list() reagents_add = list("radium" = 0.2, "nutriment" = 0.04) rarity = 30 -/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/shadowshroom +/obj/item/food/snacks/grown/mushroom/glowshroom/shadowshroom seed = /obj/item/seeds/glowshroom/shadowshroom name = "shadowshroom cluster" desc = "Mycena Umbra: This species of mushroom emits shadow instead of light." diff --git a/code/modules/hydroponics/grown/nymph.dm b/code/modules/hydroponics/grown/nymph.dm index 34bbffc4c9db..af1a0506b788 100644 --- a/code/modules/hydroponics/grown/nymph.dm +++ b/code/modules/hydroponics/grown/nymph.dm @@ -4,7 +4,7 @@ icon_state = "seed-replicapod" species = "replicapod" plantname = "Nymph Pod" - product = /obj/item/reagent_containers/food/snacks/grown/nymph_pod + product = /obj/item/food/snacks/grown/nymph_pod lifespan = 50 endurance = 8 maturation = 10 @@ -12,14 +12,14 @@ yield = 1 reagents_add = list("plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/nymph_pod +/obj/item/food/snacks/grown/nymph_pod seed = /obj/item/seeds/nymph name = "nymph pod" desc = "A peculiar wriggling pod with a grown nymph inside. Crack it open to let the nymph out." icon_state = "mushy" bitesize_mod = 2 -/obj/item/reagent_containers/food/snacks/grown/nymph_pod/attack_self(mob/user) +/obj/item/food/snacks/grown/nymph_pod/attack_self(mob/user) new /mob/living/simple_animal/diona(get_turf(user)) to_chat(user, "You crack open [src] letting the nymph out.") user.drop_item() diff --git a/code/modules/hydroponics/grown/olive.dm b/code/modules/hydroponics/grown/olive.dm index d8958703bcae..05f46a5a58f4 100644 --- a/code/modules/hydroponics/grown/olive.dm +++ b/code/modules/hydroponics/grown/olive.dm @@ -5,7 +5,7 @@ icon_state = "seed-olive" species = "olive" plantname = "Olive Tree" - product = /obj/item/reagent_containers/food/snacks/grown/olive + product = /obj/item/food/snacks/grown/olive lifespan = 150 endurance = 35 yield = 5 @@ -15,7 +15,7 @@ mutatelist = list() reagents_add = list("vitamin" = 0.02, "plantmatter" = 0.2, "sodiumchloride" = 0.2) -/obj/item/reagent_containers/food/snacks/grown/olive +/obj/item/food/snacks/grown/olive seed = /obj/item/seeds/olive name = "olive" desc = "A small cylindrical salty fruit closely related to mangoes. Can be ground into a paste and mixed with water to make quality oil." diff --git a/code/modules/hydroponics/grown/onion.dm b/code/modules/hydroponics/grown/onion.dm index 8594c6f37eab..b59a3bfa5e0e 100644 --- a/code/modules/hydroponics/grown/onion.dm +++ b/code/modules/hydroponics/grown/onion.dm @@ -4,7 +4,7 @@ icon_state = "seed-onion" species = "onion" plantname = "Onion Sprouts" - product = /obj/item/reagent_containers/food/snacks/grown/onion + product = /obj/item/food/snacks/grown/onion lifespan = 20 maturation = 3 production = 4 @@ -16,14 +16,14 @@ reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.1) mutatelist = list(/obj/item/seeds/onion/red) -/obj/item/reagent_containers/food/snacks/grown/onion +/obj/item/food/snacks/grown/onion seed = /obj/item/seeds/onion name = "onion" desc = "Nothing to cry over." icon_state = "onion" filling_color = "#C0C9A0" bitesize_mod = 2 - slice_path = /obj/item/reagent_containers/food/snacks/onion_slice + slice_path = /obj/item/food/snacks/onion_slice tastes = list("onion" = 1, "pungentness" = 1) slices_num = 2 wine_power = 0.3 @@ -36,22 +36,22 @@ species = "onion_red" plantname = "Red Onion Sprouts" weed_chance = 1 - product = /obj/item/reagent_containers/food/snacks/grown/onion/red + product = /obj/item/food/snacks/grown/onion/red mutatelist = list() reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.1, "onionjuice" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/onion/red +/obj/item/food/snacks/grown/onion/red seed = /obj/item/seeds/onion/red name = "red onion" desc = "Purple despite the name." icon_state = "onion_red" filling_color = "#C29ACF" - slice_path = /obj/item/reagent_containers/food/snacks/onion_slice/red + slice_path = /obj/item/food/snacks/onion_slice/red tastes = list("red onion" = 1, "pungentness" = 3) wine_power = 0.6 wine_flavor = "powerful pungentness" -/obj/item/reagent_containers/food/snacks/onion_slice +/obj/item/food/snacks/onion_slice name = "onion slices" desc = "Rings, not for wearing." icon_state = "onionslice" @@ -59,9 +59,9 @@ filling_color = "#C0C9A0" tastes = list("onion" = 1, "pungentness" = 1) gender = PLURAL - cooked_type = /obj/item/reagent_containers/food/snacks/onionrings + cooked_type = /obj/item/food/snacks/onionrings -/obj/item/reagent_containers/food/snacks/onion_slice/red +/obj/item/food/snacks/onion_slice/red name = "red onion slices" desc = "They shine like exceptionally low quality amethyst." icon_state = "onionslice_red" diff --git a/code/modules/hydroponics/grown/peanut.dm b/code/modules/hydroponics/grown/peanut.dm index 836f21488886..8226df87fca2 100644 --- a/code/modules/hydroponics/grown/peanut.dm +++ b/code/modules/hydroponics/grown/peanut.dm @@ -5,7 +5,7 @@ icon_state = "seed-potato" species = "potato" plantname = "Peanut Vines" - product = /obj/item/reagent_containers/food/snacks/grown/peanuts + product = /obj/item/food/snacks/grown/peanuts lifespan = 30 maturation = 10 production = 1 @@ -17,7 +17,7 @@ genes = list(/datum/plant_gene/trait/repeated_harvest) reagents_add = list("plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/peanuts +/obj/item/food/snacks/grown/peanuts seed = /obj/item/seeds/peanuts name = "patch of peanuts" desc = "Best avoided if you have spess allergies." diff --git a/code/modules/hydroponics/grown/pineapple.dm b/code/modules/hydroponics/grown/pineapple.dm index aa1946aee4ef..dd4727a2c318 100644 --- a/code/modules/hydroponics/grown/pineapple.dm +++ b/code/modules/hydroponics/grown/pineapple.dm @@ -5,7 +5,7 @@ icon_state = "seed-pineapple" species = "pineapple" plantname = "Pineapple Plant" - product = /obj/item/reagent_containers/food/snacks/grown/pineapple + product = /obj/item/food/snacks/grown/pineapple lifespan = 40 endurance = 30 growthstages = 3 @@ -14,7 +14,7 @@ mutatelist = list(/obj/item/seeds/apple) reagents_add = list("vitamin" = 0.02, "plantmatter" = 0.2, "water" = 0.04) -/obj/item/reagent_containers/food/snacks/grown/pineapple +/obj/item/food/snacks/grown/pineapple seed = /obj/item/seeds/pineapple name = "pineapple" desc = "A soft sweet interior surrounded by a spiky skin." @@ -25,7 +25,7 @@ attack_verb = list("stung", "pined") throw_speed = 1 throw_range = 5 - slice_path = /obj/item/reagent_containers/food/snacks/pineappleslice + slice_path = /obj/item/food/snacks/pineappleslice slices_num = 3 filling_color = "#F6CB0B" w_class = WEIGHT_CLASS_NORMAL diff --git a/code/modules/hydroponics/grown/potato.dm b/code/modules/hydroponics/grown/potato.dm index a4d854163283..319343fac185 100644 --- a/code/modules/hydroponics/grown/potato.dm +++ b/code/modules/hydroponics/grown/potato.dm @@ -5,7 +5,7 @@ icon_state = "seed-potato" species = "potato" plantname = "Potato Plants" - product = /obj/item/reagent_containers/food/snacks/grown/potato + product = /obj/item/food/snacks/grown/potato lifespan = 30 maturation = 10 production = 1 @@ -18,7 +18,7 @@ mutatelist = list(/obj/item/seeds/potato/sweet) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/potato +/obj/item/food/snacks/grown/potato seed = /obj/item/seeds/potato name = "potato" desc = "Boil 'em! Mash 'em! Stick 'em in a stew!" @@ -29,7 +29,7 @@ distill_reagent = "vodka" -/obj/item/reagent_containers/food/snacks/grown/potato/wedges +/obj/item/food/snacks/grown/potato/wedges name = "potato wedges" desc = "Slices of neatly cut potato." icon_state = "potato_wedges" @@ -39,10 +39,10 @@ distill_reagent = "sbiten" -/obj/item/reagent_containers/food/snacks/grown/potato/attackby(obj/item/W, mob/user, params) +/obj/item/food/snacks/grown/potato/attackby(obj/item/W, mob/user, params) if(is_sharp(W)) to_chat(user, "You cut the potato into wedges with [W].") - var/obj/item/reagent_containers/food/snacks/grown/potato/wedges/Wedges = new /obj/item/reagent_containers/food/snacks/grown/potato/wedges + var/obj/item/food/snacks/grown/potato/wedges/Wedges = new /obj/item/food/snacks/grown/potato/wedges if(!remove_item_from_storage(user)) user.unEquip(src) user.put_in_hands(Wedges) @@ -58,11 +58,11 @@ icon_state = "seed-sweetpotato" species = "sweetpotato" plantname = "Sweet Potato Plants" - product = /obj/item/reagent_containers/food/snacks/grown/potato/sweet + product = /obj/item/food/snacks/grown/potato/sweet mutatelist = list() reagents_add = list("vitamin" = 0.1, "sugar" = 0.1, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/potato/sweet +/obj/item/food/snacks/grown/potato/sweet seed = /obj/item/seeds/potato/sweet name = "sweet potato" desc = "It's sweet." diff --git a/code/modules/hydroponics/grown/pumpkin.dm b/code/modules/hydroponics/grown/pumpkin.dm index 718b16c6b1f6..93b5da9980cc 100644 --- a/code/modules/hydroponics/grown/pumpkin.dm +++ b/code/modules/hydroponics/grown/pumpkin.dm @@ -5,7 +5,7 @@ icon_state = "seed-pumpkin" species = "pumpkin" plantname = "Pumpkin Vines" - product = /obj/item/reagent_containers/food/snacks/grown/pumpkin + product = /obj/item/food/snacks/grown/pumpkin lifespan = 50 endurance = 40 growthstages = 3 @@ -17,7 +17,7 @@ reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.2) -/obj/item/reagent_containers/food/snacks/grown/pumpkin +/obj/item/food/snacks/grown/pumpkin seed = /obj/item/seeds/pumpkin name = "pumpkin" desc = "It's large and scary." @@ -28,7 +28,7 @@ wine_power = 0.2 var/carved_type = /obj/item/clothing/head/hardhat/pumpkinhead -/obj/item/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/W as obj, mob/user as mob, params) +/obj/item/food/snacks/grown/pumpkin/attackby(obj/item/W as obj, mob/user as mob, params) if(is_sharp(W)) user.show_message("You carve a face into [src]!", 1) new carved_type(user.loc) @@ -44,13 +44,13 @@ icon_state = "seed-blumpkin" species = "blumpkin" plantname = "Blumpkin Vines" - product = /obj/item/reagent_containers/food/snacks/grown/pumpkin/blumpkin + product = /obj/item/food/snacks/grown/pumpkin/blumpkin mutatelist = list() reagents_add = list("ammonia" = 0.2, "chlorine" = 0.1, "plasma" = 0.1, "plantmatter" = 0.2) rarity = 20 -/obj/item/reagent_containers/food/snacks/grown/pumpkin/blumpkin +/obj/item/food/snacks/grown/pumpkin/blumpkin seed = /obj/item/seeds/pumpkin/blumpkin name = "blumpkin" desc = "The pumpkin's toxic sibling." diff --git a/code/modules/hydroponics/grown/random_seeds.dm b/code/modules/hydroponics/grown/random_seeds.dm index c01513e1011a..3be1c302f87b 100644 --- a/code/modules/hydroponics/grown/random_seeds.dm +++ b/code/modules/hydroponics/grown/random_seeds.dm @@ -6,7 +6,7 @@ icon_state = "seed-x" species = "?????" plantname = "strange plant" - product = /obj/item/reagent_containers/food/snacks/grown/random + product = /obj/item/food/snacks/grown/random icon_grow = "xpod-grow" icon_dead = "xpod-dead" icon_harvest = "xpod-harvest" @@ -30,14 +30,14 @@ add_random_plant_type(100) desc = "Label: \n" + get_analyzer_text() -/obj/item/reagent_containers/food/snacks/grown/random +/obj/item/food/snacks/grown/random seed = /obj/item/seeds/random name = "strange plant" desc = "What could this even be?" icon_state = "crunchy" bitesize_mod = 2 -/obj/item/reagent_containers/food/snacks/grown/random/Initialize() +/obj/item/food/snacks/grown/random/Initialize() . = ..() wine_power = rand(0.1,1.5) if(prob(1)) diff --git a/code/modules/hydroponics/grown/root.dm b/code/modules/hydroponics/grown/root.dm index 263f52568178..4d8e9ab629cd 100644 --- a/code/modules/hydroponics/grown/root.dm +++ b/code/modules/hydroponics/grown/root.dm @@ -5,7 +5,7 @@ icon_state = "seed-carrot" species = "carrot" plantname = "Carrots" - product = /obj/item/reagent_containers/food/snacks/grown/carrot + product = /obj/item/food/snacks/grown/carrot maturation = 10 production = 1 yield = 5 @@ -14,7 +14,7 @@ mutatelist = list(/obj/item/seeds/carrot/parsnip) reagents_add = list("oculine" = 0.25, "vitamin" = 0.04, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/carrot +/obj/item/food/snacks/grown/carrot seed = /obj/item/seeds/carrot name = "carrot" desc = "It's good for the eyes!" @@ -24,14 +24,14 @@ tastes = list("carrot" = 1) wine_power = 0.3 -/obj/item/reagent_containers/food/snacks/grown/carrot/wedges +/obj/item/food/snacks/grown/carrot/wedges name = "carrot wedges" desc = "Slices of neatly cut carrot." icon_state = "carrot_wedges" filling_color = "#FFA500" bitesize_mod = 2 -/obj/item/reagent_containers/food/snacks/grown/carrot/attackby(obj/item/I, mob/user, params) +/obj/item/food/snacks/grown/carrot/attackby(obj/item/I, mob/user, params) if(is_sharp(I)) to_chat(user, "You sharpen the carrot into a shiv with [I].") var/obj/item/kitchen/knife/shiv/carrot/Shiv = new () @@ -50,12 +50,12 @@ icon_state = "seed-parsnip" species = "parsnip" plantname = "Parsnip" - product = /obj/item/reagent_containers/food/snacks/grown/parsnip + product = /obj/item/food/snacks/grown/parsnip icon_dead = "carrot-dead" mutatelist = list() reagents_add = list("vitamin" = 0.05, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/parsnip +/obj/item/food/snacks/grown/parsnip seed = /obj/item/seeds/carrot/parsnip name = "parsnip" desc = "Closely related to carrots." @@ -72,7 +72,7 @@ icon_state = "seed-whitebeet" species = "whitebeet" plantname = "White Beet Plants" - product = /obj/item/reagent_containers/food/snacks/grown/whitebeet + product = /obj/item/food/snacks/grown/whitebeet lifespan = 60 endurance = 50 yield = 6 @@ -81,7 +81,7 @@ mutatelist = list(/obj/item/seeds/redbeet) reagents_add = list("vitamin" = 0.04, "sugar" = 0.2, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/whitebeet +/obj/item/food/snacks/grown/whitebeet seed = /obj/item/seeds/whitebeet name = "white beet" desc = "You can't beat white beet." @@ -98,7 +98,7 @@ icon_state = "seed-redbeet" species = "redbeet" plantname = "Red Beet Plants" - product = /obj/item/reagent_containers/food/snacks/grown/redbeet + product = /obj/item/food/snacks/grown/redbeet lifespan = 60 endurance = 50 yield = 6 @@ -107,7 +107,7 @@ genes = list(/datum/plant_gene/trait/maxchem) reagents_add = list("vitamin" = 0.05, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/redbeet +/obj/item/food/snacks/grown/redbeet seed = /obj/item/seeds/redbeet name = "red beet" desc = "You can't beat red beet." diff --git a/code/modules/hydroponics/grown/tea_coffee.dm b/code/modules/hydroponics/grown/tea_coffee.dm index 0bba20ad4c03..6289b1abda7f 100644 --- a/code/modules/hydroponics/grown/tea_coffee.dm +++ b/code/modules/hydroponics/grown/tea_coffee.dm @@ -5,7 +5,7 @@ icon_state = "seed-teaaspera" species = "teaaspera" plantname = "Tea Aspera Plant" - product = /obj/item/reagent_containers/food/snacks/grown/tea + product = /obj/item/food/snacks/grown/tea lifespan = 20 maturation = 5 production = 5 @@ -16,7 +16,7 @@ mutatelist = list(/obj/item/seeds/tea/astra) reagents_add = list("vitamin" = 0.04, "teapowder" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/tea +/obj/item/food/snacks/grown/tea seed = /obj/item/seeds/tea name = "Tea Aspera tips" desc = "These aromatic tips of the tea plant can be dried to make tea." @@ -32,12 +32,12 @@ desc = "These seeds grow into Tea Astra, a more potent variant of tea" species = "teaastra" plantname = "Tea Astra Plant" - product = /obj/item/reagent_containers/food/snacks/grown/tea/astra + product = /obj/item/food/snacks/grown/tea/astra mutatelist = list() reagents_add = list("synaptizine" = 0.1, "vitamin" = 0.04, "teapowder" = 0.1) rarity = 20 -/obj/item/reagent_containers/food/snacks/grown/tea/astra +/obj/item/food/snacks/grown/tea/astra seed = /obj/item/seeds/tea/astra name = "Tea Astra tips" desc = "Knock away your fatigue!" @@ -53,7 +53,7 @@ icon_state = "seed-coffeea" species = "coffeea" plantname = "Coffee Arabica Bush" - product = /obj/item/reagent_containers/food/snacks/grown/coffee + product = /obj/item/food/snacks/grown/coffee lifespan = 30 endurance = 20 maturation = 5 @@ -65,7 +65,7 @@ mutatelist = list(/obj/item/seeds/coffee/robusta) reagents_add = list("vitamin" = 0.04, "coffeepowder" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/coffee +/obj/item/food/snacks/grown/coffee seed = /obj/item/seeds/coffee name = "coffee arabica beans" desc = "Dry them out to make coffee." @@ -82,12 +82,12 @@ icon_state = "seed-coffeer" species = "coffeer" plantname = "Coffee Robusta Bush" - product = /obj/item/reagent_containers/food/snacks/grown/coffee/robusta + product = /obj/item/food/snacks/grown/coffee/robusta mutatelist = list() reagents_add = list("ephedrine" = 0.1, "vitamin" = 0.04, "coffeepowder" = 0.1) rarity = 20 -/obj/item/reagent_containers/food/snacks/grown/coffee/robusta +/obj/item/food/snacks/grown/coffee/robusta seed = /obj/item/seeds/coffee/robusta name = "coffee robusta beans" desc = "Increases robustness by 37 percent!" diff --git a/code/modules/hydroponics/grown/tobacco.dm b/code/modules/hydroponics/grown/tobacco.dm index 36be15997280..6a74a4e02f44 100644 --- a/code/modules/hydroponics/grown/tobacco.dm +++ b/code/modules/hydroponics/grown/tobacco.dm @@ -5,7 +5,7 @@ icon_state = "seed-tobacco" species = "tobacco" plantname = "Tobacco Plant" - product = /obj/item/reagent_containers/food/snacks/grown/tobacco + product = /obj/item/food/snacks/grown/tobacco lifespan = 20 maturation = 5 production = 5 @@ -15,7 +15,7 @@ mutatelist = list(/obj/item/seeds/tobacco/space) reagents_add = list("nicotine" = 0.03, "plantmatter" = 0.03) -/obj/item/reagent_containers/food/snacks/grown/tobacco +/obj/item/food/snacks/grown/tobacco seed = /obj/item/seeds/tobacco name = "tobacco leaves" desc = "Dry them out to make some smokes." @@ -31,12 +31,12 @@ icon_state = "seed-stobacco" species = "stobacco" plantname = "Space Tobacco Plant" - product = /obj/item/reagent_containers/food/snacks/grown/tobacco/space + product = /obj/item/food/snacks/grown/tobacco/space mutatelist = list() reagents_add = list("salbutamol" = 0.05, "nicotine" = 0.08, "plantmatter" = 0.03) rarity = 20 -/obj/item/reagent_containers/food/snacks/grown/tobacco/space +/obj/item/food/snacks/grown/tobacco/space seed = /obj/item/seeds/tobacco/space name = "space tobacco leaves" desc = "Dry them out to make some space-smokes." diff --git a/code/modules/hydroponics/grown/tomato.dm b/code/modules/hydroponics/grown/tomato.dm index 6236d56994eb..0de416b0972d 100644 --- a/code/modules/hydroponics/grown/tomato.dm +++ b/code/modules/hydroponics/grown/tomato.dm @@ -5,7 +5,7 @@ icon_state = "seed-tomato" species = "tomato" plantname = "Tomato Plants" - product = /obj/item/reagent_containers/food/snacks/grown/tomato + product = /obj/item/food/snacks/grown/tomato maturation = 8 growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' icon_grow = "tomato-grow" @@ -14,12 +14,12 @@ mutatelist = list(/obj/item/seeds/tomato/blue, /obj/item/seeds/tomato/blood) reagents_add = list("vitamin" = 0.04, "plantmatter" = 0.1) -/obj/item/reagent_containers/food/snacks/grown/tomato +/obj/item/food/snacks/grown/tomato seed = /obj/item/seeds/tomato name = "tomato" desc = "I say to-mah-to, you say tom-mae-to." icon_state = "tomato" - slice_path = /obj/item/reagent_containers/food/snacks/tomatoslice + slice_path = /obj/item/food/snacks/tomatoslice slices_num = 4 splat_type = /obj/effect/decal/cleanable/tomato_smudge filling_color = "#FF6347" @@ -34,12 +34,12 @@ icon_state = "seed-bloodtomato" species = "bloodtomato" plantname = "Blood-Tomato Plants" - product = /obj/item/reagent_containers/food/snacks/grown/tomato/blood + product = /obj/item/food/snacks/grown/tomato/blood mutatelist = list(/obj/item/seeds/tomato/killer) reagents_add = list("blood" = 0.2, "vitamin" = 0.04, "plantmatter" = 0.1) rarity = 20 -/obj/item/reagent_containers/food/snacks/grown/tomato/blood +/obj/item/food/snacks/grown/tomato/blood seed = /obj/item/seeds/tomato/blood name = "blood-tomato" desc = "So bloody...so...very...bloody....AHHHH!!!!" @@ -58,7 +58,7 @@ icon_state = "seed-bluetomato" species = "bluetomato" plantname = "Blue-Tomato Plants" - product = /obj/item/reagent_containers/food/snacks/grown/tomato/blue + product = /obj/item/food/snacks/grown/tomato/blue yield = 2 icon_grow = "bluetomato-grow" mutatelist = list(/obj/item/seeds/tomato/blue/bluespace) @@ -66,7 +66,7 @@ reagents_add = list("lube" = 0.2, "vitamin" = 0.04, "plantmatter" = 0.1) rarity = 20 -/obj/item/reagent_containers/food/snacks/grown/tomato/blue +/obj/item/food/snacks/grown/tomato/blue seed = /obj/item/seeds/tomato/blue name = "blue-tomato" desc = "I say blue-mah-to, you say blue-mae-to." @@ -83,14 +83,14 @@ icon_state = "seed-bluespacetomato" species = "bluespacetomato" plantname = "Bluespace Tomato Plants" - product = /obj/item/reagent_containers/food/snacks/grown/tomato/blue/bluespace + product = /obj/item/food/snacks/grown/tomato/blue/bluespace yield = 2 mutatelist = list() genes = list(/datum/plant_gene/trait/squash, /datum/plant_gene/trait/slip, /datum/plant_gene/trait/teleport, /datum/plant_gene/trait/repeated_harvest) reagents_add = list("lube" = 0.2, "singulo" = 0.2, "vitamin" = 0.04, "plantmatter" = 0.1) rarity = 50 -/obj/item/reagent_containers/food/snacks/grown/tomato/blue/bluespace +/obj/item/food/snacks/grown/tomato/blue/bluespace seed = /obj/item/seeds/tomato/blue/bluespace name = "bluespace tomato" desc = "So lubricated, you might slip through space-time." @@ -108,7 +108,7 @@ icon_state = "seed-killertomato" species = "killertomato" plantname = "Killer-Tomato Plants" - product = /obj/item/reagent_containers/food/snacks/grown/tomato/killer + product = /obj/item/food/snacks/grown/tomato/killer yield = 2 genes = list(/datum/plant_gene/trait/squash) growthstages = 2 @@ -119,7 +119,7 @@ reagents_add = list("vitamin" = 0.04, "protein" = 0.1) rarity = 30 -/obj/item/reagent_containers/food/snacks/grown/tomato/killer +/obj/item/food/snacks/grown/tomato/killer seed = /obj/item/seeds/tomato/killer name = "killer-tomato" desc = "I say to-mah-to, you say tom-mae-to... OH GOD IT'S EATING MY LEGS!!" @@ -129,13 +129,13 @@ origin_tech = "biotech=4;combat=5" distill_reagent = "demonsblood" -/obj/item/reagent_containers/food/snacks/grown/tomato/killer/attack(mob/M, mob/user, def_zone) +/obj/item/food/snacks/grown/tomato/killer/attack(mob/M, mob/user, def_zone) if(awakening) to_chat(user, "The tomato is twitching and shaking, preventing you from eating it.") return ..() -/obj/item/reagent_containers/food/snacks/grown/tomato/killer/attack_self(mob/user) +/obj/item/food/snacks/grown/tomato/killer/attack_self(mob/user) if(awakening || isspaceturf(user.loc)) return to_chat(user, "You begin to awaken the Killer Tomato...") diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 43525465b328..1c33b6ce5dae 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -44,11 +44,11 @@ attack_verb = list("bashed", "battered", "bludgeoned", "whacked") var/plank_type = /obj/item/stack/sheet/wood var/plank_name = "wooden planks" - var/static/list/accepted = typecacheof(list(/obj/item/reagent_containers/food/snacks/grown/tobacco, - /obj/item/reagent_containers/food/snacks/grown/tea, - /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, - /obj/item/reagent_containers/food/snacks/grown/ambrosia/deus, - /obj/item/reagent_containers/food/snacks/grown/wheat)) + var/static/list/accepted = typecacheof(list(/obj/item/food/snacks/grown/tobacco, + /obj/item/food/snacks/grown/tea, + /obj/item/food/snacks/grown/ambrosia/vulgaris, + /obj/item/food/snacks/grown/ambrosia/deus, + /obj/item/food/snacks/grown/wheat)) /obj/item/grown/log/attackby(obj/item/W, mob/user, params) if(is_sharp(W)) @@ -69,7 +69,7 @@ qdel(src) if(CheckAccepted(W)) - var/obj/item/reagent_containers/food/snacks/grown/leaf = W + var/obj/item/food/snacks/grown/leaf = W if(leaf.dry) user.show_message("You wrap \the [W] around the log, turning it into a torch!") var/obj/item/flashlight/flare/torch/T = new /obj/item/flashlight/flare/torch(user.loc) diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm index 197916495487..4fcbe25430e1 100644 --- a/code/modules/hydroponics/growninedible.dm +++ b/code/modules/hydroponics/growninedible.dm @@ -6,9 +6,9 @@ name = "grown_weapon" icon = 'icons/obj/hydroponics/harvest.dmi' resistance_flags = FLAMMABLE - var/obj/item/seeds/seed = null // type path, gets converted to item on New(). It's safe to assume it's always a seed item. + var/obj/item/seeds/seed // type path, gets converted to item on New(). It's safe to assume it's always a seed item. -/obj/item/grown/Initialize(mapload, obj/item/seeds/new_seed = null) +/obj/item/grown/Initialize(mapload, obj/item/seeds/new_seed) . = ..() create_reagents(50) diff --git a/code/modules/hydroponics/hydroponics_tray.dm b/code/modules/hydroponics/hydroponics_tray.dm index c284393cfbf2..01a5aa3fa2d4 100644 --- a/code/modules/hydroponics/hydroponics_tray.dm +++ b/code/modules/hydroponics/hydroponics_tray.dm @@ -756,7 +756,7 @@ var/irrigate = 0 //How am I supposed to irrigate pill contents? var/transfer_amount - if(istype(reagent_source, /obj/item/reagent_containers/food/snacks) || ispill(reagent_source)) + if(istype(reagent_source, /obj/item/food/snacks) || ispill(reagent_source)) visi_msg="[user] composts [reagent_source], spreading it through [target]" transfer_amount = reagent_source.reagents.total_volume else @@ -794,7 +794,7 @@ S.my_atom = H reagent_source.reagents.trans_to(S,split) - if(istype(reagent_source, /obj/item/reagent_containers/food/snacks) || ispill(reagent_source)) + if(istype(reagent_source, /obj/item/food/snacks) || ispill(reagent_source)) qdel(reagent_source) H.applyChemicals(S, user) @@ -838,7 +838,6 @@ to_chat(user, "- Toxicity level: [toxic] / 100") to_chat(user, "- Water level: [waterlevel] / [maxwater]") to_chat(user, "- Nutrition level: [nutrilevel] / [maxnutri]") - to_chat(user, "") else if(istype(O, /obj/item/cultivator)) if(weedlevel > 0) @@ -851,7 +850,7 @@ else if(istype(O, /obj/item/storage/bag/plants)) attack_hand(user) var/obj/item/storage/bag/plants/S = O - for(var/obj/item/reagent_containers/food/snacks/grown/G in locate(user.x,user.y,user.z)) + for(var/obj/item/food/snacks/grown/G in locate(user.x,user.y,user.z)) if(!S.can_be_inserted(G)) return S.handle_item_insertion(G, 1) diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index 5c207ada6e61..f1db47c1cabf 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -203,7 +203,7 @@ return FALSE return TRUE -/datum/plant_gene/trait/proc/on_new(obj/item/reagent_containers/food/snacks/grown/G) +/datum/plant_gene/trait/proc/on_new(obj/item/food/snacks/grown/G) if(!origin_tech) // This ugly code segment adds RnD tech levels to resulting plants. return @@ -218,19 +218,19 @@ else G.origin_tech = list2params(origin_tech) -/datum/plant_gene/trait/proc/on_consume(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/target) +/datum/plant_gene/trait/proc/on_consume(obj/item/food/snacks/grown/G, mob/living/carbon/target) return -/datum/plant_gene/trait/proc/on_slip(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/target) +/datum/plant_gene/trait/proc/on_slip(obj/item/food/snacks/grown/G, mob/living/carbon/target) return -/datum/plant_gene/trait/proc/on_squash(obj/item/reagent_containers/food/snacks/grown/G, atom/target) +/datum/plant_gene/trait/proc/on_squash(obj/item/food/snacks/grown/G, atom/target) return -/datum/plant_gene/trait/proc/on_attackby(obj/item/reagent_containers/food/snacks/grown/G, obj/item/I, mob/user) +/datum/plant_gene/trait/proc/on_attackby(obj/item/food/snacks/grown/G, obj/item/I, mob/user) return -/datum/plant_gene/trait/proc/on_throw_impact(obj/item/reagent_containers/food/snacks/grown/G, atom/target) +/datum/plant_gene/trait/proc/on_throw_impact(obj/item/food/snacks/grown/G, atom/target) return /datum/plant_gene/trait/squash @@ -250,7 +250,7 @@ examine_line = "It has a very slippery skin." dangerous = TRUE -/datum/plant_gene/trait/slip/on_new(obj/item/reagent_containers/food/snacks/grown/G) +/datum/plant_gene/trait/slip/on_new(obj/item/food/snacks/grown/G) . = ..() if(istype(G) && ispath(G.trash, /obj/item/grown)) return @@ -274,19 +274,19 @@ origin_tech = list("powerstorage" = 5) dangerous = TRUE -/datum/plant_gene/trait/cell_charge/on_slip(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/C) +/datum/plant_gene/trait/cell_charge/on_slip(obj/item/food/snacks/grown/G, mob/living/carbon/C) var/power = G.seed.potency*rate if(prob(power)) C.electrocute_act(round(power), G, 1, SHOCK_NOGLOVES) -/datum/plant_gene/trait/cell_charge/on_squash(obj/item/reagent_containers/food/snacks/grown/G, atom/target) +/datum/plant_gene/trait/cell_charge/on_squash(obj/item/food/snacks/grown/G, atom/target) if(isliving(target)) var/mob/living/carbon/C = target var/power = G.seed.potency*rate if(prob(power)) C.electrocute_act(round(power), G, 1, SHOCK_NOGLOVES) -/datum/plant_gene/trait/cell_charge/on_consume(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/target) +/datum/plant_gene/trait/cell_charge/on_consume(obj/item/food/snacks/grown/G, mob/living/carbon/target) if(!G.reagents.total_volume) var/batteries_recharged = 0 for(var/obj/item/stock_parts/cell/C in target.GetAllContents()) @@ -318,7 +318,7 @@ /datum/plant_gene/trait/glow/proc/glow_power(obj/item/seeds/S) return max(S.potency*(rate + 0.01), 0.1) -/datum/plant_gene/trait/glow/on_new(obj/item/reagent_containers/food/snacks/grown/G) +/datum/plant_gene/trait/glow/on_new(obj/item/food/snacks/grown/G) ..() G.set_light(glow_range(G.seed), glow_power(G.seed), glow_color) @@ -349,7 +349,7 @@ origin_tech = list("bluespace" = 5) dangerous = TRUE -/datum/plant_gene/trait/teleport/on_squash(obj/item/reagent_containers/food/snacks/grown/G, atom/target) +/datum/plant_gene/trait/teleport/on_squash(obj/item/food/snacks/grown/G, atom/target) if(isliving(target)) var/mob/living/L = target var/teleport_radius = max(round(G.seed.potency / 10), 1) @@ -358,7 +358,7 @@ do_teleport(L, T, teleport_radius) L.apply_status_effect(STATUS_EFFECT_TELEPORTSICK) -/datum/plant_gene/trait/teleport/on_slip(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/C) +/datum/plant_gene/trait/teleport/on_slip(obj/item/food/snacks/grown/G, mob/living/carbon/C) var/teleport_radius = max(round(G.seed.potency / 10), 1) var/turf/T = get_turf(C) if(do_teleport(C, T, teleport_radius)) @@ -379,7 +379,7 @@ name = "Densified Chemicals" rate = 2 -/datum/plant_gene/trait/maxchem/on_new(obj/item/reagent_containers/food/snacks/grown/G) +/datum/plant_gene/trait/maxchem/on_new(obj/item/food/snacks/grown/G) ..() G.reagents.maximum_volume *= rate @@ -396,7 +396,7 @@ /datum/plant_gene/trait/battery name = "Capacitive Cell Production" -/datum/plant_gene/trait/battery/on_attackby(obj/item/reagent_containers/food/snacks/grown/G, obj/item/I, mob/user) +/datum/plant_gene/trait/battery/on_attackby(obj/item/food/snacks/grown/G, obj/item/I, mob/user) if(istype(I, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = I if(C.use(5)) @@ -425,7 +425,7 @@ name = "Hypodermic Prickles" dangerous = TRUE -/datum/plant_gene/trait/stinging/on_throw_impact(obj/item/reagent_containers/food/snacks/grown/G, atom/target) +/datum/plant_gene/trait/stinging/on_throw_impact(obj/item/food/snacks/grown/G, atom/target) if(isliving(target) && G.reagents && G.reagents.total_volume) var/mob/living/L = target // It would be nice to inject the body part the original thrower aimed at, @@ -442,7 +442,7 @@ name = "gaseous decomposition" dangerous = TRUE -/datum/plant_gene/trait/smoke/on_squash(obj/item/reagent_containers/food/snacks/grown/G, atom/target) +/datum/plant_gene/trait/smoke/on_squash(obj/item/food/snacks/grown/G, atom/target) var/datum/effect_system/smoke_spread/chem/S = new var/splat_location = get_turf(target) var/smoke_amount = round(sqrt(G.seed.potency * 0.1), 1) @@ -456,7 +456,7 @@ if(!(S.resistance_flags & FIRE_PROOF)) S.resistance_flags |= FIRE_PROOF -/datum/plant_gene/trait/fire_resistance/on_new(obj/item/reagent_containers/food/snacks/grown/G) +/datum/plant_gene/trait/fire_resistance/on_new(obj/item/food/snacks/grown/G) if(!(G.resistance_flags & FIRE_PROOF)) G.resistance_flags |= FIRE_PROOF diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index 608ba17e3c8c..30b3c34b6aae 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -16,8 +16,8 @@ if(extractor) seedloc = extractor.loc - if(istype(O, /obj/item/reagent_containers/food/snacks/grown/)) - var/obj/item/reagent_containers/food/snacks/grown/F = O + if(istype(O, /obj/item/food/snacks/grown)) + var/obj/item/food/snacks/grown/F = O if(F.seed) if(user && !user.drop_item()) //couldn't drop the item return @@ -122,10 +122,13 @@ /obj/machinery/seed_extractor/attack_ghost(mob/user) ui_interact(user) -/obj/machinery/seed_extractor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/seed_extractor/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/seed_extractor/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SeedExtractor", name, 800, 400, master_ui, state) + ui = new(user, src, "SeedExtractor", name) ui.open() /obj/machinery/seed_extractor/ui_data(mob/user) @@ -157,13 +160,13 @@ . = FALSE switch(action) if("vend") - vend_seed(text2num(params["seedid"]), params["seedvariant"], vend_amount) + vend_seed(params["seedid"], params["seedvariant"], vend_amount) add_fingerprint(usr) . = TRUE if("set_vend_amount") if(!length(params["vend_amount"])) return - vend_amount = clamp(text2num(params["vend_amount"]), 1, MAX_DISPENSE_SEEDS) + vend_amount = clamp(params["vend_amount"], 1, MAX_DISPENSE_SEEDS) add_fingerprint(usr) . = TRUE diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 71f263b80ff3..16387e4818a3 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -169,8 +169,8 @@ data = list("blood_type" = "O-") if(rid == "nutriment" || rid == "vitamin" || rid == "protein" || rid == "plantmatter") // Apple tastes of apple. - if(istype(T, /obj/item/reagent_containers/food/snacks/grown)) - var/obj/item/reagent_containers/food/snacks/grown/grown_edible = T + if(istype(T, /obj/item/food/snacks/grown)) + var/obj/item/food/snacks/grown/grown_edible = T data = grown_edible.tastes.Copy() T.reagents.add_reagent(rid, amount, data) diff --git a/code/modules/input/input.dm b/code/modules/input/input.dm index d1bd24e4a8a9..cab19d2c503f 100644 --- a/code/modules/input/input.dm +++ b/code/modules/input/input.dm @@ -24,11 +24,11 @@ "default" = list( "Any" = "\"Key_Down \[\[*\]\]\"", // Passes any key down to the rebindable input system "Any+UP" = "\"Key_Up \[\[*\]\]\"", // Passes any key up to the rebindable input system - "Tab" = "\".winset \\\"mainwindow.macro=legacy input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"", // Swaps us to legacy mode, forces input to the input bar, sets the input bar colour to salmon pink + "Tab" = "\".winset \\\"mainwindow.macro=legacy input.focus=true input.border=sunken\\\"\"", // Swaps us to legacy mode, forces input to the input bar, sets the input bar colour to salmon pink "Back" = "\".winset \\\"input.focus=true ? input.text=\\\"\"" // This makes it so backspace can remove default inputs ), "legacy" = list( - "Tab" = "\".winset \\\"mainwindow.macro=default map.focus=true input.background-color=[COLOR_INPUT_DISABLED]\\\"\"", // Swaps us to rebind mode, moves input away from input bar, sets input bar to white + "Tab" = "\".winset \\\"mainwindow.macro=default map.focus=true input.border=line\\\"\"", // Swaps us to rebind mode, moves input away from input bar, sets input bar to white "Back" = "\".winset \\\"input.focus=true ? input.text=\\\"\"" // This makes it so backspace can remove default inputs ), ) @@ -63,7 +63,8 @@ var/command = macro_set[key] winset(src, "[setname]-[key]", "parent=[setname];name=[key];command=[command]") - winset(src, null, "input.background-color=[COLOR_INPUT_DISABLED]") //screw you, we start in hotkey mode now + winset(src, null, "input.border=line") //screw you, we start in hotkey mode now + macro_sets = null //not needed anymore, bye have a great time /client/verb/Key_Down(_key as text) diff --git a/code/modules/instruments/songs/_song.dm b/code/modules/instruments/songs/_song.dm index bcb235d099b4..bf79ebcbae53 100644 --- a/code/modules/instruments/songs/_song.dm +++ b/code/modules/instruments/songs/_song.dm @@ -352,7 +352,7 @@ // We don't want to send the whole payload (song included) just for volume var/datum/tgui/ui = SStgui.get_open_ui(usr, parent, "main") if(ui) - ui.push_data(list("volume" = volume), force = TRUE) + ui.send_update(list("volume" = volume), TRUE) /** * Setter for setting how low the volume has to get before a note is considered "dead" and dropped diff --git a/code/modules/instruments/songs/_song_ui.dm b/code/modules/instruments/songs/_song_ui.dm index 5d7fa1f19312..b5fff8ab9e78 100644 --- a/code/modules/instruments/songs/_song_ui.dm +++ b/code/modules/instruments/songs/_song_ui.dm @@ -44,10 +44,13 @@ return data -/datum/song/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, parent, ui_key, ui, force_open) +/datum/song/ui_state(mob/user) + return GLOB.default_state + +/datum/song/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, parent, ui) if(!ui) - ui = new(user, parent, ui_key, "Instrument", parent?.name || "Instrument", 700, 500) + ui = new(user, parent, "Instrument", parent?.name || "Instrument") ui.open() ui.set_autoupdate(FALSE) // NO!!! Don't auto-update this!! diff --git a/code/modules/library/library_admin.dm b/code/modules/library/library_admin.dm index ded38fdd8069..050c03adf78f 100644 --- a/code/modules/library/library_admin.dm +++ b/code/modules/library/library_admin.dm @@ -30,10 +30,13 @@ ///browserui helper variable for turning pages in book var/view_book_page = 0 -/datum/ui_module/library_manager/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.admin_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/library_manager/ui_state(mob/user) + return GLOB.admin_state + +/datum/ui_module/library_manager/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "LibraryManager", name, 600, 600, master_ui, state) + ui = new(user, src, "LibraryManager", name) ui.autoupdate = TRUE ui.open() diff --git a/code/modules/library/library_computer.dm b/code/modules/library/library_computer.dm index ffddf2c1ae33..3f891c6373a9 100644 --- a/code/modules/library/library_computer.dm +++ b/code/modules/library/library_computer.dm @@ -103,10 +103,13 @@ return ..() -/obj/machinery/computer/library/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/library/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/library/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "LibraryComputer", name, 1050, 600, master_ui, state) + ui = new(user, src, "LibraryComputer", name) ui.open() /* diff --git a/code/modules/library/library_equipment.dm b/code/modules/library/library_equipment.dm index 42a13d63fde1..adb3b8fe4bef 100644 --- a/code/modules/library/library_equipment.dm +++ b/code/modules/library/library_equipment.dm @@ -214,10 +214,13 @@ if(c) selected_content.categories += c -/obj/machinery/bookbinder/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/bookbinder/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/bookbinder/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BookBinder", name, 700, 400, master_ui, state) + ui = new(user, src, "BookBinder", name) ui.open() /obj/machinery/bookbinder/ui_data(mob/user) diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index 022981c28720..1246798c39f7 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -23,9 +23,9 @@ var/loot = rand(1,100) //100 different crates with varying chances of spawning switch(loot) if(1 to 5) //5% chance - new /obj/item/reagent_containers/food/drinks/bottle/rum(src) - new /obj/item/reagent_containers/food/snacks/grown/ambrosia/deus(src) - new /obj/item/reagent_containers/food/drinks/bottle/whiskey(src) + new /obj/item/reagent_containers/drinks/bottle/rum(src) + new /obj/item/food/snacks/grown/ambrosia/deus(src) + new /obj/item/reagent_containers/drinks/bottle/whiskey(src) new /obj/item/lighter(src) if(6 to 10) new /obj/item/bedsheet(src) @@ -113,7 +113,7 @@ new /obj/item/bikehorn(src) new /obj/item/toy/crayon/rainbow(src) new /obj/item/reagent_containers/spray/waterflower(src) - new /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana(src) + new /obj/item/reagent_containers/drinks/bottle/bottleofbanana(src) if(89) //1% chance new /obj/item/weed_extract(src) if(90) @@ -135,7 +135,7 @@ new /obj/item/clothing/head/beret(src) new /obj/item/clothing/suit/suspenders(src) new /obj/item/toy/crayon/mime(src) - new /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing(src) + new /obj/item/reagent_containers/drinks/bottle/bottleofnothing(src) if(96) new /obj/item/hand_tele(src) if(97) diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm index b9c3b8e5acd8..57f32f4dae8b 100644 --- a/code/modules/mining/equipment/marker_beacons.dm +++ b/code/modules/mining/equipment/marker_beacons.dm @@ -59,10 +59,10 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( transfer_fingerprints_to(M) /obj/item/stack/marker_beacon/AltClick(mob/living/user) - if(!istype(user) || ui_status(user, GLOB.physical_state) != STATUS_INTERACTIVE) + if(!istype(user) || ui_status(user, GLOB.physical_state) != UI_INTERACTIVE) return var/input_color = tgui_input_list(user, "Choose a color.", "Beacon Color", GLOB.marker_beacon_colors) - if(!istype(user) || ui_status(user, GLOB.physical_state) != STATUS_INTERACTIVE) + if(!istype(user) || ui_status(user, GLOB.physical_state) != UI_INTERACTIVE) return if(input_color) picked_color = input_color @@ -135,10 +135,10 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( /obj/structure/marker_beacon/AltClick(mob/living/user) ..() - if(!istype(user) || ui_status(user, GLOB.physical_state) != STATUS_INTERACTIVE) + if(!istype(user) || ui_status(user, GLOB.physical_state) != UI_INTERACTIVE) return var/input_color = tgui_input_list(user, "Choose a color.", "Beacon Color", GLOB.marker_beacon_colors) - if(!istype(user) || ui_status(user, GLOB.physical_state) != STATUS_INTERACTIVE) + if(!istype(user) || ui_status(user, GLOB.physical_state) != UI_INTERACTIVE) return if(input_color) picked_color = input_color diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index b7f65bf4fdc6..520b8a38e5e5 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -225,7 +225,7 @@ return for(var/i in 1 to 5) - var/obj/item/reagent_containers/food/snacks/warmdonkpocket_weak/W = new(src) + var/obj/item/food/snacks/warmdonkpocket_weak/W = new(src) load(W) if(prob(50)) var/obj/item/storage/bag/dice/D = new(src) diff --git a/code/modules/mining/laborcamp/laborshuttle.dm b/code/modules/mining/laborcamp/laborshuttle.dm index cc1eead3e152..3d96b2259748 100644 --- a/code/modules/mining/laborcamp/laborshuttle.dm +++ b/code/modules/mining/laborcamp/laborshuttle.dm @@ -70,10 +70,13 @@ /obj/machinery/mineral/labor_prisoner_shuttle_console/attack_ghost(mob/user) attack_hand(user) -/obj/machinery/mineral/labor_prisoner_shuttle_console/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/mineral/labor_prisoner_shuttle_console/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/mineral/labor_prisoner_shuttle_console/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PrisonerShuttleConsole", name, 315, 150, master_ui, state) + ui = new(user, src, "PrisonerShuttleConsole", name) ui.open() /obj/machinery/mineral/labor_prisoner_shuttle_console/ui_data(mob/user) diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index 7a9d08733e32..668442ccf5fa 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -9,7 +9,7 @@ var/harvested_name = "shortened mushrooms" var/harvested_desc = "Some quickly regrowing mushrooms, formerly known to be quite large." var/needs_sharp_harvest = TRUE - var/harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings + var/harvest = /obj/item/food/snacks/grown/ash_flora/shavings var/harvest_amount_low = 1 var/harvest_amount_high = 3 var/harvest_time = 60 @@ -84,7 +84,7 @@ desc = "A number of mushrooms, each of which surrounds a greenish sporangium with a number of leaf-like structures." harvested_name = "leafless mushrooms" harvested_desc = "A bunch of formerly-leafed mushrooms, with their sporangiums exposed. Scandalous?" - harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf + harvest = /obj/item/food/snacks/grown/ash_flora/mushroom_leaf needs_sharp_harvest = FALSE harvest_amount_high = 4 harvest_time = 20 @@ -100,7 +100,7 @@ desc = "Several mushrooms, the larger of which have a ring of conks at the midpoint of their stems." harvested_name = "small mushrooms" harvested_desc = "Several small mushrooms near the stumps of what likely were larger mushrooms." - harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_cap + harvest = /obj/item/food/snacks/grown/ash_flora/mushroom_cap harvest_amount_high = 4 harvest_time = 50 harvest_message_low = "You slice the cap off of a mushroom." @@ -117,7 +117,7 @@ light_power = 2.1 harvested_name = "tiny mushrooms" harvested_desc = "A few tiny mushrooms around larger stumps. You can already see them growing back." - harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem + harvest = /obj/item/food/snacks/grown/ash_flora/mushroom_stem harvest_amount_high = 4 harvest_time = 40 harvest_message_low = "You pick and slice the cap off of a mushroom, leaving the stem." @@ -132,7 +132,7 @@ desc = "Several prickly cacti, brimming with ripe fruit and covered in a thin layer of ash." harvested_name = "cacti" harvested_desc = "A bunch of prickly cacti. You can see fruits slowly growing beneath the covering of ash." - harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit + harvest = /obj/item/food/snacks/grown/ash_flora/cactus_fruit needs_sharp_harvest = FALSE harvest_amount_high = 2 harvest_time = 10 @@ -181,7 +181,7 @@ . = ..() icon_state = "basalt[rand(1, 4)]" -/obj/item/reagent_containers/food/snacks/grown/ash_flora +/obj/item/food/snacks/grown/ash_flora name = "mushroom shavings" desc = "Some shavings from a tall mushroom. With enough, might serve as a bowl." icon = 'icons/obj/lavaland/ash_flora.dmi' @@ -192,35 +192,35 @@ seed = /obj/item/seeds/lavaland/polypore wine_power = 0.2 -/obj/item/reagent_containers/food/snacks/grown/ash_flora/Initialize(mapload) +/obj/item/food/snacks/grown/ash_flora/Initialize(mapload) . = ..() pixel_x = rand(-4, 4) pixel_y = rand(-4, 4) -/obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings //for actual crafting +/obj/item/food/snacks/grown/ash_flora/shavings //for actual crafting -/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf +/obj/item/food/snacks/grown/ash_flora/mushroom_leaf name = "mushroom leaf" desc = "A leaf, from a mushroom." icon_state = "mushroom_leaf" seed = /obj/item/seeds/lavaland/porcini wine_power = 0.4 -/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_cap +/obj/item/food/snacks/grown/ash_flora/mushroom_cap name = "mushroom cap" desc = "The cap of a large mushroom." icon_state = "mushroom_cap" seed = /obj/item/seeds/lavaland/inocybe wine_power = 0.7 -/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem +/obj/item/food/snacks/grown/ash_flora/mushroom_stem name = "mushroom stem" desc = "A long mushroom stem. It's slightly glowing." icon_state = "mushroom_stem" seed = /obj/item/seeds/lavaland/ember wine_power = 0.6 -/obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit +/obj/item/food/snacks/grown/ash_flora/cactus_fruit name = "cactus fruit" desc = "A cactus fruit covered in a thick, reddish skin. And some ash." icon_state = "cactus_fruit" @@ -249,7 +249,7 @@ icon_state = "seed-cactus" species = "cactus" plantname = "Fruiting Cactus" - product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit + product = /obj/item/food/snacks/grown/ash_flora/cactus_fruit genes = list(/datum/plant_gene/trait/fire_resistance) growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' growthstages = 2 @@ -261,7 +261,7 @@ icon_state = "mycelium-polypore" species = "polypore" plantname = "Polypore Mushrooms" - product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings + product = /obj/item/food/snacks/grown/ash_flora/shavings genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/trait/fire_resistance) growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' reagents_add = list("sugar" = 0.06, "ethanol" = 0.04, "stabilizing_agent" = 0.06, "minttoxin" = 0.02) @@ -272,7 +272,7 @@ icon_state = "mycelium-porcini" species = "porcini" plantname = "Porcini Mushrooms" - product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf + product = /obj/item/food/snacks/grown/ash_flora/mushroom_leaf genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/trait/fire_resistance) growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' reagents_add = list("nutriment" = 0.06, "vitfro" = 0.04, "nicotine" = 0.04) @@ -284,7 +284,7 @@ icon_state = "mycelium-inocybe" species = "inocybe" plantname = "Inocybe Mushrooms" - product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_cap + product = /obj/item/food/snacks/grown/ash_flora/mushroom_cap genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/trait/fire_resistance) growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' reagents_add = list("lsd" = 0.04, "entpoly" = 0.08, "psilocybin" = 0.04) @@ -295,7 +295,7 @@ icon_state = "mycelium-ember" species = "ember" plantname = "Embershroom Mushrooms" - product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem + product = /obj/item/food/snacks/grown/ash_flora/mushroom_stem genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/trait/glow, /datum/plant_gene/trait/fire_resistance) growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' reagents_add = list("tinlux" = 0.04, "vitamin" = 0.02, "space_drugs" = 0.02) @@ -305,12 +305,12 @@ //what you can craft with these things /datum/crafting_recipe/mushroom_bowl name = "Mushroom Bowl" - result = list(/obj/item/reagent_containers/food/drinks/mushroom_bowl) - reqs = list(/obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings = 5) + result = list(/obj/item/reagent_containers/drinks/mushroom_bowl) + reqs = list(/obj/item/food/snacks/grown/ash_flora/shavings = 5) time = 30 category = CAT_PRIMAL -/obj/item/reagent_containers/food/drinks/mushroom_bowl +/obj/item/reagent_containers/drinks/mushroom_bowl name = "mushroom bowl" desc = "A bowl made out of mushrooms. Not food, though it might have contained some at some point." icon = 'icons/obj/lavaland/ash_flora.dmi' diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 7d221a5f6410..8a47ee4838fd 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -63,7 +63,7 @@ if(20) new /obj/item/grenade/clusterbuster/inferno(src) if(21) - new /obj/item/reagent_containers/food/drinks/bottle/holywater/hell(src) + new /obj/item/reagent_containers/drinks/bottle/holywater/hell(src) if(22) new /obj/item/spellbook/oneuse/summonitem(src) if(23) diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index 41d77a681bbe..33ea40ed4126 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -367,16 +367,22 @@ return FALSE add_fingerprint(usr) -/obj/machinery/mineral/ore_redemption/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - var/datum/asset/materials_assets = get_asset_datum(/datum/asset/simple/materials) - materials_assets.send(user) +/obj/machinery/mineral/ore_redemption/ui_state(mob/user) + return GLOB.default_state - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/mineral/ore_redemption/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "OreRedemption", name, 500, 600) + ui = new(user, src, "OreRedemption", name) ui.open() ui.set_autoupdate(FALSE) +/obj/machinery/mineral/ore_redemption/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/materials), + get_asset_datum(/datum/asset/spritesheet/alloys) + ) + /** * Smelts the given stack of ore. * diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index f96ea785af88..2c942dc578ba 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -83,7 +83,7 @@ EQUIPMENT("Minebot Melee Upgrade", /obj/item/mine_bot_upgrade, 400), ) prize_list["Miscellaneous"] = list( - EQUIPMENT("Absinthe", /obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, 100), + EQUIPMENT("Absinthe", /obj/item/reagent_containers/drinks/bottle/absinthe/premium, 100), EQUIPMENT("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 300), EQUIPMENT("Cigar", /obj/item/clothing/mask/cigarette/cigar/havana, 150), EQUIPMENT("GAR Meson Scanners", /obj/item/clothing/glasses/meson/gar, 500), @@ -91,7 +91,7 @@ EQUIPMENT("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000), EQUIPMENT("Soap", /obj/item/soap/nanotrasen, 200), EQUIPMENT("Space Cash", /obj/item/stack/spacecash/c200, 2000), - EQUIPMENT("Whiskey", /obj/item/reagent_containers/food/drinks/bottle/whiskey, 100), + EQUIPMENT("Whiskey", /obj/item/reagent_containers/drinks/bottle/whiskey, 100), EQUIPMENT("HRD-MDE Project Box", /obj/item/storage/box/hardmode_box, 3500) //I want miners have to pay a lot to get this, but be set once they do. ) prize_list["Extra"] = list() // Used in child vendors @@ -158,19 +158,20 @@ dirty_items = TRUE return ..() -/obj/machinery/mineral/equipment_vendor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/mineral/equipment_vendor/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/mineral/equipment_vendor/ui_interact(mob/user, datum/tgui/ui = null) // Update static data if need be if(dirty_items) if(!ui) - ui = SStgui.get_open_ui(user, src, ui_key) - if(ui) // OK so ui?. somehow breaks the implied src so this is needed - ui.initial_static_data = ui_static_data(user) + ui = SStgui.get_open_ui(user, src) dirty_items = FALSE // Open the window - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "MiningVendor", name, 400, 450) + ui = new(user, src, "MiningVendor", name) ui.open() ui.set_autoupdate(FALSE) @@ -306,7 +307,7 @@ EQUIPMENT("Extra ID", /obj/item/card/id/golem, 250), EQUIPMENT("Science Backpack", /obj/item/storage/backpack/science, 250), EQUIPMENT("Full Toolbelt", /obj/item/storage/belt/utility/full/multitool, 250), - EQUIPMENT("Monkey Cube", /obj/item/reagent_containers/food/snacks/monkeycube, 250), + EQUIPMENT("Monkey Cube", /obj/item/food/snacks/monkeycube, 250), EQUIPMENT("Royal Cape of the Liberator", /obj/item/bedsheet/rd/royal_cape, 500), EQUIPMENT("Grey Slime Extract", /obj/item/slime_extract/grey, 1000), EQUIPMENT("KA Trigger Modification Kit", /obj/item/borg/upgrade/modkit/trigger_guard, 1000), @@ -335,16 +336,16 @@ prize_list = list() prize_list["Scum"] += list( EQUIPMENT("Trauma Kit", /obj/item/stack/medical/bruise_pack/advanced, 150), - EQUIPMENT("Whisky", /obj/item/reagent_containers/food/drinks/bottle/whiskey, 100), - EQUIPMENT("Beer", /obj/item/reagent_containers/food/drinks/cans/beer, 50), - EQUIPMENT("Absinthe", /obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, 250), + EQUIPMENT("Whisky", /obj/item/reagent_containers/drinks/bottle/whiskey, 100), + EQUIPMENT("Beer", /obj/item/reagent_containers/drinks/cans/beer, 50), + EQUIPMENT("Absinthe", /obj/item/reagent_containers/drinks/bottle/absinthe/premium, 250), EQUIPMENT("Cigarettes", /obj/item/storage/fancy/cigarettes, 100), EQUIPMENT("Medical Marijuana", /obj/item/storage/fancy/cigarettes/cigpack_med, 250), EQUIPMENT("Cigar", /obj/item/clothing/mask/cigarette/cigar/havana, 150), EQUIPMENT("Box of matches", /obj/item/storage/fancy/matches, 50), - EQUIPMENT("Cheeseburger", /obj/item/reagent_containers/food/snacks/burger/cheese, 150), - EQUIPMENT("Big Burger", /obj/item/reagent_containers/food/snacks/burger/bigbite, 250), - EQUIPMENT("Recycled Prisoner", /obj/item/reagent_containers/food/snacks/soylentgreen, 500), + EQUIPMENT("Cheeseburger", /obj/item/food/snacks/burger/cheese, 150), + EQUIPMENT("Big Burger", /obj/item/food/snacks/burger/bigbite, 250), + EQUIPMENT("Recycled Prisoner", /obj/item/food/snacks/soylentgreen, 500), EQUIPMENT("Crayons", /obj/item/storage/fancy/crayons, 350), EQUIPMENT("Plushie", /obj/random/plushie, 750), EQUIPMENT("Dnd set", /obj/item/storage/box/characters, 500), diff --git a/code/modules/mob/dead/observer/observer_base.dm b/code/modules/mob/dead/observer/observer_base.dm index c4a951c3604e..97c089cafbae 100644 --- a/code/modules/mob/dead/observer/observer_base.dm +++ b/code/modules/mob/dead/observer/observer_base.dm @@ -624,7 +624,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/verb/view_manifest() set name = "View Crew Manifest" set category = "Ghost" - GLOB.generic_crew_manifest.ui_interact(usr, state = GLOB.observer_state) + GLOB.generic_crew_manifest.ui_interact(usr) //this is called when a ghost is drag clicked to something. /mob/dead/observer/MouseDrop(atom/over) diff --git a/code/modules/mob/dead/observer/orbit.dm b/code/modules/mob/dead/observer/orbit.dm index 158cb9bfd90f..555e05928f3a 100644 --- a/code/modules/mob/dead/observer/orbit.dm +++ b/code/modules/mob/dead/observer/orbit.dm @@ -6,10 +6,13 @@ qdel(src) owner = new_owner -/datum/orbit_menu/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.observer_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/orbit_menu/ui_state(mob/user) + return GLOB.observer_state + +/datum/orbit_menu/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Orbit", "Orbit", 700, 500, master_ui, state) + ui = new(user, src, "Orbit", "Orbit") ui.open() /datum/orbit_menu/ui_act(action, list/params, datum/tgui/ui) diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index 361163f4df77..c00b0667daaf 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -42,11 +42,18 @@ if(msg == "") // There is literally no content left in this message, we need to shut this shit down . = "" // hear_say will suppress it + return + if(isliving(src)) + for(var/datum/component/codeword_hearing/hearing_datum in GetComponents(/datum/component/codeword_hearing)) + var/tmp_msg = hearing_datum.handle_hearing(msg) + if(!tmp_msg) + continue + msg = tmp_msg + + if(verb) + . = "[verb], \"[trim(msg)]\"" else - if(verb) - . = "[verb], \"[trim(msg)]\"" - else - . = trim(msg) + . = trim(msg) /mob/proc/hear_say(list/message_pieces, verb = "says", italics = 0, mob/speaker = null, sound/speech_sound, sound_vol, sound_frequency, use_voice = TRUE) if(!client) diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index 9ed5f563c1e0..e48f38e341e1 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -265,7 +265,7 @@ /obj/item/mmi/contents_ui_distance(src_object, mob/living/user) . = ..() if((src_object in view(src)) && get_dist(src_object, src) <= user.client.maxview()) - return STATUS_INTERACTIVE // interactive (green visibility) + return UI_INTERACTIVE // interactive (green visibility) return user.shared_living_ui_distance() /obj/item/mmi/forceMove(atom/destination) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 31240725f069..91701035d03f 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -2,7 +2,7 @@ name = "alien" icon_state = "alien_s" - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat= 5, /obj/item/stack/sheet/animalhide/xeno = 1) + butcher_results = list(/obj/item/food/snacks/monstermeat/xenomeat = 5, /obj/item/stack/sheet/animalhide/xeno = 1) var/obj/item/r_store = null var/obj/item/l_store = null var/caste = "" diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 8fbf5c0d845e..77caeb92db18 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1163,26 +1163,22 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven /mob/living/carbon/proc/can_eat(flags = 255) return TRUE -/mob/living/carbon/proc/eat(obj/item/reagent_containers/to_eat, mob/user, bitesize_override) - if(ispill(to_eat) || ispatch(to_eat)) +/mob/living/carbon/proc/eat(obj/item/food/to_eat, mob/user, bitesize_override) + if(ispill(to_eat) || ispatch(to_eat)) // We first have to know if it's either a pill or a patch, only then can we check if it's a food item return consume_patch_or_pill(to_eat, user) - if(!isfood(to_eat)) // We first have to know if it's either a pill or a patch, only then can we check if it's a food item + if(!isfood(to_eat)) return FALSE - var/obj/item/reagent_containers/food/food = to_eat // It's not a patch or a pill so it must be food + var/obj/item/food/food = to_eat // It's not a patch or a pill so it must be food var/fullness = nutrition + 10 - if(istype(food, /obj/item/reagent_containers/food/snacks)) + if(istype(food, /obj/item/food/snacks)) for(var/datum/reagent/consumable/C in reagents.reagent_list) //we add the nutrition value of what we're currently digesting fullness += C.nutriment_factor * C.volume / (C.metabolization_rate * metabolism_efficiency) if(user == src) - if(istype(food, /obj/item/reagent_containers/food/drinks)) - if(!selfDrink(food)) - return FALSE - else - if(!selfFeed(food, fullness)) - return FALSE + if(!selfFeed(food, fullness)) + return FALSE else if(!forceFed(food, user, fullness)) return FALSE @@ -1191,7 +1187,27 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven SSticker.score.score_food_eaten++ return TRUE -/mob/living/carbon/proc/selfFeed(obj/item/reagent_containers/food/to_eat, fullness) +/mob/living/carbon/proc/drink(obj/item/reagent_containers/drinks/to_eat, mob/user) + if(user == src) + if(!selfDrink(to_eat)) + return FALSE + else if(!forceFed(to_eat, user, nutrition)) + return FALSE + + if(to_eat.consume_sound) + playsound(loc, to_eat.consume_sound, rand(10, 50), TRUE) + if(to_eat.reagents.total_volume) + taste(to_eat.reagents) + var/fraction = min(1 / to_eat.reagents.total_volume, 1) + var/drink_size = to_eat.amount_per_transfer_from_this > 5 ? 5 : to_eat.amount_per_transfer_from_this + if(fraction) + to_eat.reagents.reaction(src, REAGENT_INGEST, fraction) + to_eat.reagents.trans_to(src, drink_size) + + SSticker.score.score_food_eaten++ + return TRUE + +/mob/living/carbon/proc/selfFeed(obj/item/food/to_eat, fullness) if(ispill(to_eat)) to_chat(src, "You swallow [to_eat].") else if(ispatch(to_eat)) @@ -1213,7 +1229,7 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven return FALSE return TRUE -/mob/living/carbon/proc/selfDrink(obj/item/reagent_containers/food/drinks/toDrink, mob/user) +/mob/living/carbon/proc/selfDrink(obj/item/reagent_containers/drinks/toDrink, mob/user) return TRUE /mob/living/carbon/proc/forceFed(obj/item/reagent_containers/to_eat, mob/user, fullness) @@ -1233,7 +1249,7 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven /*TO DO - If/when stomach organs are introduced, override this at the human level sending the item to the stomach so that different stomachs can handle things in different ways VB*/ -/mob/living/carbon/proc/consume(obj/item/reagent_containers/food/to_eat, bitesize_override) +/mob/living/carbon/proc/consume(obj/item/food/to_eat, bitesize_override) var/this_bite = bitesize_override ? bitesize_override : to_eat.bitesize if(!to_eat.reagents) return diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 04d9bb6f7457..79d2c7a7669d 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -455,7 +455,7 @@ emp_act return FALSE if(HAS_TRAIT(I, TRAIT_BUTCHERS_HUMANS) && stat == DEAD && user.a_intent == INTENT_HARM) - var/obj/item/reagent_containers/food/snacks/meat/human/newmeat = new /obj/item/reagent_containers/food/snacks/meat/human(get_turf(loc)) + var/obj/item/food/snacks/meat/human/newmeat = new /obj/item/food/snacks/meat/human(get_turf(loc)) newmeat.name = real_name + newmeat.name newmeat.subjectname = real_name newmeat.subjectjob = job diff --git a/code/modules/mob/living/carbon/human/human_mob.dm b/code/modules/mob/living/carbon/human/human_mob.dm index 2f0c994e8afe..b58e3aef02a0 100644 --- a/code/modules/mob/living/carbon/human/human_mob.dm +++ b/code/modules/mob/living/carbon/human/human_mob.dm @@ -1867,20 +1867,20 @@ Eyes need to have significantly high darksight to shine unless the mob has the X /mob/living/carbon/human/can_eat(flags = 255) return dna.species && (dna.species.dietflags & flags) -/mob/living/carbon/human/selfFeed(obj/item/reagent_containers/food/toEat, fullness) +/mob/living/carbon/human/selfFeed(obj/item/food/toEat, fullness) if(!check_has_mouth()) to_chat(src, "Where do you intend to put \the [toEat]? You don't have a mouth!") return 0 return ..() -/mob/living/carbon/human/forceFed(obj/item/reagent_containers/food/toEat, mob/user, fullness) +/mob/living/carbon/human/forceFed(obj/item/food/toEat, mob/user, fullness) if(!check_has_mouth()) - if(!((istype(toEat, /obj/item/reagent_containers/food/drinks) && (ismachineperson(src))))) + if(!((istype(toEat, /obj/item/reagent_containers/drinks) && (ismachineperson(src))))) to_chat(user, "Where do you intend to put \the [toEat]? \The [src] doesn't have a mouth!") return 0 return ..() -/mob/living/carbon/human/selfDrink(obj/item/reagent_containers/food/drinks/toDrink) +/mob/living/carbon/human/selfDrink(obj/item/reagent_containers/drinks/toDrink) if(!check_has_mouth()) if(!ismachineperson(src)) to_chat(src, "Where do you intend to put \the [src]? You don't have a mouth!") diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index 84a9006f9e06..554048b09f31 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -572,7 +572,7 @@ ..() last_banana = world.time last_honk = world.time - H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana(H), SLOT_HUD_RIGHT_STORE) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/drinks/bottle/bottleofbanana(H), SLOT_HUD_RIGHT_STORE) H.equip_to_slot_or_del(new /obj/item/bikehorn(H), SLOT_HUD_LEFT_STORE) H.AddElement(/datum/element/waddling) @@ -651,7 +651,7 @@ /datum/species/golem/tranquillite/on_species_gain(mob/living/carbon/human/H) ..() H.equip_to_slot_or_del(new /obj/item/clothing/head/beret(H), SLOT_HUD_HEAD) - H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing(H), SLOT_HUD_RIGHT_STORE) + H.equip_to_slot_or_del(new /obj/item/reagent_containers/drinks/bottle/bottleofnothing(H), SLOT_HUD_RIGHT_STORE) H.equip_to_slot_or_del(new /obj/item/cane(H), SLOT_HUD_LEFT_HAND) if(H.mind) H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe/conjure/build/mime_wall(null)) diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm index 011539044ff8..0bd6d305fb01 100644 --- a/code/modules/mob/living/carbon/human/species/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -64,7 +64,7 @@ ..() H.real_name = "[lowertext(name)] ([rand(100,999)])" H.name = H.real_name - H.butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/monkey = 5) + H.butcher_results = list(/obj/item/food/snacks/meat/monkey = 5) /datum/species/monkey/handle_dna(mob/living/carbon/human/H, remove) ..() diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index c2196d411a77..be46669274a0 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -28,10 +28,13 @@ GLOBAL_LIST_EMPTY(pai_software_by_key) pai_user.ui_interact(pai_user) -/mob/living/silicon/pai/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.self_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/mob/living/silicon/pai/ui_state(mob/user) + return GLOB.self_state + +/mob/living/silicon/pai/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PAI", name, 600, 650, master_ui, state) + ui = new(user, src, "PAI", name) ui.open() /mob/living/silicon/pai/ui_data(mob/user) diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm index c6cff44ef436..49b7baaf9504 100644 --- a/code/modules/mob/living/silicon/robot/component.dm +++ b/code/modules/mob/living/silicon/robot/component.dm @@ -264,11 +264,13 @@ /obj/item/robotanalyzer/attack(mob/living/M as mob, mob/living/user as mob) if((HAS_TRAIT(user, TRAIT_CLUMSY) || user.getBrainLoss() >= 60) && prob(50)) + var/list/messages = list() user.visible_message("[user] has analyzed the floor's vitals!", "You try to analyze the floor's vitals!") - to_chat(user, "Analyzing Results for The floor:\n\t Overall Status: Healthy") - to_chat(user, "\t Damage Specifics: [0]-[0]-[0]-[0]") - to_chat(user, "Key: Suffocation/Toxin/Burns/Brute") - to_chat(user, "Body Temperature: ???") + messages.Add("Analyzing Results for The floor:\n\t Overall Status: Healthy") + messages.Add("\t Damage Specifics: [0]-[0]-[0]-[0]") + messages.Add("Key: Suffocation/Toxin/Burns/Brute") + messages.Add("Body Temperature: ???") + to_chat(user, chat_box_healthscan(messages.Join("
"))) return user.visible_message("[user] has analyzed [M]'s components.","You have analyzed [M]'s components.") @@ -286,26 +288,26 @@ to_chat(user, "You can't analyze non-robotic things!") return - + var/list/messages = list() switch(scan_type) if("robot") var/BU = M.getFireLoss() > 50 ? "[M.getFireLoss()]" : M.getFireLoss() var/BR = M.getBruteLoss() > 50 ? "[M.getBruteLoss()]" : M.getBruteLoss() - to_chat(user, "Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "fully disabled" : "[M.health]% functional"]") - to_chat(user, "\t Key: Electronics/Brute") - to_chat(user, "\t Damage Specifics: [BU] - [BR]") + messages.Add("Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "fully disabled" : "[M.health]% functional"]") + messages.Add("\t Key: Electronics/Brute") + messages.Add("\t Damage Specifics: [BU] - [BR]") if(M.timeofdeath && M.stat == DEAD) - to_chat(user, "Time of Disable: [station_time_timestamp("hh:mm:ss", M.timeofdeath)]") + messages.Add("Time of Disable: [station_time_timestamp("hh:mm:ss", M.timeofdeath)]") var/mob/living/silicon/robot/H = M var/list/damaged = H.get_damaged_components(TRUE, TRUE, TRUE) // Get all except the missing ones var/list/missing = H.get_missing_components() - to_chat(user, "Localized Damage:") + messages.Add("Localized Damage:") if(!LAZYLEN(damaged) && !LAZYLEN(missing)) - to_chat(user, "\t Components are OK.") + messages.Add("\t Components are OK.") else if(LAZYLEN(damaged)) for(var/datum/robot_component/org in damaged) - user.show_message(text("\t []: [][] - [] - [] - []", \ + messages.Add(text("\t []: [][] - [] - [] - []", \ capitalize(org.name), \ (org.is_destroyed()) ? "DESTROYED " :"",\ (org.electronics_damage > 0) ? "[org.electronics_damage]" :0, \ @@ -314,15 +316,15 @@ (org.powered) ? "Power ON" : "Power OFF"),1) if(LAZYLEN(missing)) for(var/datum/robot_component/org in missing) - user.show_message("\t [capitalize(org.name)]: MISSING") + messages.Add("\t [capitalize(org.name)]: MISSING") if(H.emagged && prob(5)) - to_chat(user, "\t ERROR: INTERNAL SYSTEMS COMPROMISED") + messages.Add("\t ERROR: INTERNAL SYSTEMS COMPROMISED") if("prosthetics") var/mob/living/carbon/human/H = M - to_chat(user, "Analyzing Results for \the [H]:") - to_chat(user, "Key: Electronics/Brute") + messages.Add("Analyzing Results for \the [H]:") + messages.Add("Key: Electronics/Brute") to_chat(user, "External prosthetics:") var/organ_found @@ -331,26 +333,28 @@ if(!E.is_robotic()) continue organ_found = TRUE - to_chat(user, "[E.name]: [E.brute_dam][E.burn_dam]") + messages.Add("[E.name]: [E.brute_dam][E.burn_dam]") if(!organ_found) - to_chat(user, "No prosthetics located.") - to_chat(user, "
") - to_chat(user, "Internal prosthetics:") + messages.Add("No prosthetics located.") + messages.Add("
") + messages.Add("Internal prosthetics:") organ_found = null if(LAZYLEN(H.internal_organs)) for(var/obj/item/organ/internal/O in H.internal_organs) if(!O.is_robotic() || istype(O, /obj/item/organ/internal/cyberimp)) continue organ_found = TRUE - to_chat(user, "[capitalize(O.name)]: [O.damage]") + messages.Add("[capitalize(O.name)]: [O.damage]") if(!organ_found) - to_chat(user, "No prosthetics located.") - to_chat(user, "
") - to_chat(user, "Cybernetic implants:") + messages.Add("No prosthetics located.") + messages.Add("
") + messages.Add("Cybernetic implants:") organ_found = null if(LAZYLEN(H.internal_organs)) for(var/obj/item/organ/internal/cyberimp/I in H.internal_organs) organ_found = TRUE - to_chat(user, "[capitalize(I.name)]: [I.crit_fail ? "CRITICAL FAILURE" : I.damage]") + messages.Add("[capitalize(I.name)]: [I.crit_fail ? "CRITICAL FAILURE" : I.damage]") if(!organ_found) - to_chat(user, "No implants located.") + messages.Add("No implants located.") + + to_chat(user, chat_box_healthscan(messages.Join("
"))) diff --git a/code/modules/mob/living/silicon/robot/drone/drone_console.dm b/code/modules/mob/living/silicon/robot/drone/drone_console.dm index 2c09800c1d6c..3246df91c812 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_console.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_console.dm @@ -31,10 +31,13 @@ ui_interact(user) // tgui\packages\tgui\interfaces\DroneConsole.js -/obj/machinery/computer/drone_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/drone_control/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/drone_control/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "DroneConsole", "Drone Control Console", 420, 500, master_ui, state) + ui = new(user, src, "DroneConsole", "Drone Control Console") ui.open() /obj/machinery/computer/drone_control/ui_data(mob/user) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 6d779daa3b98..0eac5028132b 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -522,22 +522,22 @@ /obj/item/reagent_containers/dropper/cyborg, /obj/item/lighter/zippo, /obj/item/storage/bag/tray/cyborg, - /obj/item/reagent_containers/food/drinks/shaker + /obj/item/reagent_containers/drinks/shaker ) - emag_override_modules = list(/obj/item/reagent_containers/food/drinks/cans/beer/sleepy_beer) + emag_override_modules = list(/obj/item/reagent_containers/drinks/cans/beer/sleepy_beer) emag_modules = list(/obj/item/restraints/handcuffs/cable/zipties/cyborg) special_rechargables = list( - /obj/item/reagent_containers/food/condiment/enzyme, - /obj/item/reagent_containers/food/drinks/cans/beer/sleepy_beer + /obj/item/reagent_containers/condiment/enzyme, + /obj/item/reagent_containers/drinks/cans/beer/sleepy_beer ) // This is a special type of beer given when emagged, one sip and the target falls asleep. -/obj/item/reagent_containers/food/drinks/cans/beer/sleepy_beer +/obj/item/reagent_containers/drinks/cans/beer/sleepy_beer name = "Mickey Finn's Special Brew" list_reagents = list("beer2" = 50) -/obj/item/reagent_containers/food/drinks/cans/beer/sleepy_beer/cyborg_recharge(coeff, emagged) +/obj/item/reagent_containers/drinks/cans/beer/sleepy_beer/cyborg_recharge(coeff, emagged) if(emagged) reagents.check_and_add("beer2", volume, 5) diff --git a/code/modules/mob/living/silicon/silicon_mob.dm b/code/modules/mob/living/silicon/silicon_mob.dm index 3ca8f009e585..b373d7d8b96f 100644 --- a/code/modules/mob/living/silicon/silicon_mob.dm +++ b/code/modules/mob/living/silicon/silicon_mob.dm @@ -327,7 +327,7 @@ // this function displays the stations manifest in a separate window /mob/living/silicon/proc/show_station_manifest() - GLOB.generic_crew_manifest.ui_interact(usr, state = GLOB.not_incapacitated_state) + GLOB.generic_crew_manifest.ui_interact(usr) /mob/living/silicon/assess_threat() //Secbots won't hunt silicon units return -10 diff --git a/code/modules/mob/living/silicon/silicon_subsystems.dm b/code/modules/mob/living/silicon/silicon_subsystems.dm index 1594f1b664b4..5bde088ec64f 100644 --- a/code/modules/mob/living/silicon/silicon_subsystems.dm +++ b/code/modules/mob/living/silicon/silicon_subsystems.dm @@ -62,7 +62,7 @@ set category = "Подсистемы" set name = "Менеджер атмосферы" - atmos_control.ui_interact(usr, state = GLOB.self_state) + atmos_control.ui_interact(usr) /******************** * Crew Monitor * @@ -70,7 +70,7 @@ /mob/living/silicon/proc/subsystem_crew_monitor() set category = "Подсистемы" set name = "Монитор экипажа" - crew_monitor.ui_interact(usr, state = GLOB.self_state) + crew_monitor.ui_interact(usr) /**************** * Law Manager * @@ -79,7 +79,7 @@ set name = "Менеджер законов" set category = "Подсистемы" - law_manager.ui_interact(usr, state = GLOB.conscious_state) + law_manager.ui_interact(usr) /******************** * Power Monitor * @@ -88,7 +88,7 @@ set category = "Подсистемы" set name = "Монитор питания" - power_monitor.ui_interact(usr, state = GLOB.self_state) + power_monitor.ui_interact(usr) /mob/living/silicon/robot/proc/self_diagnosis() set category = "Robot Commands" diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 379e8e674cd9..23c7a5fe9b56 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -837,7 +837,7 @@ Pass a positive integer as an argument to override a bot's default speed. var/datum/browser/popup = new(M,window_id,window_name,350,600) popup.set_content(dat) popup.open() - onclose(M,window_id,ref=src) + onclose(M, window_id, src) return /mob/living/simple_animal/bot/proc/update_controls() diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index 08bf6ea34a80..c7fea7f0c99a 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -185,10 +185,13 @@ /mob/living/simple_animal/bot/cleanbot/show_controls(mob/user) ui_interact(user) -/mob/living/simple_animal/bot/cleanbot/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/mob/living/simple_animal/bot/cleanbot/ui_state(mob/user) + return GLOB.default_state + +/mob/living/simple_animal/bot/cleanbot/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BotClean", name, 500, 500) + ui = new(user, src, "BotClean", name) ui.open() /mob/living/simple_animal/bot/cleanbot/ui_data(mob/user) diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index 4b97371bc2f8..ea2c389b2e41 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -102,10 +102,13 @@ /mob/living/simple_animal/bot/ed209/show_controls(mob/user) ui_interact(user) -/mob/living/simple_animal/bot/ed209/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/mob/living/simple_animal/bot/ed209/ui_state(mob/user) + return GLOB.default_state + +/mob/living/simple_animal/bot/ed209/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BotSecurity", name, 500, 500) + ui = new(user, src, "BotSecurity", name) ui.open() /mob/living/simple_animal/bot/ed209/ui_data(mob/user) diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index 4aebd8a90611..6fef954b7fea 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -73,10 +73,13 @@ /mob/living/simple_animal/bot/floorbot/show_controls(mob/user) ui_interact(user) -/mob/living/simple_animal/bot/floorbot/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/mob/living/simple_animal/bot/floorbot/ui_state(mob/user) + return GLOB.default_state + +/mob/living/simple_animal/bot/floorbot/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BotFloor", name, 500, 520) + ui = new(user, src, "BotFloor", name) ui.open() /mob/living/simple_animal/bot/floorbot/ui_data(mob/user) diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm index 7328e2809bc3..beb54f46877d 100644 --- a/code/modules/mob/living/simple_animal/bot/honkbot.dm +++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm @@ -72,10 +72,13 @@ /mob/living/simple_animal/bot/honkbot/show_controls(mob/user) ui_interact(user) -/mob/living/simple_animal/bot/honkbot/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/mob/living/simple_animal/bot/honkbot/ui_state(mob/user) + return GLOB.default_state + +/mob/living/simple_animal/bot/honkbot/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BotHonk", name, 500, 220) + ui = new(user, src, "BotHonk", name) ui.open() /mob/living/simple_animal/bot/honkbot/ui_act(action, params, datum/tgui/ui) diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index be4b74ab49e1..8bf3236693af 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -157,10 +157,13 @@ /mob/living/simple_animal/bot/medbot/show_controls(mob/user) ui_interact(user) -/mob/living/simple_animal/bot/medbot/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/mob/living/simple_animal/bot/medbot/ui_state(mob/user) + return GLOB.default_state + +/mob/living/simple_animal/bot/medbot/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BotMed", name, 500, 520) + ui = new(user, src, "BotMed", name) ui.open() /mob/living/simple_animal/bot/medbot/ui_data(mob/user) @@ -248,7 +251,7 @@ W.forceMove(src) reagent_glass = W to_chat(user, "You insert [W].") - ui_interact(user, force_open=FALSE) + ui_interact(user) else var/current_health = health diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 8b0e88bc4327..2b6a6b2e6a97 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -49,7 +49,7 @@ /mob/living/simple_animal/bot/secbot/beepsky/explode() var/turf/Tsec = get_turf(src) new /obj/item/stock_parts/cell/potato(Tsec) - var/obj/item/reagent_containers/food/drinks/drinkingglass/S = new(Tsec) + var/obj/item/reagent_containers/drinks/drinkingglass/S = new(Tsec) S.reagents.add_reagent("whiskey", 15) S.on_reagent_change() ..() @@ -117,10 +117,13 @@ /mob/living/simple_animal/bot/secbot/show_controls(mob/user) ui_interact(user) -/mob/living/simple_animal/bot/secbot/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/mob/living/simple_animal/bot/secbot/ui_state(mob/user) + return GLOB.default_state + +/mob/living/simple_animal/bot/secbot/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BotSecurity", name, 500, 500) + ui = new(user, src, "BotSecurity", name) ui.open() /mob/living/simple_animal/bot/secbot/ui_data(mob/user) diff --git a/code/modules/mob/living/simple_animal/bot/syndicate_bots.dm b/code/modules/mob/living/simple_animal/bot/syndicate_bots.dm index 8e35dbc16550..94bd9bf579af 100644 --- a/code/modules/mob/living/simple_animal/bot/syndicate_bots.dm +++ b/code/modules/mob/living/simple_animal/bot/syndicate_bots.dm @@ -47,7 +47,10 @@ ..() update_icon() -/mob/living/simple_animal/bot/ed209/syndicate/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/mob/living/simple_animal/bot/ed209/syndicate/ui_state(mob/user) + return GLOB.default_state + +/mob/living/simple_animal/bot/ed209/syndicate/ui_interact(mob/user, datum/tgui/ui = null) to_chat(user, "[src] has no accessible control panel!") return diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 2707f7f988fd..1e74d1162df1 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -22,7 +22,7 @@ pressure_resistance = 100 universal_speak = TRUE AIStatus = AI_OFF //normal constructs don't have AI - loot = list(/obj/item/reagent_containers/food/snacks/ectoplasm) + loot = list(/obj/item/food/snacks/ectoplasm) del_on_death = TRUE deathmessage = "collapses in a shattered heap." var/construct_type = "shade" diff --git a/code/modules/mob/living/simple_animal/friendly/bunny.dm b/code/modules/mob/living/simple_animal/friendly/bunny.dm index fdefe785ffd7..5a58869a6202 100644 --- a/code/modules/mob/living/simple_animal/friendly/bunny.dm +++ b/code/modules/mob/living/simple_animal/friendly/bunny.dm @@ -12,7 +12,7 @@ see_in_dark = 6 maxHealth = 10 health = 10 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 1) + butcher_results = list(/obj/item/food/snacks/meat = 1) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/simple_animal/friendly/butterfly.dm index 4ab5c0156125..4489fc9be898 100644 --- a/code/modules/mob/living/simple_animal/friendly/butterfly.dm +++ b/code/modules/mob/living/simple_animal/friendly/butterfly.dm @@ -21,7 +21,7 @@ ventcrawler = VENTCRAWLER_ALWAYS mob_size = MOB_SIZE_TINY mob_biotypes = MOB_ORGANIC | MOB_BUG - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 0) + butcher_results = list(/obj/item/food/snacks/meat = 0) gold_core_spawnable = FRIENDLY_SPAWN /mob/living/simple_animal/butterfly/Initialize(mapload) //Not the poor butterfly! diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 5eed02aed764..3fd3b86ac79c 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -17,7 +17,7 @@ mob_size = MOB_SIZE_SMALL animal_species = /mob/living/simple_animal/pet/cat childtype = list(/mob/living/simple_animal/pet/cat/kitten) - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3) + butcher_results = list(/obj/item/food/snacks/meat = 3) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -233,8 +233,8 @@ butcher_results = list( /obj/item/organ/internal/brain = 1, /obj/item/organ/internal/heart = 1, - /obj/item/reagent_containers/food/snacks/birthdaycakeslice = 3, - /obj/item/reagent_containers/food/snacks/meat/slab = 2 + /obj/item/food/snacks/birthdaycakeslice = 3, + /obj/item/food/snacks/meat/slab = 2 ) response_harm = "takes a bite out of" attacked_sound = "sound/items/eatfood.ogg" @@ -247,7 +247,7 @@ return if(health < maxHealth) adjustBruteLoss(-4) - for(var/obj/item/reagent_containers/food/snacks/donut/D in range(1, src)) + for(var/obj/item/food/snacks/donut/D in range(1, src)) if(D.icon_state != "donut2") D.name = "frosted donut" D.icon_state = "donut2" diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index 10724db9ad82..e1a7390a7c7a 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -10,7 +10,7 @@ emote_see = list("clacks") speak_chance = 1 turns_per_move = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 1) + butcher_results = list(/obj/item/food/snacks/meat = 1) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "stomps" diff --git a/code/modules/mob/living/simple_animal/friendly/deer.dm b/code/modules/mob/living/simple_animal/friendly/deer.dm index e7e0586ca3dd..745bede98981 100644 --- a/code/modules/mob/living/simple_animal/friendly/deer.dm +++ b/code/modules/mob/living/simple_animal/friendly/deer.dm @@ -11,7 +11,7 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 0 //I'm so funny - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 4) + butcher_results = list(/obj/item/food/snacks/meat = 4) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" diff --git a/code/modules/mob/living/simple_animal/friendly/diona_nymph.dm b/code/modules/mob/living/simple_animal/friendly/diona_nymph.dm index 9cf8dba09537..a54014b9fa3e 100644 --- a/code/modules/mob/living/simple_animal/friendly/diona_nymph.dm +++ b/code/modules/mob/living/simple_animal/friendly/diona_nymph.dm @@ -210,7 +210,7 @@ return TRUE // Consumes plant matter other than weeds to evolve -/mob/living/simple_animal/diona/proc/consume(obj/item/reagent_containers/food/snacks/grown/G) +/mob/living/simple_animal/diona/proc/consume(obj/item/food/snacks/grown/G) if(nutrition >= nutrition_need) // Prevents griefing by overeating plant items without evolving. to_chat(src, "You're too full to consume this! Perhaps it's time to grow bigger...") else diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 8195b998a4db..33c4c02b4333 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -70,7 +70,7 @@ icon_state = "corgi" icon_living = "corgi" icon_dead = "corgi_dead" - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/corgi = 3, /obj/item/stack/sheet/animalhide/corgi = 1) + butcher_results = list(/obj/item/food/snacks/meat/corgi = 3, /obj/item/stack/sheet/animalhide/corgi = 1) childtype = list(/mob/living/simple_animal/pet/dog/corgi/puppy = 95, /mob/living/simple_animal/pet/dog/corgi/puppy/void = 5) animal_species = /mob/living/simple_animal/pet/dog collar_type = "corgi" @@ -555,7 +555,7 @@ stop_automated_movement = FALSE var/obj/item/possible_target = null for(var/I in snack_range) - if(istype(I, /obj/item/reagent_containers/food/snacks)) // Noms + if(istype(I, /obj/item/food/snacks)) // Noms possible_target = I break else if(istype(I, /obj/item/paper)) // Important noms @@ -590,7 +590,7 @@ else if(prob(30) && ishuman(movement_target.loc)) // mean hooman has stolen it custom_emote(EMOTE_VISIBLE, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face.") -/obj/item/reagent_containers/food/snacks/meat/corgi +/obj/item/food/snacks/meat/corgi name = "Corgi meat" desc = "Tastes like... well you know..." @@ -782,7 +782,7 @@ icon_state = "pug" icon_living = "pug" icon_dead = "pug_dead" - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/pug = 3) + butcher_results = list(/obj/item/food/snacks/meat/pug = 3) collar_type = "pug" /mob/living/simple_animal/pet/dog/pug/handle_automated_movement() diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index c92cb90d4601..f8aa127e2a87 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -12,7 +12,7 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 4) + butcher_results = list(/obj/item/food/snacks/meat = 4) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -122,7 +122,7 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 6) + butcher_results = list(/obj/item/food/snacks/meat/slab = 6) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -202,7 +202,7 @@ density = FALSE speak_chance = 2 turns_per_move = 2 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 1) + butcher_results = list(/obj/item/food/snacks/meat = 1) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -255,9 +255,9 @@ GLOBAL_VAR_INIT(chicken_count, 0) density = FALSE speak_chance = 2 turns_per_move = 3 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 2) - var/egg_type = /obj/item/reagent_containers/food/snacks/egg - var/food_type = /obj/item/reagent_containers/food/snacks/grown/wheat + butcher_results = list(/obj/item/food/snacks/meat = 2) + var/egg_type = /obj/item/food/snacks/egg + var/food_type = /obj/item/food/snacks/grown/wheat response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -329,8 +329,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) if(GLOB.chicken_count < MAX_CHICKENS && prob(25)) START_PROCESSING(SSobj, E) -/obj/item/reagent_containers/food/snacks/egg/var/amount_grown = 0 -/obj/item/reagent_containers/food/snacks/egg/process() +/obj/item/food/snacks/egg/process() if(isturf(loc)) amount_grown += rand(1,2) if(amount_grown >= 100) @@ -381,7 +380,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/ham = 6) + butcher_results = list(/obj/item/food/snacks/meat/ham = 6) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -407,7 +406,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 4) + butcher_results = list(/obj/item/food/snacks/meat = 4) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -432,7 +431,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 6) + butcher_results = list(/obj/item/food/snacks/meat = 6) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -457,7 +456,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 6) + butcher_results = list(/obj/item/food/snacks/meat = 6) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -482,7 +481,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 6) + butcher_results = list(/obj/item/food/snacks/meat = 6) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm index 37d1f47e5b6a..329d43fb7d06 100644 --- a/code/modules/mob/living/simple_animal/friendly/fox.dm +++ b/code/modules/mob/living/simple_animal/friendly/fox.dm @@ -13,7 +13,7 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3) + butcher_results = list(/obj/item/food/snacks/meat = 3) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm index 493022c5f23f..0fa7edbf6d25 100644 --- a/code/modules/mob/living/simple_animal/friendly/lizard.dm +++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm @@ -22,7 +22,7 @@ mob_size = MOB_SIZE_SMALL can_hide = TRUE pass_door_while_hidden = TRUE - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 1) + butcher_results = list(/obj/item/food/snacks/meat = 1) can_collar = TRUE mob_biotypes = MOB_ORGANIC | MOB_BEAST | MOB_REPTILE gold_core_spawnable = FRIENDLY_SPAWN diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 3d8747084b6a..958806c6b50e 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -16,7 +16,7 @@ see_in_dark = 6 maxHealth = 5 health = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 1) + butcher_results = list(/obj/item/food/snacks/meat = 1) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "stamps on" @@ -92,7 +92,7 @@ ..() /mob/living/simple_animal/mouse/start_pulling(atom/movable/AM, state, force = pull_force, show_message = FALSE)//Prevents mouse from pulling things - if(istype(AM, /obj/item/reagent_containers/food/snacks/cheesewedge)) + if(istype(AM, /obj/item/food/snacks/cheesewedge)) return ..() // Get dem if(show_message) to_chat(src, "You are too small to pull anything except cheese.") diff --git a/code/modules/mob/living/simple_animal/friendly/sloth.dm b/code/modules/mob/living/simple_animal/friendly/sloth.dm index 077b0508a04f..0f094e9d81a8 100644 --- a/code/modules/mob/living/simple_animal/friendly/sloth.dm +++ b/code/modules/mob/living/simple_animal/friendly/sloth.dm @@ -13,7 +13,7 @@ faction = list("neutral", "jungle") speak_chance = 1 turns_per_move = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3) + butcher_results = list(/obj/item/food/snacks/meat = 3) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" diff --git a/code/modules/mob/living/simple_animal/hostile/alien_types.dm b/code/modules/mob/living/simple_animal/hostile/alien_types.dm index 423753aa5b27..38eb627a1912 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien_types.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien_types.dm @@ -11,7 +11,7 @@ response_disarm = "shoves" response_harm = "hits" speed = 0 - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat= 3, /obj/item/stack/sheet/animalhide/xeno = 1) + butcher_results = list(/obj/item/food/snacks/monstermeat/xenomeat= 3, /obj/item/stack/sheet/animalhide/xeno = 1) maxHealth = 125 health = 125 harm_intent_damage = 5 @@ -83,7 +83,7 @@ retreat_distance = 5 minimum_distance = 5 move_to_delay = 4 - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat= 4, /obj/item/stack/sheet/animalhide/xeno = 1) + butcher_results = list(/obj/item/food/snacks/monstermeat/xenomeat= 4, /obj/item/stack/sheet/animalhide/xeno = 1) projectiletype = /obj/item/projectile/neurotox projectilesound = 'sound/weapons/pierce.ogg' status_flags = 0 @@ -131,7 +131,7 @@ move_to_delay = 4 maxHealth = 400 health = 400 - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat= 10, /obj/item/stack/sheet/animalhide/xeno = 2) + butcher_results = list(/obj/item/food/snacks/monstermeat/xenomeat= 10, /obj/item/stack/sheet/animalhide/xeno = 2) mob_size = MOB_SIZE_LARGE /obj/item/projectile/neurotox diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm index ff57b4758adb..66f76186713d 100644 --- a/code/modules/mob/living/simple_animal/hostile/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/bat.dm @@ -9,7 +9,7 @@ mob_biotypes = MOB_ORGANIC | MOB_BEAST speak_chance = 0 turns_per_move = 3 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 1) + butcher_results = list(/obj/item/food/snacks/meat = 1) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "hits" diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index 646cd5146156..3b045ce67efe 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -14,7 +14,7 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/bearmeat= 5, /obj/item/clothing/head/bearpelt = 1) + butcher_results = list(/obj/item/food/snacks/monstermeat/bearmeat = 5, /obj/item/clothing/head/bearpelt = 1) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "hits" diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index df6751f40210..de32d0f6babb 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -11,7 +11,7 @@ mob_biotypes = MOB_ORGANIC | MOB_BEAST speak_chance = 0 turns_per_move = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/carpmeat = 2) + butcher_results = list(/obj/item/food/snacks/carpmeat = 2) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "hits" diff --git a/code/modules/mob/living/simple_animal/hostile/feral_cat.dm b/code/modules/mob/living/simple_animal/hostile/feral_cat.dm index b10cd9c761de..3f8204a152e3 100644 --- a/code/modules/mob/living/simple_animal/hostile/feral_cat.dm +++ b/code/modules/mob/living/simple_animal/hostile/feral_cat.dm @@ -18,7 +18,7 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2) + butcher_results = list(/obj/item/food/snacks/meat/slab = 2) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index b9fa11bcbb99..5ada8062c4fd 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -19,7 +19,7 @@ see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE footstep_type = FOOTSTEP_MOB_CLAW - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/spidermeat= 2, /obj/item/reagent_containers/food/snacks/monstermeat/spiderleg= 8) + butcher_results = list(/obj/item/food/snacks/monstermeat/spidermeat = 2, /obj/item/food/snacks/monstermeat/spiderleg = 8) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "hits" @@ -70,7 +70,7 @@ icon_state = "nurse" icon_living = "nurse" icon_dead = "nurse_dead" - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/spidermeat= 2, /obj/item/reagent_containers/food/snacks/monstermeat/spiderleg= 8, /obj/item/reagent_containers/food/snacks/monstermeat/spidereggs= 4) + butcher_results = list(/obj/item/food/snacks/monstermeat/spidermeat= 2, /obj/item/food/snacks/monstermeat/spiderleg= 8, /obj/item/food/snacks/monstermeat/spidereggs= 4) maxHealth = 40 health = 40 diff --git a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm index 3efddf12f41d..c400bedb1cc5 100644 --- a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm +++ b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm @@ -9,7 +9,7 @@ speak_chance = 80 maxHealth = 220 health = 220 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/gorilla = 4) + butcher_results = list(/obj/item/food/snacks/meat/slab/gorilla = 4) response_help = "prods" response_disarm = "challenges" response_harm = "thumps" diff --git a/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm b/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm index 5328b974d159..f3982ed9a974 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle_animals.dm @@ -14,7 +14,7 @@ mob_biotypes = MOB_ORGANIC | MOB_BEAST speak_chance = 0 turns_per_move = 3 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3) + butcher_results = list(/obj/item/food/snacks/meat = 3) faction = list("hostile", "jungle") response_help = "pets the" response_disarm = "gently pushes aside the" diff --git a/code/modules/mob/living/simple_animal/hostile/killertomato.dm b/code/modules/mob/living/simple_animal/hostile/killertomato.dm index adb59e96397f..b8c1b2b3097c 100644 --- a/code/modules/mob/living/simple_animal/hostile/killertomato.dm +++ b/code/modules/mob/living/simple_animal/hostile/killertomato.dm @@ -10,7 +10,7 @@ maxHealth = 30 health = 30 see_in_dark = 3 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/tomatomeat = 2) + butcher_results = list(/obj/item/food/snacks/meat/tomatomeat = 2) response_help = "prods" response_disarm = "pushes aside" response_harm = "smacks" diff --git a/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm index 4894c3799ef1..6d5ed62d05e2 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm @@ -91,7 +91,7 @@ throw_message = "does nothing to the tough hide of the" pre_attack_icon = "goliath2" crusher_loot = /obj/item/crusher_trophy/goliath_tentacle - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/goliath= 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2) + butcher_results = list(/obj/item/food/snacks/monstermeat/goliath = 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2) loot = list() stat_attack = UNCONSCIOUS robust_searching = TRUE @@ -110,7 +110,7 @@ pre_attack_icon = "Goliath_preattack" throw_message = "does nothing to the rocky hide of the" loot = list(/obj/item/stack/sheet/animalhide/goliath_hide) //A throwback to the asteroid days - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/goliath= 2, /obj/item/stack/sheet/bone = 2) + butcher_results = list(/obj/item/food/snacks/monstermeat/goliath= 2, /obj/item/stack/sheet/bone = 2) crusher_loot = /obj/item/crusher_trophy/goliath_tentacle/ancient crusher_drop_mod = 30 wander = FALSE diff --git a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm index c7c33b6daa63..ea3714913e5c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm @@ -386,7 +386,7 @@ belt = null backpack_contents = list() if(prob(70)) - backpack_contents += pick(list(/obj/item/stamp/clown = 1, /obj/item/reagent_containers/spray/waterflower = 1, /obj/item/reagent_containers/food/snacks/grown/banana = 1, /obj/item/megaphone = 1)) + backpack_contents += pick(list(/obj/item/stamp/clown = 1, /obj/item/reagent_containers/spray/waterflower = 1, /obj/item/food/snacks/grown/banana = 1, /obj/item/megaphone = 1)) if(prob(30)) backpack_contents += list(/obj/item/stack/sheet/mineral/bananium = pickweight(list( 1 = 3, 2 = 2, 3 = 1))) if(prob(10)) @@ -430,6 +430,6 @@ suit_store = /obj/item/melee/cultblade l_pocket = /obj/item/melee/cultblade/dagger if(prob(60)) - r_pocket = /obj/item/reagent_containers/food/drinks/bottle/unholywater + r_pocket = /obj/item/reagent_containers/drinks/bottle/unholywater backpack_contents = list(/obj/item/tome = 1, /obj/item/restraints/legcuffs/bola/cult = 1, /obj/item/stack/sheet/runed_metal = 15) . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index b30334e96ded..6e2fb046dbd1 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -9,7 +9,7 @@ turns_per_move = 1 maxHealth = 10 health = 10 - butcher_results = list(/obj/item/reagent_containers/food/snacks/hugemushroomslice = 1) + butcher_results = list(/obj/item/food/snacks/hugemushroomslice = 1) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "whacks" @@ -152,7 +152,7 @@ bruised = 1 /mob/living/simple_animal/hostile/mushroom/attackby(obj/item/I as obj, mob/user as mob, params) - if(istype(I, /obj/item/reagent_containers/food/snacks/grown/mushroom)) + if(istype(I, /obj/item/food/snacks/grown/mushroom)) if(stat == DEAD && !recovery_cooldown) Recover() qdel(I) @@ -182,7 +182,7 @@ /mob/living/simple_animal/hostile/mushroom/harvest() var/counter for(counter=0, counter<=powerlevel, counter++) - var/obj/item/reagent_containers/food/snacks/hugemushroomslice/S = new /obj/item/reagent_containers/food/snacks/hugemushroomslice(src.loc) + var/obj/item/food/snacks/hugemushroomslice/S = new (src.loc) S.reagents.add_reagent("psilocybin", powerlevel) S.reagents.add_reagent("omnizine", powerlevel) S.reagents.add_reagent("synaptizine", powerlevel) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm index d40f38ee2674..1aa4eb05f49f 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/fish.dm @@ -8,7 +8,7 @@ mob_biotypes = MOB_ORGANIC | MOB_BEAST speak_chance = 0 turns_per_move = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/carpmeat = 1) + butcher_results = list(/obj/item/food/snacks/carpmeat = 1) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "hits" @@ -68,7 +68,7 @@ melee_damage_lower = 2 melee_damage_upper = 2 speak_emote = list("blurps") - butcher_results = list(/obj/item/reagent_containers/food/snacks/salmonmeat = 1) + butcher_results = list(/obj/item/food/snacks/salmonmeat = 1) atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm index 1d958b3e5617..91ffa0591cc8 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm @@ -51,7 +51,7 @@ pressure_resistance = 300 gold_core_spawnable = NO_SPAWN //too spooky for science faction = list("undead") // did I mention ghost - loot = list(/obj/item/reagent_containers/food/snacks/ectoplasm) + loot = list(/obj/item/food/snacks/ectoplasm) del_on_death = TRUE /mob/living/simple_animal/hostile/retaliate/ghost/Process_Spacemove(check_drift = 0) diff --git a/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm b/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm index 260d3d8f2b04..2ba65d00bf45 100644 --- a/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm @@ -59,7 +59,7 @@ icon_state = "reindeer" icon_living = "reindeer" icon_dead = "reindeer-dead" - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3) + butcher_results = list(/obj/item/food/snacks/meat = 3) maxHealth = 80 health = 80 melee_damage_lower = 5 diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 08592fd2ecbb..5ea2bad8794b 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -49,7 +49,7 @@ speak_chance = 1//1% (1 in 100) chance every tick; So about once per 150 seconds, assuming an average tick is 1.5s turns_per_move = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/cracker = 3) + butcher_results = list(/obj/item/food/snacks/cracker = 3) response_help = "pets" response_disarm = "gently moves aside" diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index 2878a7d4595c..789e61be2146 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -29,7 +29,7 @@ faction = list("cult") status_flags = CANPUSH flying = TRUE - loot = list(/obj/item/reagent_containers/food/snacks/ectoplasm) + loot = list(/obj/item/food/snacks/ectoplasm) del_on_death = TRUE deathmessage = "lets out a contented sigh as their form unwinds." var/holy = FALSE diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 1e1c6d2cd581..6ea8066983fa 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -624,8 +624,11 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ /mob/proc/run_examinate(atom/A) if(!has_vision(information_only = TRUE) && !isobserver(src)) - to_chat(src, chat_box_regular("Something is there but you can't see it.")) - return 1 + to_chat(src, + type = MESSAGE_TYPE_INFO, + html = chat_box_regular("Something is there but you can't see it."), + confidential = TRUE) + return TRUE face_atom(A) if(!client) @@ -647,7 +650,10 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ result = A.examine(src) client.recent_examines[ref_to_atom] = world.time + EXAMINE_MORE_WINDOW // set to when we should not examine something - to_chat(src, chat_box_examine(result.Join("\n"))) + to_chat(src, + type = MESSAGE_TYPE_INFO, + html = chat_box_examine(result.Join("\n")), + confidential = TRUE) /mob/proc/ret_grab(obj/effect/list_container/mobl/L as obj, flag) if((!istype(l_hand, /obj/item/grab) && !istype(r_hand, /obj/item/grab))) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index b9b1111c7fc5..c08a19f56dac 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -58,16 +58,20 @@ var/output = "

Настройка персонажа
[real_name]

" if(!SSticker || SSticker.current_state <= GAME_STATE_PREGAME) - if(!ready) output += "

Нажмите, если готовы

" - else output += "

Вы готовы (Отмена)

" + if(!ready) + output += "

Нажмите, если готовы

" + else + output += "

Вы готовы (Отмена)

" else output += "

Просмотр списка экипажа

" output += "

Присоединиться к игре!

" var/list/antags = client.prefs.be_special - if(antags && antags.len) - if(!client.skip_antag) output += "

Глобальная настройка антагов" - else output += "

Global Antag Candidacy" + if(length(antags)) + if(!client.skip_antag) + output += "

Глобальная настройка антагов" + else + output += "

Global Antag Candidacy" output += "
Вы [client.skip_antag ? "не готовы" : "готовы"] для всех антаг ролей.

" if(!SSticker || SSticker.current_state == GAME_STATE_STARTUP) @@ -86,8 +90,7 @@ var/datum/browser/popup = new(src, "playersetup", "
Новый игрок
", 240, 340) popup.set_window_options("can_close=0") popup.set_content(output) - popup.open(0) - return + popup.open(FALSE) /mob/new_player/Stat() ..() @@ -128,8 +131,6 @@ qdel(query) src << browse(null, "window=privacy_consent") client.tos_consent = TRUE - // Now they have accepted TOS, we can log data - client.chatOutput.sendClientData() new_player_panel_proc() if(href_list["consent_rejected"]) client.tos_consent = FALSE @@ -598,7 +599,7 @@ client.prefs.active_character.language = "None" /mob/new_player/proc/ViewManifest() - GLOB.generic_crew_manifest.ui_interact(usr, state = GLOB.always_state) + GLOB.generic_crew_manifest.ui_interact(usr) /mob/new_player/Move() return 0 diff --git a/code/modules/mod/mod_ui.dm b/code/modules/mod/mod_ui.dm index 04a6a5a5fc4c..6daf62d55a3f 100644 --- a/code/modules/mod/mod_ui.dm +++ b/code/modules/mod/mod_ui.dm @@ -1,7 +1,10 @@ -/obj/item/mod/control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/mod/control/ui_state(mob/user) + return GLOB.default_state + +/obj/item/mod/control/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "MODsuit", name, 400, 525, master_ui, state) + ui = new(user, src, "MODsuit", name) ui.open() /obj/item/mod/control/ui_data(mob/user) diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm index 0e97863a5324..aca7ce0cb29f 100644 --- a/code/modules/mod/modules/modules_general.dm +++ b/code/modules/mod/modules/modules_general.dm @@ -303,7 +303,7 @@ incompatible_modules = list(/obj/item/mod/module/dispenser) cooldown_time = 5 SECONDS /// Path we dispense. - var/dispense_type = /obj/item/reagent_containers/food/snacks/burger/cheese + var/dispense_type = /obj/item/food/snacks/burger/cheese /// Time it takes for us to dispense. var/dispense_time = 0 SECONDS diff --git a/code/modules/newscaster/obj/newscaster.dm b/code/modules/newscaster/obj/newscaster.dm index 0fc0a4b566ee..6388ad1bb844 100644 --- a/code/modules/newscaster/obj/newscaster.dm +++ b/code/modules/newscaster/obj/newscaster.dm @@ -191,12 +191,15 @@ return ui_interact(user) -/obj/machinery/newscaster/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/newscaster/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/newscaster/ui_interact(mob/user, datum/tgui/ui = null) if(can_scan(user)) scanned_user = get_scanned_user(user)["name"] - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Newscaster", name, 800, 600) + ui = new(user, src, "Newscaster", name) ui.open() ui.set_autoupdate(FALSE) diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index 7763f922d5f2..0ccbe9828045 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -117,10 +117,13 @@ GLOBAL_LIST_EMPTY(fax_blacklist) return TRUE return FALSE -/obj/machinery/photocopier/faxmachine/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/photocopier/faxmachine/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/photocopier/faxmachine/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "FaxMachine", name, 540, 300, master_ui, state) + ui = new(user, src, "FaxMachine", name) ui.open() /obj/machinery/photocopier/faxmachine/ui_data(mob/user) diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index db62ec6b9fdf..630d3140b111 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -83,10 +83,13 @@ return to_chat(user, "You find nothing in [src].") -/obj/structure/filingcabinet/ui_interact(mob/user, ui_key, datum/tgui/ui, force_open, datum/tgui/master_ui, datum/ui_state/state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/structure/filingcabinet/ui_state(mob/user) + return GLOB.default_state + +/obj/structure/filingcabinet/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "FilingCabinet", name, 400, 300, master_ui, state) + ui = new(user, src, "FilingCabinet", name) ui.open() /obj/structure/filingcabinet/ui_data(mob/user) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 8e29308945d9..13739a66f02b 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -83,7 +83,7 @@ data = "[header]
[infolinks ? info_links : info]
[footer][stamps]" if(view) var/datum/browser/popup = new(user, "Paper[UID()]", , paper_width, paper_height) - popup.stylesheets = list() + popup.include_default_stylesheet = FALSE popup.set_content(data) if(!stars) popup.add_script("marked.js", 'html/browser/marked.js') diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 85e7ecc51402..94a69d8e5067 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -46,7 +46,7 @@ return attack_hand(user) /obj/machinery/photocopier/attack_ghost(mob/user) - return attack_hand(user) + ui_interact(user) /obj/machinery/photocopier/attack_hand(mob/user) if(..()) @@ -365,10 +365,13 @@ copy(document, scancopy = TRUE) -/obj/machinery/photocopier/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/photocopier/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/photocopier/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Photocopier", name, 402, 368, master_ui, state) + ui = new(user, src, "Photocopier", name) ui.open() /obj/machinery/photocopier/ui_data(mob/user) diff --git a/code/modules/pda/pda_tgui.dm b/code/modules/pda/pda_tgui.dm index 535d47616b4d..27310410d31e 100644 --- a/code/modules/pda/pda_tgui.dm +++ b/code/modules/pda/pda_tgui.dm @@ -1,9 +1,12 @@ // All the TGUI interactions are in their own file to keep things simpler -/obj/item/pda/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/pda/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/pda/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PDA", name, 600, 650, master_ui, state) + ui = new(user, src, "PDA", name) ui.open() @@ -57,6 +60,11 @@ return data +/obj/item/pda/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/simple/mob_hunt) + ) + // Yes the stupid amount of args here is important, see L102 /obj/item/pda/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) if(..()) diff --git a/code/modules/pda/utilities.dm b/code/modules/pda/utilities.dm index 925a1a294b9d..8642d0782df8 100644 --- a/code/modules/pda/utilities.dm +++ b/code/modules/pda/utilities.dm @@ -58,60 +58,69 @@ icon = "link" /datum/data/pda/utility/scanmode/dna/scan_mob(mob/living/C as mob, mob/living/user as mob) + var/list/messages = list() if(ishuman(C)) var/mob/living/carbon/human/H = C if(!istype(H.dna, /datum/dna)) - to_chat(user, "No fingerprints found on [H]") + messages.Add("No fingerprints found on [H]") else - to_chat(user, "[H]'s Fingerprints: [md5(H.dna.uni_identity)]") + messages.Add("[H]'s Fingerprints: [md5(H.dna.uni_identity)]") + if(length(messages)) + to_chat(user, chat_box_regular(messages.Join("
"))) scan_blood(C, user) /datum/data/pda/utility/scanmode/dna/scan_atom(atom/A as mob|obj|turf|area, mob/user as mob) scan_blood(A, user) /datum/data/pda/utility/scanmode/dna/proc/scan_blood(atom/A, mob/user) + var/list/messages = list() if(!A.blood_DNA) - to_chat(user, "No blood found on [A]") + messages.Add("No blood found on [A]") if(A.blood_DNA) qdel(A.blood_DNA) else - to_chat(user, "Blood found on [A]. Analysing...") + messages.Add("Blood found on [A]. Analysing...") spawn(15) - for(var/blood in A.blood_DNA) - to_chat(user, "Blood type: [A.blood_DNA[blood]]\nDNA: [blood]") + for(var/blood in A.blood_DNA) + messages.Add("Blood type: [A.blood_DNA[blood]]\nDNA: [blood]") + to_chat(user, chat_box_regular(messages.Join("
"))) /datum/data/pda/utility/scanmode/halogen base_name = "Halogen Counter" icon = "exclamation-circle" /datum/data/pda/utility/scanmode/halogen/scan_mob(mob/living/C as mob, mob/living/user as mob) + var/list/messages = list() C.visible_message("[user] has analyzed [C]'s radiation levels!") - user.show_message("Analyzing Results for [C]:") + messages.Add("Analyzing Results for [C]:") if(C.radiation) - user.show_message("Radiation Level: [C.radiation > 0 ? "[C.radiation]" : "0"]") + messages.Add("Radiation Level: [C.radiation > 0 ? "[C.radiation]" : "0"]") else - user.show_message("No radiation detected.") + messages.Add("No radiation detected.") + to_chat(user, chat_box_regular(messages.Join("
"))) /datum/data/pda/utility/scanmode/reagent base_name = "Reagent Scanner" icon = "flask" /datum/data/pda/utility/scanmode/reagent/scan_atom(atom/A as mob|obj|turf|area, mob/user as mob) + var/list/messages = list() if(!isnull(A.reagents)) if(A.reagents.reagent_list.len > 0) var/reagents_length = A.reagents.reagent_list.len - to_chat(user, "[reagents_length] chemical agent[reagents_length > 1 ? "s" : ""] found.") + messages.Add("[reagents_length] chemical agent[reagents_length > 1 ? "s" : ""] found.") for(var/datum/reagent/R in A.reagents.reagent_list) if(R.id != "blood") - to_chat(user, "\t [R]") + messages.Add("\t [R]") else var/blood_type = R.data["blood_type"] - to_chat(user, "\t [R] [blood_type]") + messages.Add("\t [R] [blood_type]") else - to_chat(user, "No active chemical agents found in [A].") + messages.Add("No active chemical agents found in [A].") else - to_chat(user, "No significant chemical agents found in [A].") + messages.Add("No significant chemical agents found in [A].") + to_chat(user, chat_box_regular(messages.Join("
"))) /datum/data/pda/utility/scanmode/gas base_name = "Gas Scanner" diff --git a/code/modules/power/apc/apc.dm b/code/modules/power/apc/apc.dm index f27668e5af46..fadf8593c894 100644 --- a/code/modules/power/apc/apc.dm +++ b/code/modules/power/apc/apc.dm @@ -422,10 +422,13 @@ return ui_interact(user) -/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/power/apc/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/power/apc/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "APC", name, 510, 460, master_ui, state) + ui = new(user, src, "APC", name) ui.open() /obj/machinery/power/apc/ui_data(mob/user) diff --git a/code/modules/power/engines/singularity/particle_accelerator/particle_control.dm b/code/modules/power/engines/singularity/particle_accelerator/particle_control.dm index ceadcbea3e50..63a890cf6570 100644 --- a/code/modules/power/engines/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/engines/singularity/particle_accelerator/particle_control.dm @@ -213,10 +213,13 @@ part.update_icon() return 1 -/obj/machinery/particle_accelerator/control_box/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/particle_accelerator/control_box/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/particle_accelerator/control_box/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ParticleAccelerator", name, 350, 160, master_ui, state) + ui = new(user, src, "ParticleAccelerator", name) ui.open() /obj/machinery/particle_accelerator/control_box/ui_data(mob/user) diff --git a/code/modules/power/generators/portable generators/pacman.dm b/code/modules/power/generators/portable generators/pacman.dm index 295704ee273e..6b309a04d0a5 100644 --- a/code/modules/power/generators/portable generators/pacman.dm +++ b/code/modules/power/generators/portable generators/pacman.dm @@ -245,10 +245,13 @@ /obj/machinery/power/port_gen/pacman/attack_ghost(mob/user) return attack_hand(user) -/obj/machinery/power/port_gen/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/power/port_gen/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/power/port_gen/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Pacman", name, 500, 260) + ui = new(user, src, "Pacman", name) ui.open() /obj/machinery/power/port_gen/pacman/ui_data(mob/user) diff --git a/code/modules/power/generators/solar.dm b/code/modules/power/generators/solar.dm index d01c01dcef6b..87c2bf4e4607 100644 --- a/code/modules/power/generators/solar.dm +++ b/code/modules/power/generators/solar.dm @@ -373,10 +373,13 @@ return ui_interact(user) -/obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/power/solar_control/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/power/solar_control/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SolarControl", name, 490, 300) + ui = new(user, src, "SolarControl", name) ui.open() /obj/machinery/power/solar_control/ui_data(mob/user) diff --git a/code/modules/power/generators/thermo_electric_generator.dm b/code/modules/power/generators/thermo_electric_generator.dm index 4f0a5a811a28..7c4217a2dd2f 100644 --- a/code/modules/power/generators/thermo_electric_generator.dm +++ b/code/modules/power/generators/thermo_electric_generator.dm @@ -198,10 +198,13 @@ else connect() -/obj/machinery/power/teg/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/power/teg/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/power/teg/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "TEG", name, 500, 400, master_ui, state) + ui = new(user, src, "TEG", name) ui.open() /obj/machinery/power/teg/ui_data(mob/user) diff --git a/code/modules/power/generators/turbine.dm b/code/modules/power/generators/turbine.dm index 9aca6b6e0a1d..4cfb15ef7a58 100644 --- a/code/modules/power/generators/turbine.dm +++ b/code/modules/power/generators/turbine.dm @@ -358,10 +358,13 @@ . = ..() ui_interact(user) -/obj/machinery/power/turbine/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/power/turbine/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/power/turbine/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "TurbineComputer", name, 400, 150, master_ui, state) + ui = new(user, src, "TurbineComputer", name) ui.open() /obj/machinery/power/turbine/ui_data(mob/user) @@ -421,10 +424,13 @@ compressor = M.buffer to_chat(user, "You link [src] to the turbine compressor in [I]'s buffer.") -/obj/machinery/computer/turbine_computer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/turbine_computer/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/turbine_computer/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "TurbineComputer", name, 400, 200, master_ui, state) + ui = new(user, src, "TurbineComputer", name) ui.open() /obj/machinery/computer/turbine_computer/ui_data(mob/user) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 255636917e8d..edddf5bb2444 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -212,10 +212,13 @@ GLOBAL_LIST_EMPTY(gravity_generators) return ui_interact(user) // tgui\packages\tgui\interfaces\GravityGen.js -/obj/machinery/gravity_generator/main/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/gravity_generator/main/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/gravity_generator/main/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui && !(stat & BROKEN)) - ui = new(user, src, ui_key, "GravityGen", name, 350, 250, master_ui, state) + ui = new(user, src, "GravityGen", name) ui.open() /obj/machinery/gravity_generator/main/ui_data(mob/user) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index be68b3cb4ea3..21e6773fd44f 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -339,12 +339,15 @@ add_fingerprint(user) ui_interact(user) -/obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/power/smes/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/power/smes/ui_interact(mob/user, datum/tgui/ui = null) if(stat & BROKEN) return - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Smes", name, 340, 350, master_ui, state) + ui = new(user, src, "Smes", name) ui.open() /obj/machinery/power/smes/ui_data(mob/user) diff --git a/code/modules/projectiles/guns/energy/special_eguns.dm b/code/modules/projectiles/guns/energy/special_eguns.dm index 44c34958eae0..c22b3d5098cb 100644 --- a/code/modules/projectiles/guns/energy/special_eguns.dm +++ b/code/modules/projectiles/guns/energy/special_eguns.dm @@ -577,10 +577,13 @@ add_fingerprint(user) ui_interact(user) -/obj/item/gun/energy/temperature/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.deep_inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/gun/energy/temperature/ui_state(mob/user) + return GLOB.deep_inventory_state + +/obj/item/gun/energy/temperature/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "TempGun", name, 250, 130, master_ui, state) + ui = new(user, src, "TempGun", name) ui.open() /obj/item/gun/energy/temperature/ui_data(mob/user) diff --git a/code/modules/projectiles/guns/throw/crossbow.dm b/code/modules/projectiles/guns/throw/crossbow.dm index b4a49a9f18b8..218d7e412546 100644 --- a/code/modules/projectiles/guns/throw/crossbow.dm +++ b/code/modules/projectiles/guns/throw/crossbow.dm @@ -157,7 +157,7 @@ /obj/item/gun/throw/crossbow/french name = "french powered crossbow" icon_state = "fcrossbow" - valid_projectile_type = /obj/item/reagent_containers/food/snacks/baguette + valid_projectile_type = /obj/item/food/snacks/baguette /obj/item/gun/throw/crossbow/french/modify_projectile(obj/item/I, on_chamber = 0) return diff --git a/code/modules/projectiles/guns/throw/pielauncher.dm b/code/modules/projectiles/guns/throw/pielauncher.dm index a69cf6d03125..7f70d9990986 100644 --- a/code/modules/projectiles/guns/throw/pielauncher.dm +++ b/code/modules/projectiles/guns/throw/pielauncher.dm @@ -8,7 +8,7 @@ force = 5 clumsy_check = FALSE - valid_projectile_type = /obj/item/reagent_containers/food/snacks/pie + valid_projectile_type = /obj/item/food/snacks/pie max_capacity = 5 projectile_speed = 2 projectile_range = 30 @@ -17,7 +17,7 @@ /obj/item/gun/throw/piecannon/Initialize(mapload) . = ..() for(var/i in 1 to max_capacity) - var/obj/item/reagent_containers/food/snacks/pie/P = new /obj/item/reagent_containers/food/snacks/pie(src) + var/obj/item/food/snacks/pie/P = new (src) loaded_projectiles += P process_chamber() diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 916dbb84c56d..f41ca5533956 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -142,11 +142,14 @@ if(A == beaker) beaker = null -/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/chem_dispenser/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/chem_dispenser/ui_interact(mob/user, datum/tgui/ui = null) // update the ui if it exists, returns null if no ui is passed/found - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ChemDispenser", ui_title, 390, 655) + ui = new(user, src, "ChemDispenser", ui_title) ui.open() /obj/machinery/chem_dispenser/ui_data(mob/user) @@ -237,7 +240,7 @@ //if(isrobot(user)) // SS220 EDIT // return - if((istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/food/drinks)) && user.a_intent != INTENT_HARM) + if((istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/drinks)) && user.a_intent != INTENT_HARM) if(panel_open) to_chat(user, "Close the maintenance panel first.") return @@ -463,10 +466,13 @@ to_chat(user, "[src] lacks a power cell!") -/obj/item/handheld_chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/handheld_chem_dispenser/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/handheld_chem_dispenser/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "HandheldChemDispenser", name, 390, 500) + ui = new(user, src, "HandheldChemDispenser", name) ui.open() /obj/item/handheld_chem_dispenser/ui_data(mob/user) diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index f4b27a23d4ea..2437d22e3509 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -129,13 +129,16 @@ return FALSE add_fingerprint(usr) -/obj/machinery/chem_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/chem_heater/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/chem_heater/ui_interact(mob/user, datum/tgui/ui = null) if(user.stat || user.restrained()) return - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ChemHeater", "Chemical Heater", 350, 270, master_ui, state) + ui = new(user, src, "ChemHeater", "Chemical Heater") ui.open() /obj/machinery/chem_heater/ui_data(mob/user) diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 46b868a7b482..e8c208d6d892 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -122,7 +122,7 @@ to_chat(user, "You can't use [src] while it's panel is opened!") return TRUE - if((istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/food/drinks/drinkingglass)) && user.a_intent != INTENT_HARM) + if((istype(I, /obj/item/reagent_containers/glass) || istype(I, /obj/item/reagent_containers/drinks/drinkingglass)) && user.a_intent != INTENT_HARM) if(!user.drop_item()) to_chat(user, "[I] is stuck to you!") return @@ -327,7 +327,7 @@ if("create_condi_bottle") if(!condi || !reagents.total_volume) return - var/obj/item/reagent_containers/food/condiment/P = new(loc) + var/obj/item/reagent_containers/condiment/P = new(loc) reagents.trans_to(P, 50) if("create_pills") var/medicine_name = pillname @@ -413,15 +413,20 @@ return TRUE ui_interact(user) -/obj/machinery/chem_master/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - var/datum/asset/chem_master/assets = get_asset_datum(/datum/asset/chem_master) - assets.send(user) +/obj/machinery/chem_master/ui_state(mob/user) + return GLOB.default_state - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/chem_master/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ChemMaster", name, 575, 600) + ui = new(user, src, "ChemMaster", name) ui.open() +/obj/machinery/chem_master/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/chem_master) + ) + /obj/machinery/chem_master/ui_data(mob/user) var/data[0] @@ -486,7 +491,7 @@ for(var/i in 1 to MAX_PILL_SPRITE) pill_styles += list(list( "id" = i, - "sprite" = "pill[i].png", + "sprite" = "pill[i]", )) data["pillstyles"] = pill_styles @@ -496,7 +501,7 @@ bottle_style_indexer++ bottle_styles_with_sprite += list(list( "id" = bottle_style_indexer, - "sprite" = "[style].png", + "sprite" = "[style]", )) data["bottlestyles"] = bottle_styles_with_sprite @@ -572,7 +577,7 @@ return if(!length(answer)) answer = reagents.get_master_reagent_name() - var/obj/item/reagent_containers/food/condiment/pack/P = new(loc) + var/obj/item/reagent_containers/condiment/pack/P = new(loc) P.originalname = answer P.name = "[answer] pack" P.desc = "A small condiment pack. The label says it contains [answer]." diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index bac5f3c2ef10..45f5c8cd0896 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -35,25 +35,25 @@ /obj/item/grown/novaflower = list("capsaicin" = 0, "condensedcapsaicin" = 0), //Blender Stuff - /obj/item/reagent_containers/food/snacks/grown/tomato = list("ketchup" = 0), - /obj/item/reagent_containers/food/snacks/grown/wheat = list("flour" = -5), - /obj/item/reagent_containers/food/snacks/grown/oat = list("flour" = -5), - /obj/item/reagent_containers/food/snacks/grown/cherries = list("cherryjelly" = 0), - /obj/item/reagent_containers/food/snacks/grown/bluecherries = list("bluecherryjelly" = 0), - /obj/item/reagent_containers/food/snacks/egg = list("egg" = -5), - /obj/item/reagent_containers/food/snacks/grown/rice = list("rice" = -5), - /obj/item/reagent_containers/food/snacks/grown/olive = list("olivepaste" = 0, "sodiumchloride" = 0), - /obj/item/reagent_containers/food/snacks/grown/peanuts = list("peanutbutter" = 0), + /obj/item/food/snacks/grown/tomato = list("ketchup" = 0), + /obj/item/food/snacks/grown/wheat = list("flour" = -5), + /obj/item/food/snacks/grown/oat = list("flour" = -5), + /obj/item/food/snacks/grown/cherries = list("cherryjelly" = 0), + /obj/item/food/snacks/grown/bluecherries = list("bluecherryjelly" = 0), + /obj/item/food/snacks/egg = list("egg" = -5), + /obj/item/food/snacks/grown/rice = list("rice" = -5), + /obj/item/food/snacks/grown/olive = list("olivepaste" = 0, "sodiumchloride" = 0), + /obj/item/food/snacks/grown/peanuts = list("peanutbutter" = 0), //Grinder stuff, but only if dry - /obj/item/reagent_containers/food/snacks/grown/coffee/robusta = list("coffeepowder" = 0, "morphine" = 0), - /obj/item/reagent_containers/food/snacks/grown/coffee = list("coffeepowder" = 0), - /obj/item/reagent_containers/food/snacks/grown/tea/astra = list("teapowder" = 0, "salglu_solution" = 0), - /obj/item/reagent_containers/food/snacks/grown/tea = list("teapowder" = 0), + /obj/item/food/snacks/grown/coffee/robusta = list("coffeepowder" = 0, "morphine" = 0), + /obj/item/food/snacks/grown/coffee = list("coffeepowder" = 0), + /obj/item/food/snacks/grown/tea/astra = list("teapowder" = 0, "salglu_solution" = 0), + /obj/item/food/snacks/grown/tea = list("teapowder" = 0), //All types that you can put into the grinder to transfer the reagents to the beaker. !Put all recipes above this.! /obj/item/slime_extract = list(), - /obj/item/reagent_containers/food = list(), + /obj/item/food = list(), /obj/item/reagent_containers/pill = list(), /obj/item/reagent_containers/patch = list() ) @@ -61,33 +61,33 @@ var/list/juice_items = list ( //Juicer Stuff - /obj/item/reagent_containers/food/snacks/grown/soybeans = list("soymilk" = 0), - /obj/item/reagent_containers/food/snacks/grown/corn = list("corn_starch" = 0), - /obj/item/reagent_containers/food/snacks/grown/tomato = list("tomatojuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/carrot = list("carrotjuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/berries = list("berryjuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/banana = list("banana" = 0), - /obj/item/reagent_containers/food/snacks/grown/potato = list("potato" = 0), - /obj/item/reagent_containers/food/snacks/grown/citrus/lemon = list("lemonjuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/citrus/orange = list("orangejuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/citrus/lime = list("limejuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/watermelon = list("watermelonjuice" = 0), - /obj/item/reagent_containers/food/snacks/watermelonslice = list("watermelonjuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/berries/poison = list("poisonberryjuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/pumpkin/blumpkin = list("blumpkinjuice" = 0), //order is important here as blumpkin is a subtype of pumpkin, if switched blumpkins will produce pumpkin juice - /obj/item/reagent_containers/food/snacks/grown/pumpkin = list("pumpkinjuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/apple = list("applejuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/grapes = list("grapejuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/pineapple = list("pineapplejuice" = 0) + /obj/item/food/snacks/grown/soybeans = list("soymilk" = 0), + /obj/item/food/snacks/grown/corn = list("corn_starch" = 0), + /obj/item/food/snacks/grown/tomato = list("tomatojuice" = 0), + /obj/item/food/snacks/grown/carrot = list("carrotjuice" = 0), + /obj/item/food/snacks/grown/berries = list("berryjuice" = 0), + /obj/item/food/snacks/grown/banana = list("banana" = 0), + /obj/item/food/snacks/grown/potato = list("potato" = 0), + /obj/item/food/snacks/grown/citrus/lemon = list("lemonjuice" = 0), + /obj/item/food/snacks/grown/citrus/orange = list("orangejuice" = 0), + /obj/item/food/snacks/grown/citrus/lime = list("limejuice" = 0), + /obj/item/food/snacks/grown/watermelon = list("watermelonjuice" = 0), + /obj/item/food/snacks/watermelonslice = list("watermelonjuice" = 0), + /obj/item/food/snacks/grown/berries/poison = list("poisonberryjuice" = 0), + /obj/item/food/snacks/grown/pumpkin/blumpkin = list("blumpkinjuice" = 0), //order is important here as blumpkin is a subtype of pumpkin, if switched blumpkins will produce pumpkin juice + /obj/item/food/snacks/grown/pumpkin = list("pumpkinjuice" = 0), + /obj/item/food/snacks/grown/apple = list("applejuice" = 0), + /obj/item/food/snacks/grown/grapes = list("grapejuice" = 0), + /obj/item/food/snacks/grown/pineapple = list("pineapplejuice" = 0) ) var/list/dried_items = list( //Grinder stuff, but only if dry, - /obj/item/reagent_containers/food/snacks/grown/coffee/robusta = list("coffeepowder" = 0, "morphine" = 0), - /obj/item/reagent_containers/food/snacks/grown/coffee = list("coffeepowder" = 0), - /obj/item/reagent_containers/food/snacks/grown/tea/astra = list("teapowder" = 0, "salglu_solution" = 0), - /obj/item/reagent_containers/food/snacks/grown/tea = list("teapowder" = 0) + /obj/item/food/snacks/grown/coffee/robusta = list("coffeepowder" = 0, "morphine" = 0), + /obj/item/food/snacks/grown/coffee = list("coffeepowder" = 0), + /obj/item/food/snacks/grown/tea/astra = list("teapowder" = 0, "salglu_solution" = 0), + /obj/item/food/snacks/grown/tea = list("teapowder" = 0) ) var/list/holdingitems = list() @@ -180,8 +180,8 @@ return TRUE //no afterattack if(is_type_in_list(I, dried_items)) - if(istype(I, /obj/item/reagent_containers/food/snacks/grown)) - var/obj/item/reagent_containers/food/snacks/grown/G = I + if(istype(I, /obj/item/food/snacks/grown)) + var/obj/item/food/snacks/grown/G = I if(!G.dry) to_chat(user, "You must dry that first!") return FALSE @@ -239,10 +239,16 @@ /obj/machinery/reagentgrinder/attack_hand(mob/user) ui_interact(user) -/obj/machinery/reagentgrinder/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/reagentgrinder/attack_ghost(mob/user) + ui_interact(user) + +/obj/machinery/reagentgrinder/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/reagentgrinder/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ReagentGrinder", name, 400, 500, master_ui, state) + ui = new(user, src, "ReagentGrinder", name) ui.open() /obj/machinery/reagentgrinder/ui_data(mob/user) @@ -279,8 +285,8 @@ items_counts[display_name] += S.amount continue - else if(istype(O, /obj/item/reagent_containers/food)) - var/obj/item/reagent_containers/food/food = O + else if(isfood(O)) + var/obj/item/food/food = O if(!items_counts[display_name]) if(food.ingredient_name) name_overrides[display_name] = food.ingredient_name @@ -360,12 +366,12 @@ if(istype(O, i)) return blend_items[i] -/obj/machinery/reagentgrinder/proc/get_allowed_snack_by_id(obj/item/reagent_containers/food/snacks/O) +/obj/machinery/reagentgrinder/proc/get_allowed_snack_by_id(obj/item/food/snacks/O) for(var/i in blend_items) if(istype(O, i)) return blend_items[i] -/obj/machinery/reagentgrinder/proc/get_allowed_juice_by_id(obj/item/reagent_containers/food/snacks/O) +/obj/machinery/reagentgrinder/proc/get_allowed_juice_by_id(obj/item/food/snacks/O) for(var/i in juice_items) if(istype(O, i)) return juice_items[i] @@ -378,7 +384,7 @@ else return round(O.seed.potency) -/obj/machinery/reagentgrinder/proc/get_juice_amount(obj/item/reagent_containers/food/snacks/grown/O) +/obj/machinery/reagentgrinder/proc/get_juice_amount(obj/item/food/snacks/grown/O) if(!istype(O) || !O.seed) return 5 else if(O.seed.potency == -1) @@ -407,7 +413,7 @@ SStgui.update_uis(src) //Snacks - for(var/obj/item/reagent_containers/food/snacks/O in holdingitems) + for(var/obj/item/food/snacks/O in holdingitems) if(beaker.reagents.holder_full()) break @@ -445,13 +451,19 @@ SStgui.update_uis(src) //Snacks and Plants - for(var/obj/item/reagent_containers/food/snacks/O in holdingitems) + for(var/obj/item/food/snacks/O in holdingitems) if(beaker.reagents.holder_full()) break var/allowed = get_allowed_snack_by_id(O) - if(isnull(allowed)) - break + if(!length(allowed)) // We don't have anything specific allowed therefore we can just transfer everything + if(beaker.reagents.holder_full()) + continue + var/amount = O.reagents.total_volume + O.reagents.trans_to(beaker, amount) + if(!O.reagents.total_volume) + remove_object(O) + continue for(var/r_id in allowed) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 49ed5546a19c..6ff6e2acbcfc 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -601,7 +601,7 @@ /datum/reagent/consumable/chocolate/reaction_turf(turf/T, volume) if(volume >= 5 && !isspaceturf(T)) - new /obj/item/reagent_containers/food/snacks/choc_pile(T) + new /obj/item/food/snacks/choc_pile(T) /datum/reagent/consumable/mugwort name = "Mugwort" @@ -669,7 +669,7 @@ /datum/reagent/consumable/cheese/reaction_turf(turf/T, volume) if(volume >= 5 && !isspaceturf(T)) - new /obj/item/reagent_containers/food/snacks/cheesewedge(T) + new /obj/item/food/snacks/cheesewedge(T) /datum/reagent/consumable/fake_cheese name = "Cheese substitute" @@ -711,7 +711,7 @@ /datum/reagent/consumable/weird_cheese/reaction_turf(turf/T, volume) if(volume >= 5 && !isspaceturf(T)) - new /obj/item/reagent_containers/food/snacks/weirdcheesewedge(T) + new /obj/item/food/snacks/weirdcheesewedge(T) /datum/reagent/consumable/beans name = "Refried beans" @@ -935,11 +935,11 @@ /datum/reagent/ectoplasm/reaction_turf(turf/T, volume) if(volume >= 10 && !isspaceturf(T)) - new /obj/item/reagent_containers/food/snacks/ectoplasm(T) + new /obj/item/food/snacks/ectoplasm(T) /datum/reagent/consumable/bread/reaction_turf(turf/T, volume) if(volume >= 5 && !isspaceturf(T)) - new /obj/item/reagent_containers/food/snacks/breadslice(T) + new /obj/item/food/snacks/breadslice(T) /datum/reagent/soap name = "Soap" diff --git a/code/modules/reagents/chemistry/reagents/paradise_pop.dm b/code/modules/reagents/chemistry/reagents/paradise_pop.dm index 421f19119cdd..2b11e1cee88d 100644 --- a/code/modules/reagents/chemistry/reagents/paradise_pop.dm +++ b/code/modules/reagents/chemistry/reagents/paradise_pop.dm @@ -81,7 +81,10 @@ /datum/reagent/consumable/drink/berry_banned2/on_mob_death(mob/living/M) SEND_SOUND(M, sound('sound/effects/adminhelp.ogg', 0, 1, 0, 25)) - to_chat(M, chat_box_red("ЛС от Администратор: БВОНЬК!")) + to_chat(M, + type = MESSAGE_TYPE_ADMINPM, + html = chat_box_red("ЛС от Администратор: БВОНЬК!"), + confidential = TRUE) ..() //Blackeye Brew: Chance to make the drinker say greytider-themed things like "I thought clown was valid!" diff --git a/code/modules/reagents/chemistry/recipes/food_reactions.dm b/code/modules/reagents/chemistry/recipes/food_reactions.dm index 76609ad8dd90..b91a8a25bccb 100644 --- a/code/modules/reagents/chemistry/recipes/food_reactions.dm +++ b/code/modules/reagents/chemistry/recipes/food_reactions.dm @@ -10,7 +10,7 @@ /datum/chemical_reaction/tofu/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) for(var/i = 1, i <= created_volume, i++) - new /obj/item/reagent_containers/food/snacks/tofu(location) + new /obj/item/food/snacks/tofu(location) /datum/chemical_reaction/chocolate_bar name = "Chocolate Bar" @@ -22,7 +22,7 @@ /datum/chemical_reaction/chocolate_bar/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) for(var/i = 1, i <= created_volume, i++) - new /obj/item/reagent_containers/food/snacks/chocolatebar(location) + new /obj/item/food/snacks/chocolatebar(location) /datum/chemical_reaction/chocolate_bar2 name = "Chocolate Bar" @@ -34,7 +34,7 @@ /datum/chemical_reaction/chocolate_bar2/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) for(var/i = 1, i <= created_volume, i++) - new /obj/item/reagent_containers/food/snacks/chocolatebar(location) + new /obj/item/food/snacks/chocolatebar(location) /datum/chemical_reaction/soysauce name = "Soy Sauce" @@ -75,7 +75,7 @@ /datum/chemical_reaction/cheesewheel/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) for(var/i = 1, i <= created_volume, i++) - new /obj/item/reagent_containers/food/snacks/sliceable/cheesewheel(location) + new /obj/item/food/snacks/sliceable/cheesewheel(location) /datum/chemical_reaction/syntiflesh name = "Syntiflesh" @@ -87,7 +87,7 @@ /datum/chemical_reaction/syntiflesh/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) for(var/i = 1, i <= created_volume, i++) - new /obj/item/reagent_containers/food/snacks/meat/syntiflesh(location) + new /obj/item/food/snacks/meat/syntiflesh(location) /datum/chemical_reaction/hot_ramen name = "Hot Ramen" @@ -114,7 +114,7 @@ /datum/chemical_reaction/dough/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) for(var/i in 1 to created_volume) - new /obj/item/reagent_containers/food/snacks/dough(location) + new /obj/item/food/snacks/dough(location) ///Cookies by Ume @@ -129,7 +129,7 @@ /datum/chemical_reaction/cookiedough/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) for(var/i in 1 to created_volume) - new /obj/item/reagent_containers/food/snacks/cookiedough(location) + new /obj/item/food/snacks/cookiedough(location) /datum/chemical_reaction/corn_syrup @@ -183,7 +183,7 @@ /datum/chemical_reaction/weird_cheese/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) for(var/i in 1 to created_volume) - new /obj/item/reagent_containers/food/snacks/weirdcheesewedge(location) + new /obj/item/food/snacks/weirdcheesewedge(location) /datum/chemical_reaction/hydrogenated_soybeanoil name = "Partially hydrogenated space-soybean oil" diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index d0da4adc4c2c..8409f4b15e4c 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -263,7 +263,7 @@ /datum/chemical_reaction/meatification/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) - new /obj/item/reagent_containers/food/snacks/meat/slab/meatproduct(location) + new /obj/item/food/snacks/meat/slab/meatproduct(location) /datum/chemical_reaction/lye name = "lye" diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index a25bbe0a7140..10c8a080317f 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -38,7 +38,7 @@ /datum/chemical_reaction/slimemonkey/on_reaction(datum/reagents/holder) SSblackbox.record_feedback("tally", "slime_cores_used", 1, type) for(var/i = 1, i <= 3, i++) - var/obj/item/reagent_containers/food/snacks/monkeycube/M = new /obj/item/reagent_containers/food/snacks/monkeycube + var/obj/item/food/snacks/monkeycube/M = new /obj/item/food/snacks/monkeycube M.forceMove(get_turf(holder.my_atom)) //Green @@ -147,37 +147,39 @@ /datum/chemical_reaction/slimebork/on_reaction(datum/reagents/holder) SSblackbox.record_feedback("tally", "slime_cores_used", 1, type) - var/list/blocked = list(/obj/item/reagent_containers/food/snacks, - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/sliceable, - /obj/item/reagent_containers/food/snacks/sliceable/pizza, - /obj/item/reagent_containers/food/snacks/margheritapizzaslice, - /obj/item/reagent_containers/food/snacks/meatpizzaslice, - /obj/item/reagent_containers/food/snacks/mushroompizzaslice, - /obj/item/reagent_containers/food/snacks/vegetablepizzaslice, - /obj/item/reagent_containers/food/snacks/cheesepizzaslice, - /obj/item/reagent_containers/food/snacks/garlicpizzaslice, - /obj/item/reagent_containers/food/snacks/donkpocketpizzaslice, - /obj/item/reagent_containers/food/snacks/dankpizzaslice, - /obj/item/reagent_containers/food/snacks/macpizzaslice, - /obj/item/reagent_containers/food/snacks/firecrackerpizzaslice, - /obj/item/reagent_containers/food/snacks/pestopizzaslice, - /obj/item/reagent_containers/food/snacks/pepperonipizzaslice, - /obj/item/reagent_containers/food/snacks/meat, - /obj/item/reagent_containers/food/snacks/meat/slab, - /obj/item/reagent_containers/food/snacks/grown, - /obj/item/reagent_containers/food/snacks/grown/shell, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/deepfryholder, - /obj/item/reagent_containers/food/snacks/chinese, - /obj/item/reagent_containers/food/snacks/human, - /obj/item/reagent_containers/food/snacks/monstermeat, - /obj/item/reagent_containers/food/snacks/meatsteak/stimulating, - /obj/item/reagent_containers/food/snacks/egg/watcher + + var/list/blocked = list( + /obj/item/food/snacks, + /obj/item/food/snacks/breadslice, + /obj/item/food/snacks/sliceable, + /obj/item/food/snacks/sliceable/pizza, + /obj/item/food/snacks/margheritapizzaslice, + /obj/item/food/snacks/meatpizzaslice, + /obj/item/food/snacks/mushroompizzaslice, + /obj/item/food/snacks/vegetablepizzaslice, + /obj/item/food/snacks/cheesepizzaslice, + /obj/item/food/snacks/garlicpizzaslice, + /obj/item/food/snacks/donkpocketpizzaslice, + /obj/item/food/snacks/dankpizzaslice, + /obj/item/food/snacks/macpizzaslice, + /obj/item/food/snacks/firecrackerpizzaslice, + /obj/item/food/snacks/pestopizzaslice, + /obj/item/food/snacks/pepperonipizzaslice, + /obj/item/food/snacks/meat, + /obj/item/food/snacks/meat/slab, + /obj/item/food/snacks/grown, + /obj/item/food/snacks/grown/shell, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/deepfryholder, + /obj/item/food/snacks/chinese, + /obj/item/food/snacks/human, + /obj/item/food/snacks/monstermeat, + /obj/item/food/snacks/meatsteak/stimulating, + /obj/item/food/snacks/egg/watcher ) - blocked |= typesof(/obj/item/reagent_containers/food/snacks/customizable) + blocked |= typesof(/obj/item/food/snacks/customizable) - var/list/borks = typesof(/obj/item/reagent_containers/food/snacks) - blocked + var/list/borks = typesof(/obj/item/food/snacks) - blocked // BORK BORK BORK playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) @@ -207,24 +209,24 @@ /datum/chemical_reaction/slimebork2/on_reaction(datum/reagents/holder) SSblackbox.record_feedback("tally", "slime_cores_used", 1, type) - var/list/borks = subtypesof(/obj/item/reagent_containers/food/drinks) - var/list/blocked = list(/obj/item/reagent_containers/food/drinks/cans/adminbooze, - /obj/item/reagent_containers/food/drinks/cans/madminmalt, - /obj/item/reagent_containers/food/drinks/shaker, - /obj/item/reagent_containers/food/drinks/britcup, - /obj/item/reagent_containers/food/drinks/sillycup, - /obj/item/reagent_containers/food/drinks/cans, - /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, - /obj/item/reagent_containers/food/drinks/drinkingglass, - /obj/item/reagent_containers/food/drinks/bottle, - /obj/item/reagent_containers/food/drinks/everfull, - /obj/item/reagent_containers/food/drinks/bottle/dragonsbreath, - /obj/item/reagent_containers/food/drinks/bottle/immortality, - /obj/item/reagent_containers/food/drinks/mushroom_bowl + var/list/borks = subtypesof(/obj/item/reagent_containers/drinks) + var/list/blocked = list(/obj/item/reagent_containers/drinks/cans/adminbooze, + /obj/item/reagent_containers/drinks/cans/madminmalt, + /obj/item/reagent_containers/drinks/shaker, + /obj/item/reagent_containers/drinks/britcup, + /obj/item/reagent_containers/drinks/sillycup, + /obj/item/reagent_containers/drinks/cans, + /obj/item/reagent_containers/drinks/drinkingglass/shotglass, + /obj/item/reagent_containers/drinks/drinkingglass, + /obj/item/reagent_containers/drinks/bottle, + /obj/item/reagent_containers/drinks/everfull, + /obj/item/reagent_containers/drinks/bottle/dragonsbreath, + /obj/item/reagent_containers/drinks/bottle/immortality, + /obj/item/reagent_containers/drinks/mushroom_bowl ) - blocked += typesof(/obj/item/reagent_containers/food/drinks/flask) - blocked += typesof(/obj/item/reagent_containers/food/drinks/trophy) - blocked += typesof(/obj/item/reagent_containers/food/drinks/cans/bottler) + blocked += typesof(/obj/item/reagent_containers/drinks/flask) + blocked += typesof(/obj/item/reagent_containers/drinks/trophy) + blocked += typesof(/obj/item/reagent_containers/drinks/cans/bottler) borks -= blocked // BORK BORK BORK diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 4f155bf54bfa..a818d35f26ab 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -57,7 +57,6 @@ if(!QDELETED(src)) ..() - /obj/item/reagent_containers/proc/add_lid() if(has_lid) container_type ^= REFILLABLE | DRAINABLE diff --git a/code/modules/reagents/reagent_containers/chemical_bottle.dm b/code/modules/reagents/reagent_containers/chemical_bottle.dm index 4e8f9a1224e1..b48d4fe33794 100644 --- a/code/modules/reagents/reagent_containers/chemical_bottle.dm +++ b/code/modules/reagents/reagent_containers/chemical_bottle.dm @@ -1,4 +1,4 @@ -//Not to be confused with /obj/item/reagent_containers/food/drinks/bottle +//Not to be confused with /obj/item/reagent_containers/drinks/bottle /obj/item/reagent_containers/glass/bottle diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm index 553a468b9557..c8a02d8f7975 100644 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ b/code/modules/reagents/reagent_containers/dropper.dm @@ -72,7 +72,7 @@ return if(reagents.total_volume) - if(!target.is_open_container() && !(istype(target, /obj/item/reagent_containers/food) && !ispill(target)) && !istype(target, /obj/item/clothing/mask/cigarette)) + if(!target.is_open_container() && !(isfood(target) && !ispill(target)) && !istype(target, /obj/item/clothing/mask/cigarette)) to_chat(user, "You cannot directly fill this object.") return diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 47796f6e1a28..8ee8351283b8 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -136,7 +136,7 @@ add_attack_logs(user, L, "Injected with [name] containing [contained], transfered [amount_per_transfer_from_this] units", reagents.harmless_helper() ? ATKLOG_ALMOSTALL : null) - if(istype(target, /obj/item/reagent_containers/food)) + if(isfood(target)) var/list/chemicals = list() for(var/datum/reagent/chem in reagents.reagent_list) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 1f770bfa3bf9..7216ee0177f7 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -256,7 +256,7 @@ to_chat(user, "There aren't any cups left!") return user.visible_message("[user] takes a cup from [src].", "You take a paper cup from [src].") - var/obj/item/reagent_containers/food/drinks/sillycup/S = new(get_turf(src)) + var/obj/item/reagent_containers/drinks/sillycup/S = new(get_turf(src)) user.put_in_hands(S) paper_cups-- diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 601f25a09f0a..56221bed2e5b 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -369,10 +369,13 @@ GLOBAL_LIST_EMPTY(conveyor_switches) return ui_interact(user) -/obj/machinery/conveyor_switch/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/conveyor_switch/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/conveyor_switch/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ConveyorSwitch", name, 350, 150, master_ui, state) + ui = new(user, src, "ConveyorSwitch", name) ui.open() /obj/machinery/conveyor_switch/ui_data(mob/user) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 6dc15c8126f6..0fc5b50e67bb 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -271,10 +271,13 @@ update() return -/obj/machinery/disposal/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/disposal/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/disposal/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "DisposalBin", name, 300, 250, master_ui, state) + ui = new(user, src, "DisposalBin", name) ui.open() diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index ce03f7589b60..fe911893329b 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -256,7 +256,10 @@ add_fingerprint(user) ui_interact(user) -/obj/item/destTagger/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/item/destTagger/ui_state(mob/user) + return GLOB.default_state + +/obj/item/destTagger/ui_interact(mob/user, datum/tgui/ui = null) destination_tagger.ui_interact(user) /obj/machinery/disposal/deliveryChute diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 10c43eaf23db..3f85b550422d 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -276,7 +276,7 @@ id = "drinking_glass" build_type = AUTOLATHE materials = list(MAT_GLASS = 100) - build_path = /obj/item/reagent_containers/food/drinks/drinkingglass + build_path = /obj/item/reagent_containers/drinks/drinkingglass category = list("initial","Dinnerware") /datum/design/shot_glass @@ -284,7 +284,7 @@ id = "shot_glass" build_type = AUTOLATHE materials = list(MAT_GLASS = 50) - build_path = /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass + build_path = /obj/item/reagent_containers/drinks/drinkingglass/shotglass category = list("initial","Dinnerware") /datum/design/shaker @@ -292,7 +292,7 @@ id = "shaker" build_type = AUTOLATHE materials = list(MAT_METAL = 1500) - build_path = /obj/item/reagent_containers/food/drinks/shaker + build_path = /obj/item/reagent_containers/drinks/shaker category = list("initial","Dinnerware") /datum/design/cultivator diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm index 10a73792f2f0..e3d556355a9d 100644 --- a/code/modules/research/designs/biogenerator_designs.dm +++ b/code/modules/research/designs/biogenerator_designs.dm @@ -23,7 +23,7 @@ id = "milk_carton" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 100) - build_path = /obj/item/reagent_containers/food/condiment/milk + build_path = /obj/item/reagent_containers/condiment/milk category = list("initial","Food") /datum/design/cream_carton @@ -31,7 +31,7 @@ id = "cream_carton" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 300) - build_path = /obj/item/reagent_containers/food/drinks/bottle/cream + build_path = /obj/item/reagent_containers/drinks/bottle/cream category = list("initial","Food") /datum/design/black_pepper @@ -47,7 +47,7 @@ id = "pepper_mill" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 50) - build_path = /obj/item/reagent_containers/food/condiment/peppermill + build_path = /obj/item/reagent_containers/condiment/peppermill make_reagents = list() category = list("initial","Food") @@ -56,7 +56,7 @@ id = "mcube" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 250) - build_path = /obj/item/reagent_containers/food/snacks/monkeycube + build_path = /obj/item/food/snacks/monkeycube category = list("initial", "Food") /datum/design/farwa_cube @@ -64,7 +64,7 @@ id = "fcube" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 250) - build_path = /obj/item/reagent_containers/food/snacks/monkeycube/farwacube + build_path = /obj/item/food/snacks/monkeycube/farwacube category = list("initial", "Food") /datum/design/wolpin_cube @@ -72,7 +72,7 @@ id = "wcube" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 250) - build_path = /obj/item/reagent_containers/food/snacks/monkeycube/wolpincube + build_path = /obj/item/food/snacks/monkeycube/wolpincube category = list("initial", "Food") /datum/design/stok_cube @@ -80,7 +80,7 @@ id = "scube" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 250) - build_path = /obj/item/reagent_containers/food/snacks/monkeycube/stokcube + build_path = /obj/item/food/snacks/monkeycube/stokcube category = list("initial", "Food") /datum/design/neaera_cube @@ -88,7 +88,7 @@ id = "ncube" build_type = BIOGENERATOR materials = list(MAT_BIOMASS = 250) - build_path = /obj/item/reagent_containers/food/snacks/monkeycube/neaeracube + build_path = /obj/item/food/snacks/monkeycube/neaeracube category = list("initial", "Food") /datum/design/ez_nut diff --git a/code/modules/research/designs/bluespace_designs.dm b/code/modules/research/designs/bluespace_designs.dm index 8c94a2492ea7..3ba6b9b610db 100644 --- a/code/modules/research/designs/bluespace_designs.dm +++ b/code/modules/research/designs/bluespace_designs.dm @@ -98,5 +98,5 @@ id = "bluespaceshotglass" build_type = PROTOLATHE materials = list(MAT_METAL = 1000, MAT_BLUESPACE = 500) - build_path = /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/bluespace + build_path = /obj/item/reagent_containers/drinks/drinkingglass/shotglass/bluespace category = list("Bluespace") diff --git a/code/modules/research/designs/smelting_designs.dm b/code/modules/research/designs/smelting_designs.dm index b2c85390d955..9ff0f991f8f7 100644 --- a/code/modules/research/designs/smelting_designs.dm +++ b/code/modules/research/designs/smelting_designs.dm @@ -1,51 +1,49 @@ ///////SMELTABLE ALLOYS/////// -/datum/design/plasteel_alloy +/datum/design/smelter + build_type = SMELTER + +/datum/design/smelter/plasteel_alloy name = "Plasteel" desc = "Plasma + Iron" id = "plasteel" - build_type = SMELTER materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT, MAT_PLASMA = MINERAL_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/plasteel category = list("initial") -/datum/design/plastitanium_alloy +/datum/design/smelter/plastitanium_alloy name = "Plastitanium" desc = "Plasma + Titanium" id = "plastitanium" - build_type = SMELTER materials = list(MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT, MAT_PLASMA = MINERAL_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/mineral/plastitanium category = list("initial") -/datum/design/plaglass_alloy +/datum/design/smelter/plaglass_alloy name = "Plasma Glass" desc = "Plasma + Glass" id = "plasmaglass" - build_type = SMELTER materials = list(MAT_PLASMA = MINERAL_MATERIAL_AMOUNT, MAT_GLASS = MINERAL_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/plasmaglass category = list("initial") -/datum/design/titaniumglass_alloy +/datum/design/smelter/titaniumglass_alloy name = "Titanium Glass" desc = "Titanium + Glass" id = "titaniumglass" - build_type = SMELTER materials = list(MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT, MAT_GLASS = MINERAL_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/titaniumglass category = list("initial") -/datum/design/plastitaniumglass_alloy +/datum/design/smelter/plastitaniumglass_alloy name = "Plastitanium Glass" desc = "Plasma + Titanium + Glass" id = "plastitaniumglass" - build_type = SMELTER materials = list(MAT_PLASMA = MINERAL_MATERIAL_AMOUNT, MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT, MAT_GLASS = MINERAL_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/plastitaniumglass category = list("initial") -/datum/design/alienalloy +/datum/design/smelter/alienalloy name = "Alien Alloy" desc = "A sheet of reverse-engineered alien alloy." id = "alienalloy" diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index de1b4b0880b6..6f039a583dc1 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -30,8 +30,8 @@ var/list/item_reactions = list() var/list/valid_items = list() //valid items for special reactions like transforming var/list/critical_items = list() //items that can cause critical reactions - var/list/blocked_items = list(/obj/item/reagent_containers/food/drinks/bottle/dragonsbreath, - /obj/item/reagent_containers/food/drinks/bottle/immortality) + var/list/blocked_items = list(/obj/item/reagent_containers/drinks/bottle/dragonsbreath, + /obj/item/reagent_containers/drinks/bottle/immortality) /// Used for linking with rnd consoles var/range = 5 @@ -55,7 +55,7 @@ valid_items += I probWeight++ - if(ispath(I,/obj/item/reagent_containers/food)) + if(ispath(I,/obj/item/food)) var/obj/item/tempCheck = I if(I in blocked_items) continue @@ -340,7 +340,7 @@ if(prob(EFFECT_PROB_LOW) && criticalReaction) visible_message("[src]'s emergency coolant system gives off a small ding!") playsound(loc, 'sound/machines/ding.ogg', 50, 1) - var/obj/item/reagent_containers/food/drinks/coffee/C = new /obj/item/reagent_containers/food/drinks/coffee(get_turf(pick(oview(1,src)))) + var/obj/item/reagent_containers/drinks/coffee/C = new /obj/item/reagent_containers/drinks/coffee(get_turf(pick(oview(1,src)))) chosenchem = pick("plasma","capsaicin","ethanol") C.reagents.remove_any(25) C.reagents.add_reagent(chosenchem , 50) @@ -391,7 +391,7 @@ visible_message("[src] lowers [exp_on]'s temperature.") if(prob(EFFECT_PROB_LOW) && criticalReaction) visible_message("[src]'s emergency coolant system gives off a small ding!") - var/obj/item/reagent_containers/food/drinks/coffee/C = new /obj/item/reagent_containers/food/drinks/coffee(get_turf(pick(oview(1,src)))) + var/obj/item/reagent_containers/drinks/coffee/C = new /obj/item/reagent_containers/drinks/coffee(get_turf(pick(oview(1,src)))) playsound(loc, 'sound/machines/ding.ogg', 50, 1) //Ding! Your death coffee is ready! chosenchem = pick("uranium","frostoil","ephedrine") C.reagents.remove_any(25) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 90a399617a54..5dbdde06706b 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -96,39 +96,22 @@ won't update every console in existence) but it's more of a hassle to do. Also, return initial(tt.name) /proc/CallMaterialName(ID) - if(copytext(ID, 1, 2) == "$") - var/return_name = copytext(ID, 2) - switch(return_name) - if("metal") - return_name = "Metal" - if("glass") - return_name = "Glass" - if("gold") - return_name = "Gold" - if("silver") - return_name = "Silver" - if("plasma") - return_name = "Solid Plasma" - if("uranium") - return_name = "Uranium" - if("diamond") - return_name = "Diamond" - if("clown") - return_name = "Bananium" - if("mime") - return_name = "Tranquillite" - if("titanium") - return_name = "Titanium" - if("bluespace") - return_name = "Bluespace Mesh" - if("plastic") - return_name = "Plastic" - return return_name - else - for(var/R in subtypesof(/datum/reagent)) - var/datum/reagent/rt = R - if(initial(rt.id) == ID) - return initial(rt.name) + var/return_name = ID + switch(return_name) + if("plasma") + return_name = "Solid Plasma" + if("clown") + return_name = "Bananium" + if("mime") + return_name = "Tranquillite" + if("bluespace") + return_name = "Bluespace Mesh" + else + for(var/R in subtypesof(/datum/reagent)) + var/datum/reagent/rt = R + if(initial(rt.id) == ID) + return_name = initial(rt.name) + return capitalize(return_name) /obj/machinery/computer/rdconsole/proc/SyncRDevices() //Makes sure it is properly sync'ed up with the devices attached to it (if any). for(var/obj/machinery/r_n_d/D in range(range, src)) @@ -706,10 +689,13 @@ won't update every console in existence) but it's more of a hassle to do. Also, return TRUE ui_interact(user) -/obj/machinery/computer/rdconsole/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/rdconsole/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/rdconsole/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "RndConsole", name, 800, 550, master_ui, state) + ui = new(user, src, "RndConsole", name) ui.open() /obj/machinery/computer/rdconsole/proc/ui_machine_data(obj/machinery/r_n_d/machine, list/data) diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index 531dc9237800..4225b79bc0eb 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -177,7 +177,7 @@ return ..() /obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube)) + if(istype(O, /obj/item/food/snacks/monkeycube)) if(user.drop_item()) monkeys++ to_chat(user, "You feed [O] to [src]. It now has [monkeys] monkey cubes stored.") @@ -192,7 +192,7 @@ else if(istype(O, /obj/item/storage/bag) || istype(O, /obj/item/storage/box)) var/obj/item/storage/P = O var/loaded = 0 - for(var/obj/item/reagent_containers/food/snacks/monkeycube/MC in P.contents) + for(var/obj/item/food/snacks/monkeycube/MC in P.contents) loaded = 1 monkeys++ P.remove_from_storage(MC) diff --git a/code/modules/ruins/lavalandruin_code/puzzle.dm b/code/modules/ruins/lavalandruin_code/puzzle.dm index 5320a16f12b2..8a66c4471926 100644 --- a/code/modules/ruins/lavalandruin_code/puzzle.dm +++ b/code/modules/ruins/lavalandruin_code/puzzle.dm @@ -7,7 +7,7 @@ var/list/elements var/floor_type = /turf/simulated/floor/vault/lavaland_air var/finished = FALSE - var/reward_type = /obj/item/reagent_containers/food/snacks/cookie + var/reward_type = /obj/item/food/snacks/cookie var/element_type = /obj/structure/puzzle_element var/auto_setup = TRUE var/empty_tile_id diff --git a/code/modules/ruins/lavalandruin_code/seed_vault.dm b/code/modules/ruins/lavalandruin_code/seed_vault.dm index 7c70935c9f3b..54b7f64c2f54 100644 --- a/code/modules/ruins/lavalandruin_code/seed_vault.dm +++ b/code/modules/ruins/lavalandruin_code/seed_vault.dm @@ -2,7 +2,7 @@ name = "seed vault seeds" lootcount = 1 - loot = list(/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/glowcap = 10, + loot = list(/obj/item/food/snacks/grown/mushroom/glowshroom/glowcap = 10, /obj/item/seeds/cherry/bomb = 10, /obj/item/seeds/berry/glow = 10, /obj/item/seeds/sunflower/moonflower = 8 diff --git a/code/modules/ruins/syndicate_space_base.dm b/code/modules/ruins/syndicate_space_base.dm index e04ea6ddc9df..bd51a8c30717 100644 --- a/code/modules/ruins/syndicate_space_base.dm +++ b/code/modules/ruins/syndicate_space_base.dm @@ -16,7 +16,7 @@ /obj/item/grenade/chem_grenade/pyro = 5, /obj/item/grenade/chem_grenade/cryo = 5, /obj/item/grenade/chem_grenade/adv_release = 5, - /obj/item/reagent_containers/food/drinks/bottle/holywater = 1) + /obj/item/reagent_containers/drinks/bottle/holywater = 1) slogan_list = list("Это не пиромания, если тебе платят!","Чувствуешь запах? Плазма, сынок. Больше ничто в мире так не пахнет.","Люблю запах плазмы по утрам.") resistance_flags = FIRE_PROOF diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm index 7a5c059d915a..f8d53a6200c3 100644 --- a/code/modules/security_levels/keycard_authentication.dm +++ b/code/modules/security_levels/keycard_authentication.dm @@ -86,10 +86,13 @@ return TRUE ui_interact(user) -/obj/machinery/keycard_auth/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/keycard_auth/ui_state(mob/user) + return GLOB.physical_state + +/obj/machinery/keycard_auth/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "KeycardAuth", name, 540, 300, master_ui, state) + ui = new(user, src, "KeycardAuth", name) ui.open() diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index dcfd3716229b..50c160e218b1 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -806,10 +806,13 @@ add_fingerprint(user) ui_interact(user) -/obj/machinery/computer/shuttle/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/shuttle/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/shuttle/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ShuttleConsole", name, 350, 150, master_ui, state) + ui = new(user, src, "ShuttleConsole", name) ui.open() /obj/machinery/computer/shuttle/ui_data(mob/user) diff --git a/code/modules/shuttle/shuttle_manipulator.dm b/code/modules/shuttle/shuttle_manipulator.dm index 09f2b8f3be69..dc889330287d 100644 --- a/code/modules/shuttle/shuttle_manipulator.dm +++ b/code/modules/shuttle/shuttle_manipulator.dm @@ -68,10 +68,13 @@ return FALSE // Extremely important that this doesn't get varedited by mistake, otherwise horrible, horrible things can happen to the server. return ..() -/obj/machinery/shuttle_manipulator/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.admin_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/shuttle_manipulator/ui_state(mob/user) + return GLOB.admin_state + +/obj/machinery/shuttle_manipulator/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ShuttleManipulator", name, 650, 700, master_ui, state) + ui = new(user, src, "ShuttleManipulator", name) ui.open() /obj/machinery/shuttle_manipulator/ui_data(mob/user) diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index 63c1eff010a2..a6f70ab1c9db 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -149,25 +149,25 @@ name = "fancy food" lootcount = 3 loot = list( - /obj/item/reagent_containers/food/snacks/wingfangchu, - /obj/item/reagent_containers/food/snacks/hotdog, - /obj/item/reagent_containers/food/snacks/sliceable/turkey, - /obj/item/reagent_containers/food/snacks/plumphelmetbiscuit, - /obj/item/reagent_containers/food/snacks/appletart, - /obj/item/reagent_containers/food/snacks/sliceable/cheesecake, - /obj/item/reagent_containers/food/snacks/sliceable/bananacake, - /obj/item/reagent_containers/food/snacks/sliceable/chocolatecake, - /obj/item/reagent_containers/food/snacks/soup/meatballsoup, - /obj/item/reagent_containers/food/snacks/soup/mysterysoup, - /obj/item/reagent_containers/food/snacks/soup/stew, - /obj/item/reagent_containers/food/snacks/soup/hotchili, - /obj/item/reagent_containers/food/snacks/burrito, - /obj/item/reagent_containers/food/snacks/fishburger, - /obj/item/reagent_containers/food/snacks/cubancarp, - /obj/item/reagent_containers/food/snacks/fishandchips, - /obj/item/reagent_containers/food/snacks/meatpie, + /obj/item/food/snacks/wingfangchu, + /obj/item/food/snacks/hotdog, + /obj/item/food/snacks/sliceable/turkey, + /obj/item/food/snacks/plumphelmetbiscuit, + /obj/item/food/snacks/appletart, + /obj/item/food/snacks/sliceable/cheesecake, + /obj/item/food/snacks/sliceable/bananacake, + /obj/item/food/snacks/sliceable/chocolatecake, + /obj/item/food/snacks/soup/meatballsoup, + /obj/item/food/snacks/soup/mysterysoup, + /obj/item/food/snacks/soup/stew, + /obj/item/food/snacks/soup/hotchili, + /obj/item/food/snacks/burrito, + /obj/item/food/snacks/fishburger, + /obj/item/food/snacks/cubancarp, + /obj/item/food/snacks/fishandchips, + /obj/item/food/snacks/meatpie, /obj/item/pizzabox/hawaiian, //it ONLY gives hawaiian. MUHAHAHA - /obj/item/reagent_containers/food/snacks/sliceable/xenomeatbread //maybe add some dangerous/special food here, ie robobuger? + /obj/item/food/snacks/sliceable/xenomeatbread //maybe add some dangerous/special food here, ie robobuger? ) #define kW *1000 @@ -494,10 +494,13 @@ var/key = text2num(params["target"]) produce(key) -/obj/machinery/power/bluespace_tap/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/power/bluespace_tap/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/power/bluespace_tap/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BluespaceTap", name, 650, 400, master_ui, state) + ui = new(user, src, "BluespaceTap", name) ui.open() //emaging provides slightly more points but at much greater risk diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm index 0b4bcd811144..d368a88f0ef1 100644 --- a/code/modules/station_goals/bsa.dm +++ b/code/modules/station_goals/bsa.dm @@ -327,10 +327,13 @@ return 1 ui_interact(user) -/obj/machinery/computer/bsa_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/bsa_control/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/bsa_control/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "BlueSpaceArtilleryControl", name, 400, 155, master_ui, state) + ui = new(user, src, "BlueSpaceArtilleryControl", name) ui.open() /obj/machinery/computer/bsa_control/ui_data(mob/user) diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index 7c84ecfc22c2..eeaa2cf22ce4 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -215,11 +215,14 @@ GLOBAL_LIST_INIT(non_simple_animals, typecacheof(list(/mob/living/carbon/human/m return TRUE ui_interact(user) -/obj/machinery/dna_vault/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/dna_vault/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/dna_vault/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) roll_powers(user) - ui = new(user, src, ui_key, "DnaVault", name, 350, 400, master_ui, state) + ui = new(user, src, "DnaVault", name) ui.open() /obj/machinery/dna_vault/proc/roll_powers(mob/user) diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm index 729fef7a1b6c..f1c74b695fa3 100644 --- a/code/modules/station_goals/shield.dm +++ b/code/modules/station_goals/shield.dm @@ -52,10 +52,13 @@ return 1 ui_interact(user) -/obj/machinery/computer/sat_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/computer/sat_control/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/sat_control/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "SatelliteControl", name, 475, 400) + ui = new(user, src, "SatelliteControl", name) ui.open() /obj/machinery/computer/sat_control/ui_data(mob/user) @@ -170,7 +173,7 @@ if(!emagged && space_los(M)) Beam(get_turf(M), icon_state = "sat_beam", time = 5, maxdistance = kill_range) if(istype(M, /obj/effect/space_dust/meaty)) - new /obj/item/reagent_containers/food/snacks/meatsteak(get_turf(M)) + new /obj/item/food/snacks/meatsteak(get_turf(M)) qdel(M) /obj/machinery/satellite/meteor_shield/toggle(user) diff --git a/code/modules/supply/supply_console.dm b/code/modules/supply/supply_console.dm index 9912dd4d3e2d..8ea77828d518 100644 --- a/code/modules/supply/supply_console.dm +++ b/code/modules/supply/supply_console.dm @@ -182,12 +182,15 @@ orders += list(order_data) return orders -/obj/machinery/computer/supplycomp/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/computer/supplycomp/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/computer/supplycomp/ui_interact(mob/user, datum/tgui/ui = null) if(!cargo_account || !account_database) reconnect_database() - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "CargoConsole", name, 900, 800, master_ui, state) + ui = new(user, src, "CargoConsole", name) ui.open() /obj/machinery/computer/supplycomp/ui_data(mob/user) @@ -252,7 +255,7 @@ visible_message("[src]'s monitor flashes, \"[world.time - reqtime] seconds remaining until another requisition form may be printed.\"") return var/amount = 1 - if(params["multiple"] == "1") // 1 is a string here. DO NOT MAKE THIS A BOOLEAN YOU DORK + if(params["multiple"]) var/num_input = input(user, "Amount", "How many crates? ([MULTIPLE_CRATE_MAX] Max)") as null|num if(!num_input || (!is_public && !is_authorized(user)) || ..()) // Make sure they dont walk away return diff --git a/code/modules/supply/supply_packs/pack_miscellaneous.dm b/code/modules/supply/supply_packs/pack_miscellaneous.dm index dd906cfc71c0..113ab3cbfa7c 100644 --- a/code/modules/supply/supply_packs/pack_miscellaneous.dm +++ b/code/modules/supply/supply_packs/pack_miscellaneous.dm @@ -48,8 +48,8 @@ /datum/supply_packs/misc/religious_supplies name = "Religious Supplies Crate" - contains = list(/obj/item/reagent_containers/food/drinks/bottle/holywater, - /obj/item/reagent_containers/food/drinks/bottle/holywater, + contains = list(/obj/item/reagent_containers/drinks/bottle/holywater, + /obj/item/reagent_containers/drinks/bottle/holywater, /obj/item/storage/bible/booze, /obj/item/storage/bible/booze, /obj/item/clothing/suit/hooded/chaplain_hoodie, @@ -240,8 +240,8 @@ /obj/item/clothing/mask/gas/mime, /obj/item/clothing/head/beret, /obj/item/clothing/suit/suspenders, - /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing, - /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana + /obj/item/reagent_containers/drinks/bottle/bottleofnothing, + /obj/item/reagent_containers/drinks/bottle/bottleofbanana ) cost = 250 containertype = /obj/structure/closet/crate/secure diff --git a/code/modules/supply/supply_packs/pack_organic.dm b/code/modules/supply/supply_packs/pack_organic.dm index e5812958dee0..2f6158d207bf 100644 --- a/code/modules/supply/supply_packs/pack_organic.dm +++ b/code/modules/supply/supply_packs/pack_organic.dm @@ -7,22 +7,22 @@ /datum/supply_packs/organic/food name = "Food Crate" - contains = list(/obj/item/reagent_containers/food/condiment/flour, - /obj/item/reagent_containers/food/condiment/rice, - /obj/item/reagent_containers/food/condiment/milk, - /obj/item/reagent_containers/food/condiment/soymilk, - /obj/item/reagent_containers/food/condiment/saltshaker, - /obj/item/reagent_containers/food/condiment/peppermill, + contains = list(/obj/item/reagent_containers/condiment/flour, + /obj/item/reagent_containers/condiment/rice, + /obj/item/reagent_containers/condiment/milk, + /obj/item/reagent_containers/condiment/soymilk, + /obj/item/reagent_containers/condiment/saltshaker, + /obj/item/reagent_containers/condiment/peppermill, /obj/item/kitchen/rollingpin, /obj/item/storage/fancy/egg_box, /obj/item/mixing_bowl, /obj/item/mixing_bowl, - /obj/item/reagent_containers/food/condiment/enzyme, - /obj/item/reagent_containers/food/condiment/sugar, - /obj/item/reagent_containers/food/snacks/meat/monkey, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana) + /obj/item/reagent_containers/condiment/enzyme, + /obj/item/reagent_containers/condiment/sugar, + /obj/item/food/snacks/meat/monkey, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/banana) cost = 250 containername = "food crate" announce_beacons = list("Kitchen" = list("Kitchen")) @@ -39,18 +39,18 @@ /datum/supply_packs/misc/randomised/ingredients // its a bit hacky... num_contained = 25 - contains = list(/obj/item/reagent_containers/food/snacks/grown/wheat, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/grown/pumpkin, - /obj/item/reagent_containers/food/snacks/grown/chili, - /obj/item/reagent_containers/food/snacks/grown/cocoapod, - /obj/item/reagent_containers/food/snacks/grown/corn, - /obj/item/reagent_containers/food/snacks/grown/eggplant, - /obj/item/reagent_containers/food/snacks/grown/apple, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/cherries) + contains = list(/obj/item/food/snacks/grown/wheat, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/grown/pumpkin, + /obj/item/food/snacks/grown/chili, + /obj/item/food/snacks/grown/cocoapod, + /obj/item/food/snacks/grown/corn, + /obj/item/food/snacks/grown/eggplant, + /obj/item/food/snacks/grown/apple, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/cherries) name = "Ingredient Crate" cost = 300 containername = "ingredient crate" @@ -60,18 +60,18 @@ /datum/supply_packs/organic/condiments name = "Condiment Crate" - contains = list(/obj/item/reagent_containers/food/condiment/ketchup, - /obj/item/reagent_containers/food/condiment/bbqsauce, - /obj/item/reagent_containers/food/condiment/soysauce, - /obj/item/reagent_containers/food/condiment/mayonnaise, - /obj/item/reagent_containers/food/condiment/cherryjelly, - /obj/item/reagent_containers/food/condiment/peanutbutter, - /obj/item/reagent_containers/food/condiment/honey, - /obj/item/reagent_containers/food/condiment/oliveoil, - /obj/item/reagent_containers/food/condiment/frostoil, - /obj/item/reagent_containers/food/condiment/capsaicin, - /obj/item/reagent_containers/food/condiment/wasabi, - /obj/item/reagent_containers/food/condiment/vinegar) + contains = list(/obj/item/reagent_containers/condiment/ketchup, + /obj/item/reagent_containers/condiment/bbqsauce, + /obj/item/reagent_containers/condiment/soysauce, + /obj/item/reagent_containers/condiment/mayonnaise, + /obj/item/reagent_containers/condiment/cherryjelly, + /obj/item/reagent_containers/condiment/peanutbutter, + /obj/item/reagent_containers/condiment/honey, + /obj/item/reagent_containers/condiment/oliveoil, + /obj/item/reagent_containers/condiment/frostoil, + /obj/item/reagent_containers/condiment/capsaicin, + /obj/item/reagent_containers/condiment/wasabi, + /obj/item/reagent_containers/condiment/vinegar) cost = 300 containername = "condiment crate" @@ -115,15 +115,15 @@ /datum/supply_packs/organic/party name = "Party Equipment Crate" contains = list(/obj/item/storage/box/drinkingglasses, - /obj/item/reagent_containers/food/drinks/shaker, - /obj/item/reagent_containers/food/drinks/bottle/patron, - /obj/item/reagent_containers/food/drinks/bottle/goldschlager, - /obj/item/reagent_containers/food/drinks/cans/ale, - /obj/item/reagent_containers/food/drinks/cans/ale, - /obj/item/reagent_containers/food/drinks/cans/beer, - /obj/item/reagent_containers/food/drinks/cans/beer, - /obj/item/reagent_containers/food/drinks/cans/beer, - /obj/item/reagent_containers/food/drinks/cans/beer, + /obj/item/reagent_containers/drinks/shaker, + /obj/item/reagent_containers/drinks/bottle/patron, + /obj/item/reagent_containers/drinks/bottle/goldschlager, + /obj/item/reagent_containers/drinks/cans/ale, + /obj/item/reagent_containers/drinks/cans/ale, + /obj/item/reagent_containers/drinks/cans/beer, + /obj/item/reagent_containers/drinks/cans/beer, + /obj/item/reagent_containers/drinks/cans/beer, + /obj/item/reagent_containers/drinks/cans/beer, /obj/item/grenade/confetti, /obj/item/grenade/confetti) cost = 250 diff --git a/code/modules/supply/supply_packs/pack_science.dm b/code/modules/supply/supply_packs/pack_science.dm index d70a663c7bf0..51bc785d0406 100644 --- a/code/modules/supply/supply_packs/pack_science.dm +++ b/code/modules/supply/supply_packs/pack_science.dm @@ -107,7 +107,7 @@ /datum/supply_packs/science/oil name = "Oil Tank Crate" contains = list(/obj/structure/reagent_dispensers/oil, - /obj/item/reagent_containers/food/drinks/oilcan) + /obj/item/reagent_containers/drinks/oilcan) cost = 150 containertype = /obj/structure/largecrate containername = "oil tank crate" diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 3cb1233bfeae..2f3413a5157a 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -106,7 +106,7 @@ /obj/item/organ/internal/proc/prepare_eat() if(is_robotic()) return //no eating cybernetic implants! - var/obj/item/reagent_containers/food/snacks/organ/S = new + var/obj/item/food/snacks/organ/S = new S.name = name S.desc = desc S.icon = icon @@ -126,19 +126,19 @@ /obj/item/organ/internal/proc/render() return -/obj/item/reagent_containers/food/snacks/organ +/obj/item/food/snacks/organ name = "appendix" icon_state = "appendix" icon = 'icons/obj/surgery.dmi' -/obj/item/reagent_containers/food/snacks/organ/Initialize(mapload) +/obj/item/food/snacks/organ/Initialize(mapload) . = ..() reagents.add_reagent("nutriment", 5) /obj/item/organ/internal/attack(mob/living/carbon/M, mob/user) if(M == user && ishuman(user)) var/mob/living/carbon/human/H = user - var/obj/item/reagent_containers/food/snacks/S = prepare_eat() + var/obj/item/food/snacks/S = prepare_eat() if(S) H.drop_item() H.put_in_active_hand(S) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index a0e8fc686dc8..f2055557441d 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -377,11 +377,11 @@ name = "implant an organ" allowed_tools = list( /obj/item/organ/internal = 100, - /obj/item/reagent_containers/food/snacks/organ = 0 // there for the flavor text + /obj/item/food/snacks/organ = 0 // there for the flavor text ) /datum/surgery_step/internal/manipulate_organs/implant/begin_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - if(istype(tool, /obj/item/reagent_containers/food/snacks/organ)) + if(istype(tool, /obj/item/food/snacks/organ)) to_chat(user, "[tool] was bitten by someone! It's too damaged to use!") return SURGERY_BEGINSTEP_SKIP @@ -469,8 +469,8 @@ /obj/item/reagent_containers/dropper = 100, /obj/item/reagent_containers/syringe = 100, /obj/item/reagent_containers/glass/bottle = 90, - /obj/item/reagent_containers/food/drinks/drinkingglass = 85, - /obj/item/reagent_containers/food/drinks/bottle = 80, + /obj/item/reagent_containers/drinks/drinkingglass = 85, + /obj/item/reagent_containers/drinks/bottle = 80, /obj/item/reagent_containers/glass/beaker = 75, /obj/item/reagent_containers/spray = 60, /obj/item/reagent_containers/glass/bucket = 50 diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index e3fdcf4667e3..ecf8f7d3424c 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -220,8 +220,8 @@ allowed_tools = list( /obj/item/reagent_containers/dropper = 100, /obj/item/reagent_containers/glass/bottle = 90, - /obj/item/reagent_containers/food/drinks/drinkingglass = 85, - /obj/item/reagent_containers/food/drinks/bottle = 80, + /obj/item/reagent_containers/drinks/drinkingglass = 85, + /obj/item/reagent_containers/drinks/bottle = 80, /obj/item/reagent_containers/glass/beaker = 75, /obj/item/reagent_containers/spray = 60, /obj/item/reagent_containers/glass/bucket = 50 diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm index b17b20d3e215..ccdebf321031 100644 --- a/code/modules/telesci/gps.dm +++ b/code/modules/telesci/gps.dm @@ -62,7 +62,7 @@ GLOBAL_LIST_EMPTY(GPS_list) addtimer(CALLBACK(src, PROC_REF(reboot)), EMP_DISABLE_TIME) /obj/item/gps/AltClick(mob/user) - if(ui_status(user, GLOB.inventory_state) != STATUS_INTERACTIVE) + if(ui_status(user, GLOB.inventory_state) != UI_INTERACTIVE) return //user not valid to use gps if(emped) to_chat(user, "It's busted!") @@ -120,10 +120,13 @@ GLOBAL_LIST_EMPTY(GPS_list) /obj/item/gps/attack_self(mob/user) ui_interact(user) -/obj/item/gps/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/gps/ui_state(mob/user) + return GLOB.inventory_state + +/obj/item/gps/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "GPS", "GPS", 450, 700) + ui = new(user, src, "GPS", "GPS") ui.open() /obj/item/gps/ui_act(action, list/params) diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm index 94fec60a4eb5..052f023b7226 100644 --- a/code/modules/tgui/external.dm +++ b/code/modules/tgui/external.dm @@ -1,7 +1,8 @@ /** - * tgui external + * External tgui definitions, such as src_object APIs. * - * Contains all external tgui declarations. + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT */ /** @@ -10,14 +11,10 @@ * Used to open and update UIs. * If this proc is not implemented properly, the UI will not update correctly. * - * * mob/user - The mob who opened/is using the UI. (REQUIRED) - * * ui_key - The ui_key of the UI. (OPTIONAL) - * * datum/tgui/ui - The UI to be updated, if it exists. (OPTIONAL) - * * force_open - If the UI should be re-opened instead of updated. (OPTIONAL) - * * datum/tgui/master_ui - The parent UI. (OPTIONAL) - * * datum/ui_state/state - The state used to determine status. (OPTIONAL) + * required user mob The mob who opened/is using the UI. + * optional ui datum/tgui The UI to be updated, if it exists. */ -/datum/proc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/datum/proc/ui_interact(mob/user, datum/tgui/ui) return FALSE // Not implemented. /** @@ -26,10 +23,11 @@ * Data to be sent to the UI. * This must be implemented for a UI to work. * - * * mob/user - The mob interacting with the UI. + * required user mob The mob interacting with the UI. + * + * return list Data to be sent to the UI. */ /datum/proc/ui_data(mob/user) - // Two good reasons why it shouldn't: // 1) this is polled several times a second, so sleeping means more running threads, needlessly tanking performance // 2) if you try to sleep, you get fun bugs ranging from BSOD to uninteractable white windows, to windows straight up vanishing. // Just don't. @@ -40,12 +38,15 @@ * public * * Static Data to be sent to the UI. - * Static data differs from normal data in that it's large data that should be sent infrequently - * This is implemented optionally for heavy uis that would be sending a lot of redundant data - * frequently. - * Gets squished into one object on the frontend side, but the static part is cached. * - * * mob/user - The mob interacting with the UI. + * Static data differs from normal data in that it's large data that should be + * sent infrequently. This is implemented optionally for heavy uis that would + * be sending a lot of redundant data frequently. Gets squished into one + * object on the frontend side, but the static part is cached. + * + * required user mob The mob interacting with the UI. + * + * return list Statuic Data to be sent to the UI. */ /datum/proc/ui_static_data(mob/user) SHOULD_NOT_SLEEP(TRUE) @@ -54,49 +55,44 @@ /** * public * - * Forces an update on static data. Should be done manually whenever something happens to change static data. + * Forces an update on static data. Should be done manually whenever something + * happens to change static data. * - * * mob/user - The mob currently interacting with the UI. (REQUIRED) - * * datum/tgui/ui - UI to be updated (OPTIONAL) - * * ui_key - Key of the UI to be updated. (OPTIONAL) + * required user the mob currently interacting with the ui + * optional ui ui to be updated */ -/datum/proc/update_static_data(mob/user, datum/tgui/ui, ui_key = "main") - ui = SStgui.try_update_ui(user, src, ui_key, ui) - // If there was no ui to update, there's no static data to update either. +/datum/proc/update_static_data(mob/user, datum/tgui/ui) if(!ui) - return - ui.push_data(null, ui_static_data(user), TRUE) + ui = SStgui.get_open_ui(user, src) + if(ui) + ui.send_full_update() /** * public * * Called on a UI when the UI receieves a href. * Think of this as Topic(). - * Returns TRUE if the UI should be updated, and FALSE if not. * - * * action - The action/button that has been invoked by the user. - * * list/params - A list of parameters attached to the button. + * required action string The action/button that has been invoked by the user. + * required params list A list of parameters attached to the button. + * + * return bool If the UI should be updated or not. */ /datum/proc/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) // If UI is not interactive or usr calling Topic is not the UI user, bail. - if(!ui || ui.status != STATUS_INTERACTIVE) + if(!ui || ui.status != UI_INTERACTIVE) return TRUE /** * public * * Called on an object when a tgui object is being created, allowing you to - * customise the html - * For example: inserting a custom stylesheet that you need in the head - * - * For this purpose, some tags are available in the html, to be parsed out - ^ with replacetext - * (customheadhtml) - Additions to the head tag + * push various assets to tgui, for examples spritesheets. * - * * html - The html base text. + * return list List of asset datums or file paths. */ -/datum/proc/ui_base_html(html) - return html +/datum/proc/ui_assets(mob/user) + return list() /** * private @@ -108,6 +104,15 @@ /datum/proc/ui_host(mob/user) return src // Default src. +/** + * private + * + * The UI's state controller to be used for created uis + * This is a proc over a var for memory reasons + */ +/datum/proc/ui_state(mob/user) + return GLOB.default_state + /** * global * @@ -116,6 +121,27 @@ */ /datum/var/list/tgui_shared_states +/** + * global + * + * Tracks open UIs for a user. + */ +/mob/var/list/tgui_open_uis = list() + +/** + * global + * + * Tracks open windows for a user. + */ +/client/var/list/tgui_windows = list() + +/** + * global + * + * TRUE if cache was reloaded by tgui dev server at least once. + */ +/client/var/tgui_cache_reloaded = FALSE + /** * public * @@ -130,19 +156,63 @@ * Called by UIs when they are closed. * Must be a verb so winset() can call it. * - * * uid - The UI that was closed. + * required uiref ref The UI that was closed. */ -/client/verb/uiclose(uid as text) +/client/verb/uiclose(window_id as text) // Name the verb, and hide it from the user panel. set name = "uiclose" set hidden = TRUE + var/mob/user = src && src.mob + if(!user) + return + // Close all tgui datums based on window_id. + SStgui.force_close_window(user, window_id) - // Get the UI based on the UID. - var/datum/tgui/ui = locateUID(uid) +/** + * Middleware for /client/Topic. + * + * return bool If TRUE, prevents propagation of the topic call. + */ +/proc/tgui_Topic(href_list) + // Skip non-tgui topics + if(!href_list["tgui"]) + return FALSE + var/type = href_list["type"] + // Unconditionally collect tgui logs + if(type == "log") + log_tgui(usr, href_list["message"]) + // Reload all tgui windows + if(type == "cacheReloaded") + if(!check_rights(R_ADMIN) || usr.client.tgui_cache_reloaded) + return TRUE + // Mark as reloaded + usr.client.tgui_cache_reloaded = TRUE + // Notify windows + var/list/windows = usr.client.tgui_windows + for(var/window_id in windows) + var/datum/tgui_window/window = windows[window_id] + if(window.status == TGUI_WINDOW_READY) + window.on_message(type, null, href_list) + return TRUE + // Locate window + var/window_id = href_list["window_id"] + var/datum/tgui_window/window + if(window_id) + window = usr.client.tgui_windows[window_id] + if(!window) + log_tgui(usr, "Error: Couldn't find the window datum, force closing.") + SStgui.force_close_window(usr, window_id) + return TRUE + // Decode payload + var/payload + if(href_list["payload"]) + var/payload_text = href_list["payload"] + if(!rustg_json_is_valid(payload_text)) + log_tgui(usr, "Error: Invalid JSON") + return TRUE - // If we found the UI, close it. - if(istype(ui)) - ui.close() - // Unset machine just to be sure. - if(src && src.mob) - src.mob.unset_machine() + payload = json_decode(payload_text) + // Pass message to window + if(window) + window.on_message(type, payload, href_list) + return TRUE diff --git a/code/modules/tgui/modules/appearance_changer.dm b/code/modules/tgui/modules/appearance_changer.dm index 91d34bc8df56..49791db04e82 100644 --- a/code/modules/tgui/modules/appearance_changer.dm +++ b/code/modules/tgui/modules/appearance_changer.dm @@ -199,10 +199,13 @@ cut_and_generate_data() -/datum/ui_module/appearance_changer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/appearance_changer/ui_state(mob/user) + return GLOB.default_state + +/datum/ui_module/appearance_changer/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AppearanceChanger", name, 800, 450, master_ui, state) + ui = new(user, src, "AppearanceChanger", name) ui.open() /datum/ui_module/appearance_changer/ui_data(mob/user) diff --git a/code/modules/tgui/modules/atmos_control.dm b/code/modules/tgui/modules/atmos_control.dm index 21ee30238636..623390e27d58 100644 --- a/code/modules/tgui/modules/atmos_control.dm +++ b/code/modules/tgui/modules/atmos_control.dm @@ -9,19 +9,24 @@ if("open_alarm") var/obj/machinery/alarm/alarm = locate(params["aref"]) in GLOB.air_alarms if(alarm) - alarm.ui_interact(usr, master_ui = ui, state = GLOB.always_state) // ALWAYS is intentional here, as the master_ui pass will prevent fuckery + alarm.ui_interact(usr) -/datum/ui_module/atmos_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - if(!ui) - ui = new(user, src, ui_key, "AtmosControl", name, 800, 600, master_ui, state) - - // Send nanomaps - var/datum/asset/nanomaps = get_asset_datum(/datum/asset/simple/nanomaps) - nanomaps.send(user) +/datum/ui_module/atmos_control/ui_state(mob/user) + if(isliving(usr)) + return GLOB.human_adjacent_state + return GLOB.default_state +/datum/ui_module/atmos_control/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AtmosControl", name) ui.open() +/datum/ui_module/atmos_control/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/simple/nanomaps) + ) + /datum/ui_module/atmos_control/ui_data(mob/user) var/list/data = list() data["alarms"] = GLOB.air_alarm_repository.air_alarm_data(GLOB.air_alarms, target_z=level_name_to_num(MAIN_STATION)) diff --git a/code/modules/tgui/modules/colour_matrix_tester.dm b/code/modules/tgui/modules/colour_matrix_tester.dm index bfa7b243781b..d195c3a61831 100644 --- a/code/modules/tgui/modules/colour_matrix_tester.dm +++ b/code/modules/tgui/modules/colour_matrix_tester.dm @@ -19,10 +19,13 @@ target_datum = target -/datum/ui_module/colour_matrix_tester/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.admin_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/colour_matrix_tester/ui_state(mob/user) + return GLOB.admin_state + +/datum/ui_module/colour_matrix_tester/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ColourMatrixTester", name, 350, 170, master_ui, state) + ui = new(user, src, "ColourMatrixTester", name) ui.autoupdate = TRUE ui.open() diff --git a/code/modules/tgui/modules/crew_monitor.dm b/code/modules/tgui/modules/crew_monitor.dm index be974cb5ea38..44ceeef2a106 100644 --- a/code/modules/tgui/modules/crew_monitor.dm +++ b/code/modules/tgui/modules/crew_monitor.dm @@ -27,19 +27,19 @@ return viewing_current_z_level = text2num(params["new_level"]) +/datum/ui_module/crew_monitor/ui_state(mob/user) + return GLOB.default_state - -/datum/ui_module/crew_monitor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/crew_monitor/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "CrewMonitor", name, 800, 600, master_ui, state) - - // Send nanomaps - var/datum/asset/nanomaps = get_asset_datum(/datum/asset/simple/nanomaps) - nanomaps.send(user) - + ui = new(user, src, "CrewMonitor", name) ui.open() +/datum/ui_module/crew_monitor/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/simple/nanomaps) + ) /datum/ui_module/crew_monitor/ui_data(mob/user) var/list/data = list() diff --git a/code/modules/tgui/modules/destination_tagger.dm b/code/modules/tgui/modules/destination_tagger.dm index cdd2487681c6..78cf1d1c7701 100644 --- a/code/modules/tgui/modules/destination_tagger.dm +++ b/code/modules/tgui/modules/destination_tagger.dm @@ -2,10 +2,13 @@ name = "Destination Tagger" var/my_tag = 1 -/datum/ui_module/destination_tagger/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/destination_tagger/ui_state(mob/user) + return GLOB.default_state + +/datum/ui_module/destination_tagger/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "DestinationTagger", name, 400, 350, master_ui, state) + ui = new(user, src, "DestinationTagger", name) ui.open() ui.set_autoupdate(FALSE) diff --git a/code/modules/tgui/modules/ert_manager.dm b/code/modules/tgui/modules/ert_manager.dm index 583b4bbdae60..2d0d722f23a8 100644 --- a/code/modules/tgui/modules/ert_manager.dm +++ b/code/modules/tgui/modules/ert_manager.dm @@ -11,10 +11,13 @@ /// The below is a toggle for if sec cyborgs are enabled or not var/cyborg_security = FALSE -/datum/ui_module/ert_manager/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.admin_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/ert_manager/ui_state(mob/user) + return GLOB.admin_state + +/datum/ui_module/ert_manager/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ERTManager", name, 350, 540, master_ui, state) + ui = new(user, src, "ERTManager", name) ui.autoupdate = TRUE ui.open() @@ -96,7 +99,7 @@ if(cyborg_slots > 0) slots_list += "cyborg: [cyborg_slots]" - var/silenced = text2bool(params["silent"]) + var/silenced = (params["silent"]) D.silent = silenced var/slot_text = english_list(slots_list) diff --git a/code/modules/tgui/modules/generic_crew_manifest.dm b/code/modules/tgui/modules/generic_crew_manifest.dm index 47826d883216..5c3200449b36 100644 --- a/code/modules/tgui/modules/generic_crew_manifest.dm +++ b/code/modules/tgui/modules/generic_crew_manifest.dm @@ -3,10 +3,18 @@ GLOBAL_DATUM_INIT(generic_crew_manifest, /datum/ui_module/generic_crew_manifest, /datum/ui_module/generic_crew_manifest name = "Crew Manifest" -/datum/ui_module/generic_crew_manifest/ui_interact(user, ui_key = "GenericCrewManifest", datum/tgui/ui = null, datum/tgui/master_ui = null, state) - ui = SStgui.try_update_ui(user, src, ui_key, ui) +/datum/ui_module/generic_crew_manifest/ui_state(mob/user) + if(isnewplayer(user)) + return GLOB.always_state + if(isobserver(user)) + return GLOB.observer_state + if(issilicon(user)) + return GLOB.not_incapacitated_state + +/datum/ui_module/generic_crew_manifest/ui_interact(user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "GenericCrewManifest", name, 588, 510, master_ui, state) + ui = new(user, src, "GenericCrewManifest", name) ui.set_autoupdate(FALSE) ui.open() diff --git a/code/modules/tgui/modules/ghost_hud_panel.dm b/code/modules/tgui/modules/ghost_hud_panel.dm index 344948764459..478787c9a7d9 100644 --- a/code/modules/tgui/modules/ghost_hud_panel.dm +++ b/code/modules/tgui/modules/ghost_hud_panel.dm @@ -16,10 +16,13 @@ GLOBAL_DATUM_INIT(ghost_hud_panel, /datum/ui_module/ghost_hud_panel, new) "diagnostic" = DATA_HUD_DIAGNOSTIC_ADVANCED ) -/datum/ui_module/ghost_hud_panel/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.observer_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui) +/datum/ui_module/ghost_hud_panel/ui_state(mob/user) + return GLOB.observer_state + +/datum/ui_module/ghost_hud_panel/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "GhostHudPanel", name, 250, 207, master_ui, state) + ui = new(user, src, "GhostHudPanel", name) ui.set_autoupdate(FALSE) ui.open() diff --git a/code/modules/tgui/modules/law_manager.dm b/code/modules/tgui/modules/law_manager.dm index 223f1e6be252..15c8995c4475 100644 --- a/code/modules/tgui/modules/law_manager.dm +++ b/code/modules/tgui/modules/law_manager.dm @@ -149,10 +149,17 @@ to_chat(usr, "Законы отображены.") -/datum/ui_module/law_manager/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/law_manager/ui_state(mob/user) + if(check_rights(R_ADMIN, FALSE)) + return GLOB.admin_state + if(issilicon(user)) + return GLOB.conscious_state + return GLOB.default_state + +/datum/ui_module/law_manager/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "LawManager", sanitize("[src] - [owner.name]"), 800, is_malf(user) ? 600 : 400, master_ui, state) + ui = new(user, src, "LawManager", sanitize("[src] - [owner.name]")) ui.open() /datum/ui_module/law_manager/ui_data(mob/user) diff --git a/code/modules/tgui/modules/power_monitor.dm b/code/modules/tgui/modules/power_monitor.dm index 5453cdee4803..b7f39a54d741 100644 --- a/code/modules/tgui/modules/power_monitor.dm +++ b/code/modules/tgui/modules/power_monitor.dm @@ -11,10 +11,13 @@ if(!select_monitor) powermonitor = ui_host() -/datum/ui_module/power_monitor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/power_monitor/ui_state(mob/user) + return GLOB.default_state + +/datum/ui_module/power_monitor/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "PowerMonitor", name, 600, 650, master_ui, state) + ui = new(user, src, "PowerMonitor", name) ui.open() /datum/ui_module/power_monitor/ui_data(mob/user) diff --git a/code/modules/tgui/modules/robot_self_diagnosis.dm b/code/modules/tgui/modules/robot_self_diagnosis.dm index 3d06eaf067fc..a98f0dcb86a1 100644 --- a/code/modules/tgui/modules/robot_self_diagnosis.dm +++ b/code/modules/tgui/modules/robot_self_diagnosis.dm @@ -7,10 +7,13 @@ CRASH("A [S.type] was passed to /datum/ui_module/robot_self_diagnosis/New().") owner = S -/datum/ui_module/robot_self_diagnosis/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/robot_self_diagnosis/ui_state(mob/user) + return GLOB.always_state + +/datum/ui_module/robot_self_diagnosis/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "RobotSelfDiagnosis", "Component Self Diagnosis", 280, 480, master_ui, state) + ui = new(user, src, "RobotSelfDiagnosis", "Component Self Diagnosis") ui.set_autoupdate(FALSE) ui.open() diff --git a/code/modules/tgui/modules/tgui_input_list.dm b/code/modules/tgui/modules/tgui_input_list.dm index b9b34fffc9b4..322505971fc2 100644 --- a/code/modules/tgui/modules/tgui_input_list.dm +++ b/code/modules/tgui/modules/tgui_input_list.dm @@ -114,10 +114,13 @@ while(!choice && !closed) stoplag(1) -/datum/tgui_list_input/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/tgui_list_input/ui_state(mob/user) + return GLOB.always_state + +/datum/tgui_list_input/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ListInput", title, 325, 355, master_ui, state) + ui = new(user, src, "ListInput", title) ui.set_autoupdate(FALSE) ui.open() diff --git a/code/modules/tgui/modules/volume_mixer.dm b/code/modules/tgui/modules/volume_mixer.dm index 2b458652bc3a..5bba2507e99a 100644 --- a/code/modules/tgui/modules/volume_mixer.dm +++ b/code/modules/tgui/modules/volume_mixer.dm @@ -1,10 +1,13 @@ /datum/ui_module/volume_mixer name = "Volume Mixer" -/datum/ui_module/volume_mixer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/volume_mixer/ui_state(mob/user) + return GLOB.always_state + +/datum/ui_module/volume_mixer/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "VolumeMixer", name, 400, clamp(80 + 50 * length(user.client.prefs.volume_mixer), 300, 600), master_ui, state) + ui = new(user, src, "VolumeMixer", name) ui.set_autoupdate(FALSE) ui.open() diff --git a/code/modules/tgui/states.dm b/code/modules/tgui/states.dm index da756d58dfbe..8b801d5e2a24 100644 --- a/code/modules/tgui/states.dm +++ b/code/modules/tgui/states.dm @@ -1,10 +1,11 @@ /** - * tgui states + * Base state and helpers for states. Just does some sanity checks, + * implement a proper state for in-depth checks. * - * Base state and helpers for states. Just does some sanity checks, implement a state for in-depth checks. + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT */ - /** * public * @@ -17,19 +18,20 @@ */ /datum/proc/ui_status(mob/user, datum/ui_state/state) var/src_object = ui_host(user) - . = STATUS_CLOSE + . = UI_CLOSE if(!state) return if(isobserver(user)) // If they turn on ghost AI control, admins can always interact. - if(user.client.advanced_admin_interaction) - . = max(., STATUS_INTERACTIVE) + if(user.can_admin_interact()) + . = max(., UI_INTERACTIVE) // Regular ghosts can always at least view if in range. - var/clientviewlist = getviewsize(user.client.view) - if(get_dist(src_object, user) < max(clientviewlist[1],clientviewlist[2])) - . = max(., STATUS_UPDATE) + if(user.client) + var/clientviewlist = getviewsize(user.client.view) + if(get_dist(src_object, user) < max(clientviewlist[1], clientviewlist[2])) + . = max(., UI_UPDATE) // Check if the state allows interaction var/result = state.can_use_topic(src_object, user) @@ -47,7 +49,8 @@ * return UI_state The state of the UI. */ /datum/ui_state/proc/can_use_topic(src_object, mob/user) - return STATUS_CLOSE // Don't allow interaction by default. + // Don't allow interaction by default. + return UI_CLOSE /** * public @@ -57,22 +60,27 @@ * return UI_state The state of the UI. */ /mob/proc/shared_ui_interaction(src_object) - if(!client) // Close UIs if mindless. - return STATUS_CLOSE - else if(stat) // Disable UIs if unconcious. - return STATUS_DISABLED - else if(incapacitated()) // Update UIs if incapicitated but concious. - return STATUS_UPDATE - return STATUS_INTERACTIVE + // Close UIs if mindless. + if(!client) + return UI_CLOSE + // Disable UIs if unconcious. + else if(stat) + return UI_DISABLED + // Update UIs if incapicitated but concious. + else if(incapacitated()) + return UI_UPDATE + return UI_INTERACTIVE /mob/living/silicon/ai/shared_ui_interaction(src_object) - if(lacks_power() && !apc_override) // Disable UIs if the AI is unpowered. - return STATUS_DISABLED + // Disable UIs if the AI is unpowered. + if(lacks_power() && !apc_override) + return UI_DISABLED return ..() /mob/living/silicon/robot/shared_ui_interaction(src_object) - if(!cell || cell.charge <= 0 || lockcharge) // Disable UIs if the Borg is unpowered or locked. - return STATUS_DISABLED + // Disable UIs if the Borg is unpowered or locked. + if(!cell || cell.charge <= 0 || lockcharge) + return UI_DISABLED return ..() /** @@ -88,7 +96,8 @@ * return UI_state The state of the UI. */ /atom/proc/contents_ui_distance(src_object, mob/living/user) - return user.shared_living_ui_distance(src_object) // Just call this mob's check. + // Just call this mob's check. + return user.shared_living_ui_distance(src_object) /** * public @@ -100,19 +109,23 @@ * return UI_state The state of the UI. */ /mob/living/proc/shared_living_ui_distance(atom/movable/src_object, viewcheck = TRUE) - if(viewcheck && !(src_object in view(src))) // If the object is obscured, close it. - return STATUS_CLOSE - + // If the object is obscured, close it. + if(viewcheck && !(src_object in view(src))) + return UI_CLOSE var/dist = get_dist(src_object, src) - if(dist <= 1) // Open and interact if 1-0 tiles away. - return STATUS_INTERACTIVE - else if(dist <= 2) // View only if 2-3 tiles away. - return STATUS_UPDATE - else if(dist <= 5) // Disable if 5 tiles away. - return STATUS_DISABLED - return STATUS_CLOSE // Otherwise, we got nothing. + // Open and interact if 1-0 tiles away. + if(dist <= 1) + return UI_INTERACTIVE + // View only if 2-3 tiles away. + else if(dist <= 2) + return UI_UPDATE + // Disable if 5 tiles away. + else if(dist <= 5) + return UI_DISABLED + // Otherwise, we got nothing. + return UI_CLOSE -/mob/living/carbon/human/shared_living_ui_distance(atom/movable/src_object) +/mob/living/carbon/human/shared_living_ui_distance(atom/movable/src_object, viewcheck) if(HAS_TRAIT(src, TRAIT_TELEKINESIS) && (get_dist(src, src_object) <= 2)) - return STATUS_INTERACTIVE + return UI_INTERACTIVE return ..() diff --git a/code/modules/tgui/states/admin_state.dm b/code/modules/tgui/states/admin_state.dm index 3f32f47adde4..61fc37311884 100644 --- a/code/modules/tgui/states/admin_state.dm +++ b/code/modules/tgui/states/admin_state.dm @@ -8,5 +8,5 @@ GLOBAL_DATUM_INIT(admin_state, /datum/ui_state/admin_state, new) /datum/ui_state/admin_state/can_use_topic(src_object, mob/user) if(check_rights_for(user.client, R_ADMIN)) - return STATUS_INTERACTIVE - return STATUS_CLOSE + return UI_INTERACTIVE + return UI_CLOSE diff --git a/code/modules/tgui/states/always.dm b/code/modules/tgui/states/always.dm index 56b887a16996..2406dbb2b9b9 100644 --- a/code/modules/tgui/states/always.dm +++ b/code/modules/tgui/states/always.dm @@ -1,10 +1,15 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + /** * tgui state: always_state * - * Always grants the user STATUS_INTERACTIVE. Period. + * Always grants the user UI_INTERACTIVE. Period. */ GLOBAL_DATUM_INIT(always_state, /datum/ui_state/always_state, new) /datum/ui_state/always_state/can_use_topic(src_object, mob/user) - return STATUS_INTERACTIVE + return UI_INTERACTIVE diff --git a/code/modules/tgui/states/conscious.dm b/code/modules/tgui/states/conscious.dm index 272ae9de68e1..8e35a97da320 100644 --- a/code/modules/tgui/states/conscious.dm +++ b/code/modules/tgui/states/conscious.dm @@ -1,3 +1,8 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + /** * tgui state: conscious_state * @@ -8,5 +13,5 @@ GLOBAL_DATUM_INIT(conscious_state, /datum/ui_state/conscious_state, new) /datum/ui_state/conscious_state/can_use_topic(src_object, mob/user) if(user.stat == CONSCIOUS) - return STATUS_INTERACTIVE - return STATUS_CLOSE + return UI_INTERACTIVE + return UI_CLOSE diff --git a/code/modules/tgui/states/contained.dm b/code/modules/tgui/states/contained.dm index bee64b759e2d..0805ca0114ab 100644 --- a/code/modules/tgui/states/contained.dm +++ b/code/modules/tgui/states/contained.dm @@ -1,3 +1,8 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + /** * tgui state: contained_state * @@ -9,6 +14,6 @@ GLOBAL_DATUM_INIT(contained_state, /datum/ui_state/contained_state, new) /datum/ui_state/contained_state/can_use_topic(atom/src_object, mob/user) if(!src_object.contains(user)) - return STATUS_CLOSE + return UI_CLOSE return user.shared_ui_interaction(src_object) */ diff --git a/code/modules/tgui/states/deep_inventory.dm b/code/modules/tgui/states/deep_inventory.dm index be2ea4c1bfdc..a7351a0d2d90 100644 --- a/code/modules/tgui/states/deep_inventory.dm +++ b/code/modules/tgui/states/deep_inventory.dm @@ -1,12 +1,18 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + /** * tgui state: deep_inventory_state * - * Checks that the src_object is in the user's deep (backpack, box, toolbox, etc) inventory. + * Checks that the src_object is in the user's deep + * (backpack, box, toolbox, etc) inventory. */ GLOBAL_DATUM_INIT(deep_inventory_state, /datum/ui_state/deep_inventory_state, new) /datum/ui_state/deep_inventory_state/can_use_topic(src_object, mob/user) if(!user.contains(src_object)) - return STATUS_CLOSE + return UI_CLOSE return user.shared_ui_interaction(src_object) diff --git a/code/modules/tgui/states/default.dm b/code/modules/tgui/states/default.dm index 63ea0d96740d..9a3f1457e8fc 100644 --- a/code/modules/tgui/states/default.dm +++ b/code/modules/tgui/states/default.dm @@ -1,7 +1,11 @@ /** * tgui state: default_state * - * Checks a number of things -- mostly physical distance for humans and view for robots. + * Checks a number of things -- mostly physical distance for humans + * and view for robots. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT */ GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new) @@ -10,67 +14,67 @@ GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new) return user.default_can_use_topic(src_object) // Call the individual mob-overridden procs. /mob/proc/default_can_use_topic(src_object) - return STATUS_CLOSE // Don't allow interaction by default. + return UI_CLOSE // Don't allow interaction by default. /mob/living/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) - if(. > STATUS_CLOSE && loc) + if(. > UI_CLOSE && loc) //must not be in nullspace. . = min(., loc.contents_ui_distance(src_object, src)) // Check the distance... - if(. == STATUS_INTERACTIVE) // Non-human living mobs can only look, not touch. - return STATUS_UPDATE + if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED) && . == UI_INTERACTIVE) // Non-human living mobs and mobs with blocked hands can only look, not touch. + return UI_UPDATE /mob/living/carbon/human/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) - if(. > STATUS_CLOSE) + if(. > UI_CLOSE) . = min(., shared_living_ui_distance(src_object)) // Check the distance... /mob/living/silicon/robot/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) - if(. <= STATUS_DISABLED) + if(. <= UI_DISABLED) return // Robots can interact with anything they can see. var/list/clientviewlist = getviewsize(client.view) - if((src_object in view(src)) && (get_dist(src, src_object) <= max(clientviewlist[1], clientviewlist[2]))) - return STATUS_INTERACTIVE - return STATUS_DISABLED // Otherwise they can keep the UI open. + if((src_object in view(src)) && get_dist(src, src_object) <= max(clientviewlist[1], clientviewlist[2])) + return UI_INTERACTIVE + return UI_DISABLED // Otherwise they can keep the UI open. /mob/living/silicon/ai/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) - if(. < STATUS_INTERACTIVE) + if(. < UI_INTERACTIVE) return // The AI can interact with anything it can see nearby, or with cameras while wireless control is enabled. if(!control_disabled && can_see(src_object)) - return STATUS_INTERACTIVE - return STATUS_CLOSE + return UI_INTERACTIVE + return UI_CLOSE /mob/living/simple_animal/revenant/default_can_use_topic(src_object) - return STATUS_UPDATE + return UI_UPDATE /mob/living/simple_animal/demon/pulse_demon/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) - if(. < STATUS_INTERACTIVE) + if(. < UI_INTERACTIVE) return // anything in its APC's area if(get_area(src_object) == controlling_area) - return STATUS_INTERACTIVE - return STATUS_CLOSE + return UI_INTERACTIVE + return UI_CLOSE /mob/living/simple_animal/default_can_use_topic(src_object) . = shared_ui_interaction(src_object) - if(. > STATUS_CLOSE) + if(. > UI_CLOSE) . = min(., shared_living_ui_distance(src_object)) //simple animals can only use things they're near. /mob/living/silicon/pai/default_can_use_topic(src_object) // pAIs can only use themselves and the owner's radio. if((src_object == src || src_object == radio) && !stat) - return STATUS_INTERACTIVE + return UI_INTERACTIVE else return ..() -/mob/dead/observer/default_can_use_topic() +/mob/dead/observer/default_can_use_topic(src_object) if(can_admin_interact()) - return STATUS_INTERACTIVE // Admins are more equal - return STATUS_UPDATE // Ghosts can view updates + return UI_INTERACTIVE // Admins are more equal + return UI_UPDATE // Ghosts can view updates diff --git a/code/modules/tgui/states/hands.dm b/code/modules/tgui/states/hands.dm index fa3692a2ff76..209cb5288c56 100644 --- a/code/modules/tgui/states/hands.dm +++ b/code/modules/tgui/states/hands.dm @@ -1,3 +1,8 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + /** * tgui state: hands_state * @@ -8,21 +13,21 @@ GLOBAL_DATUM_INIT(hands_state, /datum/ui_state/hands_state, new) /datum/ui_state/hands_state/can_use_topic(src_object, mob/user) . = user.shared_ui_interaction(src_object) - if(. > STATUS_CLOSE) + if(. > UI_CLOSE) return min(., user.hands_can_use_topic(src_object)) /mob/proc/hands_can_use_topic(src_object) - return STATUS_CLOSE + return UI_CLOSE /mob/living/hands_can_use_topic(src_object) - if(is_in_active_hand(src_object) || is_in_inactive_hand(src_object)) - return STATUS_INTERACTIVE - return STATUS_CLOSE - -/mob/living/simple_animal/revenant/hands_can_use_topic(src_object) - return STATUS_UPDATE + if(is_holding(src_object)) + return UI_INTERACTIVE + return UI_CLOSE /mob/living/silicon/robot/hands_can_use_topic(src_object) if(activated(src_object)) - return STATUS_INTERACTIVE - return STATUS_CLOSE + return UI_INTERACTIVE + return UI_CLOSE + +/mob/living/simple_animal/revenant/hands_can_use_topic(src_object) + return UI_UPDATE diff --git a/code/modules/tgui/states/human_adjacent.dm b/code/modules/tgui/states/human_adjacent.dm index 8b489ab13090..b9208f96cd63 100644 --- a/code/modules/tgui/states/human_adjacent.dm +++ b/code/modules/tgui/states/human_adjacent.dm @@ -1,3 +1,8 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + /** * tgui state: human_adjacent_state * @@ -13,4 +18,4 @@ GLOBAL_DATUM_INIT(human_adjacent_state, /datum/ui_state/human_adjacent_state, ne var/dist = get_dist(src_object, user) if((dist > 1) || (!ishuman(user))) // Can't be used unless adjacent and human, even with TK - . = min(., STATUS_UPDATE) + . = min(., UI_UPDATE) diff --git a/code/modules/tgui/states/inventory_state.dm b/code/modules/tgui/states/inventory_state.dm index 4f516e58462a..7c4002b6c7d8 100644 --- a/code/modules/tgui/states/inventory_state.dm +++ b/code/modules/tgui/states/inventory_state.dm @@ -12,5 +12,5 @@ GLOBAL_DATUM_INIT(inventory_state, /datum/ui_state/inventory_state, new) var/mob/living/silicon/robot/R = user if(src_object in R.module_active) // Magnetic grippers return user.shared_ui_interaction(src_object) - return STATUS_CLOSE + return UI_CLOSE return user.shared_ui_interaction(src_object) diff --git a/code/modules/tgui/states/not_incapacitated.dm b/code/modules/tgui/states/not_incapacitated.dm index d6bdc4bac93b..f7278c86de47 100644 --- a/code/modules/tgui/states/not_incapacitated.dm +++ b/code/modules/tgui/states/not_incapacitated.dm @@ -1,3 +1,8 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + /** * tgui state: not_incapacitated_state * @@ -22,8 +27,8 @@ GLOBAL_DATUM_INIT(not_incapacitated_turf_state, /datum/ui_state/not_incapacitate turf_check = no_turfs /datum/ui_state/not_incapacitated_state/can_use_topic(src_object, mob/user) - if(user.stat) - return STATUS_CLOSE - if(user.incapacitated() || (turf_check && !isturf(user.loc))) - return STATUS_DISABLED - return STATUS_INTERACTIVE + if(user.stat != CONSCIOUS) + return UI_CLOSE + if(HAS_TRAIT(src, TRAIT_UI_BLOCKED) || user.incapacitated() || (turf_check && !isturf(user.loc))) + return UI_DISABLED + return UI_INTERACTIVE diff --git a/code/modules/tgui/states/notcontained.dm b/code/modules/tgui/states/notcontained.dm index fd604cc78716..5fd79a68848d 100644 --- a/code/modules/tgui/states/notcontained.dm +++ b/code/modules/tgui/states/notcontained.dm @@ -1,25 +1,33 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + /** * tgui state: notcontained_state * - * Checks that the user is not inside src_object, and then makes the default checks. + * Checks that the user is not inside src_object, and then makes the + * default checks. */ -/* + GLOBAL_DATUM_INIT(notcontained_state, /datum/ui_state/notcontained_state, new) /datum/ui_state/notcontained_state/can_use_topic(atom/src_object, mob/user) . = user.shared_ui_interaction(src_object) - if(. > STATUS_CLOSE) + if(. > UI_CLOSE) return min(., user.notcontained_can_use_topic(src_object)) /mob/proc/notcontained_can_use_topic(src_object) - return STATUS_CLOSE + return UI_CLOSE /mob/living/notcontained_can_use_topic(atom/src_object) if(src_object.contains(src)) - return STATUS_CLOSE // Close if we're inside it. + return UI_CLOSE // Close if we're inside it. return default_can_use_topic(src_object) /mob/living/silicon/notcontained_can_use_topic(src_object) - return default_can_use_topic(src_object) // Silicons use default bevhavior. -*/ + return default_can_use_topic(src_object) // Silicons use default behavior. + +/mob/living/simple_animal/drone/notcontained_can_use_topic(src_object) + return default_can_use_topic(src_object) // Drones use default behavior. diff --git a/code/modules/tgui/states/observer_state.dm b/code/modules/tgui/states/observer_state.dm index af772ab7d617..5028834c9e13 100644 --- a/code/modules/tgui/states/observer_state.dm +++ b/code/modules/tgui/states/observer_state.dm @@ -8,8 +8,8 @@ GLOBAL_DATUM_INIT(observer_state, /datum/ui_state/observer_state, new) /datum/ui_state/observer_state/can_use_topic(src_object, mob/user) if(isobserver(user)) - return STATUS_INTERACTIVE + return UI_INTERACTIVE if(check_rights(R_ADMIN, 0, src)) - return STATUS_INTERACTIVE - return STATUS_CLOSE + return UI_INTERACTIVE + return UI_CLOSE diff --git a/code/modules/tgui/states/physical.dm b/code/modules/tgui/states/physical.dm index 71ea1a418aca..362e4ecd0008 100644 --- a/code/modules/tgui/states/physical.dm +++ b/code/modules/tgui/states/physical.dm @@ -1,3 +1,8 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + /** * tgui state: physical_state * @@ -8,23 +13,49 @@ GLOBAL_DATUM_INIT(physical_state, /datum/ui_state/physical, new) /datum/ui_state/physical/can_use_topic(src_object, mob/user) . = user.shared_ui_interaction(src_object) - if(. > STATUS_CLOSE) + if(. > UI_CLOSE) return min(., user.physical_can_use_topic(src_object)) /mob/proc/physical_can_use_topic(src_object) - return STATUS_CLOSE - -/mob/living/simple_animal/revenant/physical_can_use_topic(src_object) - return STATUS_UPDATE + return UI_CLOSE /mob/living/simple_animal/demon/pulse_demon/physical_can_use_topic(src_object) - return STATUS_UPDATE + return UI_UPDATE /mob/living/physical_can_use_topic(src_object) return shared_living_ui_distance(src_object) /mob/living/silicon/physical_can_use_topic(src_object) - return max(STATUS_UPDATE, shared_living_ui_distance(src_object)) // Silicons can always see. + return max(UI_UPDATE, shared_living_ui_distance(src_object)) // Silicons can always see. /mob/living/silicon/ai/physical_can_use_topic(src_object) - return STATUS_UPDATE // AIs are not physical. + return UI_UPDATE // AIs are not physical. + +/mob/living/simple_animal/revenant/physical_can_use_topic(src_object) + return UI_UPDATE + +/** + * tgui state: physical_obscured_state + * + * Short-circuits the default state to only check physical distance, being in view doesn't matter + */ + +GLOBAL_DATUM_INIT(physical_obscured_state, /datum/ui_state/physical_obscured_state, new) + +/datum/ui_state/physical_obscured_state/can_use_topic(src_object, mob/user) + . = user.shared_ui_interaction(src_object) + if(. > UI_CLOSE) + return min(., user.physical_obscured_can_use_topic(src_object)) + +/mob/proc/physical_obscured_can_use_topic(src_object) + return UI_CLOSE + +/mob/living/physical_obscured_can_use_topic(src_object) + return shared_living_ui_distance(src_object, viewcheck = FALSE) + +/mob/living/silicon/physical_obscured_can_use_topic(src_object) + return max(UI_UPDATE, shared_living_ui_distance(src_object, viewcheck = FALSE)) // Silicons can always see. + +/mob/living/silicon/ai/physical_obscured_can_use_topic(src_object) + return UI_UPDATE // AIs are not physical. + diff --git a/code/modules/tgui/states/self.dm b/code/modules/tgui/states/self.dm index d8b119f31ffd..f7cef3f6005b 100644 --- a/code/modules/tgui/states/self.dm +++ b/code/modules/tgui/states/self.dm @@ -1,3 +1,8 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + /** * tgui state: self_state * @@ -8,5 +13,5 @@ GLOBAL_DATUM_INIT(self_state, /datum/ui_state/self_state, new) /datum/ui_state/self_state/can_use_topic(src_object, mob/user) if(src_object != user) - return STATUS_CLOSE + return UI_CLOSE return user.shared_ui_interaction(src_object) diff --git a/code/modules/tgui/states/viewer_state.dm b/code/modules/tgui/states/viewer_state.dm index 1bc577517014..154f8a2e356c 100644 --- a/code/modules/tgui/states/viewer_state.dm +++ b/code/modules/tgui/states/viewer_state.dm @@ -7,4 +7,4 @@ GLOBAL_DATUM_INIT(viewer_state, /datum/ui_state/viewer_state, new) /datum/ui_state/viewer_state/can_use_topic(src_object, mob/user) - return STATUS_UPDATE + return UI_UPDATE diff --git a/code/modules/tgui/states/zlevel_state.dm b/code/modules/tgui/states/zlevel_state.dm deleted file mode 100644 index 1f4ca3b37cf4..000000000000 --- a/code/modules/tgui/states/zlevel_state.dm +++ /dev/null @@ -1,16 +0,0 @@ -/** - * tgui state: z_state - * - * Only checks that the Z-level of the user and src_object are the same. - */ - -/* -GLOBAL_DATUM_INIT(z_state, /datum/ui_state/z_state, new) - -/datum/ui_state/z_state/can_use_topic(src_object, mob/user) - var/turf/turf_obj = get_turf(src_object) - var/turf/turf_usr = get_turf(user) - if(turf_obj && turf_usr && turf_obj.z == turf_usr.z) - return STATUS_INTERACTIVE - return STATUS_CLOSE -*/ diff --git a/code/modules/tgui/tgui_datum.dm b/code/modules/tgui/tgui_datum.dm index 3d5ba33166e8..da2c28736b1a 100644 --- a/code/modules/tgui/tgui_datum.dm +++ b/code/modules/tgui/tgui_datum.dm @@ -1,7 +1,6 @@ /** - * tgui - * - * /tg/station user interface library + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT */ /** @@ -14,34 +13,32 @@ var/datum/src_object /// The title of te UI. var/title - /// The ui_key of the UI. This allows multiple UIs for one src_object. - var/ui_key /// The window_id for browse() and onclose(). - var/window_id - /// The window width. - var/width = 0 - /// The window height - var/height = 0 + var/datum/tgui_window/window + /// Key that is used for remembering the window geometry. + var/window_key + /// Deprecated: Window size. + var/window_size /// The interface (template) to be used for this UI. var/interface /// Update the UI every MC tick. var/autoupdate = TRUE /// If the UI has been initialized yet. var/initialized = FALSE - /// The data (and datastructure) used to initialize the UI. - var/list/initial_data - /// The static data used to initialize the UI. - var/list/initial_static_data - /// Holder for the json string, that is sent during the initial update - var/_initial_update + /// Time of opening the window. + var/opened_at + /// Stops further updates when close() was called. + var/closing = FALSE /// The status/visibility of the UI. - var/status = STATUS_INTERACTIVE + var/status = UI_INTERACTIVE + /// Timed refreshing state + var/refreshing = FALSE /// Topic state used to determine status/interactability. var/datum/ui_state/state = null - /// The parent UI. - var/datum/tgui/master_ui - /// Children of this UI. - var/list/datum/tgui/children = list() + /// Asset data to be sent with every update + var/list/asset_data + /// Rate limit client refreshes to prevent DoS. + COOLDOWN_DECLARE(refresh_cooldown) /** * public @@ -50,46 +47,25 @@ * * required user mob The mob who opened/is using the UI. * required src_object datum The object or datum which owns the UI. - * required ui_key string The ui_key of the UI. * required interface string The interface used to render the UI. * optional title string The title of the UI. - * optional width int The window width. - * optional height int The window height. - * optional master_ui datum/tgui The parent UI. - * optional state datum/ui_state The state used to determine status. + * optional ui_x int Deprecated: Window width. + * optional ui_y int Deprecated: Window height. * * return datum/tgui The requested UI. */ -/datum/tgui/New(mob/user, datum/src_object, ui_key, interface, title, width = 0, height = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/datum/tgui/New(mob/user, datum/src_object, interface, title, ui_x, ui_y) + log_tgui(user, "new [interface]") src.user = user src.src_object = src_object - src.ui_key = ui_key - src.window_id = "[src_object.UID()]-[ui_key]" + src.window_key = "[src_object.UID()]-main" src.interface = interface - if(title) - - // SS220 EDIT - START - if(findtext_char(title, regex(@"[А-Яа-я]"))) - src.title = capitalize(sanitize(title, list("\proper"="", "\improper"=""))) - else - src.title = sanitize(title) - // SS220 EDIT -END - - if(width) - src.width = width - if(height) - src.height = height - - src.master_ui = master_ui - if(master_ui) - master_ui.children += src - src.state = state - - var/datum/asset/tgui_assets = get_asset_datum(/datum/asset/simple/tgui) - var/datum/asset/fa = get_asset_datum(/datum/asset/simple/fontawesome) - tgui_assets.send(user) - fa.send(user) + src.title = title + src.state = src_object.ui_state(user) + // Deprecated + if(ui_x && ui_y) + src.window_size = list(ui_x, ui_y) /** * public @@ -98,267 +74,251 @@ */ /datum/tgui/proc/open() if(!user.client) - return // Bail if there is no client. - - update_status(push = FALSE) // Update the window status. - if(status < STATUS_UPDATE) - return // Bail if we're not supposed to open. - - - - // Build window options - var/window_options = "can_minimize=0;auto_format=0;" - // If we have a width and height, use them. - if(width && height) - window_options += "size=[width]x[height];" - - // Remove titlebar and resize handles for a fancy window - if(user.client.prefs.toggles2 & PREFTOGGLE_2_FANCYUI) - window_options += "titlebar=0;can_resize=0;" + return null + if(window) + return null + process_status() + if(status < UI_UPDATE) + return null + window = SStgui.request_pooled_window(user) + if(!window) + return null + opened_at = world.time + window.acquire_lock(src) + if(!window.is_ready()) + window.initialize( + fancy = (user.client.prefs.toggles2 & PREFTOGGLE_2_FANCYUI), + assets = list( + get_asset_datum(/datum/asset/simple/tgui), + )) else - window_options += "titlebar=1;can_resize=1;" - - // Generate page html - var/html - html = SStgui.basehtml - // Allow the src object to override the html if needed - html = src_object.ui_base_html(html) - // Replace template tokens with important UI data - html = replacetextEx(html, "\[tgui:ref]", "[src.UID()]") + window.send_message("ping") + send_assets() + window.send_message("update", get_payload( + with_data = TRUE, + with_static_data = TRUE)) + SStgui.on_open(src) - // Open the window. - user << browse(html, "window=[window_id];[window_options]") +/datum/tgui/proc/send_assets() + var/flushqueue = window.send_asset(get_asset_datum( + /datum/asset/simple/namespaced/fontawesome)) + for(var/datum/asset/asset in src_object.ui_assets(user)) + flushqueue |= window.send_asset(asset) + if(flushqueue) + user.client.browse_queue_flush() - // Instruct the client to signal UI when the window is closed. - winset(user, window_id, "on-close=\"uiclose [src.UID()]\"") +/** + * public + * + * Close the UI. + * + * optional can_be_suspended bool + */ +/datum/tgui/proc/close(can_be_suspended = TRUE) + if(closing) + return + closing = TRUE + // If we don't have window_id, open proc did not have the opportunity + // to finish, therefore it's safe to skip this whole block. + if(window) + // Windows you want to keep are usually blue screens of death + // and we want to keep them around, to allow user to read + // the error message properly. + window.release_lock() + window.close(can_be_suspended) + src_object.ui_close(user) + SStgui.on_close(src) + state = null + qdel(src) - // Pre-fetch initial state while browser is still loading in - // another thread - if(!initial_data) - initial_data = src_object.ui_data(user) - if(!initial_static_data) - initial_static_data = src_object.ui_static_data(user) - _initial_update = url_encode(get_json(initial_data, initial_static_data)) +/** + * public + * + * Enable/disable auto-updating of the UI. + * + * required value bool Enable/disable auto-updating. + */ +/datum/tgui/proc/set_autoupdate(autoupdate) + src.autoupdate = autoupdate - SStgui.on_open(src) +/** + * public + * + * Replace current ui.state with a new one. + * + * required state datum/ui_state/state Next state + */ +/datum/tgui/proc/set_state(datum/ui_state/state) + src.state = state /** * public * - * Reinitialize the UI. - * (Possibly with a new interface and/or data). + * Makes an asset available to use in tgui. * - * optional template string The name of the new interface. - * optional data list The new initial data. + * required asset datum/asset */ -/datum/tgui/proc/reinitialize(interface, list/data, list/static_data) - if(interface) - src.interface = interface - if(data) - initial_data = data - if(static_data) - initial_static_data = static_data - open() +/datum/tgui/proc/send_asset(datum/asset/asset) + if(!window) + CRASH("send_asset() can only be called after open().") + return window.send_asset(asset) /** * public * - * Close the UI, and all its children. + * Send a full update to the client (includes static data). + * + * optional custom_data list Custom data to send instead of ui_data. + * optional force bool Send an update even if UI is not interactive. */ -/datum/tgui/proc/close() - user << browse(null, "window=[window_id]") // Close the window. - src_object.ui_close(user) - SStgui.on_close(src) - for(var/datum/tgui/child in children) // Loop through and close all children. - child.close() - children.Cut() - state = null - master_ui = null - qdel(src) +/datum/tgui/proc/send_full_update(custom_data, force) + if(!user.client || !initialized || closing) + return + if(!COOLDOWN_FINISHED(src, refresh_cooldown)) + refreshing = TRUE + addtimer(CALLBACK(src, PROC_REF(send_full_update)), TGUI_REFRESH_FULL_UPDATE_COOLDOWN, TIMER_UNIQUE) + return + refreshing = FALSE + var/should_update_data = force || status >= UI_UPDATE + window.send_message("update", get_payload( + custom_data, + with_data = should_update_data, + with_static_data = TRUE)) + COOLDOWN_START(src, refresh_cooldown, TGUI_REFRESH_FULL_UPDATE_COOLDOWN) /** * public * - * Enable/disable auto-updating of the UI. + * Send a partial update to the client (excludes static data). * - * required state bool Enable/disable auto-updating. + * optional custom_data list Custom data to send instead of ui_data. + * optional force bool Send an update even if UI is not interactive. */ -/datum/tgui/proc/set_autoupdate(state = TRUE) - autoupdate = state +/datum/tgui/proc/send_update(custom_data, force) + if(!user.client || !initialized || closing) + return + var/should_update_data = force || status >= UI_UPDATE + window.send_message("update", get_payload( + custom_data, + with_data = should_update_data)) /** * private * * Package the data to send to the UI, as JSON. - * This includes the UI data and config_data. * - * return string The packaged JSON. + * return list */ -/datum/tgui/proc/get_json(list/data, list/static_data) +/datum/tgui/proc/get_payload(custom_data, with_data, with_static_data) var/list/json_data = list() - json_data["config"] = list( "title" = title, "status" = status, "interface" = interface, - "fancy" = user.client.prefs.toggles2 & PREFTOGGLE_2_FANCYUI, - "observer" = isobserver(user), - "window" = window_id, + "refreshing" = refreshing, + "window" = list( + "key" = window_key, + "size" = window_size, + "fancy" = (user.client?.prefs?.toggles2 & PREFTOGGLE_2_FANCYUI), + "locked" = FALSE, + ), + "client" = list( + "ckey" = user.client.ckey, + "address" = user.client.address, + "computer_id" = user.client.computer_id, + ), + "user" = list( + "name" = "[user]", + "observer" = isobserver(user), + ), "map" = SSmapping.map_datum.technical_name, "ref" = "[src.UID()]" ) - - if(!isnull(data)) + var/data = custom_data || with_data && src_object.ui_data(user) + if(data) json_data["data"] = data - if(!isnull(static_data)) + var/static_data = with_static_data && src_object.ui_static_data(user) + if(static_data) json_data["static_data"] = static_data - - // Send shared states if(src_object.tgui_shared_states) json_data["shared"] = src_object.tgui_shared_states - - // Generate the JSON. - var/json = json_encode(json_data) - // Strip #255/improper. - json = replacetext(json, "\proper", "") - json = replacetext(json, "\improper", "") - return json - -/** - * private - * - * Handle clicks from the UI. - * Call the src_object's ui_act() if status is UI_INTERACTIVE. - * If the src_object's ui_act() returns 1, update all UIs attacked to it. - */ -/datum/tgui/Topic(href, href_list) - if(user != usr) - return // Something is not right here. - - var/action = href_list["action"] - var/params = href_list; params -= "action" - - switch(action) - if("tgui:initialize") - user << output(_initial_update, "[window_id].browser:update") - initialized = TRUE - if("tgui:setSharedState") - // Update the window state. - update_status(push = FALSE) - // Bail if UI is not interactive or usr calling Topic - // is not the UI user. - if(status != STATUS_INTERACTIVE) - return - var/key = params["key"] - var/value = params["value"] - if(!src_object.tgui_shared_states) - src_object.tgui_shared_states = list() - src_object.tgui_shared_states[key] = value - SStgui.update_uis(src_object) - if("tgui:setFancy") - user.client.prefs.toggles2 ^= PREFTOGGLE_2_FANCYUI - if("tgui:log") - // Force window to show frills on fatal errors - if(params["fatal"]) - winset(user, window_id, "titlebar=1;can-resize=1;size=600x600") - log_message(params["log"]) - if("tgui:link") - user << link(params["url"]) - else - // Update the window state. - update_status(push = FALSE) - // Call ui_act() on the src_object. - if(src_object.ui_act(action, params, src, state)) - // Update if the object requested it. - SStgui.update_uis(src_object) + return json_data /** * private * - * Update the UI. - * Only updates the data if update is true, otherwise only updates the status. - * - * optional force bool If the UI should be forced to update. + * Run an update cycle for this UI. Called internally by SStgui + * every second or so. */ /datum/tgui/process(force = FALSE) + if(closing) + return var/datum/host = src_object.ui_host(user) - if(!src_object || !host || !user) // If the object or user died (or something else), abort. - close() + // If the object or user died (or something else), abort. + if(!src_object || !host || !user || !window) + close(can_be_suspended = FALSE) return - - if(status && (force || autoupdate)) - update() // Update the UI if the status and update settings allow it. - else - update_status(push = TRUE) // Otherwise only update status. - -/** - * private - * - * Push data to an already open UI. - * - * required data list The data to send. - * optional force bool If the update should be sent regardless of state. - */ -/datum/tgui/proc/push_data(data, static_data, force = FALSE) - // Update the window state. - update_status(push = FALSE) - // Cannot update UI if it is not set up yet. - if(!initialized) + // Validate ping + if(!initialized && world.time - opened_at > TGUI_PING_TIMEOUT) + log_tgui(user, \ + "Error: Zombie window detected, killing it with fire.\n" \ + + "window_id: [window.id]\n" \ + + "opened_at: [opened_at]\n" \ + + "world.time: [world.time]") + close(can_be_suspended = FALSE) return - // Cannot update UI, we have no visibility. - if(status <= STATUS_DISABLED && !force) + // Update through a normal call to ui_interact + if(status != UI_DISABLED && (autoupdate || force)) + src_object.ui_interact(user, src) return - // Send the new JSON to the update() Javascript function. - user << output( - url_encode(get_json(data, static_data)), - "[window_id].browser:update") - -/** - * private - * - * Updates the UI by interacting with the src_object again, which will hopefully - * call try_ui_update on it. - * - * optional force_open bool If force_open should be passed to ui_interact. - */ -/datum/tgui/proc/update(force_open = FALSE) - src_object.ui_interact(user, ui_key, src, force_open, master_ui, state) + // Update status only + var/needs_update = process_status() + if(status <= UI_CLOSE) + close() + return + if(needs_update) + window.send_message("update", get_payload()) /** * private * - * Update the status/visibility of the UI for its user. - * - * optional push bool Push an update to the UI (an update is always sent for UI_DISABLED). + * Updates the status, and returns TRUE if status has changed. */ -/datum/tgui/proc/update_status(push = FALSE) - var/status = src_object.ui_status(user, state) - if(master_ui) - status = min(status, master_ui.status) - set_status(status, push) - if(status == STATUS_CLOSE) - close() +/datum/tgui/proc/process_status() + var/prev_status = status + status = src_object.ui_status(user, state) + return prev_status != status /** * private * - * Set the status/visibility of the UI. - * - * required status int The status to set (UI_CLOSE/UI_DISABLED/UI_UPDATE/UI_INTERACTIVE). - * optional push bool Push an update to the UI (an update is always sent for UI_DISABLED). + * Callback for handling incoming tgui messages. */ -/datum/tgui/proc/set_status(status, push = FALSE) - // Only update if status has changed. - if(src.status != status) - if(src.status == STATUS_DISABLED) - src.status = status - if(push) - update() - else - src.status = status - // Update if the UI just because disabled, or a push is requested. - if(status == STATUS_DISABLED || push) - push_data(null, force = TRUE) - -/datum/tgui/proc/log_message(message) - log_tgui("[user] ([user.ckey]) using \"[title]\":\n[message]") +/datum/tgui/proc/on_message(type, list/payload, list/href_list) + // Pass act type messages to ui_act + if(type && copytext(type, 1, 5) == "act/") + process_status() + if(src_object.ui_act(copytext(type, 5), payload, src, state)) + SStgui.update_uis(src_object) + return FALSE + switch(type) + if("ready") + // Send a full update when the user manually refreshes the UI + if(initialized) + send_full_update() + initialized = TRUE + if("ping/reply") + initialized = TRUE + if("suspend") + close(can_be_suspended = TRUE) + if("close") + close(can_be_suspended = FALSE) + if("log") + if(href_list["fatal"]) + close(can_be_suspended = FALSE) + if("setSharedState") + if(status != UI_INTERACTIVE) + return + LAZYINITLIST(src_object.tgui_shared_states) + src_object.tgui_shared_states[href_list["key"]] = href_list["value"] + SStgui.update_uis(src_object) diff --git a/code/modules/tgui/tgui_panel/README.md b/code/modules/tgui/tgui_panel/README.md new file mode 100644 index 000000000000..95f28ae0e8cf --- /dev/null +++ b/code/modules/tgui/tgui_panel/README.md @@ -0,0 +1,30 @@ +## /TG/ Chat + +/TG/ Chat, which will be referred to as TgChat from this point onwards, is a system in which we can send messages to clients in a controlled and semi-reliable manner. The standard way of sending messages to BYOND clients simply dumps whatever you output to them directly into their chat window, however BYOND allows us to load our own code on the client to change this behaviour in a way that allows us to do some pretty neat things. + +### Message Format + +TgChat handles sending messages from the server to the client through the use of JSON payloads, of which the format will change depending on the type of message and the intended client endpoint. An example of the payload for chat messages is as follows: +```json +{ + "sequence": 0, + "content": { + "type": ". . .", // ?optional + "text": ". . .", // ?optional !atleast-one + "html": ". . .", // ?optional !atleast-one + "avoidHighlighting": 0 // ?optional + }, +} +``` + +### Reliability + +In the past there have been issues where BYOND will silently and without reason lose a message we sent to the client, to detect this and recover from it seamlessly TgChat also has a baked in reliability layer. This reliability layer is very primitive, and simply keeps track of recieved sequence numbers. Should the client recieve an unexpected sequence number TgChat asks the server to resend any missing packets. + +### Ping System + +TgChat supports a round trip time ping measurement, which is displayed to the client so they can know how long it takes for their commands and inputs to reach the server. This is done by sending the client a ping request, `ping/soft`, which tells the client to send a ping to the server. When the server recieves said ping it sends a reply, `ping/reply`, to the client with a payload containing the current DateTime which the client can reference against the initial ping request. + +### Chat Tabs, Local Storage, and Highlighting + +To make organizing and managing chat easier and more functional for both players and admins, TgChat has the ability to filter out messages based on their primary tag, such as individual departmental radios, to a dedicated chat tab for easier reading and comprehension. These tabs can also be configured to highlist messages based on a simple keyword search. You can set a multitude of different keywords to search for and they will be highlighting for instant alerting of the client. Said tabs, highlighting rules, and your chat history will persist thanks to use of local storage on the client. Using local storage TgChat can ensure that your preferences are saved and maintained between client restarts and switching between other /TG/ servers. Local Storage is also used to keep your chat history aswell, should you need to scroll through your chat logs. diff --git a/code/modules/tgui/tgui_panel/audio.dm b/code/modules/tgui/tgui_panel/audio.dm new file mode 100644 index 000000000000..da52b2ace3de --- /dev/null +++ b/code/modules/tgui/tgui_panel/audio.dm @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/// Admin music volume, from 0 to 1. +/client/var/admin_music_volume = 1 + +/** + * public + * + * Sends music data to the browser. + * + * Optional settings: + * - pitch: the playback rate + * - start: the start time of the sound + * - end: when the musics stops playing + * + * required url string Must be an https URL. + * optional extra_data list Optional settings. + */ +/datum/tgui_panel/proc/play_music(url, extra_data) + if(!is_ready()) + return + var/list/payload = list() + if(length(extra_data) > 0) + for(var/key in extra_data) + payload[key] = extra_data[key] + payload["url"] = url + window.send_message("audio/playMusic", payload) + +/** + * public + * + * Stops playing music through the browser. + */ +/datum/tgui_panel/proc/stop_music() + if(!is_ready()) + return + window.send_message("audio/stopMusic") diff --git a/code/modules/tgui/tgui_panel/telemetry.dm b/code/modules/tgui/tgui_panel/telemetry.dm new file mode 100644 index 000000000000..d7bb55b75268 --- /dev/null +++ b/code/modules/tgui/tgui_panel/telemetry.dm @@ -0,0 +1,80 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/** + * Maximum number of connection records allowed to analyze. + * Should match the value set in the browser. + */ +#define TGUI_TELEMETRY_MAX_CONNECTIONS 5 + +/** + * Maximum time allocated for sending a telemetry packet. + */ +#define TGUI_TELEMETRY_RESPONSE_WINDOW 30 SECONDS + +/// Time of telemetry request +/datum/tgui_panel/var/telemetry_requested_at +/// Time of telemetry analysis completion +/datum/tgui_panel/var/telemetry_analyzed_at +/// List of previous client connections +/datum/tgui_panel/var/list/telemetry_connections + +/** + * private + * + * Requests some telemetry from the client. + */ +/datum/tgui_panel/proc/request_telemetry() + telemetry_requested_at = world.time + telemetry_analyzed_at = null + window.send_message("telemetry/request", list( + "limits" = list( + "connections" = TGUI_TELEMETRY_MAX_CONNECTIONS, + ), + )) + +/** + * private + * + * Analyzes a telemetry packet. + * + * Is currently only useful for detecting ban evasion attempts. + */ +/datum/tgui_panel/proc/analyze_telemetry(payload) + if(world.time > telemetry_requested_at + TGUI_TELEMETRY_RESPONSE_WINDOW) + message_admins("[key_name(client)] sent telemetry outside of the allocated time window.") + return + if(telemetry_analyzed_at) + message_admins("[key_name(client)] sent telemetry more than once.") + return + telemetry_analyzed_at = world.time + if(!payload) + return + telemetry_connections = payload["connections"] + var/len = length(telemetry_connections) + if(len == 0) + return + if(len > TGUI_TELEMETRY_MAX_CONNECTIONS) + message_admins("[key_name(client)] was kicked for sending a huge telemetry payload") + qdel(client) + return + var/list/found + for(var/i in 1 to len) + if(QDELETED(client)) + // He got cleaned up before we were done + return + var/list/row = telemetry_connections[i] + // Check for a malformed history object + if(!row || row.len < 3 || (!row["ckey"] || !row["address"] || !row["computer_id"])) + return + if(world.IsBanned(row["ckey"], row["address"], row["computer_id"])) + found = row + break + CHECK_TICK + // This fucker has a history of playing on a banned account. + if(found) + var/msg = "[key_name(client)] has a banned account in connection history! (Matched: [found["ckey"]], [found["address"]], [found["computer_id"]])" + message_admins(msg) + log_admin(msg) diff --git a/code/modules/tgui/tgui_panel/tgui_panel.dm b/code/modules/tgui/tgui_panel/tgui_panel.dm new file mode 100644 index 000000000000..53da137e89ce --- /dev/null +++ b/code/modules/tgui/tgui_panel/tgui_panel.dm @@ -0,0 +1,96 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/** + * tgui_panel datum + * Hosts tgchat and other nice features. + */ +/datum/tgui_panel + var/client/client + var/datum/tgui_window/window + var/broken = FALSE + var/initialized_at + +/datum/tgui_panel/New(client/client) + src.client = client + window = new(client, "browseroutput") + window.subscribe(src, PROC_REF(on_message)) + +/datum/tgui_panel/Del() + window.unsubscribe(src) + window.close() + return ..() + +/** + * public + * + * TRUE if panel is initialized and ready to receive messages. + */ +/datum/tgui_panel/proc/is_ready() + return !broken && window.is_ready() + +/** + * public + * + * Initializes tgui panel. + */ +/datum/tgui_panel/proc/initialize(force = FALSE) + set waitfor = FALSE + // Minimal sleep to defer initialization to after client constructor + sleep(1) + initialized_at = world.time + // Perform a clean initialization + window.initialize(assets = list( + get_asset_datum(/datum/asset/simple/tgui_panel), + )) + window.send_asset(get_asset_datum(/datum/asset/simple/namespaced/fontawesome)) + request_telemetry() + addtimer(CALLBACK(src, PROC_REF(on_initialize_timed_out)), 5 SECONDS) + +/** + * private + * + * Called when initialization has timed out. + */ +/datum/tgui_panel/proc/on_initialize_timed_out() + // Currently does nothing but sending a message to old chat. + SEND_TEXT(client, "Failed to load fancy chat, click HERE to attempt to reload it.") + +/** + * private + * + * Callback for handling incoming tgui messages. + */ +/datum/tgui_panel/proc/on_message(type, payload) + if(type == "ready") + broken = FALSE + window.send_message("update", list( + "config" = list( + "client" = list( + "ckey" = client.ckey, + "address" = client.address, + "computer_id" = client.computer_id, + ), + "window" = list( + "fancy" = FALSE, + "locked" = FALSE, + ), + ), + )) + return TRUE + if(type == "audio/setAdminMusicVolume") + client.admin_music_volume = payload["volume"] + return TRUE + if(type == "telemetry") + analyze_telemetry(payload) + return TRUE + +/** + * public + * + * Sends a round restart notification. + */ +/datum/tgui_panel/proc/send_roundrestart() + window.send_message("roundrestart") diff --git a/code/modules/tgui/tgui_panel/tgui_panel_external.dm b/code/modules/tgui/tgui_panel/tgui_panel_external.dm new file mode 100644 index 000000000000..c6d8bda30e96 --- /dev/null +++ b/code/modules/tgui/tgui_panel/tgui_panel_external.dm @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/client/var/datum/tgui_panel/tgui_panel + +/** + * tgui panel / chat troubleshooting verb + */ +/client/verb/fix_tgui_panel() + set name = "Fix chat" + set category = "Special Verbs" + var/action + log_tgui(src, "Started fixing.") + + nuke_chat() + + // Failed to fix + action = alert(src, "Did that work?", "", "Yes", "No, switch to old ui") + if(action == "No, switch to old ui") + winset(src, "output", "on-show=&is-disabled=0&is-visible=1") + winset(src, "browseroutput", "is-disabled=1;is-visible=0") + log_tgui(src, "Failed to fix.") + +/client/proc/nuke_chat() + // Catch all solution (kick the whole thing in the pants) + winset(src, "output", "on-show=&is-disabled=0&is-visible=1") + winset(src, "browseroutput", "is-disabled=1;is-visible=0") + if(!tgui_panel || !istype(tgui_panel)) + log_tgui(src, "tgui_panel datum is missing") + tgui_panel = new(src) + tgui_panel.initialize(force = TRUE) + // Force show the panel to see if there are any errors + winset(src, "output", "is-disabled=1&is-visible=0") + winset(src, "browseroutput", "is-disabled=0;is-visible=1") diff --git a/code/modules/tgui/tgui_panel/tgui_panel_message.dm b/code/modules/tgui/tgui_panel/tgui_panel_message.dm new file mode 100644 index 000000000000..2e9bfe784ec4 --- /dev/null +++ b/code/modules/tgui/tgui_panel/tgui_panel_message.dm @@ -0,0 +1,17 @@ +/** + * Message-related procs + * + * Message format (/list): + * - type - Message type, must be one of defines in `code/__DEFINES/chat.dm` + * - text - Plain message text + * - html - HTML message text + * - Optional metadata, can be any key/value pair. + * + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/proc/message_to_html(message) + // Here it is possible to add a switch statement + // to custom-handle various message types. + return message["html"] || message["text"] diff --git a/code/modules/tgui/tgui_panel/to_chat.dm b/code/modules/tgui/tgui_panel/to_chat.dm new file mode 100644 index 000000000000..80e03c69da89 --- /dev/null +++ b/code/modules/tgui/tgui_panel/to_chat.dm @@ -0,0 +1,92 @@ +/*! + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/** + * Circumvents the message queue and sends the message + * to the recipient (target) as soon as possible. + */ +/proc/to_chat_immediate( + target, + html, + type = null, + text = null, + avoid_highlighting = FALSE, + // FIXME: These flags are now pointless and have no effect + handle_whitespace = TRUE, + trailing_newline = TRUE, + confidential = FALSE +) + // Useful where the integer 0 is the entire message. Use case is enabling to_chat(target, some_boolean) while preventing to_chat(target, "") + html = "[html]" + text = "[text]" + + if(!target) + return + if(!html && !text) + CRASH("Empty or null string in to_chat proc call.") + if(target == world) + target = GLOB.clients + + // Build a message + var/message = list() + if(type) + message["type"] = type + if(text) + message["text"] = text + if(html) + message["html"] = html + if(avoid_highlighting) + message["avoidHighlighting"] = avoid_highlighting + + // send it immediately + SSchat.send_immediate(target, message) + +/** + * Sends the message to the recipient (target). + * + * Recommended way to write to_chat calls: + * ``` + * to_chat(client, + * type = MESSAGE_TYPE_INFO, + * html = "You have found [object]") + * ``` + */ +/proc/to_chat( + target, + html, + type = null, + text = null, + avoid_highlighting = FALSE, + // FIXME: These flags are now pointless and have no effect + handle_whitespace = TRUE, + trailing_newline = TRUE, + confidential = FALSE +) + if(Master.current_runlevel == RUNLEVEL_INIT || !SSchat?.initialized) + to_chat_immediate(target, html, type, text) + return + + // Useful where the integer 0 is the entire message. Use case is enabling to_chat(target, some_boolean) while preventing to_chat(target, "") + html = "[html]" + text = "[text]" + + if(!target) + return + if(!html && !text) + CRASH("Empty or null string in to_chat proc call.") + if(target == world) + target = GLOB.clients + + // Build a message + var/message = list() + if(type) + message["type"] = type + if(text) + message["text"] = text + if(html) + message["html"] = html + if(avoid_highlighting) + message["avoidHighlighting"] = avoid_highlighting + SSchat.queue(target, message) diff --git a/code/modules/tgui/tgui_window.dm b/code/modules/tgui/tgui_window.dm new file mode 100644 index 000000000000..e09e4ff9efc6 --- /dev/null +++ b/code/modules/tgui/tgui_window.dm @@ -0,0 +1,343 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/datum/tgui_window + var/id + var/client/client + var/pooled + var/pool_index + var/is_browser = FALSE + var/status = TGUI_WINDOW_CLOSED + var/locked = FALSE + var/datum/tgui/locked_by + var/datum/subscriber_object + var/subscriber_delegate + var/fatally_errored = FALSE + var/message_queue + var/sent_assets = list() + // Vars passed to initialize proc (and saved for later) + var/initial_fancy + var/initial_assets + var/initial_inline_html + var/initial_inline_js + var/initial_inline_css + +/** + * public + * + * Create a new tgui window. + * + * required client /client + * required id string A unique window identifier. + */ +/datum/tgui_window/New(client/client, id, pooled = FALSE) + src.id = id + src.client = client + src.client.tgui_windows[id] = src + src.pooled = pooled + if(pooled) + src.pool_index = TGUI_WINDOW_INDEX(id) + +/** + * public + * + * Initializes the window with a fresh page. Puts window into the "loading" + * state. You can begin sending messages right after initializing. Messages + * will be put into the queue until the window finishes loading. + * + * optional assets list List of assets to inline into the html. + * optional inline_html string Custom HTML to inject. + * optional fancy bool If TRUE, will hide the window titlebar. + */ +/datum/tgui_window/proc/initialize( + fancy = FALSE, + assets = list(), + inline_html = "", + inline_js = "", + inline_css = "") + log_tgui(client, "[id]/initialize") + if(!client) + return + src.initial_fancy = fancy + src.initial_assets = assets + src.initial_inline_html = inline_html + src.initial_inline_js = inline_js + src.initial_inline_css = inline_css + status = TGUI_WINDOW_LOADING + fatally_errored = FALSE + // Build window options + var/options = "file=[id].html;can_minimize=0;auto_format=0;" + // Remove titlebar and resize handles for a fancy window + if(fancy) + options += "titlebar=0;can_resize=0;" + else + options += "titlebar=1;can_resize=1;" + // Generate page html + var/html = SStgui.basehtml + html = replacetextEx(html, "\[tgui:windowId]", id) + // Inject assets + var/inline_assets_str = "" + for(var/datum/asset/asset in assets) + var/mappings = asset.get_url_mappings() + for(var/name in mappings) + var/url = mappings[name] + // Not encoding since asset strings are considered safe + if(copytext(name, -4) == ".css") + inline_assets_str += "Byond.loadCss('[url]', true);\n" + else if(copytext(name, -3) == ".js") + inline_assets_str += "Byond.loadJs('[url]', true);\n" + asset.send(client) + if(length(inline_assets_str)) + inline_assets_str = "\n" + html = replacetextEx(html, "\n", inline_assets_str) + // Inject inline HTML + if(inline_html) + html = replacetextEx(html, "", inline_html) + // Inject inline JS + if(inline_js) + inline_js = "" + html = replacetextEx(html, "", inline_js) + // Inject inline CSS + if(inline_css) + inline_css = "" + html = replacetextEx(html, "", inline_css) + // Open the window + client << browse(html, "window=[id];[options]") + // Detect whether the control is a browser + is_browser = winexists(client, id) == "BROWSER" + // Instruct the client to signal UI when the window is closed. + if(!is_browser) + winset(client, id, "on-close=\"uiclose [id]\"") + +/** + * public + * + * Checks if the window is ready to receive data. + * + * return bool + */ +/datum/tgui_window/proc/is_ready() + return status == TGUI_WINDOW_READY + +/** + * public + * + * Checks if the window can be sanely suspended. + * + * return bool + */ +/datum/tgui_window/proc/can_be_suspended() + return !fatally_errored \ + && pooled \ + && pool_index > 0 \ + && pool_index <= TGUI_WINDOW_SOFT_LIMIT \ + && status == TGUI_WINDOW_READY + +/** + * public + * + * Acquire the window lock. Pool will not be able to provide this window + * to other UIs for the duration of the lock. + * + * Can be given an optional tgui datum, which will be automatically + * subscribed to incoming messages via the on_message proc. + * + * optional ui /datum/tgui + */ +/datum/tgui_window/proc/acquire_lock(datum/tgui/ui) + locked = TRUE + locked_by = ui + +/** + * public + * + * Release the window lock. + */ +/datum/tgui_window/proc/release_lock() + // Clean up assets sent by tgui datum which requested the lock + if(locked) + sent_assets = list() + locked = FALSE + locked_by = null + +/** + * public + * + * Subscribes the datum to consume window messages on a specified proc. + * + * Note, that this supports only one subscriber, because code for that + * is simpler and therefore faster. If necessary, this can be rewritten + * to support multiple subscribers. + */ +/datum/tgui_window/proc/subscribe(datum/object, delegate) + subscriber_object = object + subscriber_delegate = delegate + +/** + * public + * + * Unsubscribes the datum. Do not forget to call this when cleaning up. + */ +/datum/tgui_window/proc/unsubscribe(datum/object) + subscriber_object = null + subscriber_delegate = null + +/** + * public + * + * Close the UI. + * + * optional can_be_suspended bool + */ +/datum/tgui_window/proc/close(can_be_suspended = TRUE) + if(!client) + return + if(can_be_suspended && can_be_suspended()) + log_tgui(client, "[id]/close: suspending") + status = TGUI_WINDOW_READY + send_message("suspend") + return + log_tgui(client, "[id]/close") + release_lock() + status = TGUI_WINDOW_CLOSED + message_queue = null + // Do not close the window to give user some time + // to read the error message. + if(!fatally_errored) + client << browse(null, "window=[id]") + +/** + * public + * + * Sends a message to tgui window. + * + * required type string Message type + * required payload list Message payload + * optional force bool Send regardless of the ready status. + */ +/datum/tgui_window/proc/send_message(type, payload, force) + if(!client) + return + var/message = TGUI_CREATE_MESSAGE(type, payload) + // Place into queue if window is still loading + if(!force && status != TGUI_WINDOW_READY) + if(!message_queue) + message_queue = list() + message_queue += list(message) + return + client << output(message, is_browser \ + ? "[id]:update" \ + : "[id].browser:update") + +/** + * public + * + * Sends a raw payload to tgui window. + * + * required message string JSON+urlencoded blob to send. + * optional force bool Send regardless of the ready status. + */ +/datum/tgui_window/proc/send_raw_message(message, force) + if(!client) + return + // Place into queue if window is still loading + if(!force && status != TGUI_WINDOW_READY) + if(!message_queue) + message_queue = list() + message_queue += list(message) + return + + client << output(message, is_browser \ + ? "[id]:update" \ + : "[id].browser:update") + +/** + * public + * + * Makes an asset available to use in tgui. + * + * required asset datum/asset + * + * return bool - TRUE if any assets had to be sent to the client + */ +/datum/tgui_window/proc/send_asset(datum/asset/asset) + if(!client || !asset) + return + + sent_assets |= list(asset) + . = asset.send(client) + if(istype(asset, /datum/asset/spritesheet)) + var/datum/asset/spritesheet/spritesheet = asset + send_message("asset/stylesheet", spritesheet.css_filename()) + send_raw_message(asset.get_serialized_url_mappings()) + +/** + * private + * + * Sends queued messages if the queue wasn't empty. + */ +/datum/tgui_window/proc/flush_message_queue() + if(!client || !message_queue) + return + for(var/message in message_queue) + client << output(message, is_browser \ + ? "[id]:update" \ + : "[id].browser:update") + message_queue = null + +/** + * private + * + * Callback for handling incoming tgui messages. + */ +/datum/tgui_window/proc/on_message(type, payload, href_list) + // Status can be READY if user has refreshed the window. + if(type == "ready" && status == TGUI_WINDOW_READY) + // Resend the assets + for(var/asset in sent_assets) + send_asset(asset) + // Mark this window as fatally errored which prevents it from + // being suspended. + if(type == "log" && href_list["fatal"]) + fatally_errored = TRUE + // Mark window as ready since we received this message from somewhere + if(status != TGUI_WINDOW_READY) + status = TGUI_WINDOW_READY + flush_message_queue() + // Pass message to UI that requested the lock + if(locked && locked_by) + var/prevent_default = locked_by.on_message(type, payload, href_list) + if(prevent_default) + return + // Pass message to the subscriber + else if(subscriber_object) + var/prevent_default = call( + subscriber_object, + subscriber_delegate)(type, payload, href_list) + if(prevent_default) + return + // If not locked, handle these message types + switch(type) + if("ping") + send_message("ping/reply", payload) + if("suspend") + close(can_be_suspended = TRUE) + if("close") + close(can_be_suspended = FALSE) + if("openLink") + client << link(href_list["url"]) + if("cacheReloaded") + // Reinitialize + initialize( + fancy = initial_fancy, + assets = initial_assets, + inline_html = initial_inline_html, + inline_js = initial_inline_js, + inline_css = initial_inline_css) + // Resend the assets + for(var/asset in sent_assets) + send_asset(asset) + if("chat/resend") + SSchat.handle_resend(client, payload) diff --git a/code/modules/vote/vote_datum.dm b/code/modules/vote/vote_datum.dm index bbab946fe538..ddea16a8ffbc 100644 --- a/code/modules/vote/vote_datum.dm +++ b/code/modules/vote/vote_datum.dm @@ -117,9 +117,10 @@ /datum/vote/proc/announce(start_text) - to_chat(world, {"[start_text] - Нажмите здесь или введите Vote, чтобы оставить голос. - У вас [GLOB.configuration.vote.vote_time / 10] секунд на выбор."}) + to_chat(world, chat_box_purple( + "[start_text]

\ + Нажмите здесь или введите Vote, чтобы оставить голос.
\ + У вас [GLOB.configuration.vote.vote_time / 10] секунд на выбор.
")) SEND_SOUND(world, sound('sound/ambience/alarm4.ogg')) @@ -149,10 +150,13 @@ /* UI STUFFS */ -/datum/vote/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/vote/ui_state(mob/user) + return GLOB.always_state + +/datum/vote/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "VotePanel", "Панель голосования", 400, 500, master_ui, state) + ui = new(user, src, "VotePanel", "Панель голосования") ui.open() /datum/vote/ui_data(mob/user) diff --git a/code/modules/vote/vote_verb.dm b/code/modules/vote/vote_verb.dm index 57178d38b14f..2bb6bb6d3234 100644 --- a/code/modules/vote/vote_verb.dm +++ b/code/modules/vote/vote_verb.dm @@ -40,13 +40,13 @@ return // Its custom, lets ask - var/question = html_encode(input(usr, "За что голосуем?") as text|null) + var/question = input(usr, "За что голосуем?") as text|null if(!question) return var/list/choices = list() for(var/i in 1 to 10) - var/option = capitalize(html_encode(input(usr, "Впишите опцию или нажмите отмену для завершения") as text|null)) + var/option = capitalize(input(usr, "Впишите опцию или нажмите отмену для завершения") as text|null) if(!option || !usr.client) break choices |= option diff --git a/config/example/config.toml b/config/example/config.toml index 6837fe3801ec..fe29743b12ac 100644 --- a/config/example/config.toml +++ b/config/example/config.toml @@ -31,6 +31,7 @@ # - system_configuration # - url_configuration # - voting_configuration +# - # SS220 CONFIGS # - gateway_configuration @@ -849,6 +850,26 @@ map_vote_day_types = [ ################################################################ + +[asset_cache_configuration] +# Browser assets are any file included in interfaces. css, images, javascript, etc. +# This handles configuring how we get these to the player so interfaces can access them. + +# The normal way of getting assets to clients is to use the internal byond system. This can be slow and delay the opening of interface windows. It also doesn't allow the internal IE windows byond uses to cache anything. +# You can instead have the server save them to a website via a folder within the game server that the web server can read. This could be a simple webserver or something backed by a CDN. +# Valid values: simple, webroot. Simple is the default. +asset_transport = "simple" +# Uncomment this to have the server passively send all browser assets to each client in the background. (instead of waiting for them to be needed) +# This should be uncommented in production and commented in development +asset_simple_preload = true +# Local folder to save assets to. +# Assets will be saved in the format of asset.MD5HASH.EXT or in namespaces/hash/ as ASSET_FILE_NAME or asset.MD5HASH.EXT +# asset_cdn_webroot = "data/asset-store/" +# for best results the webserver powering this should return a long cache validity time, as all assets sent via this transport use hash based urls +# if you want to test this locally, you simpily run the `localhost-asset-webroot-server.py` python3 script to host assets stored in `data/asset-store/` via http://localhost:58715/ +# asset_cdn_url = "http://localhost:58715/" + + # Congratulations. You reached the end. heres a cookie. # And some SS220 configs ratge. diff --git a/fonts/REBUFFED.TTF b/fonts/REBUFFED.TTF deleted file mode 100644 index 2fe5468ee0d2..000000000000 Binary files a/fonts/REBUFFED.TTF and /dev/null differ diff --git a/fonts/binary.ttf b/fonts/binary.ttf deleted file mode 100644 index 16c1059dd474..000000000000 Binary files a/fonts/binary.ttf and /dev/null differ diff --git a/fonts/skrell.ttf b/fonts/skrell.ttf deleted file mode 100644 index 7df455719e3f..000000000000 Binary files a/fonts/skrell.ttf and /dev/null differ diff --git a/fonts/slime.ttf b/fonts/slime.ttf deleted file mode 100644 index 2f8b9da9bbcf..000000000000 Binary files a/fonts/slime.ttf and /dev/null differ diff --git a/goon/browserassets/html/browserOutput.html b/goon/browserassets/html/browserOutput.html deleted file mode 100644 index 2d4deb2fb15c..000000000000 --- a/goon/browserassets/html/browserOutput.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - Chat - - - - - - - - - - - - - - - - - - - - -
- -
- Loading...

- If this takes longer than 10 seconds, it will automatically reload, multiple times if necessary.
- If it still does not reload, do not open an adminhelp, you will be unable to see our responses.
- Please instead click the wiki button in the top right of your screen and type "Goonchat Troubleshooting"
- This will provide possible solutions, furthermore please seek help on our discord #helpchat if this
- issue cannot be resolved on your own. -
-
-
- -
- - - - - - diff --git a/goon/browserassets/js/browserOutput.js b/goon/browserassets/js/browserOutput.js deleted file mode 100644 index 7f58d9340265..000000000000 --- a/goon/browserassets/js/browserOutput.js +++ /dev/null @@ -1,1235 +0,0 @@ -/***************************************** -* -* FUNCTION AND VAR DECLARATIONS -* -******************************************/ - -//DEBUG STUFF -var escaper = encodeURIComponent || escape; -var decoder = decodeURIComponent || unescape; -window.onerror = function(msg, url, line, col, error) { - if (document.location.href.indexOf("proc=debug") <= 0) { - var extra = !col ? '' : ' | column: ' + col; - extra += !error ? '' : ' | error: ' + error; - extra += !navigator.userAgent ? '' : ' | user agent: ' + navigator.userAgent; - var debugLine = 'Error: ' + msg + ' | url: ' + url + ' | line: ' + line + extra; - window.location = '?_src_=chat&proc=debug¶m[error]='+escaper(debugLine); - } - return true; -}; - -//Globals -window.status = 'Output'; -var $messages, $subOptions, $contextMenu, $filterMessages; -var opts = { - //General - 'messageCount': 0, //A count...of messages... - 'messageLimit': 2053, //A limit...for the messages... - 'scrollSnapTolerance': 5, //If within x pixels of bottom - 'clickTolerance': 10, //Keep focus if outside x pixels of mousedown position on mouseup - 'popups': 0, //Amount of popups opened ever - 'wasd': false, //Is the user in wasd mode? - 'chatMode': 'default', //The mode the chat is in - 'priorChatHeight': 0, //Thing for height-resizing detection - 'restarting': false, //Is the round restarting? - 'previousMessage': '', - 'previousMessageCount': 1, - 'hideSpam': true, - - //Options menu - 'subOptionsLoop': null, //Contains the interval loop for closing the options menu - 'suppressOptionsClose': false, //Whether or not we should be hiding the suboptions menu - 'highlightTerms': [], - 'highlightLimit': 5, - 'highlightRegexEnable':false, - 'highlightColor': '#FFFF00', //The color of the highlighted message - 'pingDisabled': false, //Has the user disabled the ping counter - - //Ping display - 'lastPang': 0, //Timestamp of the last response from the server. - 'pangLimit': 35000, - 'pingTime': 0, //Timestamp of when ping sent - 'pongTime': 0, //Timestamp of when ping received - 'noResponse': false, //Tracks the state of the previous ping request - 'noResponseCount': 0, //How many failed pings? - - //Clicks - 'mouseDownX': null, - 'mouseDownY': null, - 'preventFocus': false, //Prevents switching focus to the game window - - //Admin stuff - 'adminLoaded': false, //Has the admin loaded his shit? - - //Client Connection Data - 'clientDataLimit': 5, - 'clientData': [], - - // List of macros in the 'hotkeymode' macro set. - 'macros': {}, - - // Emoji toggle - 'enableEmoji': true, - - // Reboot message stuff - 'rebootIntervalHandler': null, - - // Syndicate codewords - 'codePhrases': [], - 'codeResponses': [] -}; - -var regexHasError = false; //variable to check if regex has excepted - -function outerHTML(el) { - var wrap = document.createElement('div'); - wrap.appendChild(el.cloneNode(true)); - return wrap.innerHTML; -} - -//Polyfill for fucking date now because of course IE8 and below don't support it -if (!Date.now) { - Date.now = function now() { - return new Date().getTime(); - }; -} -//Polyfill for trim() (IE8 and below) -if (typeof String.prototype.trim !== 'function') { - String.prototype.trim = function () { - return this.replace(/^\s+|\s+$/g, ''); - }; -} - -//Polyfill for string.prototype.includes. Why the fuck. Just why the fuck. -if (!String.prototype.includes) { - String.prototype.includes = function(search, start) { - 'use strict'; - - if (search instanceof RegExp) { - throw TypeError('first argument must not be a RegExp'); - } - if (start === undefined) { start = 0; } - return this.indexOf(search, start) !== -1; - }; -} - -//Shit fucking piece of crap that doesn't work god fuckin damn it -function linkify(text) { - var rex = /((?:'+$0+''; - } - else { - return $1 ? $0: ''+$0+''; - } - }); -} - -function byondDecode(message) { - // Basically we url_encode twice server side so we can manually read the encoded version and actually do UTF-8. - // The replace for + is because FOR SOME REASON, BYOND replaces spaces with a + instead of %20, and a plus with %2b. - // Marvelous. - message = message.replace(/\+/g, "%20"); - try { - // This is a workaround for the above not always working when BYOND's shitty url encoding breaks. - // Basically, sometimes BYOND's double encoding trick just arbitrarily produces something that makes decodeURIComponent - // throw an "Invalid Encoding URI" URIError... the simplest way to work around this is to just ignore it and use unescape instead - // which just fails to decode shit instead of throwing errors - if (decodeURIComponent) { - message = decodeURIComponent(message); - } else { - throw new Error("Easiest way to trigger the fallback") - } - } catch (err) { - message = unescape(message); - } - return message; -} - -function emojiparse(el) { - - if ((typeof UNICODE_9_EMOJI === 'undefined') || (typeof twemoji === 'undefined')) { - return; //something didn't load right, probably IE8 - } - - var $el = $(el); - - var $emojiZone = $el.find(".emoji_enabled"); - - if ($emojiZone.length) { - $emojiZone.each(function () { - var html = $(this).html(); - html = html.replace(/\:(.*?)\:/g, function (match, p1, offset, s) { - var unicode_entity = UNICODE_9_EMOJI[p1]; - if (unicode_entity) { - return unicode_entity; - } - return match; - }); - html = $.parseHTML(twemoji.parse(html, {size: "svg", ext: ".svg"})); - $(this).html(html); - }); - } -} - -// Recolorizes the highlight spans -function setHighlightColor() { - var highlightspans = document.getElementsByClassName("highlight") - for(var i in highlightspans){ - highlightspans[i].setAttribute("style","background-color:"+opts.highlightColor) - } -} - -function escapeRegexCharacters(input){ //escapes any characters that could be interpreted as regex patterns, potentially causing patterns to break if not escaped - return input.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); -} - -//Highlights words based on user settings -function highlightTerms(el) { - - if (regexHasError) return; //just stop right there ig the regex is gonna except - - function highlightRecursor(element, term, className){ //recursor function to do the highlighting proper - var regex = new RegExp(term, "gi"); - - var replace; - if (className) { - replace = function(str) { - return str.replace(regex, '$&'); - }; - } else { - replace = function(str) { - return str.replace(regex, '$&'); - }; - } - - var s = ''; - var work = element.innerHTML; - var ind = 0; - - while(ind < work.length) { - - var next_term = work.substring(ind).search(regex); - if(next_term != -1) next_term += ind; - var next_tag = work.indexOf('<', ind); - if(next_tag == -1) { - s+=replace(work.substring(ind)); - break; - } - else if(next_term==-1) { - s += work.substring(ind); - break; - } - else if(next_tag < next_term) { - var temp = work.indexOf('>', next_tag); - s += work.substring(ind,temp+1); - ind = temp+1; - } - else { - s += replace(work.substring(ind, next_tag)); - ind = next_tag; - } - } - - element.innerHTML = s; - } - - for (var i = 0; i < opts.highlightTerms.length; i++) { //Each highlight term - if(opts.highlightTerms[i]) { - if(!opts.highlightRegexEnable){ - var innerTerms = opts.highlightTerms[i].split(" ") - for(var a in innerTerms){ - highlightRecursor(el, escapeRegexCharacters(innerTerms[a])) - } - } - else { - try{ - new RegExp(opts.highlightTerms[i], "gmi"); // check to make sure the pattern wont cause issues - } catch(e){ - el.innerHTML += '
Your highlight regex pattern -- ' + opts.highlightTerms[i] + ' -- is malformed.
Your highlights have been disabled until they are next edited
Thrown exception: '+e+'
'; - regexHasError = true; - return; - } - highlightRecursor(el, opts.highlightTerms[i]); - } - } - } - - // Code phrases - for (var i = 0; i < opts.codePhrases.length; i++) { - highlightRecursor(el, escapeRegexCharacters(opts.codePhrases[i]), "codephrases"); - } - for (var i = 0; i < opts.codeResponses.length; i++) { - highlightRecursor(el, escapeRegexCharacters(opts.codeResponses[i]), "coderesponses"); - } -} - -//Send a message to the client -function output(message, flag) { - if (typeof message === 'undefined') { - return; - } - if (typeof flag === 'undefined') { - flag = ''; - } - - if (flag !== 'internal') - opts.lastPang = Date.now(); - - message = byondDecode(message).trim(); - - var messageHtml = $.parseHTML(message); - //The behemoth of filter-code (for Admin message filters) - //Note: This is proooobably hella inefficient - var filteredOut = false; - if (opts.hasOwnProperty('showMessagesFilters') && !opts.showMessagesFilters['All'].show) { - //Get this filter type (defined by class on message) - var messageClasses; - if (opts.hasOwnProperty('filterHideAll') && opts.filterHideAll) { - var internal = false; - messageClasses = (!!$(messageHtml).attr('class') ? $(messageHtml).attr('class').split(/\s+/) : false); - if (messageClasses) { - for (var i = 0; i < messageClasses.length; i++) { //Every class - if (messageClasses[i] == 'internal') { - internal = true; - break; - } - } - } - if (!internal) { - filteredOut = 'All'; - } - } else { - //If the element or it's child have any classes - if (!!$(messageHtml).attr('class') || !!$(messageHtml).children().attr('class')) { - messageClasses = $(messageHtml).attr('class').split(/\s+/); - if (!!$(messageHtml).children().attr('class')) { - messageClasses = messageClasses.concat($(messageHtml).children().attr('class').split(/\s+/)); - } - - for (var i = 0; i < messageClasses.length; i++) { //Every class - var thisClass = messageClasses[i]; - $.each(opts.showMessagesFilters, function(key, val) { //Every filter - if (key !== 'All' && val.show === false && typeof val.match != 'undefined') { - for (var i = 0; i < val.match.length; i++) { - var matchClass = val.match[i]; - if (matchClass == thisClass) { - filteredOut = key; - break; - } - } - } - if (filteredOut) return false; - }); - if (filteredOut) break; - } - } else { - if (!opts.showMessagesFilters['Misc'].show) { - filteredOut = 'Misc'; - } - } - } - } - - //Stuff we do along with appending a message - var atBottom = false; - if (!filteredOut) { - var bodyHeight = $('body').height(); - var messagesHeight = $messages.outerHeight(); - var scrollPos = $('body,html').scrollTop(); - - //Should we snap the output to the bottom? - if (bodyHeight + scrollPos >= messagesHeight - opts.scrollSnapTolerance) { - atBottom = true; - if ($('#newMessages').length) { - $('#newMessages').remove(); - } - //If not, put the new messages box in - } else { - if ($('#newMessages').length) { - var messages = $('#newMessages .number').text(); - messages = parseInt(messages); - messages++; - $('#newMessages .number').text(messages); - if (messages == 2) { - $('#newMessages .messageWord').append('s'); - } - } else { - $messages.after('1 new message '); - } - } - } - - //Url stuff - if (message.length && flag != 'preventLink') { - message = linkify(message); - } - - opts.messageCount++; - - //Actually append the message - var entry = document.createElement('div'); - entry.className = 'entry'; - - if (filteredOut) { - entry.className += ' hidden'; - entry.setAttribute('data-filter', filteredOut); - } - - entry.innerHTML = message; - - // emoji! - if (opts.enableEmoji) { - emojiparse(entry); - } - - if (opts.hideSpam && entry.innerHTML === opts.previousMessage) { - opts.previousMessageCount++; - var lastIndex = $messages[0].children.length - 1; - var message_is_in_box; - var messageClasses = (!!$(messageHtml).attr('class') ? $(messageHtml).attr('class').split(/\s+/) : false); - if (messageClasses) { - for (var i = 0; i < messageClasses.length; i++) { //Every class - if (messageClasses[i] == 'boxed_message') { - message_is_in_box = true; - break; - } - } - } - - var countBadgeClass = message_is_in_box ? "repeatBadge boxed_repeat" : "repeatBadge" - var countBadge = 'x' + opts.previousMessageCount + ''; - var lastEntry = $messages[0].children[lastIndex]; - lastEntry.innerHTML = opts.previousMessage + countBadge; - var insertedBadge = $(lastEntry).find('.repeatBadge'); - insertedBadge.animate({ - "font-size": "0.9em" - }, 100, function() { - insertedBadge.animate({ - "font-size": "0.7em" - }, 100); - }); - entry = lastEntry; - } - else { - opts.previousMessage = entry.innerHTML; - opts.previousMessageCount = 1; - $messages[0].appendChild(entry); - } - - //Actually do the snap - if (!filteredOut && atBottom) { - $('body,html').scrollTop($messages.outerHeight()); - } - - //Stuff we can do after the message shows can go here, in the interests of responsiveness - if ((opts.highlightTerms && opts.highlightTerms.length > 0) || (opts.codePhrases.length > 0 && opts.codeResponses.length > 0)) { - highlightTerms(entry); - } -} - -function internalOutput(message, flag) -{ - output(escaper(message), flag); -} - -//Runs a route within byond, client or server side. Consider this "ehjax" for byond. -function runByond(uri) { - window.location = uri; -} - -function setCookie(cname, cvalue, exdays) { - cvalue = escaper(cvalue); - var d = new Date(); - d.setTime(d.getTime() + (exdays*24*60*60*1000)); - var expires = 'expires='+d.toUTCString(); - document.cookie = "paradise-" + cname + '=' + cvalue + '; ' + expires + '; path=/'; -} - -function getCookie(cname) { - var name = "paradise-" + cname + '='; - var ca = document.cookie.split(';'); - for(var i=0; i < ca.length; i++) { - var c = ca[i]; - while (c.charAt(0)==' ') c = c.substring(1); - if (c.indexOf(name) === 0) { - return decoder(c.substring(name.length,c.length)); - } - } - return ''; -} - -function rgbToHex(R,G,B) {return toHex(R)+toHex(G)+toHex(B);} -function toHex(n) { - n = parseInt(n,10); - if (isNaN(n)) return "00"; - n = Math.max(0,Math.min(n,255)); - return "0123456789ABCDEF".charAt((n-n%16)/16) + "0123456789ABCDEF".charAt(n%16); -} - -function changeMode(mode) { - switch (mode) { - case 'geocities': - //switch in stylesheet - opts.chatMode = mode; - break; - case 'console': - - opts.chatMode = mode; - break; - case 'default': - default: - //remove loaded stylesheet/s - opts.chatMode = 'default'; - } -} - -function handleClientData(ckey, ip, compid) { - //byond sends player info to here - var currentData = {'ckey': ckey, 'ip': ip, 'compid': compid}; - if (opts.clientData && !$.isEmptyObject(opts.clientData)) { - runByond('?_src_=chat&proc=analyzeClientData¶m[cookie]='+JSON.stringify({'connData': opts.clientData})); - - for (var i = 0; i < opts.clientData.length; i++) { - var saved = opts.clientData[i]; - if (currentData.ckey == saved.ckey && currentData.ip == saved.ip && currentData.compid == saved.compid) { - return; //Record already exists - } - } - - //Lets make sure we obey our limit (can connect from server with higher limit) - while (opts.clientData.length >= opts.clientDataLimit) { - opts.clientData.shift(); - } - } else { - runByond('?_src_=chat&proc=analyzeClientData¶m[cookie]=none'); - } - - //Update the cookie with current details - opts.clientData.push(currentData); - setCookie('connData', JSON.stringify(opts.clientData), 365); -} - -//Server calls this on ehjax response -//Or, y'know, whenever really -function ehjaxCallback(data) { - opts.lastPang = Date.now(); - if (data == 'softPang') { - return; - } else if (data == "pang") { - opts.pingCounter = 0; - opts.pingTime = Date.now(); - runByond('?_src_=chat&proc=ping'); - } else if (data == 'pong') { - if (opts.pingDisabled) {return;} - opts.pongTime = Date.now(); - var pingDuration = Math.ceil((opts.pongTime - opts.pingTime) / 2); - $('#pingMs').text(pingDuration+'ms'); - pingDuration = Math.min(pingDuration, 255); - var red = pingDuration; - var green = 255 - pingDuration; - var blue = 0; - var hex = rgbToHex(red, green, blue); - $('#pingDot').css('color', '#'+hex); - } else if (data == 'roundrestart') { - opts.restarting = true; - internalOutput('
The connection has been closed because the server is restarting. Please wait while you automatically reconnect.
', 'internal'); - } else if (data == 'stopaudio') { - $('.dectalk').remove(); - } else { - //Oh we're actually being sent data instead of an instruction - var dataJ; - try { - dataJ = $.parseJSON(data); - } catch (e) { - //But...incorrect :sadtrombone: - window.onerror('JSON: '+e+'. '+data+'; data.length = '+data.length, 'browserOutput.html', 327); - return; - } - data = dataJ; - - if (data.clientData) { - if (opts.restarting) { - opts.restarting = false; - $('.connectionClosed.restarting:not(.restored)').addClass('restored').text('The round restarted and you successfully reconnected!'); - } - if (!data.clientData.ckey && !data.clientData.ip && !data.clientData.compid) { - //TODO: Call shutdown perhaps - return; - } else { - handleClientData(data.clientData.ckey, data.clientData.ip, data.clientData.compid); - } - } else if (data.loadAdminCode) { - if (opts.adminLoaded) {return;} - var adminCode = data.loadAdminCode; - $('body').append(adminCode); - opts.adminLoaded = true; - } else if (data.modeChange) { - changeMode(data.modeChange); - } else if (data.firebug) { - if (data.trigger) { - internalOutput('Loading firebug console, triggered by '+data.trigger+'...', 'internal'); - } else { - internalOutput('Loading firebug console...', 'internal'); - } - var firebugEl = document.createElement('script'); - firebugEl.src = 'https://getfirebug.com/firebug-lite-debug.js'; - document.body.appendChild(firebugEl); - } else if (data.dectalk) { - var message = ''; - if (data.decTalkTrigger) { - message = ' '+ - 'You hear a strange robotic voice...' + message; - } - internalOutput(message, 'preventLink'); - } - } -} - -function createPopup(contents, width) { - opts.popups++; - $('body').append(''); - - //Attach close popup event - var $popup = $('#popup'+opts.popups); - var height = $popup.outerHeight(); - $popup.css({'height': height+'px', 'margin': '-'+(height/2)+'px 0 0 -'+(width/2)+'px'}); - - $popup.on('click', '.close', function(e) { - e.preventDefault(); - $popup.remove(); - }); -} - -function toggleWasd(state) { - opts.wasd = (state == 'on' ? true : false); -} - -function reboot(timeRaw) { - var timeLeftSecs = parseInt(timeRaw); - const intervalSecs = 1; // tick every 1 second - - rebootFinished(); - internalOutput('
The server is restarting. Reconnect (' + timeLeftSecs + ')
', 'internal'); - - opts.rebootIntervalHandler = setInterval(function() { - timeLeftSecs -= intervalSecs; - if (timeLeftSecs <= 0) { - $("#reconnectTimer").text('Reconnecting...'); - window.location.href = 'byond://winset?command=.reconnect'; - clearInterval(opts.rebootIntervalHandler) - opts.rebootIntervalHandler = null; - } else { - $("#reconnectTimer").text('Reconnect (' + timeLeftSecs + ')'); - } - }, intervalSecs * 1000); -} - -function rebootFinished() { - if (opts.rebootIntervalHandler != null) { - clearInterval(opts.rebootIntervalHandler) - } - $(" Reconnected automatically!").insertBefore("#reconnectTimer"); - $("#reconnectTimer").remove(); -} - -function codewords(phrases, responses) { - function cleanCodewords(words) { - var arr = []; - for (var i in words) { - var trimmed = words[i].trim(); - if (trimmed.length > 0) { - arr.push(trimmed); - } - } - return arr; - } - - opts.codePhrases = cleanCodewords(phrases.split(",")); - opts.codeResponses = cleanCodewords(responses.split(",")); -} - -function codewordsClear() { - opts.codePhrases = []; - opts.codeResponses = []; -} - -/***************************************** -* -* MAKE MACRO DICTIONARY -* -******************************************/ - -// Callback for winget. -function wingetMacros(macros) { - var idRegex = /.*?\.(?!(?:CRTL|ALT|SHIFT)\+)(.*?)(?:\+REP)?\.command/; // Do NOT match macros which need crtl, alt or shift to be held down (saves a ton of headache because I don't give enough of a fuck). - for (key in macros) { - match = idRegex.exec(key) - if (match === null) - continue - macroID = match[1].toUpperCase(); - - opts.macros[macroID] = macros[key]; - } -} - -/***************************************** -* -* DOM READY -* -******************************************/ - -if (typeof $ === 'undefined') { - var div = document.getElementById('loading').childNodes[1]; - div += '

ERROR: Jquery did not load.'; -} - -$(function() { - $messages = $('#messages'); - $subOptions = $('#subOptions'); - - //Hey look it's a controller loop! - setInterval(function() { - if (opts.lastPang + opts.pangLimit < Date.now() && !opts.restarting) { //Every pingLimit - if (!opts.noResponse) { //Only actually append a message if the previous ping didn't also fail (to prevent spam) - opts.noResponse = true; - opts.noResponseCount++; - internalOutput('
You are either AFK, experiencing lag or the connection has closed.
', 'internal'); - } - } else if (opts.noResponse) { //Previous ping attempt failed ohno - $('.connectionClosed[data-count="'+opts.noResponseCount+'"]:not(.restored)').addClass('restored').text('Your connection has been restored (probably)!'); - opts.noResponse = false; - } - if (opts.messageCount > opts.messageLimit) { // Prune old messages beyond the message limit - var bodyHeight = $('body').height(); - var messagesHeight = $messages.outerHeight(); - var scrollPos = $(window).scrollTop(); - var atBottom = (bodyHeight + scrollPos >= messagesHeight - opts.scrollSnapTolerance) - - $messages.children().slice(0, opts.messageCount - opts.messageLimit).remove(); - opts.messageCount = opts.messageLimit; - if (!atBottom) { - // If we weren't at the bottom, adjust scroll position to compensate for removed elements - var newPos = scrollPos - (messagesHeight - $messages.outerHeight()) - $('body,html').scrollTop(newPos); - } - } - }, 2000); //2 seconds - - - - /***************************************** - * - * LOAD SAVED CONFIG - * - ******************************************/ - var savedConfig = { - 'sfontSize': getCookie('fontsize'), - 'sfontType': getCookie('fonttype'), - 'spingDisabled': getCookie('pingdisabled'), - 'shighlightTerms': getCookie('highlightterms'), - 'shighlightColor': getCookie('highlightcolor'), - 'shighlightRegexEnable': getCookie('highlightregexenable') == "true", - 'shideSpam': getCookie('hidespam'), - 'darkChat': getCookie('darkChat'), - }; - - if (savedConfig.sfontSize) { - $messages.css('font-size', savedConfig.sfontSize); - internalOutput('Loaded font size setting of: '+savedConfig.sfontSize+'', 'internal'); - } - if (savedConfig.sfontType) { - $messages.css('font-family', savedConfig.sfontType); - internalOutput('Loaded font type setting of: '+savedConfig.sfontType+'', 'internal'); - } - if (savedConfig.spingDisabled) { - if (savedConfig.spingDisabled == 'true') { - opts.pingDisabled = true; - $('#ping').hide(); - } - internalOutput('Loaded ping display of: '+(opts.pingDisabled ? 'hidden' : 'visible')+'', 'internal'); - } - if (savedConfig.shighlightTerms) { - var savedTerms = $.parseJSON(savedConfig.shighlightTerms); - var actualTerms = ''; - for (var i = 0; i < savedTerms.length; i++) { - if (savedTerms[i]) { - actualTerms += savedTerms[i] + ', '; - } - } - if (actualTerms) { - actualTerms = actualTerms.substring(0, actualTerms.length - 2); - internalOutput('Loaded highlight strings of: ' + actualTerms+'', 'internal'); - opts.highlightTerms = savedTerms; - } - } - if (savedConfig.shighlightColor) { - opts.highlightColor = savedConfig.shighlightColor; - internalOutput('Loaded highlight color of: '+savedConfig.shighlightColor+'', 'internal'); - } - if (savedConfig.shighlightRegexEnable) { - opts.highlightRegexEnable = savedConfig.shighlightRegexEnable; - internalOutput('Loaded highlight regex enable of: '+savedConfig.shighlightRegexEnable+'', 'internal'); - } - if (savedConfig.shideSpam) { - opts.hideSpam = $.parseJSON(savedConfig.shideSpam); - internalOutput('Loaded hide spam preference of: ' + savedConfig.shideSpam + '', 'internal'); - } - if (savedConfig.darkChat == "on") { - $("head").append(""); - var css = $("head").children(":last"); - css.attr({ - rel: "stylesheet", - type: "text/css", - href: "./browserOutput-dark.css" - }); - } else { - $("head").append(""); - var css = $("head").children(":last"); - css.attr({ - rel: "stylesheet", - type: "text/css", - href: "./browserOutput.css" - }); - } - if(localStorage){ - var backlog = localStorage.getItem('backlog') - $messages.html(backlog) - localStorage.setItem('backlog', '') - } - (function() { - var dataCookie = getCookie('connData'); - if (dataCookie) { - var dataJ; - try { - dataJ = $.parseJSON(dataCookie); - } catch (e) { - window.onerror('JSON '+e+'. '+dataCookie, 'browserOutput.html', 434); - return; - } - opts.clientData = dataJ; - } - })(); - - - /***************************************** - * - * BASE CHAT OUTPUT EVENTS - * - ******************************************/ - - $('body').on('click', 'a', function(e) { - e.preventDefault(); - }); - - $('body').on('mousedown', function(e) { - var $target = $(e.target); - - if ($contextMenu && opts.hasOwnProperty('contextMenuTarget') && opts.contextMenuTarget) { - hideContextMenu(); - return false; - } - - if ($target.is('a') || $target.parent('a').length || $target.is('input') || $target.is('textarea')) { - opts.preventFocus = true; - } else { - opts.preventFocus = false; - opts.mouseDownX = e.pageX; - opts.mouseDownY = e.pageY; - } - }); - - $messages.on('mousedown', function(e) { - if ($subOptions && $subOptions.is(':visible')) { - $subOptions.slideUp('fast', function() { - $(this).removeClass('scroll'); - $(this).css('height', ''); - }); - clearInterval(opts.subOptionsLoop); - } - }); - - $('body').on('mouseup', function(e) { - if (!opts.preventFocus && - (e.pageX >= opts.mouseDownX - opts.clickTolerance && e.pageX <= opts.mouseDownX + opts.clickTolerance) && - (e.pageY >= opts.mouseDownY - opts.clickTolerance && e.pageY <= opts.mouseDownY + opts.clickTolerance) - ) { - opts.mouseDownX = null; - opts.mouseDownY = null; - runByond('byond://winset?paramapwindow.map.focus=true'); - } - }); - - $messages.on('click', 'a', function(e) { - var href = $(this).attr('href'); - if (href[0] == '?' || (href.length >= 8 && href.substring(0,8) == 'byond://')) { - runByond(href); - } else { - href = escaper(href); - runByond('?action=openLink&link='+href); - } - }); - - //Fuck everything about this event. Will look into alternatives. - $('body').on('keydown', function(e) { - if (e.target.nodeName == 'INPUT' || e.target.nodeName == 'TEXTAREA') { - return; - } - - if (e.ctrlKey || e.altKey || e.shiftKey) { //Band-aid "fix" for allowing ctrl+c copy paste etc. Needs a proper fix. - return; - } - - e.preventDefault() - - var k = e.which; - var command; // Command to execute through winset. - - // Hardcoded because else there would be no feedback message. - if (k == 113) { // F2 - runByond('byond://winset?screenshot=auto'); - internalOutput('Screenshot taken', 'internal'); - } - - var c = ""; - switch (k) { - case 8: - c = 'BACK'; - case 9: - c = 'TAB'; - case 13: - c = 'ENTER'; - case 19: - c = 'PAUSE'; - case 27: - c = 'ESCAPE'; - case 33: // Page up - c = 'NORTHEAST'; - case 34: // Page down - c = 'SOUTHEAST'; - case 35: // End - c = 'SOUTHWEST'; - case 36: // Home - c = 'NORTHWEST'; - case 37: - c = 'WEST'; - case 38: - c = 'NORTH'; - case 39: - c = 'EAST'; - case 40: - c = 'SOUTH'; - case 45: - c = 'INSERT'; - case 46: - c = 'DELETE'; - case 93: // That weird thing to the right of alt gr. - c = 'APPS'; - - default: - c = String.fromCharCode(k); - } - - if(opts.macros.hasOwnProperty(c.toUpperCase())) - command = opts.macros[c]; - - if (command) { - runByond('byond://winset?paramapwindow.map.focus=true;command='+command); - return false; - } - else if (c.length == 0) { - if (!e.shiftKey) { - c = c.toLowerCase(); - } - runByond('byond://winset?paramapwindow.map.focus=true;mainwindow.input.text='+c); - return false; - } else { - runByond('byond://winset?paramapwindow.map.focus=true'); - return false; - } - }); - - //Mildly hacky fix for scroll issues on mob change (interface gets resized sometimes, messing up snap-scroll) - $(window).on('resize', function(e) { - if ($(this).height() !== opts.priorChatHeight) { - $('body,html').scrollTop($messages.outerHeight()); - opts.priorChatHeight = $(this).height(); - } - }); - - //Audio sound prevention - $messages.on('click', '.stopAudio', function() { - var $audio = $(this).parent().children('audio'); - if ($audio) { - $audio.remove(); - } - }); - - - /***************************************** - * - * OPTIONS INTERFACE EVENTS - * - ******************************************/ - - $('body').on('click', '#newMessages', function(e) { - var messagesHeight = $messages.outerHeight(); - $('body,html').scrollTop(messagesHeight); - $('#newMessages').remove(); - runByond("byond://winset?paramapwindow.map.focus=true"); - }); - - $('#toggleOptions').click(function(e) { - if ($subOptions.is(':visible')) { - $subOptions.slideUp('fast', function() { - $(this).removeClass('scroll'); - $(this).css('height', ''); - }); - clearInterval(opts.subOptionsLoop); - } else { - $subOptions.slideDown('fast', function() { - var windowHeight = $(window).height(); - var toggleHeight = $('#toggleOptions').outerHeight(); - var priorSubHeight = $subOptions.outerHeight(); - var newSubHeight = windowHeight - toggleHeight; - $(this).height(newSubHeight); - if (priorSubHeight > (windowHeight - toggleHeight)) { - $(this).addClass('scroll'); - } - }); - opts.subOptionsLoop = setInterval(function() { - if (!opts.suppressOptionsClose && $('#subOptions').is(':visible')) { - $subOptions.slideUp('fast', function() { - $(this).removeClass('scroll'); - $(this).css('height', ''); - }); - clearInterval(opts.subOptionsLoop); - } - }, 5000); //Every 5 seconds - } - }); - - $('#subOptions, #toggleOptions').mouseenter(function() { - opts.suppressOptionsClose = true; - }); - - $('#subOptions, #toggleOptions').mouseleave(function() { - opts.suppressOptionsClose = false; - }); - - $('#decreaseFont').click(function(e) { - var fontSize = parseInt($messages.css('font-size')); - fontSize = fontSize - 1 + 'px'; - $messages.css({'font-size': fontSize}); - setCookie('fontsize', fontSize, 365); - internalOutput('Font size set to '+fontSize+'', 'internal'); - }); - - $('#increaseFont').click(function(e) { - var fontSize = parseInt($messages.css('font-size')); - fontSize = fontSize + 1 + 'px'; - $messages.css({'font-size': fontSize}); - setCookie('fontsize', fontSize, 365); - internalOutput('Font size set to '+fontSize+'', 'internal'); - }); - - $('#chooseFont').click(function(e) { - if ($('.popup .changeFont').is(':visible')) {return;} - var popupContent = '
Change Font
' + - ''; - createPopup(popupContent, 200); - }); - - $('body').on('click', '#changeFont a', function(e) { - var font = $(this).attr('data-font'); - $messages.css('font-family', font); - setCookie('fonttype', font, 365); - }); - - $('#toggleHideSpam').click(function(e) { - opts.hideSpam = !opts.hideSpam; - setCookie('hidespam', opts.hideSpam, 365); - internalOutput('Duplicate chat line condensing set to ' + opts.hideSpam + '', 'internal'); - }); - - $('#togglePing').click(function(e) { - if (opts.pingDisabled) { - $('#ping').slideDown('fast'); - opts.pingDisabled = false; - } else { - $('#ping').slideUp('fast'); - opts.pingDisabled = true; - } - setCookie('pingdisabled', (opts.pingDisabled ? 'true' : 'false'), 365); - }); - - $('#saveLog').click(function(e) { - var openWindow = function (content) { //opens a window - var win; - try { - win = window.open('', 'RAW Chat Log', 'toolbar=no, location=no, directories=no, status=no, menubar=yes, scrollbars=yes, resizable=yes, width=1200, height=800, top='+(screen.height-400)+', left='+(screen.width-840)); - } catch (e) { - return; - } - if (win && win.document && window.document.body) { - win.document.body.innerHTML = content; - return win; - } - }; - - if (window.XMLHttpRequest) { - xmlHttp = new XMLHttpRequest(); - } else { - xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); - } - - // synchronous requests are depricated in modern browsers - xmlHttp.open('GET', 'browserOutput.css', true); - xmlHttp.onload = function (e) { - if (xmlHttp.status === 200) { // request successful - - // Generate Log - var saved = ''; - saved += $messages.html(); - saved = saved.replace(/&/g, '&'); - saved = saved.replace(/'; - } - var popupContent = '
String Highlighting
' + - '
' + - '
Choose up to '+opts.highlightLimit+' strings that will highlight the line when they appear in chat.
'+ - 'Enable Regex'+ - '
See here for details
' + - '
' + - termInputs + - '
' + - '
' + - '' + - '
'; - createPopup(popupContent, 250); - for(var i = 0; i < opts.highlightLimit; i++){ - document.querySelector(".highlightTermInput"+i).setAttribute("value",(opts.highlightTerms[i] ? opts.highlightTerms[i] : '')); - } - document.querySelector(".popup #highlightRegexEnable").checked = opts.highlightRegexEnable; - }); - $('body').on('keyup', '#highlightColor', function() { - var color = $('#highlightColor').val(); - color = color.trim(); - if (!color || color.charAt(0) != '#') return; - $('#highlightColor').css('background-color', color); - }); - - $('body').on('submit', '#highlightTermForm', function(e) { - e.preventDefault(); - - var count = 0; - while (count < opts.highlightLimit) { - var term = $('#highlightTermInput'+count).val(); - if (term) { - term = term.trim(); - if (term === '') { - opts.highlightTerms[count] = null; - } else { - opts.highlightTerms[count] = term.toLowerCase(); - } - } else { - opts.highlightTerms[count] = null; - } - count++; - } - - opts.highlightRegexEnable = document.querySelector("#highlightRegexEnable").checked - - var color = $('#highlightColor').val(); - if(color != opts.highlightColor) { // did the color even change? - color = color.trim(); - if (color == '' || color.charAt(0) != '#') { - opts.highlightColor = '#FFFF00'; - } else { - opts.highlightColor = color; - } - setHighlightColor(); - } - - regexHasError = false; //they changed the regex so it might be valid now - internalOutput('Highlights have been updated.',"internal") // simplest way to test if pattern works, why reinvent the wheel? - - var $popup = $('#highlightPopup').closest('.popup'); - $popup.remove(); - - setCookie('highlightregexenable', opts.highlightRegexEnable,365) - setCookie('highlightterms', JSON.stringify(opts.highlightTerms), 365); - setCookie('highlightcolor', opts.highlightColor, 365); - }); - - $('#clearMessages').click(function() { - $messages.empty(); - opts.messageCount = 0; - opts.previousMessage = ''; - opts.previousMessageCount = 1; - }); - - $('#toggleDarkChat').click(function(e) { - internalOutput('Dark Chat toggled. Reconnecting to chat.', 'internal'); - var backlog = $messages.html() - if(getCookie('darkChat') == "on"){ - setCookie('darkChat', "off", 365) - } else { - setCookie('darkChat', "on", 365) - } - localStorage.setItem('backlog', backlog) - location.reload(); - }); - - /***************************************** - * - * KICK EVERYTHING OFF - * - ******************************************/ - - runByond('?_src_=chat&proc=doneLoading'); - if ($('#loading').is(':visible')) { - $('#loading').remove(); - } - $('#userBar').show(); - opts.priorChatHeight = $(window).height(); -}); diff --git a/goon/browserassets/js/json2.min.js b/goon/browserassets/js/json2.min.js deleted file mode 100644 index d867407f265e..000000000000 --- a/goon/browserassets/js/json2.min.js +++ /dev/null @@ -1 +0,0 @@ -"object"!=typeof JSON&&(JSON={}),function(){"use strict";function f(t){return 10>t?"0"+t:t}function this_value(){return this.valueOf()}function quote(t){return rx_escapable.lastIndex=0,rx_escapable.test(t)?'"'+t.replace(rx_escapable,function(t){var e=meta[t];return"string"==typeof e?e:"\\u"+("0000"+t.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+t+'"'}function str(t,e){var r,n,o,u,f,a=gap,i=e[t];switch(i&&"object"==typeof i&&"function"==typeof i.toJSON&&(i=i.toJSON(t)),"function"==typeof rep&&(i=rep.call(e,t,i)),typeof i){case"string":return quote(i);case"number":return isFinite(i)?String(i):"null";case"boolean":case"null":return String(i);case"object":if(!i)return"null";if(gap+=indent,f=[],"[object Array]"===Object.prototype.toString.apply(i)){for(u=i.length,r=0;u>r;r+=1)f[r]=str(r,i)||"null";return o=0===f.length?"[]":gap?"[\n"+gap+f.join(",\n"+gap)+"\n"+a+"]":"["+f.join(",")+"]",gap=a,o}if(rep&&"object"==typeof rep)for(u=rep.length,r=0;u>r;r+=1)"string"==typeof rep[r]&&(n=rep[r],o=str(n,i),o&&f.push(quote(n)+(gap?": ":":")+o));else for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(o=str(n,i),o&&f.push(quote(n)+(gap?": ":":")+o));return o=0===f.length?"{}":gap?"{\n"+gap+f.join(",\n"+gap)+"\n"+a+"}":"{"+f.join(",")+"}",gap=a,o}}var rx_one=/^[\],:{}\s]*$/,rx_two=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,rx_three=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,rx_four=/(?:^|:|,)(?:\s*\[)+/g,rx_escapable=/[\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,rx_dangerous=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;"function"!=typeof Date.prototype.toJSON&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null},Boolean.prototype.toJSON=this_value,Number.prototype.toJSON=this_value,String.prototype.toJSON=this_value);var gap,indent,meta,rep;"function"!=typeof JSON.stringify&&(meta={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},JSON.stringify=function(t,e,r){var n;if(gap="",indent="","number"==typeof r)for(n=0;r>n;n+=1)indent+=" ";else"string"==typeof r&&(indent=r);if(rep=e,e&&"function"!=typeof e&&("object"!=typeof e||"number"!=typeof e.length))throw new Error("JSON.stringify");return str("",{"":t})}),"function"!=typeof JSON.parse&&(JSON.parse=function(text,reviver){function walk(t,e){var r,n,o=t[e];if(o&&"object"==typeof o)for(r in o)Object.prototype.hasOwnProperty.call(o,r)&&(n=walk(o,r),void 0!==n?o[r]=n:delete o[r]);return reviver.call(t,e,o)}var j;if(text=String(text),rx_dangerous.lastIndex=0,rx_dangerous.test(text)&&(text=text.replace(rx_dangerous,function(t){return"\\u"+("0000"+t.charCodeAt(0).toString(16)).slice(-4)})),rx_one.test(text.replace(rx_two,"@").replace(rx_three,"]").replace(rx_four,"")))return j=eval("("+text+")"),"function"==typeof reviver?walk({"":j},""):j;throw new SyntaxError("JSON.parse")})}(); \ No newline at end of file diff --git a/goon/code/datums/browserOutput.dm b/goon/code/datums/browserOutput.dm deleted file mode 100644 index 9db8ede7fbcd..000000000000 --- a/goon/code/datums/browserOutput.dm +++ /dev/null @@ -1,337 +0,0 @@ -//Should match the value set in the browser js -#define MAX_COOKIE_LENGTH 5 - -GLOBAL_LIST_INIT(chatResources, list( - "goon/browserassets/js/jquery.min.js", - "goon/browserassets/js/json2.min.js", - "goon/browserassets/js/twemoji.min.js", - "goon/browserassets/js/browserOutput.js", - "goon/browserassets/js/unicode_9_annotations.js", - "goon/browserassets/css/fonts/fontawesome-webfont.eot", - "goon/browserassets/css/fonts/fontawesome-webfont.svg", - "goon/browserassets/css/fonts/fontawesome-webfont.ttf", - "goon/browserassets/css/fonts/fontawesome-webfont.woff", - "goon/browserassets/css/fonts/PxPlus_IBM_MDA.ttf", - "goon/browserassets/css/font-awesome.css", - "goon/browserassets/css/browserOutput.css", - "goon/browserassets/css/browserOutput-dark.css", - "goon/browserassets/html/saveInstructions.html" -)) - -GLOBAL_DATUM_INIT(iconCache, /savefile, new /savefile("data/iconCache.sav")) - -GLOBAL_LIST_EMPTY(bicon_cache) - -/datum/chatOutput - var/client/owner = null - // How many times client data has been checked - var/total_checks = 0 - // When to next clear the client data checks counter - var/next_time_to_clear = 0 - var/loaded = 0 - var/list/messageQueue = list() - var/cookieSent = 0 - var/list/connectionHistory = list() - var/broken = FALSE - -/datum/chatOutput/New(client/C) - . = ..() - - owner = C - SSchat_pings.chat_datums += src - -/datum/chatOutput/proc/start() - if(!owner) - return 0 - - if(!winexists(owner, "browseroutput")) - spawn() - winset(usr, null, "command=.options") // Open their options and messages window - alert(owner.mob, "Updated chat window does not exist. Please post the contents of your 'Options and Messages' window that just opened to the #coding_chat channel on the Paradise Station discord. Please also upload skin.dmf to the same channel from the following folder in your Documents: BYOND/Skins/exadv1/spacestation13, then reconnect.") - stack_trace("[owner] had no browseroutput window! [owner]'s byond version is [owner.byond_version].[owner.byond_build]") - broken = TRUE - return 0 - - if(!owner) // In case the client vanishes before winexists returns - return 0 - - if(winget(owner, "browseroutput", "is-disabled") == "false") - doneLoading() - - else - load() - - return 1 - -/datum/chatOutput/proc/load() - set waitfor = FALSE - if(!owner) - return - - for(var/attempts in 1 to 5) - for(var/asset in GLOB.chatResources) - owner << browse_rsc(wrap_file(asset)) - - for(var/subattempts in 1 to 3) // GDN note- Remove this later it DOES NOT WORK - owner << browse(file2text("goon/browserassets/html/browserOutput.html"), "window=browseroutput") - sleep(10 SECONDS) - if(!owner || loaded) - return - -/datum/chatOutput/Topic(href, list/href_list) - if(usr.client != owner) - return 1 - - var/list/params = list() - for(var/key in href_list) - if(length(key) > 7 && findtext(key, "param")) - var/param_name = copytext(key, 7, -1) - var/item = href_list[key] - params[param_name] = item - - var/data - switch(href_list["proc"]) - if("doneLoading") - data = doneLoading(arglist(params)) - - if("debug") - if(!length(params)) - return - var/error = params[1] - log_chat_debug("Client: [owner.key || owner] triggered JS error: [error][GLOB.log_end]") - - if("ping") - data = ping(arglist(params)) - - if("analyzeClientData") - data = analyzeClientData(arglist(params)) - - if(data) - ehjax_send(data = data) - -/datum/chatOutput/proc/doneLoading() - if(loaded || !owner) // Chatloading is so fucking slow that we actually need to check if there's an owner between these calls, they mighta ollied outta there by closing their client right after a restart - return - - loaded = TRUE - winset(owner, "browseroutput", "is-disabled=false") - owner << output(null, "browseroutput:rebootFinished") - if(owner.holder) - loadAdmin() - if(owner.mob?.mind?.has_antag_datum(/datum/antagonist/traitor)) - notify_syndicate_codes() // Send them the current round's codewords - else - clear_syndicate_codes() // Flush any codewords they may have in chat - for(var/message in messageQueue) - to_chat(owner, message) - - messageQueue = null - // We can only store a cookie on the client if they actually accept TOS because GDPR is GDPR - if(owner.tos_consent) - sendClientData() - - updatePing() - -// PARADISE EDIT: This just updates the ping and is called from SSchat_pings -/datum/chatOutput/proc/updatePing() - if(!owner) - qdel(src) - return - ehjax_send(data = owner.is_afk(29 SECONDS) ? "softPang" : "pang") // SoftPang isn't handled anywhere but it'll always reset the opts.lastPang. - -/datum/chatOutput/proc/ehjax_send(client/C = owner, window = "browseroutput", data) - if(islist(data)) - data = json_encode(data) - C << output("[data]", "[window]:ehjaxCallback") - -/datum/chatOutput/proc/loadAdmin() - var/data = json_encode(list("loadAdminCode" = replacetext(replacetext(file2text("goon/browserassets/html/adminOutput.html"), "\n", ""), "\t", ""))) - ehjax_send(data = url_encode(data)) - -/datum/chatOutput/proc/sendClientData() - var/list/deets = list("clientData" = list()) - deets["clientData"]["ckey"] = owner.ckey - deets["clientData"]["ip"] = owner.address - deets["clientData"]["compid"] = owner.computer_id - var/data = json_encode(deets) - ehjax_send(data = data) - -/datum/chatOutput/proc/analyzeClientData(cookie = "") - //Spam check - if(world.time > next_time_to_clear) - next_time_to_clear = world.time + (3 SECONDS) - total_checks = 0 - total_checks += 1 - if(total_checks > SPAM_TRIGGER_AUTOMUTE) - message_admins("[key_name(owner)] kicked for goonchat topic spam") - qdel(owner) - return - - if(!cookie) - return - - if(cookie != "none") - var/regex/crashy_thingy = new /regex("(\\\[ *){5}") - if(crashy_thingy.Find(cookie)) - message_admins("[key_name(src.owner)] tried to crash the server using malformed JSON") - log_admin("[key_name(owner)] tried to crash the server using malformed JSON") - return - var/list/connData = json_decode(cookie) - if(connData && islist(connData) && connData.len > 0 && connData["connData"]) - connectionHistory = connData["connData"] - var/list/found = new() - if(connectionHistory.len > MAX_COOKIE_LENGTH) - message_admins("[key_name(src.owner)] was kicked for an invalid ban cookie)") - qdel(owner) - return - for(var/i = connectionHistory.len; i >= 1; i--) - if(QDELETED(owner)) - //he got cleaned up before we were done - return - var/list/row = connectionHistory[i] - if(!row || row.len < 3 || !(row["ckey"] && row["compid"] && row["ip"])) - return - if(world.IsBanned(key=row["ckey"], address=row["ip"], computer_id=row["compid"], type=null, check_ipintel=FALSE, check_2fa=FALSE, check_guest=FALSE, log_info=FALSE, check_tos=FALSE)) - found = row - break - CHECK_TICK - //Add autoban using the DB_ban_record function - //Uh oh this fucker has a history of playing on a banned account!! - if(found.len > 0) - message_admins("[key_name(src.owner)] has a cookie from a banned account! (Matched: [found["ckey"]], [found["ip"]], [found["compid"]])") - log_admin("[key_name(src.owner)] has a cookie from a banned account! (Matched: [found["ckey"]], [found["ip"]], [found["compid"]])") - new /datum/cookie_record(owner.ckey, found["ckey"], found["ip"], found["compid"]) - - cookieSent = 1 - -/datum/chatOutput/proc/ping() - return "pong" - -/** - * Sends the lists of code phrases and responses to Goonchat for clientside highlighting - * - * Arguments: - * * phrases - List of code phrases - * * responses - List of code responses - */ -/datum/chatOutput/proc/notify_syndicate_codes(phrases = GLOB.syndicate_code_phrase, responses = GLOB.syndicate_code_response) - var/urlphrases = url_encode(copytext(phrases, 1, length(phrases))) - var/urlresponses = url_encode(copytext(responses, 1, length(responses))) - owner << output("[urlphrases]&[urlresponses]", "browseroutput:codewords") - -/** - * Clears any locally stored code phrases to highlight - */ -/datum/chatOutput/proc/clear_syndicate_codes() - owner << output(null, "browseroutput:codewordsClear") - -/datum/chatOutput/Destroy(force) - SSchat_pings.chat_datums -= src - return ..() - - -/client/verb/debug_chat() - set hidden = 1 - chatOutput.ehjax_send(data = list("firebug" = 1)) - - -//Converts an icon to base64. Operates by putting the icon in the iconCache savefile, -// exporting it as text, and then parsing the base64 from that. -// (This relies on byond automatically storing icons in savefiles as base64) -/proc/icon2base64(icon/icon, iconKey = "misc") - if(!isicon(icon)) return 0 - - GLOB.iconCache[iconKey] << icon - var/iconData = GLOB.iconCache.ExportText(iconKey) - var/list/partial = splittext(iconData, "{") - return replacetext(copytext(partial[2], 3, -5), "\n", "") - -/proc/bicon(obj, use_class = 1) - var/class = use_class ? "class='icon misc'" : null - if(!obj) - return - - if(isicon(obj)) - if(!GLOB.bicon_cache["\ref[obj]"]) // Doesn't exist yet, make it. - GLOB.bicon_cache["\ref[obj]"] = icon2base64(obj) - - return "" - - // Either an atom or somebody fucked up and is gonna get a runtime, which I'm fine with. - var/atom/A = obj - var/key = "[istype(A.icon, /icon) ? "\ref[A.icon]" : A.icon]:[A.icon_state]" - if(!GLOB.bicon_cache[key]) // Doesn't exist, make it. - var/icon/I = icon(A.icon, A.icon_state, SOUTH, 1) - if(ishuman(obj)) // Shitty workaround for a BYOND issue. - var/icon/temp = I - I = icon() - I.Insert(temp, dir = SOUTH) - GLOB.bicon_cache[key] = icon2base64(I, key) - if(use_class) - class = "class='icon [A.icon_state]'" - - return "" - -/proc/is_valid_tochat_message(message) - return istext(message) - -/proc/is_valid_tochat_target(target) - return !istype(target, /savefile) && (ismob(target) || islist(target) || isclient(target) || target == world) - -/proc/to_chat(target, message, flag) - if(!is_valid_tochat_message(message) || !is_valid_tochat_target(target)) - target << message - - // Info about the "message" - if(isnull(message)) - message = "(null)" - else if(istype(message, /datum)) - var/datum/D = message - message = "([D.type]): '[D]'" - else if(!is_valid_tochat_message(message)) - message = "(bad message) : '[message]'" - - // Info about the target - var/targetstring = "'[target]'" - if(istype(target, /datum)) - var/datum/D = target - targetstring += ", [D.type]" - - // The final output - CRASH("DEBUG: to_chat called with invalid message/target. Message: '[message]'. Target: [targetstring].") - - else if(is_valid_tochat_message(message)) - if(istext(target)) - CRASH("Somehow, to_chat got a text as a target, message: '[message]', target: '[target]'") - - message = replacetext(message, "\n", "
") - - message = macro2html(message) - if(findtext(message, "\improper")) - message = replacetext(message, "\improper", "") - if(findtext(message, "\proper")) - message = replacetext(message, "\proper", "") - - var/client/C - if(isclient(target)) - C = target - if(ismob(target)) - C = target:client - - if(C && C.chatOutput) - if(C.chatOutput.broken) - C << message - return - - if(!C.chatOutput.loaded && C.chatOutput.messageQueue && islist(C.chatOutput.messageQueue)) - C.chatOutput.messageQueue.Add(message) - return - - // url_encode it TWICE, this way any UTF-8 characters are able to be decoded by the javascript. - var/output_message = "[url_encode(url_encode(message))]" - if(flag) - output_message += "&[url_encode(flag)]" - - target << output(output_message, "browseroutput:output") - -#undef MAX_COOKIE_LENGTH diff --git a/html/chess.html b/html/chess.html index d135be94ac74..0ac2959d92f5 100644 --- a/html/chess.html +++ b/html/chess.html @@ -1,11 +1,10 @@ - +
New game @@ -17,8 +16,8 @@ Undo
-
-
+
+

Analysis: Off @@ -28,4 +27,4 @@ -
\ No newline at end of file +
diff --git a/html/font-awesome/css/all.min.css b/html/font-awesome/css/all.min.css index e7cdfffe751e..12b385404d79 100644 --- a/html/font-awesome/css/all.min.css +++ b/html/font-awesome/css/all.min.css @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ -.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(fa-regular-400.eot);src:url(fa-regular-400.eot?#iefix) format("embedded-opentype"),url(fa-regular-400.woff) format("woff")}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(fa-solid-900.eot);src:url(fa-solid-900.eot?#iefix) format("embedded-opentype"),url(fa-solid-900.woff) format("woff")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900} \ No newline at end of file +.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hive:before{content:"\e07f"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-innosoft:before{content:"\e080"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-perbyte:before{content:"\e083"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-uncharted:before{content:"\e084"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-watchman-monitoring:before{content:"\e087"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:400;font-display:block;src:url(fa-brands-400.eot);src:url(fa-brands-400.eot?#iefix) format("embedded-opentype"),url(fa-brands-400.woff2) format("woff2"),url(fa-brands-400.woff) format("woff"),url(fa-brands-400.ttf) format("truetype"),url(fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:block;src:url(fa-regular-400.eot);src:url(fa-regular-400.eot?#iefix) format("embedded-opentype"),url(fa-regular-400.woff2) format("woff2"),url(fa-regular-400.woff) format("woff"),url(fa-regular-400.ttf) format("truetype"),url(fa-regular-400.svg#fontawesome) format("svg")}.fab,.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:block;src:url(fa-solid-900.eot);src:url(fa-solid-900.eot?#iefix) format("embedded-opentype"),url(fa-solid-900.woff2) format("woff2"),url(fa-solid-900.woff) format("woff"),url(fa-solid-900.ttf) format("truetype"),url(fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900} diff --git a/html/font-awesome/css/v4-shims.min.css b/html/font-awesome/css/v4-shims.min.css index 5f3fdc598c82..21a0708aafae 100644 --- a/html/font-awesome/css/v4-shims.min.css +++ b/html/font-awesome/css/v4-shims.min.css @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ -.fa.fa-glass:before{content:"\f000"}.fa.fa-meetup{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-star-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-file-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-pencil:before{content:"\f303"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-share-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart:before{content:"\f080"}.fa.fa-bar-chart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart-o:before{content:"\f080"}.fa.fa-facebook-square,.fa.fa-twitter-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-lemon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-scissors:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-google-plus,.fa.fa-google-plus-square,.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f3fd"}.fa.fa-comment-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard,.fa.fa-paste{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paste:before{content:"\f328"}.fa.fa-lightbulb-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f381"}.fa.fa-cloud-upload:before{content:"\f382"}.fa.fa-bell-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f089"}.fa.fa-star-half-empty{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f089"}.fa.fa-star-half-full{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f089"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before{content:"\f127"}.fa.fa-shield:before{content:"\f3ed"}.fa.fa-calendar-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ticket:before{content:"\f3ff"}.fa.fa-minus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\f155"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\f156"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f15e"}.fa.fa-sort-amount-asc:before{content:"\f160"}.fa.fa-sort-amount-desc:before{content:"\f161"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f163"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube,.fa.fa-youtube-play,.fa.fa-youtube-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\f195"}.fa.fa-plus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-google,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle,.fa.fa-yahoo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-spoon:before{content:"\f2e5"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-envelope-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-deviantart,.fa.fa-soundcloud{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-life-bouy,.fa.fa-life-ring{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-bouy:before{content:"\f1cd"}.fa.fa-life-buoy{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-buoy:before{content:"\f1cd"}.fa.fa-life-saver{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-saver:before{content:"\f1cd"}.fa.fa-support{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git,.fa.fa-git-square,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-sliders:before{content:"\f1de"}.fa.fa-futbol-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-angellist,.fa.fa-ioxhost,.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-meanpath{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-meanpath:before{content:"\f2b4"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before{content:"\f224"}.fa.fa-facebook-official{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-clone,.fa.fa-hourglass-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-chrome,.fa.fa-creative-commons,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-internet-explorer,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square,.fa.fa-opera,.fa.fa-safari,.fa.fa-tripadvisor,.fa.fa-wikipedia-w{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-snapchat,.fa.fa-snapchat-ghost,.fa.fa-snapchat-square,.fa.fa-themeisle,.fa.fa-viadeo,.fa.fa-viadeo-square,.fa.fa-yoast{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-spotify,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 5 Brands";font-weight:400} \ No newline at end of file +.fa.fa-glass:before{content:"\f000"}.fa.fa-meetup{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-star-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-file-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-pencil:before{content:"\f303"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-share-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-expand:before{content:"\f424"}.fa.fa-compress:before{content:"\f422"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart:before{content:"\f080"}.fa.fa-bar-chart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart-o:before{content:"\f080"}.fa.fa-facebook-square,.fa.fa-twitter-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-lemon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-scissors:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-google-plus,.fa.fa-google-plus-square,.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f3fd"}.fa.fa-comment-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard,.fa.fa-paste{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paste:before{content:"\f328"}.fa.fa-lightbulb-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f381"}.fa.fa-cloud-upload:before{content:"\f382"}.fa.fa-bell-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f089"}.fa.fa-star-half-empty{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f089"}.fa.fa-star-half-full{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f089"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before{content:"\f127"}.fa.fa-shield:before{content:"\f3ed"}.fa.fa-calendar-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ticket:before{content:"\f3ff"}.fa.fa-minus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\f155"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\f156"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f881"}.fa.fa-sort-amount-asc:before{content:"\f160"}.fa.fa-sort-amount-desc:before{content:"\f884"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f886"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube,.fa.fa-youtube-play,.fa.fa-youtube-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\f195"}.fa.fa-plus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-google,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle,.fa.fa-yahoo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-spoon:before{content:"\f2e5"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-envelope-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-deviantart,.fa.fa-soundcloud,.fa.fa-spotify{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-life-bouy,.fa.fa-life-ring{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-bouy:before{content:"\f1cd"}.fa.fa-life-buoy{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-buoy:before{content:"\f1cd"}.fa.fa-life-saver{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-saver:before{content:"\f1cd"}.fa.fa-support{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git,.fa.fa-git-square,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-sliders:before{content:"\f1de"}.fa.fa-futbol-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-angellist,.fa.fa-ioxhost,.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-meanpath{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-meanpath:before{content:"\f2b4"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before{content:"\f224"}.fa.fa-facebook-official{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-clone,.fa.fa-hourglass-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-chrome,.fa.fa-creative-commons,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-internet-explorer,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square,.fa.fa-opera,.fa.fa-safari,.fa.fa-tripadvisor,.fa.fa-wikipedia-w{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-snapchat,.fa.fa-snapchat-ghost,.fa.fa-snapchat-square,.fa.fa-themeisle,.fa.fa-viadeo,.fa.fa-viadeo-square,.fa.fa-yoast{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cab:before{content:"\f1ba"} \ No newline at end of file diff --git a/html/font-awesome/webfonts/fa-regular-400.eot b/html/font-awesome/webfonts/fa-regular-400.eot index d62be2fad885..a4e598936b3e 100644 Binary files a/html/font-awesome/webfonts/fa-regular-400.eot and b/html/font-awesome/webfonts/fa-regular-400.eot differ diff --git a/html/font-awesome/webfonts/fa-regular-400.woff b/html/font-awesome/webfonts/fa-regular-400.woff index 43b1a9ae49db..ad077c6bec78 100644 Binary files a/html/font-awesome/webfonts/fa-regular-400.woff and b/html/font-awesome/webfonts/fa-regular-400.woff differ diff --git a/html/font-awesome/webfonts/fa-solid-900.eot b/html/font-awesome/webfonts/fa-solid-900.eot index c77baa8d46ab..e99417197e4b 100644 Binary files a/html/font-awesome/webfonts/fa-solid-900.eot and b/html/font-awesome/webfonts/fa-solid-900.eot differ diff --git a/html/font-awesome/webfonts/fa-solid-900.woff b/html/font-awesome/webfonts/fa-solid-900.woff index 77c1786227f5..23ee663443a7 100644 Binary files a/html/font-awesome/webfonts/fa-solid-900.woff and b/html/font-awesome/webfonts/fa-solid-900.woff differ diff --git a/icons/member_content.dmi b/icons/member_content.dmi index bb5976462762..77443711198c 100644 Binary files a/icons/member_content.dmi and b/icons/member_content.dmi differ diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi index 9030742c394f..dc35acf4a2da 100644 Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ diff --git a/icons/ooc_tag_16x.png b/icons/ooc_tag_16x.png index 2165a593220b..443873c97e30 100644 Binary files a/icons/ooc_tag_16x.png and b/icons/ooc_tag_16x.png differ diff --git a/icons/paradise.png b/icons/paradise.png index 888fcea62cc4..c3254623909a 100644 Binary files a/icons/paradise.png and b/icons/paradise.png differ diff --git a/interface/skin.dmf b/interface/skin.dmf index a448deb6966d..5b83be361a54 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -121,7 +121,6 @@ menu "menu" command = "adminhelp" category = "&Помощь" - window "mainwindow" elem "mainwindow" type = MAIN @@ -134,10 +133,6 @@ window "mainwindow" icon = 'icons\\ss220.png' macro = "default" menu = "menu" - elem "asset_cache_browser" - type = BROWSER - size = 200x200 - is-visible = false elem "mainvsplit" type = CHILD size = 0x0 @@ -147,25 +142,36 @@ window "mainwindow" left = "paramapwindow" right = "rpane" is-vert = true + elem "asset_cache_browser" + type = BROWSER + size = 200x200 + is-visible = false elem "tooltip" type = BROWSER + pos = 0,0 size = 999x999 + anchor1 = -1,-1 + anchor2 = -1,-1 is-visible = false window "paramapwindow" elem "paramapwindow" type = MAIN + pos = 281,0 size = 640x480 + anchor1 = -1,-1 + anchor2 = -1,-1 + saved-params = "pos;size;is-minimized;is-maximized" is-pane = true on-status = ".winset \"status_bar.text=[[*]]\" " elem "map" type = MAP + pos = 0,0 size = 640x480 anchor1 = 0,0 anchor2 = 100,100 font-family = "Arial" font-size = 7 - text-color = none is-default = true saved-params = "icon-size;zoom-mode" zoom-mode = "distort" @@ -177,7 +183,6 @@ window "paramapwindow" size = 640x480 anchor1 = 0,0 anchor2 = 100,100 - background-color = none is-visible = false is-disabled = true saved-params = "" @@ -188,69 +193,25 @@ window "paramapwindow" pos = 0,464 size = 280x16 anchor1 = 0,100 - anchor2 = -1,-1 text-color = #ffffff background-color = #222222 border = line text = "" align = left -window "outputwindow" - elem "outputwindow" - type = MAIN - pos = 0,0 - size = 637x480 - anchor1 = 0,0 - anchor2 = 100,100 - is-pane = true - elem "input" - type = INPUT - pos = 3,456 - size = 467x20 - anchor1 = 0,100 - anchor2 = 100,100 - background-color = #d3b5b5 - is-default = true - border = line - saved-params = "command" - elem "saybutton" - type = BUTTON - pos = 474,456 - size = 80x20 - anchor1 = 100,100 - anchor2 = -1,-1 - text = "Чат" - command = ".winset \"saybutton.is-checked=true?input.command=\"!say \\\"\" macrobutton.is-checked=false:input.command=\"\"saybutton.is-checked=true?mebutton.is-checked=false\"" - button-type = pushbox - elem "mebutton" - type = BUTTON - pos = 553,456 - size = 80x20 - anchor1 = 100,100 - anchor2 = -1,-1 - text = "Действие" - command = ".winset \"mebutton.is-checked=true ? input.command=\"!me \\\"\" : input.command=\"\"mebutton.is-checked=true ? saybutton.is-checked=false\"\"mebutton.is-checked=true ? oocbutton.is-checked=false\"" - button-type = pushbox - elem "browseroutput" - type = BROWSER - pos = 0,0 - size = 633x452 - anchor1 = 0,0 - anchor2 = 100,100 - background-color = #ffffff - is-disabled = true - window "rpane" elem "rpane" type = MAIN - pos = 0,0 - size = 0x0 + pos = 281,0 + size = 640x480 + anchor1 = -1,-1 + anchor2 = -1,-1 saved-params = "pos;size;is-minimized;is-maximized" is-pane = true elem "rpanewindow" type = CHILD - pos = 0,27 - size = 0x0 + pos = 0,30 + size = 640x445 anchor1 = 0,0 anchor2 = 100,100 saved-params = "splitter" @@ -313,21 +274,101 @@ window "rpane" type = BUTTON pos = 393,7 size = 70x16 + font-style = "bold" + text-color = #ffffff text = "Чейнджлог" command = "Changelog" elem "fullscreenb" type = BUTTON pos = 469,7 size = 70x16 + text-color = #FFFFFF + background-color = #40628A saved-params = "is-checked" text = "Fullscreen" command = "fullscreen" +window "outputwindow" + elem "outputwindow" + type = MAIN + pos = 281,0 + size = 640x480 + anchor1 = -1,-1 + anchor2 = -1,-1 + background-color = none + saved-params = "pos;size;is-minimized;is-maximized" + is-pane = true + elem "input" + type = INPUT + pos = 2,460 + size = 517x20 + anchor1 = 0,100 + anchor2 = 100,100 + is-default = true + border = line + saved-params = "command" + elem "oocbutton" + type = BUTTON + pos = 599,460 + size = 40x20 + anchor1 = 100,100 + anchor2 = -1,-1 + border = line + saved-params = "is-checked" + text = "OOC" + command = ".winset \"oocbutton.is-checked=true ? input.command=\"!ooc \\\"\" : input.command=\"\"oocbutton.is-checked=true ? mebutton.is-checked=false\"\"oocbutton.is-checked=true ? saybutton.is-checked=false\"" + is-flat = true + button-type = pushbox + elem "saybutton" + type = BUTTON + pos = 519,460 + size = 40x20 + anchor1 = 100,100 + anchor2 = -1,-1 + border = line + saved-params = "is-checked" + text = "Say" + command = ".winset \"saybutton.is-checked=true ? input.command=\"!say \\\"\" : input.command=\"\"saybutton.is-checked=true ? mebutton.is-checked=false\"\"saybutton.is-checked=true ? oocbutton.is-checked=false\"" + is-flat = true + button-type = pushbox + elem "mebutton" + type = BUTTON + pos = 559,460 + size = 40x20 + anchor1 = 100,100 + anchor2 = -1,-1 + border = line + saved-params = "is-checked" + text = "Me" + command = ".winset \"mebutton.is-checked=true ? input.command=\"!me \\\"\" : input.command=\"\"mebutton.is-checked=true ? saybutton.is-checked=false\"\"mebutton.is-checked=true ? oocbutton.is-checked=false\"" + is-flat = true + button-type = pushbox + elem "browseroutput" + type = BROWSER + pos = 0,0 + size = 640x456 + anchor1 = 0,0 + anchor2 = 100,100 + is-visible = false + is-disabled = true + saved-params = "" + elem "output" + type = OUTPUT + pos = 0,0 + size = 640x456 + anchor1 = 0,0 + anchor2 = 100,100 + is-default = true + saved-params = "" + window "infowindow" elem "infowindow" type = MAIN - pos = 0,0 - size = 0x0 + pos = 281,0 + size = 640x480 + anchor1 = -1,-1 + anchor2 = -1,-1 + saved-params = "pos;size;is-minimized;is-maximized" is-pane = true elem "info" type = INFO diff --git a/modular_ss220/_modpacks.dm b/modular_ss220/_modpacks.dm index f7865a0ae2a6..a8a136849101 100644 --- a/modular_ss220/_modpacks.dm +++ b/modular_ss220/_modpacks.dm @@ -69,9 +69,12 @@ SUBSYSTEM_DEF(modpacks) )) return modpacks -/datum/controller/subsystem/modpacks/ui_interact(mob/user, ui_key, datum/tgui/ui, force_open, datum/tgui/master_ui, datum/ui_state/state = GLOB.always_state) +/datum/controller/subsystem/modpacks/ui_state(mob/user) + return GLOB.always_state + +/datum/controller/subsystem/modpacks/ui_interact(mob/user, datum/tgui/ui = null) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "ModpacksList", "Modpacks List", 500, 550, master_ui, state) + ui = new(user, src, "ModpacksList", name) ui.open() ui.set_autoupdate(FALSE) diff --git a/modular_ss220/aesthetics/_aesthetics.dme b/modular_ss220/aesthetics/_aesthetics.dme index 6ffb0d8abb86..3d4545db3486 100644 --- a/modular_ss220/aesthetics/_aesthetics.dme +++ b/modular_ss220/aesthetics/_aesthetics.dme @@ -42,7 +42,6 @@ #include "satellite\code\satellite.dm" #include "sheets\code\sheets.dm" #include "shutters\code\shutters.dm" -#include "skin\code\darkmode.dm" #include "soap\code\soap.dm" #include "stamps\code\stamps.dm" #include "surgery_table\code\surgery_table.dm" diff --git a/modular_ss220/aesthetics/skin/code/darkmode.dm b/modular_ss220/aesthetics/skin/code/darkmode.dm deleted file mode 100644 index 48e5f4c2ea9f..000000000000 --- a/modular_ss220/aesthetics/skin/code/darkmode.dm +++ /dev/null @@ -1,11 +0,0 @@ -/client/activate_darkmode() - . = ..() - winset(src, "rpane.fullscreenb", "background-color=#40628a;text-color=#ffffff") - -/client/deactivate_darkmode() - . = ..() - winset(src, "rpane.fullscreenb", "background-color=none;text-color=#000000") - -/datum/preferences/New(client/C, datum/db_query/Q) - toggles |= PREFTOGGLE_UI_DARKMODE - . = ..() diff --git a/modular_ss220/aesthetics/stamps/code/stamps.dm b/modular_ss220/aesthetics/stamps/code/stamps.dm index 8b45a0705154..ccc668b75f67 100644 --- a/modular_ss220/aesthetics/stamps/code/stamps.dm +++ b/modular_ss220/aesthetics/stamps/code/stamps.dm @@ -69,14 +69,3 @@ icon_state = "stamp-ussp" item_color = "redcoat" stampoverlay_custom_icon = 'modular_ss220/aesthetics/stamps/icons/stamps.dmi' - -// Adding new stamps to the list -/datum/asset/simple/paper/New() - assets += list( - "large_stamp-ward.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-ward.png', - "large_stamp-ploho.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-ploho.png', - "large_stamp-BIGdeny.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-BIGdeny.png', - "large_stamp-navcom.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-navcom.png', - "large_stamp-mime.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-mime.png', - "large_stamp-ussp.png" = 'modular_ss220/aesthetics/stamps/icons/paper_icons/large_stamp-ussp.png' - ) diff --git a/modular_ss220/agent_id_tgui/code/agent_id_tgui.dm b/modular_ss220/agent_id_tgui/code/agent_id_tgui.dm index 5931bcea6215..6f9a00563cc0 100644 --- a/modular_ss220/agent_id_tgui/code/agent_id_tgui.dm +++ b/modular_ss220/agent_id_tgui/code/agent_id_tgui.dm @@ -116,10 +116,13 @@ data["appearances"] = card_images return data -/obj/item/card/id/syndicate/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/item/card/id/syndicate/ui_state(mob/user) + return GLOB.default_state + +/obj/item/card/id/syndicate/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "AgentCard", name, 425, 500, master_ui, state) + ui = new(user, src, "AgentCard", name) ui.open() /obj/item/card/id/syndicate/attack_self(mob/user) diff --git a/modular_ss220/bureaucracy/code/photocopier.dm b/modular_ss220/bureaucracy/code/photocopier.dm index 21e1c12a9244..d031d9efaadf 100644 --- a/modular_ss220/bureaucracy/code/photocopier.dm +++ b/modular_ss220/bureaucracy/code/photocopier.dm @@ -51,10 +51,13 @@ if("copies") copies = clamp(text2num(params["new"]), 0, maxcopies) -/obj/machinery/photocopier/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/photocopier/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/photocopier/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Photocopier220", "Ксерокс", 550, 635, master_ui, state) + ui = new(user, src, "Photocopier220", "Ксерокс") ui.open() /obj/machinery/photocopier/ui_data(mob/user) diff --git a/modular_ss220/camera_nanomap/code/camera.dm b/modular_ss220/camera_nanomap/code/camera.dm index ef291d602cd9..c5bcfba5892a 100644 --- a/modular_ss220/camera_nanomap/code/camera.dm +++ b/modular_ss220/camera_nanomap/code/camera.dm @@ -1,6 +1,6 @@ -/obj/machinery/computer/security/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) +/obj/machinery/computer/security/ui_interact(mob/user, datum/tgui/ui = null) // Update UI - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + ui = SStgui.try_update_ui(user, src, ui) // Show static if can't use the camera if(!active_camera?.can_use()) show_camera_static() @@ -22,9 +22,14 @@ user.client.register_map_obj(plane) user.client.register_map_obj(cam_background) // Open UI - ui = new(user, src, ui_key, "CameraConsole220", name, 1170, 755, master_ui, state) + ui = new(user, src, "CameraConsole220", name) ui.open() +/obj/machinery/computer/security/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/simple/nanomaps) + ) + /obj/machinery/computer/security/ui_data() var/list/data = list() data["network"] = network diff --git a/modular_ss220/emotes/code/emote_panel.dm b/modular_ss220/emotes/code/emote_panel.dm index d8b8cdd6ac8a..db2581cadcff 100644 --- a/modular_ss220/emotes/code/emote_panel.dm +++ b/modular_ss220/emotes/code/emote_panel.dm @@ -45,10 +45,13 @@ emote_param = input(usr, "Дополните эмоцию", emote.message_param) usr.emote(emote_key, message = emote_param, intentional = TRUE) -/datum/emote_panel/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) +/datum/emote_panel/ui_state(mob/user) + return GLOB.always_state + +/datum/emote_panel/ui_interact(mob/user, datum/tgui/ui = null) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "EmotePanel", "Панель эмоций", 500, 550, master_ui, state) + ui = new(user, src, "EmotePanel", "Панель эмоций") ui.open() ui.set_autoupdate(FALSE) diff --git a/modular_ss220/food/code/drinks.dm b/modular_ss220/food/code/drinks.dm index 0870adb09077..c2d18d1ea0ba 100644 --- a/modular_ss220/food/code/drinks.dm +++ b/modular_ss220/food/code/drinks.dm @@ -1,4 +1,4 @@ -/obj/item/reagent_containers/food/drinks/drinkingglass/on_reagent_change() +/obj/item/reagent_containers/drinks/drinkingglass/on_reagent_change() . = ..() if(!reagents.reagent_list.len) icon = initial(icon) diff --git a/modular_ss220/food/code/food/food.dm b/modular_ss220/food/code/food/food.dm index e40085abf197..1da4637c060d 100644 --- a/modular_ss220/food/code/food/food.dm +++ b/modular_ss220/food/code/food/food.dm @@ -1,25 +1,25 @@ // Reagent Grinder /obj/machinery/reagentgrinder/Initialize(mapload) . = ..() - blend_items = list(/obj/item/reagent_containers/food/snacks/grown/buckwheat = list("buckwheat" = -5)) + blend_items + blend_items = list(/obj/item/food/snacks/grown/buckwheat = list("buckwheat" = -5)) + blend_items // Vending /obj/machinery/economy/vending/dinnerware/Initialize(mapload) products += list( - /obj/item/reagent_containers/food/condiment/herbs = 2,) + /obj/item/reagent_containers/condiment/herbs = 2,) . = ..() /obj/machinery/economy/vending/snack/Initialize(mapload) products += list( - /obj/item/reagent_containers/food/snacks/doshik = 6, - /obj/item/reagent_containers/food/snacks/doshik_spicy = 6,) + /obj/item/food/snacks/doshik = 6, + /obj/item/food/snacks/doshik_spicy = 6,) prices += list( - /obj/item/reagent_containers/food/snacks/doshik = 100, - /obj/item/reagent_containers/food/snacks/doshik_spicy = 120,) + /obj/item/food/snacks/doshik = 100, + /obj/item/food/snacks/doshik_spicy = 120,) . = ..() // Boiled Buckwheat -/obj/item/reagent_containers/food/snacks/boiledbuckwheat +/obj/item/food/snacks/boiledbuckwheat name = "варёная гречка" desc = "Это просто варёная гречка, ничего необычного." icon = 'modular_ss220/food/icons/food.dmi' @@ -31,10 +31,10 @@ /datum/recipe/microwave/boiledbuckwheat reagents = list("water" = 5, "buckwheat" = 10) - result = /obj/item/reagent_containers/food/snacks/boiledbuckwheat + result = /obj/item/food/snacks/boiledbuckwheat // Merchant Buckwheat -/obj/item/reagent_containers/food/snacks/buckwheat_merchant +/obj/item/food/snacks/buckwheat_merchant name = "гречка по-купечески" desc = "Тушёная гречка с овощами и мясом." icon = 'modular_ss220/food/icons/food.dmi' @@ -47,13 +47,13 @@ /datum/recipe/microwave/buckwheat_merchant reagents = list("water" = 5, "buckwheat" = 10) items = list( - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/meat) - result = /obj/item/reagent_containers/food/snacks/buckwheat_merchant + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/meat) + result = /obj/item/food/snacks/buckwheat_merchant // Olivier Salad -/obj/item/reagent_containers/food/snacks/oliviersalad +/obj/item/food/snacks/oliviersalad name = "салат оливье" desc = "Не трогай, это на новый год!" icon = 'modular_ss220/food/icons/food.dmi' @@ -67,15 +67,15 @@ /datum/recipe/microwave/oliviersalad reagents = list("cream" = 10, "sodiumchloride" = 5) items = list( - /obj/item/reagent_containers/food/snacks/pickles, - /obj/item/reagent_containers/food/snacks/boiledegg, - /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/sausage) - result = /obj/item/reagent_containers/food/snacks/oliviersalad + /obj/item/food/snacks/pickles, + /obj/item/food/snacks/boiledegg, + /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/sausage) + result = /obj/item/food/snacks/oliviersalad // Weird Olivier Salad -/obj/item/reagent_containers/food/snacks/weirdoliviersalad +/obj/item/food/snacks/weirdoliviersalad name = "странный салат оливье" desc = "Что ты сделал с этим оливье, чудовище?" icon = 'modular_ss220/food/icons/food.dmi' @@ -89,16 +89,16 @@ /datum/recipe/microwave/weirdoliviersalad reagents = list("cream" = 10, "sodiumchloride" = 5) items = list( - /obj/item/reagent_containers/food/snacks/pickles, - /obj/item/reagent_containers/food/snacks/boiledegg, - /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/sausage, - /obj/item/reagent_containers/food/snacks/grown/apple) - result = /obj/item/reagent_containers/food/snacks/weirdoliviersalad + /obj/item/food/snacks/pickles, + /obj/item/food/snacks/boiledegg, + /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/sausage, + /obj/item/food/snacks/grown/apple) + result = /obj/item/food/snacks/weirdoliviersalad // Vegetable Salad -/obj/item/reagent_containers/food/snacks/vegisalad +/obj/item/food/snacks/vegisalad name = "овощной салат" desc = "Идеальная комбинация томатов и огурцов." icon = 'modular_ss220/food/icons/food.dmi' @@ -112,23 +112,23 @@ /datum/recipe/microwave/vegisalad reagents = list("cream" = 10, "sodiumchloride" = 5) items = list( - /obj/item/reagent_containers/food/snacks/grown/cucumber, - /obj/item/reagent_containers/food/snacks/grown/tomato) - result = /obj/item/reagent_containers/food/snacks/vegisalad + /obj/item/food/snacks/grown/cucumber, + /obj/item/food/snacks/grown/tomato) + result = /obj/item/food/snacks/vegisalad // Pickles -/obj/item/reagent_containers/food/snacks/pickles +/obj/item/food/snacks/pickles name = "маринованные огурцы" desc = "Черт, тут много маринованных огурчиков." icon = 'modular_ss220/food/icons/food.dmi' icon_state = "pickles" - trash = /obj/item/reagent_containers/food/snacks/brine + trash = /obj/item/food/snacks/brine filling_color = "#C2CFAB" bitesize = 8 list_reagents = list("nutriment" = 2, "vitamin" = 1) tastes = list("маринованые огурцы" = 1) -/obj/item/reagent_containers/food/snacks/brine +/obj/item/food/snacks/brine name = "рассол" desc = "Самое то после бурной ночи." consume_sound = 'sound/items/drink.ogg' @@ -141,9 +141,9 @@ /datum/crafting_recipe/pickles name = "Маринованные огурцы" - result = list(/obj/item/reagent_containers/food/snacks/pickles) + result = list(/obj/item/food/snacks/pickles) reqs = list( - /obj/item/reagent_containers/food/snacks/grown/cucumber = 3, + /obj/item/food/snacks/grown/cucumber = 3, /datum/reagent/water = 10, /datum/reagent/consumable/sodiumchloride = 10) time = 1 SECONDS @@ -151,7 +151,7 @@ subcategory = CAT_MISCFOOD // Pickle Soup -/obj/item/reagent_containers/food/snacks/soup/rassolnik +/obj/item/food/snacks/soup/rassolnik name = "рассольник" desc = "Популярен в СССП." icon = 'modular_ss220/food/icons/food.dmi' @@ -163,12 +163,12 @@ /datum/recipe/microwave/rassolnik reagents = list("water" = 10, "rice" = 5) items = list( - /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/grown/cucumber) - result = /obj/item/reagent_containers/food/snacks/soup/rassolnik + /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/grown/cucumber) + result = /obj/item/food/snacks/soup/rassolnik // Doner -/obj/item/reagent_containers/food/snacks/shawarma +/obj/item/food/snacks/shawarma name = "шаурма" desc = "Великолепное сочетание мяса с гриля и свежих овощей. Не спрашивайте о мясе." icon = 'modular_ss220/food/icons/food.dmi' @@ -180,17 +180,17 @@ /datum/recipe/microwave/shawarma reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/meatsteak, - /obj/item/reagent_containers/food/snacks/meatsteak, - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/onion_slice, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/sliceable/flatdough) - result = /obj/item/reagent_containers/food/snacks/shawarma + /obj/item/food/snacks/meatsteak, + /obj/item/food/snacks/meatsteak, + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/onion_slice, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/sliceable/flatdough) + result = /obj/item/food/snacks/shawarma // Doner - Cheese -/obj/item/reagent_containers/food/snacks/doner_cheese +/obj/item/food/snacks/doner_cheese name = "сырная шаурма" desc = "Фирменное блюдо от шеф-повара - мясо с гриля и свежие овощи с теплым сырным соусом. Вкусно!" icon = 'modular_ss220/food/icons/food.dmi' @@ -202,17 +202,17 @@ /datum/recipe/microwave/doner_cheese reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/meatsteak, - /obj/item/reagent_containers/food/snacks/meatsteak, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/sliceable/flatdough) - result = /obj/item/reagent_containers/food/snacks/doner_cheese + /obj/item/food/snacks/meatsteak, + /obj/item/food/snacks/meatsteak, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/sliceable/flatdough) + result = /obj/item/food/snacks/doner_cheese // Doner - Mushroom -/obj/item/reagent_containers/food/snacks/doner_mushroom +/obj/item/food/snacks/doner_mushroom name = "шаурма с грибами" desc = "Мясо с гриля, свежие овощи и грибы. Грибы немного вытеснили мясо, но всё так же вкусно!" icon = 'modular_ss220/food/icons/food.dmi' @@ -224,19 +224,19 @@ /datum/recipe/microwave/doner_mushroom reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/meatsteak, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/onion_slice, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/sliceable/flatdough) - result = /obj/item/reagent_containers/food/snacks/doner_mushroom + /obj/item/food/snacks/meatsteak, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/onion_slice, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/sliceable/flatdough) + result = /obj/item/food/snacks/doner_mushroom // Doner - Vegetable -/obj/item/reagent_containers/food/snacks/doner_vegan +/obj/item/food/snacks/doner_vegan name = "овощная шаурма" desc = "Свежие овощи, завернутые в длинный рулет. Мясо в комплект не входит!" icon = 'modular_ss220/food/icons/food.dmi' @@ -248,30 +248,30 @@ /datum/recipe/microwave/doner_vegan reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/onion_slice, - /obj/item/reagent_containers/food/snacks/onion_slice, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/sliceable/flatdough) - result = /obj/item/reagent_containers/food/snacks/doner_vegan + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/onion_slice, + /obj/item/food/snacks/onion_slice, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/sliceable/flatdough) + result = /obj/item/food/snacks/doner_vegan // Slime Pie -/obj/item/reagent_containers/food/snacks/sliceable/slimepie +/obj/item/food/snacks/sliceable/slimepie name = "слаймовый пирог" desc = "Блюрп блоб блуп блеп блоп. Можно нарезать." icon = 'modular_ss220/food/icons/food.dmi' icon_state = "slimepie" - slice_path = /obj/item/reagent_containers/food/snacks/slimepieslice + slice_path = /obj/item/food/snacks/slimepieslice slices_num = 5 bitesize = 3 filling_color = "#00d9ff" list_reagents = list("nutriment" = 12, "vitamin" = 4) tastes = list("слизь" = 5, "сладость" = 1, "желе" = 1) -/obj/item/reagent_containers/food/snacks/slimepieslice +/obj/item/food/snacks/slimepieslice name = "кусочек слаймового пирога" desc = "Блюрп блоб блуп блеп блоп." icon = 'modular_ss220/food/icons/food.dmi' @@ -283,10 +283,10 @@ /datum/recipe/oven/slimepie reagents = list("custard" = 1, "milk" = 5, "sugar" = 15) items = list(/obj/item/organ/internal/heart/slime) - result = /obj/item/reagent_containers/food/snacks/sliceable/slimepie + result = /obj/item/food/snacks/sliceable/slimepie // Kidan Ragu -/obj/item/reagent_containers/food/snacks/kidanragu +/obj/item/food/snacks/kidanragu name = "острое хитиновое рагу" desc = "Рагу из очень жесткого хитинового мяса и тушеных овощей." icon = 'modular_ss220/food/icons/food.dmi' @@ -298,25 +298,25 @@ reagents = list("water" = 10, "sodiumchloride" = 1) items = list( /obj/item/organ/internal/heart/kidan, - /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/grown/potato, - /obj/item/reagent_containers/food/snacks/grown/carrot, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/chili) - result = /obj/item/reagent_containers/food/snacks/kidanragu + /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/grown/potato, + /obj/item/food/snacks/grown/carrot, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/chili) + result = /obj/item/food/snacks/kidanragu // Fried Unathi Meat -/obj/item/reagent_containers/food/snacks/sliceable/lizard +/obj/item/food/snacks/sliceable/lizard name = "жареное мясо унатха" desc = "Сочный стейк из мяса крупной ящерицы, вызывающий желание полежать на теплых камнях. Можно нарезать." icon = 'modular_ss220/food/icons/food.dmi' icon_state = "lizard_steak" - slice_path = /obj/item/reagent_containers/food/snacks/lizardslice + slice_path = /obj/item/food/snacks/lizardslice slices_num = 5 list_reagents = list("protein" = 20, "nutriment" = 10, "vitamin" = 5) tastes = list("мясо ящерицы" = 4, "курятина" = 2) -/obj/item/reagent_containers/food/snacks/lizardslice +/obj/item/food/snacks/lizardslice name = "стейк из унатха" desc = "Порция мяса унатхи." icon = 'modular_ss220/food/icons/food.dmi' @@ -327,7 +327,7 @@ /datum/deepfryer_special/unathi input = /obj/item/organ/external - output = /obj/item/reagent_containers/food/snacks/sliceable/lizard + output = /obj/item/food/snacks/sliceable/lizard /datum/deepfryer_special/unathi/validate(obj/item/I) if(!..()) @@ -336,7 +336,7 @@ return istype(E.dna.species, /datum/species/unathi) // Tajaroni -/obj/item/reagent_containers/food/snacks/tajaroni +/obj/item/food/snacks/tajaroni name = "таярони" desc = "Острая вяленая колбаса с перцем и... Оно только что мяукнуло?" icon = 'modular_ss220/food/icons/food.dmi' @@ -346,7 +346,7 @@ /datum/deepfryer_special/tajaroni input = /obj/item/organ/external - output = /obj/item/reagent_containers/food/snacks/tajaroni + output = /obj/item/food/snacks/tajaroni /datum/deepfryer_special/tajaroni/validate(obj/item/I) if(!..()) @@ -355,7 +355,7 @@ return istype(E.dna.species, /datum/species/tajaran) // Vulpixes -/obj/item/reagent_containers/food/snacks/vulpix +/obj/item/food/snacks/vulpix name = "вульпиксы" desc = "Аппетитно выглядящие мясные шарики в тесте... Главное - не думать о том, из кого они сделаны!" icon = 'modular_ss220/food/icons/food.dmi' @@ -366,13 +366,13 @@ /datum/recipe/oven/vuplix reagents = list("blackpepper" = 1, "sodiumchloride" = 1, "herbsmix" = 1, "tomato_sauce" = 1, "cream" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/meat, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/meat, /obj/item/organ/internal/liver/vulpkanin) - result = /obj/item/reagent_containers/food/snacks/vulpix + result = /obj/item/food/snacks/vulpix // Cheese Vulpixes -/obj/item/reagent_containers/food/snacks/vulpix/cheese +/obj/item/food/snacks/vulpix/cheese name = "сырные вульпиксы" desc = "Аппетитно выглядящие мясные шарики в тесте с начинкой из сыра... Главное - не думать о том, из кого они сделаны!" icon = 'modular_ss220/food/icons/food.dmi' @@ -383,14 +383,14 @@ /datum/recipe/oven/vulpixcheese reagents = list("blackpepper" = 1, "sodiumchloride" = 1, "herbsmix" = 1, "cheese_sauce" = 1, "cream" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/meat, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/meat, /obj/item/organ/internal/liver/vulpkanin, - /obj/item/reagent_containers/food/snacks/cheesewedge) - result = /obj/item/reagent_containers/food/snacks/vulpix/cheese + /obj/item/food/snacks/cheesewedge) + result = /obj/item/food/snacks/vulpix/cheese // Bacon Vulpixes -/obj/item/reagent_containers/food/snacks/vulpix/bacon +/obj/item/food/snacks/vulpix/bacon name = "вульпиксы с беконом" desc = "Аппетитно выглядящие мясные шарики в тесте с начинкой... Главное - не думать о том, из кого они сделаны!" icon = 'modular_ss220/food/icons/food.dmi' @@ -401,15 +401,15 @@ /datum/recipe/oven/vulpixbacon reagents = list("blackpepper" = 1, "sodiumchloride" = 1, "herbsmix" = 1, "mushroom_sauce" = 1, "cream" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/meat, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/meat, /obj/item/organ/internal/liver/vulpkanin, - /obj/item/reagent_containers/food/snacks/raw_bacon, - /obj/item/reagent_containers/food/snacks/grown/mushroom) - result = /obj/item/reagent_containers/food/snacks/vulpix/bacon + /obj/item/food/snacks/raw_bacon, + /obj/item/food/snacks/grown/mushroom) + result = /obj/item/food/snacks/vulpix/bacon // Chilli Vulpixes -/obj/item/reagent_containers/food/snacks/vulpix/chilli +/obj/item/food/snacks/vulpix/chilli name = "вульпиксы-чилли" desc = "Аппетитно выглядящие мясные шарики в тесте... Главное - не думать о том, из кого они сделаны! Язык обжигает." icon = 'modular_ss220/food/icons/food.dmi' @@ -420,24 +420,24 @@ /datum/recipe/oven/vulpixchilli reagents = list("blackpepper" = 1, "sodiumchloride" = 1, "herbsmix" = 1, "diablo_sauce" = 1, "cream" = 5) items = list( - /obj/item/reagent_containers/food/snacks/dough, - /obj/item/reagent_containers/food/snacks/meat, + /obj/item/food/snacks/dough, + /obj/item/food/snacks/meat, /obj/item/organ/internal/liver/vulpkanin, - /obj/item/reagent_containers/food/snacks/grown/chili) - result = /obj/item/reagent_containers/food/snacks/vulpix/chilli + /obj/item/food/snacks/grown/chili) + result = /obj/item/food/snacks/vulpix/chilli // Seafood Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/seafood +/obj/item/food/snacks/sliceable/pizza/seafood name = "пицца с морепродуктами" desc = "Дары космических озер, сыр и немного кислинки." icon = 'modular_ss220/food/icons/food.dmi' icon_state = "fishpizza" - slice_path = /obj/item/reagent_containers/food/snacks/seapizzaslice + slice_path = /obj/item/food/snacks/seapizzaslice list_reagents = list("nutriment" = 30, "vitamin" = 15, "protein" = 15) filling_color = "#ffe45d" tastes = list("чеснок" = 1, "сыр" = 2, "морепродукты" = 1, "кислинка" = 1) -/obj/item/reagent_containers/food/snacks/seapizzaslice +/obj/item/food/snacks/seapizzaslice name = "кусочек пиццы с морепродуктами" desc = "Аппетитный кусочек пиццы с морепродуктами и сыром..." icon = 'modular_ss220/food/icons/food.dmi' @@ -448,26 +448,26 @@ /datum/recipe/oven/seapizza reagents = list("herbsmix" = 1, "garlic_sauce" = 1) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/salmonmeat, - /obj/item/reagent_containers/food/snacks/salmonmeat, - /obj/item/reagent_containers/food/snacks/boiled_shrimp, - /obj/item/reagent_containers/food/snacks/grown/citrus/lemon) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/seafood + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/salmonmeat, + /obj/item/food/snacks/salmonmeat, + /obj/item/food/snacks/boiled_shrimp, + /obj/item/food/snacks/grown/citrus/lemon) + result = /obj/item/food/snacks/sliceable/pizza/seafood // Bacon Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/bacon +/obj/item/food/snacks/sliceable/pizza/bacon name = "пицца с беконом" desc = "Классическая пицца, один из ингредиентов которой был заменен на жареный бекон." icon = 'modular_ss220/food/icons/food.dmi' icon_state = "baconpizza" - slice_path = /obj/item/reagent_containers/food/snacks/baconpizzaslice + slice_path = /obj/item/food/snacks/baconpizzaslice list_reagents = list("nutriment" = 40, "vitamin" = 5, "protein" = 15) filling_color = "#ffe45d" tastes = list("грибы" = 1, "сыр" = 2, "бекон" = 1) -/obj/item/reagent_containers/food/snacks/baconpizzaslice +/obj/item/food/snacks/baconpizzaslice name = "кусочек пиццы с беконом" desc = "Аппетитный кусок пиццы с беконом и грибами..." icon = 'modular_ss220/food/icons/food.dmi' @@ -478,26 +478,26 @@ /datum/recipe/oven/baconpizza reagents = list("mushroom_sauce" = 1) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/raw_bacon, - /obj/item/reagent_containers/food/snacks/raw_bacon) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/bacon + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/grown/mushroom, + /obj/item/food/snacks/raw_bacon, + /obj/item/food/snacks/raw_bacon) + result = /obj/item/food/snacks/sliceable/pizza/bacon // Pizza Tajaroni -/obj/item/reagent_containers/food/snacks/sliceable/pizza/tajaroni +/obj/item/food/snacks/sliceable/pizza/tajaroni name = "пицца с таярони" desc = "Острые колбаски таярони с сыром и оливками. Что из этого ужаснее, еще предстоит решить." icon = 'modular_ss220/food/icons/food.dmi' icon_state = "tajarpizza" - slice_path = /obj/item/reagent_containers/food/snacks/tajpizzaslice + slice_path = /obj/item/food/snacks/tajpizzaslice list_reagents = list("nutriment" = 30, "vitamin" = 15, "protein" = 15) filling_color = "#ffe45d" tastes = list("томат" = 1, "сыр" = 2, "таярони" = 1, "оливки" = 1) -/obj/item/reagent_containers/food/snacks/tajpizzaslice +/obj/item/food/snacks/tajpizzaslice name = "кусочек пиццы с таярони" desc = "Вкуснейший кусок пиццы с таярони и оливками..." icon = 'modular_ss220/food/icons/food.dmi' @@ -508,25 +508,25 @@ /datum/recipe/oven/tajarpizza reagents = list("herbsmix" = 1, "tomato_sauce" = 1, "blackpepper" = 1) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/tajaroni, - /obj/item/reagent_containers/food/snacks/grown/olive,) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/tajaroni + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/tajaroni, + /obj/item/food/snacks/grown/olive,) + result = /obj/item/food/snacks/sliceable/pizza/tajaroni // Diablo Pizza -/obj/item/reagent_containers/food/snacks/sliceable/pizza/diablo +/obj/item/food/snacks/sliceable/pizza/diablo name = "пицца 'Диабло'" desc = "Невероятно жгучая пицца с кусочками мяса, некоторые утверждают, что она может отправить вас в рэдспейс." icon = 'modular_ss220/food/icons/food.dmi' icon_state = "diablopizza" - slice_path = /obj/item/reagent_containers/food/snacks/diablopizzaslice + slice_path = /obj/item/food/snacks/diablopizzaslice list_reagents = list("nutriment" = 30, "vitamin" = 15, "protein" = 15, "capsaicin" = 15) filling_color = "#ffe45d" tastes = list("остроту" = 1, "сыр" = 2, "мясо" = 1, "специи" = 1) -/obj/item/reagent_containers/food/snacks/diablopizzaslice +/obj/item/food/snacks/diablopizzaslice name = "кусочек пиццы 'Диабло'" desc = "Аппетитный кусок пиццы с соусом 'Диабло' и мясом..." icon = 'modular_ss220/food/icons/food.dmi' @@ -537,16 +537,16 @@ /datum/recipe/oven/diablopizza reagents = list("herbsmix" = 1, "diablo_sauce" = 1) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/chili, - /obj/item/reagent_containers/food/snacks/meatball, - /obj/item/reagent_containers/food/snacks/meatball) - result = /obj/item/reagent_containers/food/snacks/sliceable/pizza/diablo + /obj/item/food/snacks/sliceable/flatdough, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/chili, + /obj/item/food/snacks/meatball, + /obj/item/food/snacks/meatball) + result = /obj/item/food/snacks/sliceable/pizza/diablo // Doshik -/obj/item/reagent_containers/food/snacks/doshik +/obj/item/food/snacks/doshik name = "дошик" desc = "Очень известная лапша быстрого приготовления. При открытии заваривается моментально. Вау." icon = 'modular_ss220/food/icons/food.dmi' @@ -557,7 +557,7 @@ junkiness = 25 tastes = list("курятина" = 1, "лапша" = 1) -/obj/item/reagent_containers/food/snacks/doshik_spicy +/obj/item/food/snacks/doshik_spicy name = "острый дошик" desc = "Очень известная лапша быстрого приготовления. При открытии заваривается моментально. Вау. Кажется, что в ней есть острые специи." icon = 'modular_ss220/food/icons/food.dmi' @@ -575,19 +575,19 @@ desc = "Всё ещё вкусно пахнет." // Chocolate Cake -/obj/item/reagent_containers/food/snacks/sliceable/choccherrycake +/obj/item/food/snacks/sliceable/choccherrycake name = "шоколадно-вишневый торт" desc = "Ещё один торт. Тем не менее." icon = 'modular_ss220/food/icons/food.dmi' icon_state = "choccherrycake" - slice_path = /obj/item/reagent_containers/food/snacks/choccherrycakeslice + slice_path = /obj/item/food/snacks/choccherrycakeslice slices_num = 6 bitesize = 3 filling_color = "#5e1706" tastes = list("вишня" = 5, "сладость" = 1, "шоколад" = 1) list_reagents = list("nutriment" = 12, "sugar" = 4, "coco" = 4) -/obj/item/reagent_containers/food/snacks/choccherrycakeslice +/obj/item/food/snacks/choccherrycakeslice name = "кусочек шоколадно-вишневого торта" desc = "Кусочек очередного торта. Подождите, что?" icon = 'modular_ss220/food/icons/food.dmi' @@ -598,28 +598,28 @@ /datum/recipe/oven/choccherrycake reagents = list("milk" = 5, "flour" = 15) items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/chocolatebar, - /obj/item/reagent_containers/food/snacks/chocolatebar, - /obj/item/reagent_containers/food/snacks/grown/cherries) - result = /obj/item/reagent_containers/food/snacks/sliceable/choccherrycake + /obj/item/food/snacks/egg, + /obj/item/food/snacks/egg, + /obj/item/food/snacks/egg, + /obj/item/food/snacks/chocolatebar, + /obj/item/food/snacks/chocolatebar, + /obj/item/food/snacks/grown/cherries) + result = /obj/item/food/snacks/sliceable/choccherrycake // Noel -/obj/item/reagent_containers/food/snacks/sliceable/noel +/obj/item/food/snacks/sliceable/noel name = "Bûche de Noël" desc = "Что?" icon = 'modular_ss220/food/icons/food.dmi' icon_state = "noel" trash = /obj/item/trash/tray - slice_path = /obj/item/reagent_containers/food/snacks/noelslice + slice_path = /obj/item/food/snacks/noelslice slices_num = 5 filling_color = "#5e1706" tastes = list("шоколад" = 3, "сладость" = 2, "яйца" = 1, "ягоды" = 2) list_reagents = list("nutriment" = 6, "plantmatter" = 2, "coco" = 2, "cream" = 3, "sugar" = 3, "berryjucie" = 3) -/obj/item/reagent_containers/food/snacks/noelslice +/obj/item/food/snacks/noelslice name = "кусочек Noël" desc = "Кусочек чего?" icon = 'modular_ss220/food/icons/food.dmi' @@ -631,16 +631,16 @@ /datum/recipe/oven/noel reagents = list("flour" = 15, "cream" = 10, "milk" = 5) items = list( - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/egg, - /obj/item/reagent_containers/food/snacks/chocolatebar, - /obj/item/reagent_containers/food/snacks/chocolatebar, - /obj/item/reagent_containers/food/snacks/grown/berries, - /obj/item/reagent_containers/food/snacks/grown/berries) - result = /obj/item/reagent_containers/food/snacks/sliceable/noel + /obj/item/food/snacks/egg, + /obj/item/food/snacks/egg, + /obj/item/food/snacks/chocolatebar, + /obj/item/food/snacks/chocolatebar, + /obj/item/food/snacks/grown/berries, + /obj/item/food/snacks/grown/berries) + result = /obj/item/food/snacks/sliceable/noel // Sundae -/obj/item/reagent_containers/food/snacks/sundae +/obj/item/food/snacks/sundae name = "Сандей" desc = "Сливочное удовольствие." icon = 'modular_ss220/food/icons/food.dmi' @@ -653,13 +653,13 @@ /datum/recipe/oven/sundae reagents = list("cream" = 10) items = list( - /obj/item/reagent_containers/food/snacks/grown/cherries, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/doughslice) - result = /obj/item/reagent_containers/food/snacks/sundae + /obj/item/food/snacks/grown/cherries, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/doughslice) + result = /obj/item/food/snacks/sundae // Bun-Bun -/obj/item/reagent_containers/food/snacks/bunbun +/obj/item/food/snacks/bunbun name = "Бун-Бун" desc = "Маленькая хлебная обезьянка, сформованная из двух булочек для гамбургеров." icon = 'modular_ss220/food/icons/food.dmi' @@ -670,12 +670,12 @@ /datum/recipe/oven/bunbun items = list( - /obj/item/reagent_containers/food/snacks/bun, - /obj/item/reagent_containers/food/snacks/bun) - result = /obj/item/reagent_containers/food/snacks/bunbun + /obj/item/food/snacks/bun, + /obj/item/food/snacks/bun) + result = /obj/item/food/snacks/bunbun // Tortilla -/obj/item/reagent_containers/food/snacks/tortilla +/obj/item/food/snacks/tortilla name = "тортилья" desc = "Hasta la vista, baby" icon = 'modular_ss220/food/icons/food.dmi' @@ -688,11 +688,11 @@ /datum/recipe/microwave/tortilla reagents = list("flour" = 10) - items = list(/obj/item/reagent_containers/food/snacks/grown/corn) - result = /obj/item/reagent_containers/food/snacks/tortilla + items = list(/obj/item/food/snacks/grown/corn) + result = /obj/item/food/snacks/tortilla // Nachos -/obj/item/reagent_containers/food/snacks/nachos +/obj/item/food/snacks/nachos name = "начос" desc = "Хола!" icon = 'modular_ss220/food/icons/food.dmi' @@ -705,11 +705,11 @@ /datum/recipe/microwave/nachos reagents = list("sodiumchloride" = 1) - items = list(/obj/item/reagent_containers/food/snacks/tortilla) - result = /obj/item/reagent_containers/food/snacks/nachos + items = list(/obj/item/food/snacks/tortilla) + result = /obj/item/food/snacks/nachos // Cheese Nachos -/obj/item/reagent_containers/food/snacks/cheesenachos +/obj/item/food/snacks/cheesenachos name = "сырные начос" desc = "Сырное хола!" icon = 'modular_ss220/food/icons/food.dmi' @@ -723,12 +723,12 @@ /datum/recipe/microwave/cheesenachos reagents = list("sodiumchloride" = 1) items = list( - /obj/item/reagent_containers/food/snacks/tortilla, - /obj/item/reagent_containers/food/snacks/cheesewedge) - result = /obj/item/reagent_containers/food/snacks/cheesenachos + /obj/item/food/snacks/tortilla, + /obj/item/food/snacks/cheesewedge) + result = /obj/item/food/snacks/cheesenachos // Cuban Nachos -/obj/item/reagent_containers/food/snacks/cubannachos +/obj/item/food/snacks/cubannachos name = "кубинские начос" desc = "Очень острое хола!" icon = 'modular_ss220/food/icons/food.dmi' @@ -741,13 +741,13 @@ /datum/recipe/microwave/cubannachos items = list( - /obj/item/reagent_containers/food/snacks/tortilla, - /obj/item/reagent_containers/food/snacks/grown/chili, - /obj/item/reagent_containers/food/snacks/grown/chili) - result = /obj/item/reagent_containers/food/snacks/cubannachos + /obj/item/food/snacks/tortilla, + /obj/item/food/snacks/grown/chili, + /obj/item/food/snacks/grown/chili) + result = /obj/item/food/snacks/cubannachos // Carne Buritto -/obj/item/reagent_containers/food/snacks/carneburrito +/obj/item/food/snacks/carneburrito name = "Carne de burrito asado" desc = "Как классический буррито, но с мясом." icon = 'modular_ss220/food/icons/food.dmi' @@ -759,14 +759,14 @@ /datum/recipe/microwave/carneburrito items = list( - /obj/item/reagent_containers/food/snacks/tortilla, - /obj/item/reagent_containers/food/snacks/grown/soybeans, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/cutlet) - result = /obj/item/reagent_containers/food/snacks/carneburrito + /obj/item/food/snacks/tortilla, + /obj/item/food/snacks/grown/soybeans, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/cutlet) + result = /obj/item/food/snacks/carneburrito // Cheese Buritto -/obj/item/reagent_containers/food/snacks/cheeseburrito +/obj/item/food/snacks/cheeseburrito name = "сырное буритто" desc = "Нужно ли здесь что-то говорить?" icon = 'modular_ss220/food/icons/food.dmi' @@ -778,13 +778,13 @@ /datum/recipe/microwave/cheeseburrito items = list( - /obj/item/reagent_containers/food/snacks/tortilla, - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge) - result = /obj/item/reagent_containers/food/snacks/cheeseburrito + /obj/item/food/snacks/tortilla, + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge) + result = /obj/item/food/snacks/cheeseburrito // Plasma Buritto -/obj/item/reagent_containers/food/snacks/plasmaburrito +/obj/item/food/snacks/plasmaburrito name = "Fuego Plasma Burrito" desc = "Очень острое, амигос." icon = 'modular_ss220/food/icons/food.dmi' @@ -796,14 +796,14 @@ /datum/recipe/microwave/plasmaburrito items = list( - /obj/item/reagent_containers/food/snacks/tortilla, - /obj/item/reagent_containers/food/snacks/grown/soybeans, - /obj/item/reagent_containers/food/snacks/grown/chili, - /obj/item/reagent_containers/food/snacks/grown/chili) - result = /obj/item/reagent_containers/food/snacks/plasmaburrito + /obj/item/food/snacks/tortilla, + /obj/item/food/snacks/grown/soybeans, + /obj/item/food/snacks/grown/chili, + /obj/item/food/snacks/grown/chili) + result = /obj/item/food/snacks/plasmaburrito // Pelmeni -/obj/item/reagent_containers/food/snacks/pelmeni +/obj/item/food/snacks/pelmeni name = "пельмени" desc = "Мясо завёрнутое в тесто." icon = 'modular_ss220/food/icons/food.dmi' @@ -813,16 +813,16 @@ bitesize = 2 tastes = list("сырое мясо" = 1, "сырое тесто" = 1) -/obj/item/reagent_containers/food/snacks/doughslice/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers/food/snacks/rawcutlet)) - new /obj/item/reagent_containers/food/snacks/pelmeni(src) +/obj/item/food/snacks/doughslice/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/food/snacks/rawcutlet)) + new /obj/item/food/snacks/pelmeni(src) to_chat(user, "Вы сделали немного пельменей.") qdel(src) qdel(I) else ..() -/obj/item/reagent_containers/food/snacks/boiledpelmeni +/obj/item/food/snacks/boiledpelmeni name = "варёные пельмени" desc = "Мы не знаем, какой была Сибирь, но эти вкусные пельмени определенно прибыли оттуда." icon = 'modular_ss220/food/icons/food.dmi' @@ -835,11 +835,11 @@ /datum/recipe/microwave/pelmeni reagents = list("water" = 5) - items = list(/obj/item/reagent_containers/food/snacks/pelmeni) - result = /obj/item/reagent_containers/food/snacks/boiledpelmeni + items = list(/obj/item/food/snacks/pelmeni) + result = /obj/item/food/snacks/boiledpelmeni // Smoked Sausage -/obj/item/reagent_containers/food/snacks/smokedsausage +/obj/item/food/snacks/smokedsausage name = "копчёная колбаска" desc = "Кусок копченой колбасы. Под пивко пойдёт." icon = 'modular_ss220/food/icons/food.dmi' @@ -849,21 +849,21 @@ /datum/recipe/oven/smokedsausage reagents = list("sodiumchloride" = 5, "blackpepper" = 5) - items = list(/obj/item/reagent_containers/food/snacks/sausage) - result = /obj/item/reagent_containers/food/snacks/smokedsausage + items = list(/obj/item/food/snacks/sausage) + result = /obj/item/food/snacks/smokedsausage // Salami -/obj/item/reagent_containers/food/snacks/sliceable/salami +/obj/item/food/snacks/sliceable/salami name = "салями" desc = "Не лучший выбор для сэндвича." icon = 'modular_ss220/food/icons/food.dmi' icon_state = "salami" - slice_path = /obj/item/reagent_containers/food/snacks/slice/salami + slice_path = /obj/item/food/snacks/slice/salami slices_num = 6 list_reagents = list("protein" = 12) tastes = list("мясо" = 3, "чеснок" = 1) -/obj/item/reagent_containers/food/snacks/slice/salami +/obj/item/food/snacks/slice/salami name = "ломтик салями" desc = "Лучший выбор для сэндвича." icon = 'modular_ss220/food/icons/food.dmi' @@ -872,11 +872,11 @@ /datum/recipe/oven/salami reagents = list("garlic_sauce" = 5) - items = list(/obj/item/reagent_containers/food/snacks/smokedsausage) - result = /obj/item/reagent_containers/food/snacks/sliceable/salami + items = list(/obj/item/food/snacks/smokedsausage) + result = /obj/item/food/snacks/sliceable/salami // Fruit Cup -/obj/item/reagent_containers/food/snacks/fruitcup +/obj/item/food/snacks/fruitcup name = "фруктовая кружка" desc = "Фруктовый салат со съедобной кружкой." icon = 'modular_ss220/food/icons/food.dmi' @@ -888,16 +888,16 @@ /datum/recipe/microwave/fruitcup items = list( - /obj/item/reagent_containers/food/snacks/grown/apple, - /obj/item/reagent_containers/food/snacks/grown/citrus/orange, - /obj/item/reagent_containers/food/snacks/grown/ambrosia, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/citrus/lemon, - /obj/item/reagent_containers/food/snacks/grown/watermelon) - result = /obj/item/reagent_containers/food/snacks/fruitcup + /obj/item/food/snacks/grown/apple, + /obj/item/food/snacks/grown/citrus/orange, + /obj/item/food/snacks/grown/ambrosia, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/citrus/lemon, + /obj/item/food/snacks/grown/watermelon) + result = /obj/item/food/snacks/fruitcup // Jungle Salad -/obj/item/reagent_containers/food/snacks/junglesalad +/obj/item/food/snacks/junglesalad name = "салат 'Джунгли'" desc = "Из глубин джунглей." icon = 'modular_ss220/food/icons/food.dmi' @@ -908,14 +908,14 @@ /datum/recipe/microwave/junglesalad items = list( - /obj/item/reagent_containers/food/snacks/grown/apple, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/watermelon) - result = /obj/item/reagent_containers/food/snacks/junglesalad + /obj/item/food/snacks/grown/apple, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/banana, + /obj/item/food/snacks/grown/watermelon) + result = /obj/item/food/snacks/junglesalad // Delight Salad -/obj/item/reagent_containers/food/snacks/delightsalad +/obj/item/food/snacks/delightsalad name = "cалат 'Восторг'" desc = "Настоящий цитрусовый восторг." icon = 'modular_ss220/food/icons/food.dmi' @@ -928,13 +928,13 @@ /datum/recipe/microwave/delightsalad items = list( - /obj/item/reagent_containers/food/snacks/grown/citrus/lemon, - /obj/item/reagent_containers/food/snacks/grown/citrus/orange, - /obj/item/reagent_containers/food/snacks/grown/citrus/lime) - result = /obj/item/reagent_containers/food/snacks/delightsalad + /obj/item/food/snacks/grown/citrus/lemon, + /obj/item/food/snacks/grown/citrus/orange, + /obj/item/food/snacks/grown/citrus/lime) + result = /obj/item/food/snacks/delightsalad // Chowmein -/obj/item/reagent_containers/food/snacks/chowmein +/obj/item/food/snacks/chowmein name = "чау-мейн" desc = "Nihao!" icon = 'modular_ss220/food/icons/food.dmi' @@ -946,14 +946,14 @@ /datum/recipe/microwave/chowmein items = list( - /obj/item/reagent_containers/food/snacks/boiledspaghetti, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/grown/cabbage, - /obj/item/reagent_containers/food/snacks/grown/carrot) - result = /obj/item/reagent_containers/food/snacks/chowmein + /obj/item/food/snacks/boiledspaghetti, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/grown/cabbage, + /obj/item/food/snacks/grown/carrot) + result = /obj/item/food/snacks/chowmein // Beef Noodles -/obj/item/reagent_containers/food/snacks/beefnoodles +/obj/item/food/snacks/beefnoodles name = "лапша с говядиной" desc = "Так просто и так вкусно!" icon = 'modular_ss220/food/icons/food.dmi' @@ -965,14 +965,14 @@ /datum/recipe/microwave/beefnoodles items = list( - /obj/item/reagent_containers/food/snacks/boiledspaghetti, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/cutlet, - /obj/item/reagent_containers/food/snacks/grown/cabbage) - result = /obj/item/reagent_containers/food/snacks/beefnoodles + /obj/item/food/snacks/boiledspaghetti, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/cutlet, + /obj/item/food/snacks/grown/cabbage) + result = /obj/item/food/snacks/beefnoodles // Father's Soup -/obj/item/reagent_containers/food/snacks/fathersoup +/obj/item/food/snacks/fathersoup name = "батин суп" desc = "Адовое блюдо, усреднённый рецепт ибо вариаций масса. Ух бля." icon = 'modular_ss220/food/icons/food.dmi' @@ -986,15 +986,15 @@ /datum/recipe/oven/fathersoup reagents = list("flour" = 10, "blackpepper" = 5) items = list( - /obj/item/reagent_containers/food/snacks/soup/tomatosoup, - /obj/item/reagent_containers/food/snacks/grown/garlic, - /obj/item/reagent_containers/food/snacks/grown/onion, - /obj/item/reagent_containers/food/snacks/grown/ghost_chili, - /obj/item/reagent_containers/food/snacks/grown/ghost_chili, - /obj/item/reagent_containers/food/snacks/grown/tomato) - result = /obj/item/reagent_containers/food/snacks/fathersoup - -/obj/item/reagent_containers/food/snacks/fathersoup/On_Consume(mob/M, mob/user) + /obj/item/food/snacks/soup/tomatosoup, + /obj/item/food/snacks/grown/garlic, + /obj/item/food/snacks/grown/onion, + /obj/item/food/snacks/grown/ghost_chili, + /obj/item/food/snacks/grown/ghost_chili, + /obj/item/food/snacks/grown/tomato) + result = /obj/item/food/snacks/fathersoup + +/obj/item/food/snacks/fathersoup/On_Consume(mob/M, mob/user) . = ..() user.visible_message("У [M] на лбу аж пот выступает.") if(prob(33)) @@ -1020,11 +1020,11 @@ /obj/item/pizzabox/infinite/attack_self(mob/living/user) QDEL_NULL(pizza) if(ishuman(user)) - pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza(src) + pizza = new /obj/item/food/snacks/sliceable/pizza/meatpizza(src) . = ..() // Disk croutons -/obj/item/reagent_containers/food/snacks/disk +/obj/item/food/snacks/disk name = "диск с сухариками" desc = "Вкуснейшие сухарики с запахом дымка!" icon = 'modular_ss220/food/icons/food.dmi' diff --git a/modular_ss220/food/code/food/ingredients.dm b/modular_ss220/food/code/food/ingredients.dm index 5b42bc0a0602..f3da626f4da3 100644 --- a/modular_ss220/food/code/food/ingredients.dm +++ b/modular_ss220/food/code/food/ingredients.dm @@ -71,7 +71,7 @@ taste_description = "сухая приправа" // Slices -/obj/item/reagent_containers/food/snacks/cucumberslice +/obj/item/food/snacks/cucumberslice name = "ломтик огурца" desc = "Нарезанный огурец, неожиданно, правда?" icon = 'modular_ss220/food/icons/food.dmi' @@ -82,7 +82,7 @@ tastes = list("cucumber" = 1) // Tomato Sauce -/obj/item/reagent_containers/food/condiment/tomato_sauce +/obj/item/reagent_containers/condiment/tomato_sauce name = "томатный соус" desc = "Отец всех соусов. Помидоры, немного специй и ничего лишнего." icon = 'modular_ss220/food/icons/containers.dmi' @@ -93,12 +93,12 @@ /datum/recipe/microwave/tomato_sauce reagents = list("water" = 15, "sodiumchloride" = 1, "blackpepper" = 1, "herbsmix" = 1) items = list( - /obj/item/reagent_containers/food/snacks/grown/garlic, - /obj/item/reagent_containers/food/snacks/grown/tomato) - result = /obj/item/reagent_containers/food/condiment/tomato_sauce + /obj/item/food/snacks/grown/garlic, + /obj/item/food/snacks/grown/tomato) + result = /obj/item/reagent_containers/condiment/tomato_sauce // Diablo Sauce -/obj/item/reagent_containers/food/condiment/diablo_sauce +/obj/item/reagent_containers/condiment/diablo_sauce name = "соус 'Диабло'" desc = "Старинный жгучий соус, рецепт которого практически не изменился с момента его создания." icon = 'modular_ss220/food/icons/containers.dmi' @@ -109,12 +109,12 @@ /datum/recipe/microwave/diablo_sauce reagents = list("water" = 15, "sodiumchloride" = 1, "blackpepper" = 2, "herbsmix" = 1) items = list( - /obj/item/reagent_containers/food/snacks/grown/tomato, - /obj/item/reagent_containers/food/snacks/grown/chili) - result = /obj/item/reagent_containers/food/condiment/diablo_sauce + /obj/item/food/snacks/grown/tomato, + /obj/item/food/snacks/grown/chili) + result = /obj/item/reagent_containers/condiment/diablo_sauce // Cheese Sauce -/obj/item/reagent_containers/food/condiment/cheese_sauce +/obj/item/reagent_containers/condiment/cheese_sauce name = "сырный соус" desc = "Сыр, сливки и молоко... максимальная концентрация белка!" icon = 'modular_ss220/food/icons/containers.dmi' @@ -125,12 +125,12 @@ /datum/recipe/microwave/cheese_sauce reagents = list("milk" = 15, "cream" = 5) items = list( - /obj/item/reagent_containers/food/snacks/cheesewedge, - /obj/item/reagent_containers/food/snacks/cheesewedge) - result = /obj/item/reagent_containers/food/condiment/cheese_sauce + /obj/item/food/snacks/cheesewedge, + /obj/item/food/snacks/cheesewedge) + result = /obj/item/reagent_containers/condiment/cheese_sauce // Mushroom Sauce -/obj/item/reagent_containers/food/condiment/mushroom_sauce +/obj/item/reagent_containers/condiment/mushroom_sauce name = "грибной соус" desc = "Сливочный соус с грибами, имеет довольно резкий запах." icon = 'modular_ss220/food/icons/containers.dmi' @@ -141,12 +141,12 @@ /datum/recipe/microwave/mushroom_sauce reagents = list("milk" = 15, "cream" = 5, "sodiumchloride" = 1,) items = list( - /obj/item/reagent_containers/food/snacks/grown/onion, - /obj/item/reagent_containers/food/snacks/grown/mushroom) - result = /obj/item/reagent_containers/food/condiment/mushroom_sauce + /obj/item/food/snacks/grown/onion, + /obj/item/food/snacks/grown/mushroom) + result = /obj/item/reagent_containers/condiment/mushroom_sauce // Garlic Sauce -/obj/item/reagent_containers/food/condiment/garlic_sauce +/obj/item/reagent_containers/condiment/garlic_sauce name = "чесночный соус" desc = "Сильный соус с чесноком, его запах бьет в нос. Некоторые члены экипажа, вероятно, будут шипеть на вас и уходить." icon = 'modular_ss220/food/icons/containers.dmi' @@ -157,12 +157,12 @@ /datum/recipe/microwave/garlic_sauce reagents = list("water" = 15, "sodiumchloride" = 1, "herbsmix" = 1) items = list( - /obj/item/reagent_containers/food/snacks/grown/garlic, - /obj/item/reagent_containers/food/snacks/grown/cucumber) - result = /obj/item/reagent_containers/food/condiment/garlic_sauce + /obj/item/food/snacks/grown/garlic, + /obj/item/food/snacks/grown/cucumber) + result = /obj/item/reagent_containers/condiment/garlic_sauce // Custard -/obj/item/reagent_containers/food/condiment/custard +/obj/item/reagent_containers/condiment/custard name = "заварной крем" desc = "Мягкий и сладкий крем, используемый в кондитерском производстве." icon = 'modular_ss220/food/icons/containers.dmi' @@ -172,11 +172,11 @@ /datum/recipe/microwave/custard reagents = list("sugar" = 10, "milk" = 10, "cream" = 5, "vanilla" = 5) - items = list(/obj/item/reagent_containers/food/snacks/egg) - result = /obj/item/reagent_containers/food/condiment/custard + items = list(/obj/item/food/snacks/egg) + result = /obj/item/reagent_containers/condiment/custard // Herbs -/obj/item/reagent_containers/food/condiment/herbs +/obj/item/reagent_containers/condiment/herbs name = "приправа" desc = "Смесь различных трав. Идеально подходит для пиццы!" icon = 'modular_ss220/food/icons/containers.dmi' diff --git a/modular_ss220/food/code/food/nails.dm b/modular_ss220/food/code/food/nails.dm index a1877457419c..c329c74535af 100644 --- a/modular_ss220/food/code/food/nails.dm +++ b/modular_ss220/food/code/food/nails.dm @@ -4,7 +4,7 @@ icon = 'modular_ss220/food/icons/food.dmi' icon_state = "nails" -/obj/item/reagent_containers/food/snacks/nails +/obj/item/food/snacks/nails name = "жаренные гвозди" desc = "Жаренных гвоздей не хочешь, не?" icon = 'modular_ss220/food/icons/food.dmi' @@ -15,7 +15,7 @@ list_reagents = list("iron" = 8, "nutriment" = 1) tastes = list("гвозди" = 1) -/obj/item/reagent_containers/food/snacks/nails/On_Consume(mob/living/carbon/human/user) +/obj/item/food/snacks/nails/On_Consume(mob/living/carbon/human/user) . = ..() to_chat(user, "Ты чувствуешь адскую боль во рту!") playsound(user.loc, "bonebreak", 60, TRUE) @@ -42,4 +42,4 @@ /datum/deepfryer_special/nails input = /obj/item/nails - output = /obj/item/reagent_containers/food/snacks/nails + output = /obj/item/food/snacks/nails diff --git a/modular_ss220/hydroponics/code/plants.dm b/modular_ss220/hydroponics/code/plants.dm index 0e0e224ad615..de7fef632729 100644 --- a/modular_ss220/hydroponics/code/plants.dm +++ b/modular_ss220/hydroponics/code/plants.dm @@ -17,10 +17,10 @@ species = "buckwheat" icon_dead = "buckwheat-dead" plantname = "Cтебли Гречки" - product = /obj/item/reagent_containers/food/snacks/grown/buckwheat + product = /obj/item/food/snacks/grown/buckwheat mutatelist = list() -/obj/item/reagent_containers/food/snacks/grown/buckwheat +/obj/item/food/snacks/grown/buckwheat seed = /obj/item/seeds/wheat/buckwheat name = "гречка" desc = "Finally, гречка." @@ -40,7 +40,7 @@ icon_state = "seed-cucumber" species = "cucumber" plantname = "Огуречный Куст" - product = /obj/item/reagent_containers/food/snacks/grown/cucumber + product = /obj/item/food/snacks/grown/cucumber lifespan = 40 endurance = 70 potency = 30 @@ -54,14 +54,14 @@ genes = list(/datum/plant_gene/trait/repeated_harvest) reagents_add = list("water" = 0.15, "kelotane" = 0.04, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/cucumber +/obj/item/food/snacks/grown/cucumber seed = /obj/item/seeds/cucumber name = "огурец" desc = "Сила земли!" icon = 'modular_ss220/hydroponics/icons/plants.dmi' icon_state = "cucumber" splat_type = /obj/effect/decal/cleanable/plant_smudge - slice_path = /obj/item/reagent_containers/food/snacks/cucumberslice + slice_path = /obj/item/food/snacks/cucumberslice slices_num = 5 filling_color = "#47FF91" tastes = list("огурец" = 1) @@ -80,7 +80,7 @@ icon_state = "seed-charcolives" species = "charcolives" plantname = "Угливковое Деревце" - product = /obj/item/reagent_containers/food/snacks/grown/olive/charcoal + product = /obj/item/food/snacks/grown/olive/charcoal growing_icon = 'modular_ss220/hydroponics/icons/growing.dmi' icon_grow = "charcolives-grow" icon_dead = "charcolives-dead" @@ -92,7 +92,7 @@ rarity = 30 reagents_add = list("charcoal" = 0.15, "plantmatter" = 0.05) -/obj/item/reagent_containers/food/snacks/grown/olive/charcoal +/obj/item/food/snacks/grown/olive/charcoal seed = /obj/item/seeds/olive/charcoal name = "угливки" desc = "Это... маслины?" diff --git a/modular_ss220/jukebox/code/jukebox.dm b/modular_ss220/jukebox/code/jukebox.dm index 64472e73b5ad..5dbcbf283469 100644 --- a/modular_ss220/jukebox/code/jukebox.dm +++ b/modular_ss220/jukebox/code/jukebox.dm @@ -137,10 +137,13 @@ return ui_interact(user) -/obj/machinery/jukebox/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/jukebox/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/jukebox/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "Jukebox", name, 370, 313, master_ui, state) + ui = new(user, src, "Jukebox", name) ui.open() /obj/machinery/jukebox/ui_data(mob/user) diff --git a/modular_ss220/maps220/_maps220.dme b/modular_ss220/maps220/_maps220.dme index 070df167bf47..943f0900f154 100644 --- a/modular_ss220/maps220/_maps220.dme +++ b/modular_ss220/maps220/_maps220.dme @@ -14,7 +14,6 @@ #include "code/helpers.dm" #include "code/misc.dm" #include "code/mobs.dm" -#include "code/nanomap.dm" #include "code/spawners.dm" #include "code/walls.dm" #include "code/floors.dm" diff --git a/modular_ss220/maps220/code/mobs.dm b/modular_ss220/maps220/code/mobs.dm index 77a7da8613ed..dd72150d3450 100644 --- a/modular_ss220/maps220/code/mobs.dm +++ b/modular_ss220/maps220/code/mobs.dm @@ -954,7 +954,7 @@ retreat_distance = 5 minimum_distance = 5 dodging = TRUE - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat = 2) + butcher_results = list(/obj/item/food/snacks/monstermeat/xenomeat = 2) projectiletype = /obj/item/projectile/bullet/bullsquid projectilesound = 'modular_ss220/aesthetics_sounds/sound/mobs/bullsquid/goo_attack3.ogg' melee_damage_upper = 18 @@ -1006,7 +1006,7 @@ melee_damage_upper = 20 rapid_melee = 2 del_on_death = FALSE - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat = 3) + butcher_results = list(/obj/item/food/snacks/monstermeat/xenomeat = 3) attack_sound = 'sound/weapons/bite.ogg' gold_core_spawnable = HOSTILE_SPAWN minbodytemp = 0 diff --git a/modular_ss220/maps220/code/nanomap.dm b/modular_ss220/maps220/code/nanomap.dm deleted file mode 100644 index 3155115ca62a..000000000000 --- a/modular_ss220/maps220/code/nanomap.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/asset/simple/nanomaps/New() - . = ..() - assets |= list( - "Cyberiad220_nanomap_z1.png" = 'icons/_nanomaps/Cyberiad220_nanomap_z1.png', - "Delta220_nanomap_z1.png" = 'icons/_nanomaps/Delta220_nanomap_z1.png', - "MetaStation220_nanomap_z1.png" = 'icons/_nanomaps/MetaStation220_nanomap_z1.png', - ) diff --git a/modular_ss220/maps220/code/spawners.dm b/modular_ss220/maps220/code/spawners.dm index dd466504e669..505eb06200e7 100644 --- a/modular_ss220/maps220/code/spawners.dm +++ b/modular_ss220/maps220/code/spawners.dm @@ -4,34 +4,34 @@ /obj/effect/spawner/lootdrop/CCfood/desert lootcount = 5 loot = list( - /obj/item/reagent_containers/food/snacks/baguette=10, - /obj/item/reagent_containers/food/snacks/applepie=10, - /obj/item/reagent_containers/food/snacks/bananabreadslice=10, - /obj/item/reagent_containers/food/snacks/bananacakeslice=10, - /obj/item/reagent_containers/food/snacks/carrotcakeslice=10, - /obj/item/reagent_containers/food/snacks/croissant=10, - /obj/item/reagent_containers/food/drinks/cans/cola=10,""=70) + /obj/item/food/snacks/baguette=10, + /obj/item/food/snacks/applepie=10, + /obj/item/food/snacks/bananabreadslice=10, + /obj/item/food/snacks/bananacakeslice=10, + /obj/item/food/snacks/carrotcakeslice=10, + /obj/item/food/snacks/croissant=10, + /obj/item/reagent_containers/drinks/cans/cola=10,""=70) /obj/effect/spawner/lootdrop/CCfood/meat lootcount = 5 loot = list( - /obj/item/reagent_containers/food/snacks/lasagna=10, - /obj/item/reagent_containers/food/snacks/burger/bigbite=10, - /obj/item/reagent_containers/food/snacks/fishandchips=10, - /obj/item/reagent_containers/food/snacks/fishburger=10, - /obj/item/reagent_containers/food/snacks/hotdog=10, - /obj/item/reagent_containers/food/snacks/meatpie=10, - /obj/item/reagent_containers/food/drinks/cans/cola=10,""=70) + /obj/item/food/snacks/lasagna=10, + /obj/item/food/snacks/burger/bigbite=10, + /obj/item/food/snacks/fishandchips=10, + /obj/item/food/snacks/fishburger=10, + /obj/item/food/snacks/hotdog=10, + /obj/item/food/snacks/meatpie=10, + /obj/item/reagent_containers/drinks/cans/cola=10,""=70) /obj/effect/spawner/lootdrop/CCfood/alcohol lootcount = 1 loot = list( - /obj/item/reagent_containers/food/drinks/flask/detflask=10, - /obj/item/reagent_containers/food/drinks/cans/tonic=10, - /obj/item/reagent_containers/food/drinks/cans/thirteenloko=10, - /obj/item/reagent_containers/food/drinks/cans/synthanol=10, - /obj/item/reagent_containers/food/drinks/cans/space_mountain_wind=10, - /obj/item/reagent_containers/food/drinks/cans/lemon_lime=10,""=70) + /obj/item/reagent_containers/drinks/flask/detflask=10, + /obj/item/reagent_containers/drinks/cans/tonic=10, + /obj/item/reagent_containers/drinks/cans/thirteenloko=10, + /obj/item/reagent_containers/drinks/cans/synthanol=10, + /obj/item/reagent_containers/drinks/cans/space_mountain_wind=10, + /obj/item/reagent_containers/drinks/cans/lemon_lime=10,""=70) /* Lootdrop */ /obj/effect/spawner/lootdrop/maintenance @@ -105,10 +105,10 @@ icon = 'icons/obj/chemical.dmi' . = ..() -/obj/item/reagent_containers/food/drinks/bottle/random_drink +/obj/item/reagent_containers/drinks/bottle/random_drink icon = 'modular_ss220/maps220/icons/spawner_icons.dmi' icon_state = "drinks" -/obj/item/reagent_containers/food/drinks/bottle/random_drink/Initialize(mapload) +/obj/item/reagent_containers/drinks/bottle/random_drink/Initialize(mapload) icon = 'icons/obj/drinks.dmi' . = ..() diff --git a/modular_ss220/mobs/code/simple_animal/friendly/crab.dm b/modular_ss220/mobs/code/simple_animal/friendly/crab.dm index 55d032eb578c..04f3947f03ec 100644 --- a/modular_ss220/mobs/code/simple_animal/friendly/crab.dm +++ b/modular_ss220/mobs/code/simple_animal/friendly/crab.dm @@ -18,7 +18,7 @@ response_harm = "щипает" health = 50 maxHealth = 50 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3) + butcher_results = list(/obj/item/food/snacks/meat = 3) /mob/living/simple_animal/crab/royal name = "королевский краб" @@ -32,7 +32,7 @@ response_harm = "щипает без уважения" health = 50 maxHealth = 50 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 5) + butcher_results = list(/obj/item/food/snacks/meat = 5) /mob/living/simple_animal/crab/evil holder_type = /obj/item/holder/evilcrab diff --git a/modular_ss220/mobs/code/simple_animal/friendly/farm_animals.dm b/modular_ss220/mobs/code/simple_animal/friendly/farm_animals.dm index 5386a7a522be..e1469578c69e 100644 --- a/modular_ss220/mobs/code/simple_animal/friendly/farm_animals.dm +++ b/modular_ss220/mobs/code/simple_animal/friendly/farm_animals.dm @@ -53,7 +53,7 @@ density = 0 speak_chance = 2 turns_per_move = 3 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 4) + butcher_results = list(/obj/item/food/snacks/meat = 4) response_help = "pets the" response_disarm = "gently pushes aside the" response_harm = "kicks the" @@ -118,7 +118,7 @@ icon_living = "gosling" icon_dead = "gosling_dead" icon_resting = "gosling_rest" - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3) + butcher_results = list(/obj/item/food/snacks/meat = 3) melee_damage_lower = 0 melee_damage_upper = 0 health = 20 diff --git a/modular_ss220/mobs/code/simple_animal/friendly/frog.dm b/modular_ss220/mobs/code/simple_animal/friendly/frog.dm index 286c17c7e631..95149a7b887b 100644 --- a/modular_ss220/mobs/code/simple_animal/friendly/frog.dm +++ b/modular_ss220/mobs/code/simple_animal/friendly/frog.dm @@ -22,7 +22,7 @@ maxHealth = 10 health = 10 blood_volume = BLOOD_VOLUME_SURVIVE - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat = 1) + butcher_results = list(/obj/item/food/snacks/monstermeat/lizardmeat = 1) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "stamps on" diff --git a/modular_ss220/mobs/code/simple_animal/friendly/moth.dm b/modular_ss220/mobs/code/simple_animal/friendly/moth.dm index eee8153c18c6..dbb76ba4bc4d 100644 --- a/modular_ss220/mobs/code/simple_animal/friendly/moth.dm +++ b/modular_ss220/mobs/code/simple_animal/friendly/moth.dm @@ -20,7 +20,7 @@ pass_flags = PASSTABLE | PASSGRILLE | PASSMOB ventcrawler = 2 mob_size = MOB_SIZE_TINY - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat = 1) + butcher_results = list(/obj/item/food/snacks/monstermeat/xenomeat = 1) gold_core_spawnable = FRIENDLY_SPAWN holder_type = /obj/item/holder/moth tts_seed = "Tychus" @@ -49,6 +49,6 @@ density = 0 gold_core_spawnable = FRIENDLY_SPAWN footstep_type = FOOTSTEP_MOB_BAREFOOT - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/xenomeat = 1) + butcher_results = list(/obj/item/food/snacks/monstermeat/xenomeat = 1) holder_type = /obj/item/holder/mothroach tts_seed = "Tychus" diff --git a/modular_ss220/mobs/code/simple_animal/friendly/mouse.dm b/modular_ss220/mobs/code/simple_animal/friendly/mouse.dm index 44b04fcb3975..c822538acf4e 100644 --- a/modular_ss220/mobs/code/simple_animal/friendly/mouse.dm +++ b/modular_ss220/mobs/code/simple_animal/friendly/mouse.dm @@ -5,7 +5,7 @@ talk_sound = list('modular_ss220/mobs/sound/creatures/rat_talk.ogg') damaged_sound = list('modular_ss220/mobs/sound/creatures/rat_wound.ogg') blood_volume = BLOOD_VOLUME_SURVIVE - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/mouse) + butcher_results = list(/obj/item/food/snacks/meat/mouse) tts_seed = "Gyro" /mob/living/simple_animal/mouse/Initialize(mapload) diff --git a/modular_ss220/mobs/code/simple_animal/friendly/possum.dm b/modular_ss220/mobs/code/simple_animal/friendly/possum.dm index 763cdf16fad9..5e09a638a435 100644 --- a/modular_ss220/mobs/code/simple_animal/friendly/possum.dm +++ b/modular_ss220/mobs/code/simple_animal/friendly/possum.dm @@ -35,7 +35,7 @@ turns_per_move = 10 gold_core_spawnable = FRIENDLY_SPAWN footstep_type = FOOTSTEP_MOB_CLAW - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 2) + butcher_results = list(/obj/item/food/snacks/meat = 2) holder_type = /obj/item/holder/possum /mob/living/simple_animal/possum/attackby(obj/item/O, mob/living/user) diff --git a/modular_ss220/mobs/code/simple_animal/friendly/rat.dm b/modular_ss220/mobs/code/simple_animal/friendly/rat.dm index 0686f46b8af3..4f6491814687 100644 --- a/modular_ss220/mobs/code/simple_animal/friendly/rat.dm +++ b/modular_ss220/mobs/code/simple_animal/friendly/rat.dm @@ -13,7 +13,7 @@ maxHealth = 15 health = 15 mob_size = MOB_SIZE_SMALL - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/mouse = 2) + butcher_results = list(/obj/item/food/snacks/meat/mouse = 2) /mob/living/simple_animal/mouse/rat/white name = "white rat" diff --git a/modular_ss220/mobs/code/simple_animal/friendly/snail.dm b/modular_ss220/mobs/code/simple_animal/friendly/snail.dm index 70188814923a..1cc0423501d1 100644 --- a/modular_ss220/mobs/code/simple_animal/friendly/snail.dm +++ b/modular_ss220/mobs/code/simple_animal/friendly/snail.dm @@ -21,7 +21,7 @@ mob_size = MOB_SIZE_SMALL gender = NEUTER can_hide = 1 - butcher_results = list(/obj/item/reagent_containers/food/snacks/salmonmeat/snailmeat = 1, /obj/item/stack/ore/tranquillite = 1) + butcher_results = list(/obj/item/food/snacks/salmonmeat/snailmeat = 1, /obj/item/stack/ore/tranquillite = 1) can_collar = 1 gold_core_spawnable = FRIENDLY_SPAWN stop_automated_movement_when_pulled = 0 @@ -82,6 +82,6 @@ pass_flags = PASSTABLE | PASSGRILLE status_flags = CANPARALYSE | CANPUSH mob_size = MOB_SIZE_SMALL - butcher_results = list(/obj/item/reagent_containers/food/snacks/salmonmeat/turtlemeat = 10, /obj/item/stack/ore/tranquillite = 5) + butcher_results = list(/obj/item/food/snacks/salmonmeat/turtlemeat = 10, /obj/item/stack/ore/tranquillite = 5) footstep_type = FOOTSTEP_MOB_SLIME holder_type = /obj/item/holder/turtle diff --git a/modular_ss220/mobs/code/simple_animal/hostile/lizard.dm b/modular_ss220/mobs/code/simple_animal/hostile/lizard.dm index 33dba1c9cb24..83f89d1cb4f8 100644 --- a/modular_ss220/mobs/code/simple_animal/hostile/lizard.dm +++ b/modular_ss220/mobs/code/simple_animal/hostile/lizard.dm @@ -13,7 +13,7 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat = 3, /obj/item/stack/sheet/animalhide/lizard = 1) + butcher_results = list(/obj/item/food/snacks/monstermeat/lizardmeat = 3, /obj/item/stack/sheet/animalhide/lizard = 1) response_help = "погладил" response_disarm = "аккуратно оттолкнул" response_harm = "ударил" @@ -43,7 +43,7 @@ icon_state = "gator" icon_living = "gator" icon_dead = "gator_dead" - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat = 7, /obj/item/stack/sheet/animalhide/lizard = 5) + butcher_results = list(/obj/item/food/snacks/monstermeat/lizardmeat = 7, /obj/item/stack/sheet/animalhide/lizard = 5) speed = 4 maxHealth = 200 health = 200 @@ -57,7 +57,7 @@ icon_state = "steppy" icon_living = "steppy" icon_dead = "steppy_dead" - butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/lizardmeat = 5, /obj/item/stack/sheet/animalhide/lizard = 3) + butcher_results = list(/obj/item/food/snacks/monstermeat/lizardmeat = 5, /obj/item/stack/sheet/animalhide/lizard = 3) maxHealth = 100 health = 100 obj_damage = 80 diff --git a/modular_ss220/mobs/code/simple_animal/items.dm b/modular_ss220/mobs/code/simple_animal/items.dm index dfb46832a8f6..fa678a20f164 100644 --- a/modular_ss220/mobs/code/simple_animal/items.dm +++ b/modular_ss220/mobs/code/simple_animal/items.dm @@ -1,38 +1,38 @@ // Meat -/obj/item/reagent_containers/food/snacks/meat/dog +/obj/item/food/snacks/meat/dog name = "dog meat" desc = "Не слишком питательно. Но говорят деликатес космокорейцев." list_reagents = list("protein" = 2, "epinephrine" = 2) -/obj/item/reagent_containers/food/snacks/meat/security +/obj/item/food/snacks/meat/security name = "security meat" desc = "Мясо наполненное чувством мужества и долга." list_reagents = list("protein" = 3, "epinephrine" = 5) -/obj/item/reagent_containers/food/snacks/meat/pug +/obj/item/food/snacks/meat/pug name = "pug meat" desc = "Чуть менее очарователен в нарезке." list_reagents = list("protein" = 2, "epinephrine" = 2) -/obj/item/reagent_containers/food/snacks/meat/ham/old +/obj/item/food/snacks/meat/ham/old name = "жесткая ветчина" desc = "Мясо почтенного хряка." list_reagents = list("protein" = 2, "porktonium" = 10) -/obj/item/reagent_containers/food/snacks/meat/mouse +/obj/item/food/snacks/meat/mouse name = "мышатина" desc = "На безрыбье и мышь мясо. Кто знает чем питался этот грызун до его подачи к столу." icon = 'modular_ss220/mobs/icons/items.dmi' icon_state = "meat_clear" list_reagents = list("nutriment" = 2, "blood" = 3, "toxin" = 1) -/obj/item/reagent_containers/food/snacks/salmonmeat/snailmeat +/obj/item/food/snacks/salmonmeat/snailmeat name = "snail meat" desc = "Сырая космо-улитка в собственном соку." filling_color = "#6bb4a8" list_reagents = list("protein" = 5, "vitamin" = 5) -/obj/item/reagent_containers/food/snacks/salmonmeat/turtlemeat +/obj/item/food/snacks/salmonmeat/turtlemeat name = "snail meat" desc = "Сырая космо-улитка в собственном соку." filling_color = "#2fa24c" diff --git a/modular_ss220/mobs/code/simple_animal/named_animals.dm b/modular_ss220/mobs/code/simple_animal/named_animals.dm index a1b25d209a49..f8e5d7e3a406 100644 --- a/modular_ss220/mobs/code/simple_animal/named_animals.dm +++ b/modular_ss220/mobs/code/simple_animal/named_animals.dm @@ -5,7 +5,7 @@ icon_state = "pig_old" icon_living = "pig_old" icon_dead = "pig_old_dead" - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/ham/old = 10) + butcher_results = list(/obj/item/food/snacks/meat/ham/old = 10) unique_pet = TRUE gold_core_spawnable = NO_SPAWN maxHealth = 80 diff --git a/modular_ss220/mobs/code/simple_animal/pets/cat.dm b/modular_ss220/mobs/code/simple_animal/pets/cat.dm index 9f314db19422..d7d3bb8f1e7a 100644 --- a/modular_ss220/mobs/code/simple_animal/pets/cat.dm +++ b/modular_ss220/mobs/code/simple_animal/pets/cat.dm @@ -19,7 +19,7 @@ gender = FEMALE mob_size = MOB_SIZE_LARGE // THICK!!! //canmove = FALSE - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 8) + butcher_results = list(/obj/item/food/snacks/meat = 8) tts_seed = "Huntress" maxHealth = 40 // Sooooo faaaat... health = 40 diff --git a/modular_ss220/mobs/code/simple_animal/pets/dog.dm b/modular_ss220/mobs/code/simple_animal/pets/dog.dm index 259600f7b1ff..65b2f896ad91 100644 --- a/modular_ss220/mobs/code/simple_animal/pets/dog.dm +++ b/modular_ss220/mobs/code/simple_animal/pets/dog.dm @@ -9,7 +9,7 @@ attacktext = "кусает" var/growl_sound = list('modular_ss220/mobs/sound/creatures/dog_grawl1.ogg','modular_ss220/mobs/sound/creatures/dog_grawl2.ogg') //Used in emote. - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/dog = 4) + butcher_results = list(/obj/item/food/snacks/meat/dog = 4) collar_type = "dog" /mob/living/simple_animal/pet/dog/wuv(change, mob/M) @@ -67,7 +67,7 @@ /mob/living/simple_animal/pet/dog/corgi/puppy maxHealth = 20 health = 20 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/corgi = 1) + butcher_results = list(/obj/item/food/snacks/meat/corgi = 1) tts_seed = "Jaina" /mob/living/simple_animal/pet/dog/corgi/puppy/void diff --git a/modular_ss220/mobs/code/simple_animal/pets/security_dogs.dm b/modular_ss220/mobs/code/simple_animal/pets/security_dogs.dm index a7ad0195f406..90ef548ce114 100644 --- a/modular_ss220/mobs/code/simple_animal/pets/security_dogs.dm +++ b/modular_ss220/mobs/code/simple_animal/pets/security_dogs.dm @@ -16,7 +16,7 @@ var/obj/item/inventory_head var/obj/item/inventory_mask footstep_type = FOOTSTEP_MOB_CLAW - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/security = 3) + butcher_results = list(/obj/item/food/snacks/meat/security = 3) tts_seed = "Furion" /mob/living/simple_animal/pet/dog/security/ranger diff --git a/modular_ss220/mobs/code/simple_animal/pets/slugcat.dm b/modular_ss220/mobs/code/simple_animal/pets/slugcat.dm index 2b90b8940b1e..6e9292450a6a 100644 --- a/modular_ss220/mobs/code/simple_animal/pets/slugcat.dm +++ b/modular_ss220/mobs/code/simple_animal/pets/slugcat.dm @@ -21,7 +21,7 @@ pass_flags = PASSTABLE ventcrawler = VENTCRAWLER_ALWAYS can_collar = 1 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 5) + butcher_results = list(/obj/item/food/snacks/meat = 5) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" diff --git a/modular_ss220/objects/code/miscellaneous.dm b/modular_ss220/objects/code/miscellaneous.dm index 438b14427c45..286f1ea0cae5 100644 --- a/modular_ss220/objects/code/miscellaneous.dm +++ b/modular_ss220/objects/code/miscellaneous.dm @@ -140,5 +140,5 @@ // Display Cases /obj/structure/displaycase/hos alert = TRUE - start_showpiece_type = /obj/item/reagent_containers/food/snacks/donut/sprinkles + start_showpiece_type = /obj/item/food/snacks/donut/sprinkles req_access = list(ACCESS_HOS) diff --git a/modular_ss220/silicons/code/items/gripper.dm b/modular_ss220/silicons/code/items/gripper.dm index ab8d2a8de3cf..7c7697e028e9 100644 --- a/modular_ss220/silicons/code/items/gripper.dm +++ b/modular_ss220/silicons/code/items/gripper.dm @@ -54,7 +54,7 @@ /obj/item/stack/sheet/mineral/plasma, // for repair plasmamans /obj/item/mmi, /obj/item/reagent_containers/pill, - /obj/item/reagent_containers/food/drinks, + /obj/item/reagent_containers/drinks, /obj/item/reagent_containers/glass, /obj/item/reagent_containers/syringe, ) diff --git a/modular_ss220/silicons/code/items/rlf.dm b/modular_ss220/silicons/code/items/rlf.dm index 4125e871fee6..1bb4b71c29e5 100644 --- a/modular_ss220/silicons/code/items/rlf.dm +++ b/modular_ss220/silicons/code/items/rlf.dm @@ -21,7 +21,7 @@ if(!receiver.client) to_chat(user, span_warning("You offer lollipop to [receiver], but they don't seem to respond...")) return - var/obj/item/I = new /obj/item/reagent_containers/food/snacks/candy/sucker/lollipop + var/obj/item/I = new /obj/item/food/snacks/candy/sucker/lollipop receiver.throw_alert("take item [I.UID()]", /obj/screen/alert/take_item/RLF, alert_args = list(user, receiver, I)) to_chat(user, span_info("You offer lollipop to [receiver].")) @@ -29,7 +29,7 @@ var/mob/living/receiver = locateUID(receiver_UID) if(receiver.stat != CONSCIOUS) return - var/obj/item/reagent_containers/food/snacks/candy/sucker/I = locateUID(item_UID) + var/obj/item/food/snacks/candy/sucker/I = locateUID(item_UID) if(receiver.r_hand && receiver.l_hand) to_chat(receiver, span_warning("You need to have your hands free to accept [I]!")) return @@ -49,13 +49,13 @@ receiver.visible_message(span_notice("[giver] handed [I] to [receiver].")) receiver.clear_alert("take item [item_UID]") -/obj/item/reagent_containers/food/snacks/candy/sucker/lollipop +/obj/item/food/snacks/candy/sucker/lollipop name = "lollipop" desc = "For being such a courage patient!" icon_state = "sucker" filling_color = "#60A584" list_reagents = list("sugar" = 4) -/obj/item/reagent_containers/food/snacks/candy/sucker/lollipop/New() +/obj/item/food/snacks/candy/sucker/lollipop/New() . = ..() icon_state = pick("sucker_blue", "sucker_green", "sucker_orange", "sucker_purple", "sucker_red", "sucker_yellow") diff --git a/modular_ss220/text_to_speech/code/tts_preferences.dm b/modular_ss220/text_to_speech/code/tts_preferences.dm index b7ec9b44557b..0953abe6c563 100644 --- a/modular_ss220/text_to_speech/code/tts_preferences.dm +++ b/modular_ss220/text_to_speech/code/tts_preferences.dm @@ -21,10 +21,13 @@ name = "Эксплорер TTS голосов" var/phrases = TTS_PHRASES -/datum/ui_module/tts_seeds_explorer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/datum/ui_module/tts_seeds_explorer/ui_state(mob/user) + return GLOB.always_state + +/datum/ui_module/tts_seeds_explorer/ui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "TTSSeedsExplorer", name, 550, 800, master_ui, state) + ui = new(user, src, "TTSSeedsExplorer", name) ui.set_autoupdate(FALSE) ui.open() diff --git a/modular_ss220/unique_objects/code/cheese_statue.dm b/modular_ss220/unique_objects/code/cheese_statue.dm index e54c7df45bd0..bb5b0f3e6ffa 100644 --- a/modular_ss220/unique_objects/code/cheese_statue.dm +++ b/modular_ss220/unique_objects/code/cheese_statue.dm @@ -66,7 +66,7 @@ GLOBAL_LIST_INIT(cheese_recipes, list( /datum/recipe/oven/reinforcedcheese reagents = list("sodiumchloride" = 10) items = list( - /obj/item/reagent_containers/food/snacks/sliceable/cheesewheel, - /obj/item/reagent_containers/food/snacks/sliceable/cheesewheel + /obj/item/food/snacks/sliceable/cheesewheel, + /obj/item/food/snacks/sliceable/cheesewheel ) result = /obj/item/stack/sheet/cheese diff --git a/paradise.dme b/paradise.dme index 6dbaefc551d2..a9dc742dd11c 100644 --- a/paradise.dme +++ b/paradise.dme @@ -35,10 +35,12 @@ #include "code\__DEFINES\announce_defines.dm" #include "code\__DEFINES\antagonists.dm" #include "code\__DEFINES\armour.dm" +#include "code\__DEFINES\asset_defines.dm" #include "code\__DEFINES\atmospherics_defines.dm" #include "code\__DEFINES\bitfields_defines.dm" #include "code\__DEFINES\bots.dm" #include "code\__DEFINES\callbacks.dm" +#include "code\__DEFINES\chat.dm" #include "code\__DEFINES\chat_box_defines.dm" #include "code\__DEFINES\clothing_defines.dm" #include "code\__DEFINES\color_defines.dm" @@ -230,6 +232,7 @@ #include "code\controllers\configuration\configuration_core.dm" #include "code\controllers\configuration\sections\admin_configuration.dm" #include "code\controllers\configuration\sections\afk_configuration.dm" +#include "code\controllers\configuration\sections\asset_cache_configuration.dm" #include "code\controllers\configuration\sections\custom_sprites_configuration.dm" #include "code\controllers\configuration\sections\database_configuration.dm" #include "code\controllers\configuration\sections\discord_configuration.dm" @@ -254,7 +257,7 @@ #include "code\controllers\subsystem\SSambience.dm" #include "code\controllers\subsystem\SSblackbox.dm" #include "code\controllers\subsystem\SScamera.dm" -#include "code\controllers\subsystem\SSchat_pings.dm" +#include "code\controllers\subsystem\SSchat.dm" #include "code\controllers\subsystem\SScleanup.dm" #include "code\controllers\subsystem\SSdbcore.dm" #include "code\controllers\subsystem\SSdebugview.dm" @@ -279,6 +282,7 @@ #include "code\controllers\subsystem\SSnpcpool.dm" #include "code\controllers\subsystem\SSoverlays.dm" #include "code\controllers\subsystem\SSparallax.dm" +#include "code\controllers\subsystem\SSping.dm" #include "code\controllers\subsystem\SSprofiler.dm" #include "code\controllers\subsystem\SSradiation.dm" #include "code\controllers\subsystem\SSredis.dm" @@ -328,6 +332,7 @@ #include "code\datums\beam.dm" #include "code\datums\browser.dm" #include "code\datums\callback.dm" +#include "code\datums\chat_payload.dm" #include "code\datums\chatmessage.dm" #include "code\datums\click_intercept.dm" #include "code\datums\custom_user_item.dm" @@ -374,6 +379,7 @@ #include "code\datums\components\boomerang.dm" #include "code\datums\components\boss_music.dm" #include "code\datums\components\caltrop.dm" +#include "code\datums\components\codeword_hearing.dm" #include "code\datums\components\corpse_description.dm" #include "code\datums\components\deadchat_control.dm" #include "code\datums\components\decal.dm" @@ -1458,6 +1464,26 @@ #include "code\modules\assembly\signaler.dm" #include "code\modules\assembly\timer.dm" #include "code\modules\assembly\voice.dm" +#include "code\modules\asset_cache\asset_cache_client.dm" +#include "code\modules\asset_cache\asset_cache_item.dm" +#include "code\modules\asset_cache\asset_list.dm" +#include "code\modules\asset_cache\assets\asset_alloys.dm" +#include "code\modules\asset_cache\assets\asset_chem_master.dm" +#include "code\modules\asset_cache\assets\asset_chess.dm" +#include "code\modules\asset_cache\assets\asset_claw_game.dm" +#include "code\modules\asset_cache\assets\asset_cloning.dm" +#include "code\modules\asset_cache\assets\asset_common.dm" +#include "code\modules\asset_cache\assets\asset_jquery.dm" +#include "code\modules\asset_cache\assets\asset_materials.dm" +#include "code\modules\asset_cache\assets\asset_mob_hunt.dm" +#include "code\modules\asset_cache\assets\asset_nanomap.dm" +#include "code\modules\asset_cache\assets\asset_panels.dm" +#include "code\modules\asset_cache\assets\asset_paper.dm" +#include "code\modules\asset_cache\assets\asset_rpd.dm" +#include "code\modules\asset_cache\assets\asset_safe.dm" +#include "code\modules\asset_cache\assets\asset_tgui.dm" +#include "code\modules\asset_cache\transports\asset_transport.dm" +#include "code\modules\asset_cache\transports\webroot_transport.dm" #include "code\modules\atmospherics\environmental\LINDA_fire.dm" #include "code\modules\atmospherics\environmental\LINDA_system.dm" #include "code\modules\atmospherics\environmental\LINDA_turf_tile.dm" @@ -1543,7 +1569,6 @@ #include "code\modules\buildmode\submodes\tilt.dm" #include "code\modules\buildmode\submodes\variable_edit.dm" #include "code\modules\client\2fa.dm" -#include "code\modules\client\asset_cache.dm" #include "code\modules\client\client_defines.dm" #include "code\modules\client\client_procs.dm" #include "code\modules\client\jobban_holder.dm" @@ -2740,6 +2765,7 @@ #include "code\modules\tgui\external.dm" #include "code\modules\tgui\states.dm" #include "code\modules\tgui\tgui_datum.dm" +#include "code\modules\tgui\tgui_window.dm" #include "code\modules\tgui\modules\appearance_changer.dm" #include "code\modules\tgui\modules\atmos_control.dm" #include "code\modules\tgui\modules\colour_matrix_tester.dm" @@ -2771,7 +2797,12 @@ #include "code\modules\tgui\states\physical.dm" #include "code\modules\tgui\states\self.dm" #include "code\modules\tgui\states\viewer_state.dm" -#include "code\modules\tgui\states\zlevel_state.dm" +#include "code\modules\tgui\tgui_panel\audio.dm" +#include "code\modules\tgui\tgui_panel\telemetry.dm" +#include "code\modules\tgui\tgui_panel\tgui_panel.dm" +#include "code\modules\tgui\tgui_panel\tgui_panel_external.dm" +#include "code\modules\tgui\tgui_panel\tgui_panel_message.dm" +#include "code\modules\tgui\tgui_panel\to_chat.dm" #include "code\modules\tooltip\tooltip.dm" #include "code\modules\unit_tests\_unit_tests.dm" #include "code\modules\vehicle\ambulance.dm" @@ -2797,7 +2828,6 @@ #include "code\modules\world_topic\pr_announce_topic.dm" #include "code\modules\world_topic\queue_status.dm" #include "code\modules\world_topic\status.dm" -#include "goon\code\datums\browserOutput.dm" #include "interface\interface.dm" #include "interface\skin.dmf" // END_INCLUDE diff --git a/tgui/.eslintignore b/tgui/.eslintignore index 010416b9e88a..a59187b933ae 100644 --- a/tgui/.eslintignore +++ b/tgui/.eslintignore @@ -1,6 +1,6 @@ +/.yarn/** /**/node_modules /**/*.bundle.* /**/*.chunk.* /**/*.hot-update.* /packages/inferno/** -/packages/tgui/public/shim-*.js diff --git a/tgui/.eslintrc-harder.yml b/tgui/.eslintrc-harder.yml deleted file mode 100644 index 75399d2677f0..000000000000 --- a/tgui/.eslintrc-harder.yml +++ /dev/null @@ -1,9 +0,0 @@ -rules: - ## Enforce a maximum cyclomatic complexity allowed in a program - complexity: [error, { max: 25 }] - ## Enforce consistent brace style for blocks - brace-style: [error, stroustrup, { allowSingleLine: false }] - ## Enforce the consistent use of either backticks, double, or single quotes - quotes: [error, single, { avoidEscape: true, allowTemplateLiterals: true }] - react/jsx-closing-bracket-location: - [error, { selfClosing: after-props, nonEmpty: after-props }] diff --git a/tgui/.eslintrc.yml b/tgui/.eslintrc.yml index 34a47789fba3..f6b81acf36b6 100644 --- a/tgui/.eslintrc.yml +++ b/tgui/.eslintrc.yml @@ -1,6 +1,7 @@ -parser: '@babel/eslint-parser' +root: true +parser: '@typescript-eslint/parser' parserOptions: - ecmaVersion: 2019 + ecmaVersion: 2020 sourceType: module ecmaFeatures: jsx: true @@ -8,14 +9,19 @@ env: es6: true browser: true node: true +globals: + Byond: readonly plugins: - - react -extends: - prettier + - react settings: + import/resolver: + node: + extensions: ['.js','.jsx','.ts','.tsx'] react: version: '16.10' rules: + ## Possible Errors ## ---------------------------------------- @@ -113,7 +119,7 @@ rules: ## Require return statements to either always or never specify values # consistent-return: error ## Enforce consistent brace style for all control statements - curly: [error, all] + curly: [error, multi-line] ## Require default cases in switch statements # default-case: error ## Enforce default parameters to be last @@ -282,6 +288,7 @@ rules: ## Disallow initializing variables to undefined no-undef-init: error ## Disallow the use of undefined as an identifier + ## This can't be enabled because of https://github.com/facebook/regenerator/blob/cb755fd82c648cbc5307a5a2d61cdd598e698fc4/packages/runtime/runtime.js#L14 # no-undefined: error ## Disallow unused variables # no-unused-vars: error @@ -373,6 +380,7 @@ rules: #ignorePattern: '^(import\s.+\sfrom\s|.*require\()', #ignoreUrls: true, #ignoreRegExpLiterals: true, + #ignoreStrings: true, #}] ## Enforce a maximum number of lines per file # max-lines: error @@ -644,7 +652,7 @@ rules: ## Enforce ES5 or ES6 class for React Components react/prefer-es6-class: error ## Enforce that props are read-only - react/prefer-read-only-props: error + # react/prefer-read-only-props: error ## Enforce stateless React Components to be written as a pure function react/prefer-stateless-function: error ## Prevent missing props validation in a React component definition @@ -754,3 +762,10 @@ rules: react/jsx-uses-vars: error ## Prevent missing parentheses around multilines JSX (fixable) # react/jsx-wrap-multilines: error + +overrides: + - files: [ "*.ts", "*.mts", "*.cts", "*.tsx" ] + rules: + # https://typescript-eslint.io/linting/troubleshooting/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors + no-undef: off + react/jsx-no-undef: off diff --git a/tgui/.gitattributes b/tgui/.gitattributes index 0016cc3bf678..71550f35c1c8 100644 --- a/tgui/.gitattributes +++ b/tgui/.gitattributes @@ -2,9 +2,21 @@ ## Enforce text mode and LF line breaks *.js text eol=lf +*.jsx text eol=lf +*.ts text eol=lf +*.tsx text eol=lf *.css text eol=lf +*.scss text eol=lf *.html text eol=lf *.json text eol=lf +*.yml text eol=lf +*.md text eol=lf +*.bat text eol=lf +yarn.lock text eol=lf +bin/tgui text eol=lf ## Treat bundles as binary and ignore them during conflicts *.bundle.* binary merge=tgui-merge-bundle +*.chunk.* binary merge=tgui-merge-bundle +.yarn/releases/**/* binary +.yarn/plugins/**/* binary diff --git a/tgui/.gitignore b/tgui/.gitignore index 416ca3768da0..1dd9fadd08f3 100644 --- a/tgui/.gitignore +++ b/tgui/.gitignore @@ -1,7 +1,21 @@ +## NPM garbage node_modules *.log package-lock.json -/packages/tgui/public/.tmp/**/* -/packages/tgui/public/**/*.hot-update.* -/packages/tgui/public/**/*.map +## Yarn stuff +/.pnp.* +/.yarn/* +!/.yarn/releases +!/.yarn/plugins +!/.yarn/sdks +!/.yarn/versions +!/.yarn/lock.yml + +## Build artifacts +/public/.tmp/**/* +/coverage + +## Previously ignored locations that are kept to avoid confusing git +## while transitioning to a new project structure. +/packages/tgui/public/** diff --git a/tgui/.prettierignore b/tgui/.prettierignore index 25e1493851a8..026715d1bc0a 100644 --- a/tgui/.prettierignore +++ b/tgui/.prettierignore @@ -1,3 +1,4 @@ -# Ignore built packages and styles: -packages/tgui/public -packages/tgui/styles +# Ignore built packages: +public +**.cjs +packages/tgui-dev-server diff --git a/tgui/.yarn/releases/yarn-4.0.2.cjs b/tgui/.yarn/releases/yarn-4.0.2.cjs new file mode 100644 index 000000000000..f12c120ed139 --- /dev/null +++ b/tgui/.yarn/releases/yarn-4.0.2.cjs @@ -0,0 +1,893 @@ +#!/usr/bin/env node +/* eslint-disable */ +//prettier-ignore +(()=>{var n_e=Object.create;var MT=Object.defineProperty;var i_e=Object.getOwnPropertyDescriptor;var s_e=Object.getOwnPropertyNames;var o_e=Object.getPrototypeOf,a_e=Object.prototype.hasOwnProperty;var Be=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var Et=(t,e)=>()=>(t&&(e=t(t=0)),e);var _=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Kt=(t,e)=>{for(var r in e)MT(t,r,{get:e[r],enumerable:!0})},l_e=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of s_e(e))!a_e.call(t,a)&&a!==r&&MT(t,a,{get:()=>e[a],enumerable:!(o=i_e(e,a))||o.enumerable});return t};var $e=(t,e,r)=>(r=t!=null?n_e(o_e(t)):{},l_e(e||!t||!t.__esModule?MT(r,"default",{value:t,enumerable:!0}):r,t));var vi={};Kt(vi,{SAFE_TIME:()=>F7,S_IFDIR:()=>wD,S_IFLNK:()=>ID,S_IFMT:()=>Mu,S_IFREG:()=>Hw});var Mu,wD,Hw,ID,F7,T7=Et(()=>{Mu=61440,wD=16384,Hw=32768,ID=40960,F7=456789e3});var ar={};Kt(ar,{EBADF:()=>Io,EBUSY:()=>c_e,EEXIST:()=>g_e,EINVAL:()=>A_e,EISDIR:()=>h_e,ENOENT:()=>f_e,ENOSYS:()=>u_e,ENOTDIR:()=>p_e,ENOTEMPTY:()=>m_e,EOPNOTSUPP:()=>y_e,EROFS:()=>d_e,ERR_DIR_CLOSED:()=>OT});function Rl(t,e){return Object.assign(new Error(`${t}: ${e}`),{code:t})}function c_e(t){return Rl("EBUSY",t)}function u_e(t,e){return Rl("ENOSYS",`${t}, ${e}`)}function A_e(t){return Rl("EINVAL",`invalid argument, ${t}`)}function Io(t){return Rl("EBADF",`bad file descriptor, ${t}`)}function f_e(t){return Rl("ENOENT",`no such file or directory, ${t}`)}function p_e(t){return Rl("ENOTDIR",`not a directory, ${t}`)}function h_e(t){return Rl("EISDIR",`illegal operation on a directory, ${t}`)}function g_e(t){return Rl("EEXIST",`file already exists, ${t}`)}function d_e(t){return Rl("EROFS",`read-only filesystem, ${t}`)}function m_e(t){return Rl("ENOTEMPTY",`directory not empty, ${t}`)}function y_e(t){return Rl("EOPNOTSUPP",`operation not supported, ${t}`)}function OT(){return Rl("ERR_DIR_CLOSED","Directory handle was closed")}var BD=Et(()=>{});var Ea={};Kt(Ea,{BigIntStatsEntry:()=>ey,DEFAULT_MODE:()=>HT,DirEntry:()=>UT,StatEntry:()=>$m,areStatsEqual:()=>jT,clearStats:()=>vD,convertToBigIntStats:()=>C_e,makeDefaultStats:()=>R7,makeEmptyStats:()=>E_e});function R7(){return new $m}function E_e(){return vD(R7())}function vD(t){for(let e in t)if(Object.hasOwn(t,e)){let r=t[e];typeof r=="number"?t[e]=0:typeof r=="bigint"?t[e]=BigInt(0):_T.types.isDate(r)&&(t[e]=new Date(0))}return t}function C_e(t){let e=new ey;for(let r in t)if(Object.hasOwn(t,r)){let o=t[r];typeof o=="number"?e[r]=BigInt(o):_T.types.isDate(o)&&(e[r]=new Date(o))}return e.atimeNs=e.atimeMs*BigInt(1e6),e.mtimeNs=e.mtimeMs*BigInt(1e6),e.ctimeNs=e.ctimeMs*BigInt(1e6),e.birthtimeNs=e.birthtimeMs*BigInt(1e6),e}function jT(t,e){if(t.atimeMs!==e.atimeMs||t.birthtimeMs!==e.birthtimeMs||t.blksize!==e.blksize||t.blocks!==e.blocks||t.ctimeMs!==e.ctimeMs||t.dev!==e.dev||t.gid!==e.gid||t.ino!==e.ino||t.isBlockDevice()!==e.isBlockDevice()||t.isCharacterDevice()!==e.isCharacterDevice()||t.isDirectory()!==e.isDirectory()||t.isFIFO()!==e.isFIFO()||t.isFile()!==e.isFile()||t.isSocket()!==e.isSocket()||t.isSymbolicLink()!==e.isSymbolicLink()||t.mode!==e.mode||t.mtimeMs!==e.mtimeMs||t.nlink!==e.nlink||t.rdev!==e.rdev||t.size!==e.size||t.uid!==e.uid)return!1;let r=t,o=e;return!(r.atimeNs!==o.atimeNs||r.mtimeNs!==o.mtimeNs||r.ctimeNs!==o.ctimeNs||r.birthtimeNs!==o.birthtimeNs)}var _T,HT,UT,$m,ey,qT=Et(()=>{_T=$e(Be("util")),HT=33188,UT=class{constructor(){this.name="";this.path="";this.mode=0}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},$m=class{constructor(){this.uid=0;this.gid=0;this.size=0;this.blksize=0;this.atimeMs=0;this.mtimeMs=0;this.ctimeMs=0;this.birthtimeMs=0;this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=0;this.ino=0;this.mode=HT;this.nlink=1;this.rdev=0;this.blocks=1}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&61440)===16384}isFIFO(){return!1}isFile(){return(this.mode&61440)===32768}isSocket(){return!1}isSymbolicLink(){return(this.mode&61440)===40960}},ey=class{constructor(){this.uid=BigInt(0);this.gid=BigInt(0);this.size=BigInt(0);this.blksize=BigInt(0);this.atimeMs=BigInt(0);this.mtimeMs=BigInt(0);this.ctimeMs=BigInt(0);this.birthtimeMs=BigInt(0);this.atimeNs=BigInt(0);this.mtimeNs=BigInt(0);this.ctimeNs=BigInt(0);this.birthtimeNs=BigInt(0);this.atime=new Date(0);this.mtime=new Date(0);this.ctime=new Date(0);this.birthtime=new Date(0);this.dev=BigInt(0);this.ino=BigInt(0);this.mode=BigInt(HT);this.nlink=BigInt(1);this.rdev=BigInt(0);this.blocks=BigInt(1)}isBlockDevice(){return!1}isCharacterDevice(){return!1}isDirectory(){return(this.mode&BigInt(61440))===BigInt(16384)}isFIFO(){return!1}isFile(){return(this.mode&BigInt(61440))===BigInt(32768)}isSocket(){return!1}isSymbolicLink(){return(this.mode&BigInt(61440))===BigInt(40960)}}});function D_e(t){let e,r;if(e=t.match(B_e))t=e[1];else if(r=t.match(v_e))t=`\\\\${r[1]?".\\":""}${r[2]}`;else return t;return t.replace(/\//g,"\\")}function P_e(t){t=t.replace(/\\/g,"/");let e,r;return(e=t.match(w_e))?t=`/${e[1]}`:(r=t.match(I_e))&&(t=`/unc/${r[1]?".dot/":""}${r[2]}`),t}function DD(t,e){return t===ue?L7(e):GT(e)}var jw,Bt,dr,ue,K,N7,w_e,I_e,B_e,v_e,GT,L7,Ca=Et(()=>{jw=$e(Be("path")),Bt={root:"/",dot:".",parent:".."},dr={home:"~",nodeModules:"node_modules",manifest:"package.json",lockfile:"yarn.lock",virtual:"__virtual__",pnpJs:".pnp.js",pnpCjs:".pnp.cjs",pnpData:".pnp.data.json",pnpEsmLoader:".pnp.loader.mjs",rc:".yarnrc.yml",env:".env"},ue=Object.create(jw.default),K=Object.create(jw.default.posix);ue.cwd=()=>process.cwd();K.cwd=process.platform==="win32"?()=>GT(process.cwd()):process.cwd;process.platform==="win32"&&(K.resolve=(...t)=>t.length>0&&K.isAbsolute(t[0])?jw.default.posix.resolve(...t):jw.default.posix.resolve(K.cwd(),...t));N7=function(t,e,r){return e=t.normalize(e),r=t.normalize(r),e===r?".":(e.endsWith(t.sep)||(e=e+t.sep),r.startsWith(e)?r.slice(e.length):null)};ue.contains=(t,e)=>N7(ue,t,e);K.contains=(t,e)=>N7(K,t,e);w_e=/^([a-zA-Z]:.*)$/,I_e=/^\/\/(\.\/)?(.*)$/,B_e=/^\/([a-zA-Z]:.*)$/,v_e=/^\/unc\/(\.dot\/)?(.*)$/;GT=process.platform==="win32"?P_e:t=>t,L7=process.platform==="win32"?D_e:t=>t;ue.fromPortablePath=L7;ue.toPortablePath=GT});async function PD(t,e){let r="0123456789abcdef";await t.mkdirPromise(e.indexPath,{recursive:!0});let o=[];for(let a of r)for(let n of r)o.push(t.mkdirPromise(t.pathUtils.join(e.indexPath,`${a}${n}`),{recursive:!0}));return await Promise.all(o),e.indexPath}async function M7(t,e,r,o,a){let n=t.pathUtils.normalize(e),u=r.pathUtils.normalize(o),A=[],p=[],{atime:h,mtime:E}=a.stableTime?{atime:Lg,mtime:Lg}:await r.lstatPromise(u);await t.mkdirpPromise(t.pathUtils.dirname(e),{utimes:[h,E]}),await YT(A,p,t,n,r,u,{...a,didParentExist:!0});for(let I of A)await I();await Promise.all(p.map(I=>I()))}async function YT(t,e,r,o,a,n,u){let A=u.didParentExist?await O7(r,o):null,p=await a.lstatPromise(n),{atime:h,mtime:E}=u.stableTime?{atime:Lg,mtime:Lg}:p,I;switch(!0){case p.isDirectory():I=await x_e(t,e,r,o,A,a,n,p,u);break;case p.isFile():I=await Q_e(t,e,r,o,A,a,n,p,u);break;case p.isSymbolicLink():I=await F_e(t,e,r,o,A,a,n,p,u);break;default:throw new Error(`Unsupported file type (${p.mode})`)}return(u.linkStrategy?.type!=="HardlinkFromIndex"||!p.isFile())&&((I||A?.mtime?.getTime()!==E.getTime()||A?.atime?.getTime()!==h.getTime())&&(e.push(()=>r.lutimesPromise(o,h,E)),I=!0),(A===null||(A.mode&511)!==(p.mode&511))&&(e.push(()=>r.chmodPromise(o,p.mode&511)),I=!0)),I}async function O7(t,e){try{return await t.lstatPromise(e)}catch{return null}}async function x_e(t,e,r,o,a,n,u,A,p){if(a!==null&&!a.isDirectory())if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;let h=!1;a===null&&(t.push(async()=>{try{await r.mkdirPromise(o,{mode:A.mode})}catch(v){if(v.code!=="EEXIST")throw v}}),h=!0);let E=await n.readdirPromise(u),I=p.didParentExist&&!a?{...p,didParentExist:!1}:p;if(p.stableSort)for(let v of E.sort())await YT(t,e,r,r.pathUtils.join(o,v),n,n.pathUtils.join(u,v),I)&&(h=!0);else(await Promise.all(E.map(async b=>{await YT(t,e,r,r.pathUtils.join(o,b),n,n.pathUtils.join(u,b),I)}))).some(b=>b)&&(h=!0);return h}async function b_e(t,e,r,o,a,n,u,A,p,h){let E=await n.checksumFilePromise(u,{algorithm:"sha1"}),I=r.pathUtils.join(h.indexPath,E.slice(0,2),`${E}.dat`),v;(te=>(te[te.Lock=0]="Lock",te[te.Rename=1]="Rename"))(v||={});let b=1,C=await O7(r,I);if(a){let U=C&&a.dev===C.dev&&a.ino===C.ino,J=C?.mtimeMs!==S_e;if(U&&J&&h.autoRepair&&(b=0,C=null),!U)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1}let T=!C&&b===1?`${I}.${Math.floor(Math.random()*4294967296).toString(16).padStart(8,"0")}`:null,L=!1;return t.push(async()=>{if(!C&&(b===0&&await r.lockPromise(I,async()=>{let U=await n.readFilePromise(u);await r.writeFilePromise(I,U)}),b===1&&T)){let U=await n.readFilePromise(u);await r.writeFilePromise(T,U);try{await r.linkPromise(T,I)}catch(J){if(J.code==="EEXIST")L=!0,await r.unlinkPromise(T);else throw J}}a||await r.linkPromise(I,o)}),e.push(async()=>{C||await r.lutimesPromise(I,Lg,Lg),T&&!L&&await r.unlinkPromise(T)}),!1}async function k_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{let h=await n.readFilePromise(u);await r.writeFilePromise(o,h)}),!0}async function Q_e(t,e,r,o,a,n,u,A,p){return p.linkStrategy?.type==="HardlinkFromIndex"?b_e(t,e,r,o,a,n,u,A,p,p.linkStrategy):k_e(t,e,r,o,a,n,u,A,p)}async function F_e(t,e,r,o,a,n,u,A,p){if(a!==null)if(p.overwrite)t.push(async()=>r.removePromise(o)),a=null;else return!1;return t.push(async()=>{await r.symlinkPromise(DD(r.pathUtils,await n.readlinkPromise(u)),o)}),!0}var Lg,S_e,WT=Et(()=>{Ca();Lg=new Date(456789e3*1e3),S_e=Lg.getTime()});function SD(t,e,r,o){let a=()=>{let n=r.shift();if(typeof n>"u")return null;let u=t.pathUtils.join(e,n);return Object.assign(t.statSync(u),{name:n,path:void 0})};return new qw(e,a,o)}var qw,U7=Et(()=>{BD();qw=class{constructor(e,r,o={}){this.path=e;this.nextDirent=r;this.opts=o;this.closed=!1}throwIfClosed(){if(this.closed)throw OT()}async*[Symbol.asyncIterator](){try{let e;for(;(e=await this.read())!==null;)yield e}finally{await this.close()}}read(e){let r=this.readSync();return typeof e<"u"?e(null,r):Promise.resolve(r)}readSync(){return this.throwIfClosed(),this.nextDirent()}close(e){return this.closeSync(),typeof e<"u"?e(null):Promise.resolve()}closeSync(){this.throwIfClosed(),this.opts.onClose?.(),this.closed=!0}}});function _7(t,e){if(t!==e)throw new Error(`Invalid StatWatcher status: expected '${e}', got '${t}'`)}var H7,ty,j7=Et(()=>{H7=Be("events");qT();ty=class extends H7.EventEmitter{constructor(r,o,{bigint:a=!1}={}){super();this.status="ready";this.changeListeners=new Map;this.startTimeout=null;this.fakeFs=r,this.path=o,this.bigint=a,this.lastStats=this.stat()}static create(r,o,a){let n=new ty(r,o,a);return n.start(),n}start(){_7(this.status,"ready"),this.status="running",this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.fakeFs.existsSync(this.path)||this.emit("change",this.lastStats,this.lastStats)},3)}stop(){_7(this.status,"running"),this.status="stopped",this.startTimeout!==null&&(clearTimeout(this.startTimeout),this.startTimeout=null),this.emit("stop")}stat(){try{return this.fakeFs.statSync(this.path,{bigint:this.bigint})}catch{let o=this.bigint?new ey:new $m;return vD(o)}}makeInterval(r){let o=setInterval(()=>{let a=this.stat(),n=this.lastStats;jT(a,n)||(this.lastStats=a,this.emit("change",a,n))},r.interval);return r.persistent?o:o.unref()}registerChangeListener(r,o){this.addListener("change",r),this.changeListeners.set(r,this.makeInterval(o))}unregisterChangeListener(r){this.removeListener("change",r);let o=this.changeListeners.get(r);typeof o<"u"&&clearInterval(o),this.changeListeners.delete(r)}unregisterAllChangeListeners(){for(let r of this.changeListeners.keys())this.unregisterChangeListener(r)}hasChangeListeners(){return this.changeListeners.size>0}ref(){for(let r of this.changeListeners.values())r.ref();return this}unref(){for(let r of this.changeListeners.values())r.unref();return this}}});function ry(t,e,r,o){let a,n,u,A;switch(typeof r){case"function":a=!1,n=!0,u=5007,A=r;break;default:({bigint:a=!1,persistent:n=!0,interval:u=5007}=r),A=o;break}let p=xD.get(t);typeof p>"u"&&xD.set(t,p=new Map);let h=p.get(e);return typeof h>"u"&&(h=ty.create(t,e,{bigint:a}),p.set(e,h)),h.registerChangeListener(A,{persistent:n,interval:u}),h}function Mg(t,e,r){let o=xD.get(t);if(typeof o>"u")return;let a=o.get(e);typeof a>"u"||(typeof r>"u"?a.unregisterAllChangeListeners():a.unregisterChangeListener(r),a.hasChangeListeners()||(a.stop(),o.delete(e)))}function Og(t){let e=xD.get(t);if(!(typeof e>"u"))for(let r of e.keys())Mg(t,r)}var xD,VT=Et(()=>{j7();xD=new WeakMap});function T_e(t){let e=t.match(/\r?\n/g);if(e===null)return G7.EOL;let r=e.filter(a=>a===`\r +`).length,o=e.length-r;return r>o?`\r +`:` +`}function Ug(t,e){return e.replace(/\r?\n/g,T_e(t))}var q7,G7,hf,Ou,_g=Et(()=>{q7=Be("crypto"),G7=Be("os");WT();Ca();hf=class{constructor(e){this.pathUtils=e}async*genTraversePromise(e,{stableSort:r=!1}={}){let o=[e];for(;o.length>0;){let a=o.shift();if((await this.lstatPromise(a)).isDirectory()){let u=await this.readdirPromise(a);if(r)for(let A of u.sort())o.push(this.pathUtils.join(a,A));else throw new Error("Not supported")}else yield a}}async checksumFilePromise(e,{algorithm:r="sha512"}={}){let o=await this.openPromise(e,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,q7.createHash)(r),A=0;for(;(A=await this.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await this.closePromise(o)}}async removePromise(e,{recursive:r=!0,maxRetries:o=5}={}){let a;try{a=await this.lstatPromise(e)}catch(n){if(n.code==="ENOENT")return;throw n}if(a.isDirectory()){if(r){let n=await this.readdirPromise(e);await Promise.all(n.map(u=>this.removePromise(this.pathUtils.resolve(e,u))))}for(let n=0;n<=o;n++)try{await this.rmdirPromise(e);break}catch(u){if(u.code!=="EBUSY"&&u.code!=="ENOTEMPTY")throw u;nsetTimeout(A,n*100))}}else await this.unlinkPromise(e)}removeSync(e,{recursive:r=!0}={}){let o;try{o=this.lstatSync(e)}catch(a){if(a.code==="ENOENT")return;throw a}if(o.isDirectory()){if(r)for(let a of this.readdirSync(e))this.removeSync(this.pathUtils.resolve(e,a));this.rmdirSync(e)}else this.unlinkSync(e)}async mkdirpPromise(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{await this.mkdirPromise(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&await this.chmodPromise(A,r),o!=null)await this.utimesPromise(A,o[0],o[1]);else{let p=await this.statPromise(this.pathUtils.dirname(A));await this.utimesPromise(A,p.atime,p.mtime)}}}return n}mkdirpSync(e,{chmod:r,utimes:o}={}){if(e=this.resolve(e),e===this.pathUtils.dirname(e))return;let a=e.split(this.pathUtils.sep),n;for(let u=2;u<=a.length;++u){let A=a.slice(0,u).join(this.pathUtils.sep);if(!this.existsSync(A)){try{this.mkdirSync(A)}catch(p){if(p.code==="EEXIST")continue;throw p}if(n??=A,r!=null&&this.chmodSync(A,r),o!=null)this.utimesSync(A,o[0],o[1]);else{let p=this.statSync(this.pathUtils.dirname(A));this.utimesSync(A,p.atime,p.mtime)}}}return n}async copyPromise(e,r,{baseFs:o=this,overwrite:a=!0,stableSort:n=!1,stableTime:u=!1,linkStrategy:A=null}={}){return await M7(this,e,o,r,{overwrite:a,stableSort:n,stableTime:u,linkStrategy:A})}copySync(e,r,{baseFs:o=this,overwrite:a=!0}={}){let n=o.lstatSync(r),u=this.existsSync(e);if(n.isDirectory()){this.mkdirpSync(e);let p=o.readdirSync(r);for(let h of p)this.copySync(this.pathUtils.join(e,h),o.pathUtils.join(r,h),{baseFs:o,overwrite:a})}else if(n.isFile()){if(!u||a){u&&this.removeSync(e);let p=o.readFileSync(r);this.writeFileSync(e,p)}}else if(n.isSymbolicLink()){if(!u||a){u&&this.removeSync(e);let p=o.readlinkSync(r);this.symlinkSync(DD(this.pathUtils,p),e)}}else throw new Error(`Unsupported file type (file: ${r}, mode: 0o${n.mode.toString(8).padStart(6,"0")})`);let A=n.mode&511;this.chmodSync(e,A)}async changeFilePromise(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferPromise(e,r,o):this.changeFileTextPromise(e,r,o)}async changeFileBufferPromise(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=await this.readFilePromise(e)}catch{}Buffer.compare(a,r)!==0&&await this.writeFilePromise(e,r,{mode:o})}async changeFileTextPromise(e,r,{automaticNewlines:o,mode:a}={}){let n="";try{n=await this.readFilePromise(e,"utf8")}catch{}let u=o?Ug(n,r):r;n!==u&&await this.writeFilePromise(e,u,{mode:a})}changeFileSync(e,r,o={}){return Buffer.isBuffer(r)?this.changeFileBufferSync(e,r,o):this.changeFileTextSync(e,r,o)}changeFileBufferSync(e,r,{mode:o}={}){let a=Buffer.alloc(0);try{a=this.readFileSync(e)}catch{}Buffer.compare(a,r)!==0&&this.writeFileSync(e,r,{mode:o})}changeFileTextSync(e,r,{automaticNewlines:o=!1,mode:a}={}){let n="";try{n=this.readFileSync(e,"utf8")}catch{}let u=o?Ug(n,r):r;n!==u&&this.writeFileSync(e,u,{mode:a})}async movePromise(e,r){try{await this.renamePromise(e,r)}catch(o){if(o.code==="EXDEV")await this.copyPromise(r,e),await this.removePromise(e);else throw o}}moveSync(e,r){try{this.renameSync(e,r)}catch(o){if(o.code==="EXDEV")this.copySync(r,e),this.removeSync(e);else throw o}}async lockPromise(e,r){let o=`${e}.flock`,a=1e3/60,n=Date.now(),u=null,A=async()=>{let p;try{[p]=await this.readJsonPromise(o)}catch{return Date.now()-n<500}try{return process.kill(p,0),!0}catch{return!1}};for(;u===null;)try{u=await this.openPromise(o,"wx")}catch(p){if(p.code==="EEXIST"){if(!await A())try{await this.unlinkPromise(o);continue}catch{}if(Date.now()-n<60*1e3)await new Promise(h=>setTimeout(h,a));else throw new Error(`Couldn't acquire a lock in a reasonable time (via ${o})`)}else throw p}await this.writePromise(u,JSON.stringify([process.pid]));try{return await r()}finally{try{await this.closePromise(u),await this.unlinkPromise(o)}catch{}}}async readJsonPromise(e){let r=await this.readFilePromise(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}readJsonSync(e){let r=this.readFileSync(e,"utf8");try{return JSON.parse(r)}catch(o){throw o.message+=` (in ${e})`,o}}async writeJsonPromise(e,r,{compact:o=!1}={}){let a=o?0:2;return await this.writeFilePromise(e,`${JSON.stringify(r,null,a)} +`)}writeJsonSync(e,r,{compact:o=!1}={}){let a=o?0:2;return this.writeFileSync(e,`${JSON.stringify(r,null,a)} +`)}async preserveTimePromise(e,r){let o=await this.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await this.lutimesPromise(e,o.atime,o.mtime)}async preserveTimeSync(e,r){let o=this.lstatSync(e),a=r();typeof a<"u"&&(e=a),this.lutimesSync(e,o.atime,o.mtime)}},Ou=class extends hf{constructor(){super(K)}}});var Ps,gf=Et(()=>{_g();Ps=class extends hf{getExtractHint(e){return this.baseFs.getExtractHint(e)}resolve(e){return this.mapFromBase(this.baseFs.resolve(this.mapToBase(e)))}getRealPath(){return this.mapFromBase(this.baseFs.getRealPath())}async openPromise(e,r,o){return this.baseFs.openPromise(this.mapToBase(e),r,o)}openSync(e,r,o){return this.baseFs.openSync(this.mapToBase(e),r,o)}async opendirPromise(e,r){return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(e),r),{path:e})}opendirSync(e,r){return Object.assign(this.baseFs.opendirSync(this.mapToBase(e),r),{path:e})}async readPromise(e,r,o,a,n){return await this.baseFs.readPromise(e,r,o,a,n)}readSync(e,r,o,a,n){return this.baseFs.readSync(e,r,o,a,n)}async writePromise(e,r,o,a,n){return typeof r=="string"?await this.baseFs.writePromise(e,r,o):await this.baseFs.writePromise(e,r,o,a,n)}writeSync(e,r,o,a,n){return typeof r=="string"?this.baseFs.writeSync(e,r,o):this.baseFs.writeSync(e,r,o,a,n)}async closePromise(e){return this.baseFs.closePromise(e)}closeSync(e){this.baseFs.closeSync(e)}createReadStream(e,r){return this.baseFs.createReadStream(e!==null?this.mapToBase(e):e,r)}createWriteStream(e,r){return this.baseFs.createWriteStream(e!==null?this.mapToBase(e):e,r)}async realpathPromise(e){return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(e)))}realpathSync(e){return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(e)))}async existsPromise(e){return this.baseFs.existsPromise(this.mapToBase(e))}existsSync(e){return this.baseFs.existsSync(this.mapToBase(e))}accessSync(e,r){return this.baseFs.accessSync(this.mapToBase(e),r)}async accessPromise(e,r){return this.baseFs.accessPromise(this.mapToBase(e),r)}async statPromise(e,r){return this.baseFs.statPromise(this.mapToBase(e),r)}statSync(e,r){return this.baseFs.statSync(this.mapToBase(e),r)}async fstatPromise(e,r){return this.baseFs.fstatPromise(e,r)}fstatSync(e,r){return this.baseFs.fstatSync(e,r)}lstatPromise(e,r){return this.baseFs.lstatPromise(this.mapToBase(e),r)}lstatSync(e,r){return this.baseFs.lstatSync(this.mapToBase(e),r)}async fchmodPromise(e,r){return this.baseFs.fchmodPromise(e,r)}fchmodSync(e,r){return this.baseFs.fchmodSync(e,r)}async chmodPromise(e,r){return this.baseFs.chmodPromise(this.mapToBase(e),r)}chmodSync(e,r){return this.baseFs.chmodSync(this.mapToBase(e),r)}async fchownPromise(e,r,o){return this.baseFs.fchownPromise(e,r,o)}fchownSync(e,r,o){return this.baseFs.fchownSync(e,r,o)}async chownPromise(e,r,o){return this.baseFs.chownPromise(this.mapToBase(e),r,o)}chownSync(e,r,o){return this.baseFs.chownSync(this.mapToBase(e),r,o)}async renamePromise(e,r){return this.baseFs.renamePromise(this.mapToBase(e),this.mapToBase(r))}renameSync(e,r){return this.baseFs.renameSync(this.mapToBase(e),this.mapToBase(r))}async copyFilePromise(e,r,o=0){return this.baseFs.copyFilePromise(this.mapToBase(e),this.mapToBase(r),o)}copyFileSync(e,r,o=0){return this.baseFs.copyFileSync(this.mapToBase(e),this.mapToBase(r),o)}async appendFilePromise(e,r,o){return this.baseFs.appendFilePromise(this.fsMapToBase(e),r,o)}appendFileSync(e,r,o){return this.baseFs.appendFileSync(this.fsMapToBase(e),r,o)}async writeFilePromise(e,r,o){return this.baseFs.writeFilePromise(this.fsMapToBase(e),r,o)}writeFileSync(e,r,o){return this.baseFs.writeFileSync(this.fsMapToBase(e),r,o)}async unlinkPromise(e){return this.baseFs.unlinkPromise(this.mapToBase(e))}unlinkSync(e){return this.baseFs.unlinkSync(this.mapToBase(e))}async utimesPromise(e,r,o){return this.baseFs.utimesPromise(this.mapToBase(e),r,o)}utimesSync(e,r,o){return this.baseFs.utimesSync(this.mapToBase(e),r,o)}async lutimesPromise(e,r,o){return this.baseFs.lutimesPromise(this.mapToBase(e),r,o)}lutimesSync(e,r,o){return this.baseFs.lutimesSync(this.mapToBase(e),r,o)}async mkdirPromise(e,r){return this.baseFs.mkdirPromise(this.mapToBase(e),r)}mkdirSync(e,r){return this.baseFs.mkdirSync(this.mapToBase(e),r)}async rmdirPromise(e,r){return this.baseFs.rmdirPromise(this.mapToBase(e),r)}rmdirSync(e,r){return this.baseFs.rmdirSync(this.mapToBase(e),r)}async linkPromise(e,r){return this.baseFs.linkPromise(this.mapToBase(e),this.mapToBase(r))}linkSync(e,r){return this.baseFs.linkSync(this.mapToBase(e),this.mapToBase(r))}async symlinkPromise(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkPromise(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkPromise(u,a,o)}symlinkSync(e,r,o){let a=this.mapToBase(r);if(this.pathUtils.isAbsolute(e))return this.baseFs.symlinkSync(this.mapToBase(e),a,o);let n=this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(r),e)),u=this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(a),n);return this.baseFs.symlinkSync(u,a,o)}async readFilePromise(e,r){return this.baseFs.readFilePromise(this.fsMapToBase(e),r)}readFileSync(e,r){return this.baseFs.readFileSync(this.fsMapToBase(e),r)}readdirPromise(e,r){return this.baseFs.readdirPromise(this.mapToBase(e),r)}readdirSync(e,r){return this.baseFs.readdirSync(this.mapToBase(e),r)}async readlinkPromise(e){return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(e)))}readlinkSync(e){return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(e)))}async truncatePromise(e,r){return this.baseFs.truncatePromise(this.mapToBase(e),r)}truncateSync(e,r){return this.baseFs.truncateSync(this.mapToBase(e),r)}async ftruncatePromise(e,r){return this.baseFs.ftruncatePromise(e,r)}ftruncateSync(e,r){return this.baseFs.ftruncateSync(e,r)}watch(e,r,o){return this.baseFs.watch(this.mapToBase(e),r,o)}watchFile(e,r,o){return this.baseFs.watchFile(this.mapToBase(e),r,o)}unwatchFile(e,r){return this.baseFs.unwatchFile(this.mapToBase(e),r)}fsMapToBase(e){return typeof e=="number"?e:this.mapToBase(e)}}});var Uu,Y7=Et(()=>{gf();Uu=class extends Ps{constructor(r,{baseFs:o,pathUtils:a}){super(a);this.target=r,this.baseFs=o}getRealPath(){return this.target}getBaseFs(){return this.baseFs}mapFromBase(r){return r}mapToBase(r){return r}}});function W7(t){let e=t;return typeof t.path=="string"&&(e.path=ue.toPortablePath(t.path)),e}var V7,Rn,Hg=Et(()=>{V7=$e(Be("fs"));_g();Ca();Rn=class extends Ou{constructor(r=V7.default){super();this.realFs=r}getExtractHint(){return!1}getRealPath(){return Bt.root}resolve(r){return K.resolve(r)}async openPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.open(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}openSync(r,o,a){return this.realFs.openSync(ue.fromPortablePath(r),o,a)}async opendirPromise(r,o){return await new Promise((a,n)=>{typeof o<"u"?this.realFs.opendir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.opendir(ue.fromPortablePath(r),this.makeCallback(a,n))}).then(a=>{let n=a;return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n})}opendirSync(r,o){let n=typeof o<"u"?this.realFs.opendirSync(ue.fromPortablePath(r),o):this.realFs.opendirSync(ue.fromPortablePath(r));return Object.defineProperty(n,"path",{value:r,configurable:!0,writable:!0}),n}async readPromise(r,o,a=0,n=0,u=-1){return await new Promise((A,p)=>{this.realFs.read(r,o,a,n,u,(h,E)=>{h?p(h):A(E)})})}readSync(r,o,a,n,u){return this.realFs.readSync(r,o,a,n,u)}async writePromise(r,o,a,n,u){return await new Promise((A,p)=>typeof o=="string"?this.realFs.write(r,o,a,this.makeCallback(A,p)):this.realFs.write(r,o,a,n,u,this.makeCallback(A,p)))}writeSync(r,o,a,n,u){return typeof o=="string"?this.realFs.writeSync(r,o,a):this.realFs.writeSync(r,o,a,n,u)}async closePromise(r){await new Promise((o,a)=>{this.realFs.close(r,this.makeCallback(o,a))})}closeSync(r){this.realFs.closeSync(r)}createReadStream(r,o){let a=r!==null?ue.fromPortablePath(r):r;return this.realFs.createReadStream(a,o)}createWriteStream(r,o){let a=r!==null?ue.fromPortablePath(r):r;return this.realFs.createWriteStream(a,o)}async realpathPromise(r){return await new Promise((o,a)=>{this.realFs.realpath(ue.fromPortablePath(r),{},this.makeCallback(o,a))}).then(o=>ue.toPortablePath(o))}realpathSync(r){return ue.toPortablePath(this.realFs.realpathSync(ue.fromPortablePath(r),{}))}async existsPromise(r){return await new Promise(o=>{this.realFs.exists(ue.fromPortablePath(r),o)})}accessSync(r,o){return this.realFs.accessSync(ue.fromPortablePath(r),o)}async accessPromise(r,o){return await new Promise((a,n)=>{this.realFs.access(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}existsSync(r){return this.realFs.existsSync(ue.fromPortablePath(r))}async statPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.stat(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.stat(ue.fromPortablePath(r),this.makeCallback(a,n))})}statSync(r,o){return o?this.realFs.statSync(ue.fromPortablePath(r),o):this.realFs.statSync(ue.fromPortablePath(r))}async fstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.fstat(r,o,this.makeCallback(a,n)):this.realFs.fstat(r,this.makeCallback(a,n))})}fstatSync(r,o){return o?this.realFs.fstatSync(r,o):this.realFs.fstatSync(r)}async lstatPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.lstat(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.lstat(ue.fromPortablePath(r),this.makeCallback(a,n))})}lstatSync(r,o){return o?this.realFs.lstatSync(ue.fromPortablePath(r),o):this.realFs.lstatSync(ue.fromPortablePath(r))}async fchmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.fchmod(r,o,this.makeCallback(a,n))})}fchmodSync(r,o){return this.realFs.fchmodSync(r,o)}async chmodPromise(r,o){return await new Promise((a,n)=>{this.realFs.chmod(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}chmodSync(r,o){return this.realFs.chmodSync(ue.fromPortablePath(r),o)}async fchownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.fchown(r,o,a,this.makeCallback(n,u))})}fchownSync(r,o,a){return this.realFs.fchownSync(r,o,a)}async chownPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.chown(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}chownSync(r,o,a){return this.realFs.chownSync(ue.fromPortablePath(r),o,a)}async renamePromise(r,o){return await new Promise((a,n)=>{this.realFs.rename(ue.fromPortablePath(r),ue.fromPortablePath(o),this.makeCallback(a,n))})}renameSync(r,o){return this.realFs.renameSync(ue.fromPortablePath(r),ue.fromPortablePath(o))}async copyFilePromise(r,o,a=0){return await new Promise((n,u)=>{this.realFs.copyFile(ue.fromPortablePath(r),ue.fromPortablePath(o),a,this.makeCallback(n,u))})}copyFileSync(r,o,a=0){return this.realFs.copyFileSync(ue.fromPortablePath(r),ue.fromPortablePath(o),a)}async appendFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.appendFile(A,o,a,this.makeCallback(n,u)):this.realFs.appendFile(A,o,this.makeCallback(n,u))})}appendFileSync(r,o,a){let n=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.appendFileSync(n,o,a):this.realFs.appendFileSync(n,o)}async writeFilePromise(r,o,a){return await new Promise((n,u)=>{let A=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.writeFile(A,o,a,this.makeCallback(n,u)):this.realFs.writeFile(A,o,this.makeCallback(n,u))})}writeFileSync(r,o,a){let n=typeof r=="string"?ue.fromPortablePath(r):r;a?this.realFs.writeFileSync(n,o,a):this.realFs.writeFileSync(n,o)}async unlinkPromise(r){return await new Promise((o,a)=>{this.realFs.unlink(ue.fromPortablePath(r),this.makeCallback(o,a))})}unlinkSync(r){return this.realFs.unlinkSync(ue.fromPortablePath(r))}async utimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.utimes(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}utimesSync(r,o,a){this.realFs.utimesSync(ue.fromPortablePath(r),o,a)}async lutimesPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.lutimes(ue.fromPortablePath(r),o,a,this.makeCallback(n,u))})}lutimesSync(r,o,a){this.realFs.lutimesSync(ue.fromPortablePath(r),o,a)}async mkdirPromise(r,o){return await new Promise((a,n)=>{this.realFs.mkdir(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}mkdirSync(r,o){return this.realFs.mkdirSync(ue.fromPortablePath(r),o)}async rmdirPromise(r,o){return await new Promise((a,n)=>{o?this.realFs.rmdir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.rmdir(ue.fromPortablePath(r),this.makeCallback(a,n))})}rmdirSync(r,o){return this.realFs.rmdirSync(ue.fromPortablePath(r),o)}async linkPromise(r,o){return await new Promise((a,n)=>{this.realFs.link(ue.fromPortablePath(r),ue.fromPortablePath(o),this.makeCallback(a,n))})}linkSync(r,o){return this.realFs.linkSync(ue.fromPortablePath(r),ue.fromPortablePath(o))}async symlinkPromise(r,o,a){return await new Promise((n,u)=>{this.realFs.symlink(ue.fromPortablePath(r.replace(/\/+$/,"")),ue.fromPortablePath(o),a,this.makeCallback(n,u))})}symlinkSync(r,o,a){return this.realFs.symlinkSync(ue.fromPortablePath(r.replace(/\/+$/,"")),ue.fromPortablePath(o),a)}async readFilePromise(r,o){return await new Promise((a,n)=>{let u=typeof r=="string"?ue.fromPortablePath(r):r;this.realFs.readFile(u,o,this.makeCallback(a,n))})}readFileSync(r,o){let a=typeof r=="string"?ue.fromPortablePath(r):r;return this.realFs.readFileSync(a,o)}async readdirPromise(r,o){return await new Promise((a,n)=>{o?o.recursive&&process.platform==="win32"?o.withFileTypes?this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(u=>a(u.map(W7)),n)):this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(u=>a(u.map(ue.toPortablePath)),n)):this.realFs.readdir(ue.fromPortablePath(r),o,this.makeCallback(a,n)):this.realFs.readdir(ue.fromPortablePath(r),this.makeCallback(a,n))})}readdirSync(r,o){return o?o.recursive&&process.platform==="win32"?o.withFileTypes?this.realFs.readdirSync(ue.fromPortablePath(r),o).map(W7):this.realFs.readdirSync(ue.fromPortablePath(r),o).map(ue.toPortablePath):this.realFs.readdirSync(ue.fromPortablePath(r),o):this.realFs.readdirSync(ue.fromPortablePath(r))}async readlinkPromise(r){return await new Promise((o,a)=>{this.realFs.readlink(ue.fromPortablePath(r),this.makeCallback(o,a))}).then(o=>ue.toPortablePath(o))}readlinkSync(r){return ue.toPortablePath(this.realFs.readlinkSync(ue.fromPortablePath(r)))}async truncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.truncate(ue.fromPortablePath(r),o,this.makeCallback(a,n))})}truncateSync(r,o){return this.realFs.truncateSync(ue.fromPortablePath(r),o)}async ftruncatePromise(r,o){return await new Promise((a,n)=>{this.realFs.ftruncate(r,o,this.makeCallback(a,n))})}ftruncateSync(r,o){return this.realFs.ftruncateSync(r,o)}watch(r,o,a){return this.realFs.watch(ue.fromPortablePath(r),o,a)}watchFile(r,o,a){return this.realFs.watchFile(ue.fromPortablePath(r),o,a)}unwatchFile(r,o){return this.realFs.unwatchFile(ue.fromPortablePath(r),o)}makeCallback(r,o){return(a,n)=>{a?o(a):r(n)}}}});var gn,K7=Et(()=>{Hg();gf();Ca();gn=class extends Ps{constructor(r,{baseFs:o=new Rn}={}){super(K);this.target=this.pathUtils.normalize(r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.target)}resolve(r){return this.pathUtils.isAbsolute(r)?K.normalize(r):this.baseFs.resolve(K.join(this.target,r))}mapFromBase(r){return r}mapToBase(r){return this.pathUtils.isAbsolute(r)?r:this.pathUtils.join(this.target,r)}}});var J7,_u,z7=Et(()=>{Hg();gf();Ca();J7=Bt.root,_u=class extends Ps{constructor(r,{baseFs:o=new Rn}={}){super(K);this.target=this.pathUtils.resolve(Bt.root,r),this.baseFs=o}getRealPath(){return this.pathUtils.resolve(this.baseFs.getRealPath(),this.pathUtils.relative(Bt.root,this.target))}getTarget(){return this.target}getBaseFs(){return this.baseFs}mapToBase(r){let o=this.pathUtils.normalize(r);if(this.pathUtils.isAbsolute(r))return this.pathUtils.resolve(this.target,this.pathUtils.relative(J7,r));if(o.match(/^\.\.\/?/))throw new Error(`Resolving this path (${r}) would escape the jail`);return this.pathUtils.resolve(this.target,r)}mapFromBase(r){return this.pathUtils.resolve(J7,this.pathUtils.relative(this.target,r))}}});var ny,X7=Et(()=>{gf();ny=class extends Ps{constructor(r,o){super(o);this.instance=null;this.factory=r}get baseFs(){return this.instance||(this.instance=this.factory()),this.instance}set baseFs(r){this.instance=r}mapFromBase(r){return r}mapToBase(r){return r}}});var jg,wa,_p,Z7=Et(()=>{jg=Be("fs");_g();Hg();VT();BD();Ca();wa=4278190080,_p=class extends Ou{constructor({baseFs:r=new Rn,filter:o=null,magicByte:a=42,maxOpenFiles:n=1/0,useCache:u=!0,maxAge:A=5e3,typeCheck:p=jg.constants.S_IFREG,getMountPoint:h,factoryPromise:E,factorySync:I}){if(Math.floor(a)!==a||!(a>1&&a<=127))throw new Error("The magic byte must be set to a round value between 1 and 127 included");super();this.fdMap=new Map;this.nextFd=3;this.isMount=new Set;this.notMount=new Set;this.realPaths=new Map;this.limitOpenFilesTimeout=null;this.baseFs=r,this.mountInstances=u?new Map:null,this.factoryPromise=E,this.factorySync=I,this.filter=o,this.getMountPoint=h,this.magic=a<<24,this.maxAge=A,this.maxOpenFiles=n,this.typeCheck=p}getExtractHint(r){return this.baseFs.getExtractHint(r)}getRealPath(){return this.baseFs.getRealPath()}saveAndClose(){if(Og(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.saveAndClose?.(),this.mountInstances.delete(r)}discardAndClose(){if(Og(this),this.mountInstances)for(let[r,{childFs:o}]of this.mountInstances.entries())o.discardAndClose?.(),this.mountInstances.delete(r)}resolve(r){return this.baseFs.resolve(r)}remapFd(r,o){let a=this.nextFd++|this.magic;return this.fdMap.set(a,[r,o]),a}async openPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.openPromise(r,o,a),async(n,{subPath:u})=>this.remapFd(n,await n.openPromise(u,o,a)))}openSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.openSync(r,o,a),(n,{subPath:u})=>this.remapFd(n,n.openSync(u,o,a)))}async opendirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.opendirPromise(r,o),async(a,{subPath:n})=>await a.opendirPromise(n,o),{requireSubpath:!1})}opendirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.opendirSync(r,o),(a,{subPath:n})=>a.opendirSync(n,o),{requireSubpath:!1})}async readPromise(r,o,a,n,u){if((r&wa)!==this.magic)return await this.baseFs.readPromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("read");let[p,h]=A;return await p.readPromise(h,o,a,n,u)}readSync(r,o,a,n,u){if((r&wa)!==this.magic)return this.baseFs.readSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("readSync");let[p,h]=A;return p.readSync(h,o,a,n,u)}async writePromise(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?await this.baseFs.writePromise(r,o,a):await this.baseFs.writePromise(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("write");let[p,h]=A;return typeof o=="string"?await p.writePromise(h,o,a):await p.writePromise(h,o,a,n,u)}writeSync(r,o,a,n,u){if((r&wa)!==this.magic)return typeof o=="string"?this.baseFs.writeSync(r,o,a):this.baseFs.writeSync(r,o,a,n,u);let A=this.fdMap.get(r);if(typeof A>"u")throw Io("writeSync");let[p,h]=A;return typeof o=="string"?p.writeSync(h,o,a):p.writeSync(h,o,a,n,u)}async closePromise(r){if((r&wa)!==this.magic)return await this.baseFs.closePromise(r);let o=this.fdMap.get(r);if(typeof o>"u")throw Io("close");this.fdMap.delete(r);let[a,n]=o;return await a.closePromise(n)}closeSync(r){if((r&wa)!==this.magic)return this.baseFs.closeSync(r);let o=this.fdMap.get(r);if(typeof o>"u")throw Io("closeSync");this.fdMap.delete(r);let[a,n]=o;return a.closeSync(n)}createReadStream(r,o){return r===null?this.baseFs.createReadStream(r,o):this.makeCallSync(r,()=>this.baseFs.createReadStream(r,o),(a,{archivePath:n,subPath:u})=>{let A=a.createReadStream(u,o);return A.path=ue.fromPortablePath(this.pathUtils.join(n,u)),A})}createWriteStream(r,o){return r===null?this.baseFs.createWriteStream(r,o):this.makeCallSync(r,()=>this.baseFs.createWriteStream(r,o),(a,{subPath:n})=>a.createWriteStream(n,o))}async realpathPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.realpathPromise(r),async(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=await this.baseFs.realpathPromise(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,await o.realpathPromise(n)))})}realpathSync(r){return this.makeCallSync(r,()=>this.baseFs.realpathSync(r),(o,{archivePath:a,subPath:n})=>{let u=this.realPaths.get(a);return typeof u>"u"&&(u=this.baseFs.realpathSync(a),this.realPaths.set(a,u)),this.pathUtils.join(u,this.pathUtils.relative(Bt.root,o.realpathSync(n)))})}async existsPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.existsPromise(r),async(o,{subPath:a})=>await o.existsPromise(a))}existsSync(r){return this.makeCallSync(r,()=>this.baseFs.existsSync(r),(o,{subPath:a})=>o.existsSync(a))}async accessPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.accessPromise(r,o),async(a,{subPath:n})=>await a.accessPromise(n,o))}accessSync(r,o){return this.makeCallSync(r,()=>this.baseFs.accessSync(r,o),(a,{subPath:n})=>a.accessSync(n,o))}async statPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.statPromise(r,o),async(a,{subPath:n})=>await a.statPromise(n,o))}statSync(r,o){return this.makeCallSync(r,()=>this.baseFs.statSync(r,o),(a,{subPath:n})=>a.statSync(n,o))}async fstatPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fstat");let[n,u]=a;return n.fstatPromise(u,o)}fstatSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fstatSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fstatSync");let[n,u]=a;return n.fstatSync(u,o)}async lstatPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.lstatPromise(r,o),async(a,{subPath:n})=>await a.lstatPromise(n,o))}lstatSync(r,o){return this.makeCallSync(r,()=>this.baseFs.lstatSync(r,o),(a,{subPath:n})=>a.lstatSync(n,o))}async fchmodPromise(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodPromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fchmod");let[n,u]=a;return n.fchmodPromise(u,o)}fchmodSync(r,o){if((r&wa)!==this.magic)return this.baseFs.fchmodSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("fchmodSync");let[n,u]=a;return n.fchmodSync(u,o)}async chmodPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.chmodPromise(r,o),async(a,{subPath:n})=>await a.chmodPromise(n,o))}chmodSync(r,o){return this.makeCallSync(r,()=>this.baseFs.chmodSync(r,o),(a,{subPath:n})=>a.chmodSync(n,o))}async fchownPromise(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownPromise(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Io("fchown");let[u,A]=n;return u.fchownPromise(A,o,a)}fchownSync(r,o,a){if((r&wa)!==this.magic)return this.baseFs.fchownSync(r,o,a);let n=this.fdMap.get(r);if(typeof n>"u")throw Io("fchownSync");let[u,A]=n;return u.fchownSync(A,o,a)}async chownPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.chownPromise(r,o,a),async(n,{subPath:u})=>await n.chownPromise(u,o,a))}chownSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.chownSync(r,o,a),(n,{subPath:u})=>n.chownSync(u,o,a))}async renamePromise(r,o){return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.renamePromise(r,o),async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),async(a,{subPath:n})=>await this.makeCallPromise(o,async()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},async(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return await a.renamePromise(n,A)}))}renameSync(r,o){return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.renameSync(r,o),()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})}),(a,{subPath:n})=>this.makeCallSync(o,()=>{throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"})},(u,{subPath:A})=>{if(a!==u)throw Object.assign(new Error("EEXDEV: cross-device link not permitted"),{code:"EEXDEV"});return a.renameSync(n,A)}))}async copyFilePromise(r,o,a=0){let n=async(u,A,p,h)=>{if((a&jg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&jg.constants.COPYFILE_EXCL&&await this.existsPromise(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=await u.readFilePromise(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}await p.writeFilePromise(h,E)};return await this.makeCallPromise(r,async()=>await this.makeCallPromise(o,async()=>await this.baseFs.copyFilePromise(r,o,a),async(u,{subPath:A})=>await n(this.baseFs,r,u,A)),async(u,{subPath:A})=>await this.makeCallPromise(o,async()=>await n(u,A,this.baseFs,o),async(p,{subPath:h})=>u!==p?await n(u,A,p,h):await u.copyFilePromise(A,h,a)))}copyFileSync(r,o,a=0){let n=(u,A,p,h)=>{if((a&jg.constants.COPYFILE_FICLONE_FORCE)!==0)throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${A}' -> ${h}'`),{code:"EXDEV"});if(a&jg.constants.COPYFILE_EXCL&&this.existsSync(A))throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${A}' -> '${h}'`),{code:"EEXIST"});let E;try{E=u.readFileSync(A)}catch{throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${A}' -> '${h}'`),{code:"EINVAL"})}p.writeFileSync(h,E)};return this.makeCallSync(r,()=>this.makeCallSync(o,()=>this.baseFs.copyFileSync(r,o,a),(u,{subPath:A})=>n(this.baseFs,r,u,A)),(u,{subPath:A})=>this.makeCallSync(o,()=>n(u,A,this.baseFs,o),(p,{subPath:h})=>u!==p?n(u,A,p,h):u.copyFileSync(A,h,a)))}async appendFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.appendFilePromise(r,o,a),async(n,{subPath:u})=>await n.appendFilePromise(u,o,a))}appendFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.appendFileSync(r,o,a),(n,{subPath:u})=>n.appendFileSync(u,o,a))}async writeFilePromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.writeFilePromise(r,o,a),async(n,{subPath:u})=>await n.writeFilePromise(u,o,a))}writeFileSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.writeFileSync(r,o,a),(n,{subPath:u})=>n.writeFileSync(u,o,a))}async unlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.unlinkPromise(r),async(o,{subPath:a})=>await o.unlinkPromise(a))}unlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.unlinkSync(r),(o,{subPath:a})=>o.unlinkSync(a))}async utimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.utimesPromise(r,o,a),async(n,{subPath:u})=>await n.utimesPromise(u,o,a))}utimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.utimesSync(r,o,a),(n,{subPath:u})=>n.utimesSync(u,o,a))}async lutimesPromise(r,o,a){return await this.makeCallPromise(r,async()=>await this.baseFs.lutimesPromise(r,o,a),async(n,{subPath:u})=>await n.lutimesPromise(u,o,a))}lutimesSync(r,o,a){return this.makeCallSync(r,()=>this.baseFs.lutimesSync(r,o,a),(n,{subPath:u})=>n.lutimesSync(u,o,a))}async mkdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.mkdirPromise(r,o),async(a,{subPath:n})=>await a.mkdirPromise(n,o))}mkdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.mkdirSync(r,o),(a,{subPath:n})=>a.mkdirSync(n,o))}async rmdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.rmdirPromise(r,o),async(a,{subPath:n})=>await a.rmdirPromise(n,o))}rmdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.rmdirSync(r,o),(a,{subPath:n})=>a.rmdirSync(n,o))}async linkPromise(r,o){return await this.makeCallPromise(o,async()=>await this.baseFs.linkPromise(r,o),async(a,{subPath:n})=>await a.linkPromise(r,n))}linkSync(r,o){return this.makeCallSync(o,()=>this.baseFs.linkSync(r,o),(a,{subPath:n})=>a.linkSync(r,n))}async symlinkPromise(r,o,a){return await this.makeCallPromise(o,async()=>await this.baseFs.symlinkPromise(r,o,a),async(n,{subPath:u})=>await n.symlinkPromise(r,u))}symlinkSync(r,o,a){return this.makeCallSync(o,()=>this.baseFs.symlinkSync(r,o,a),(n,{subPath:u})=>n.symlinkSync(r,u))}async readFilePromise(r,o){return this.makeCallPromise(r,async()=>await this.baseFs.readFilePromise(r,o),async(a,{subPath:n})=>await a.readFilePromise(n,o))}readFileSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readFileSync(r,o),(a,{subPath:n})=>a.readFileSync(n,o))}async readdirPromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.readdirPromise(r,o),async(a,{subPath:n})=>await a.readdirPromise(n,o),{requireSubpath:!1})}readdirSync(r,o){return this.makeCallSync(r,()=>this.baseFs.readdirSync(r,o),(a,{subPath:n})=>a.readdirSync(n,o),{requireSubpath:!1})}async readlinkPromise(r){return await this.makeCallPromise(r,async()=>await this.baseFs.readlinkPromise(r),async(o,{subPath:a})=>await o.readlinkPromise(a))}readlinkSync(r){return this.makeCallSync(r,()=>this.baseFs.readlinkSync(r),(o,{subPath:a})=>o.readlinkSync(a))}async truncatePromise(r,o){return await this.makeCallPromise(r,async()=>await this.baseFs.truncatePromise(r,o),async(a,{subPath:n})=>await a.truncatePromise(n,o))}truncateSync(r,o){return this.makeCallSync(r,()=>this.baseFs.truncateSync(r,o),(a,{subPath:n})=>a.truncateSync(n,o))}async ftruncatePromise(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncatePromise(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("ftruncate");let[n,u]=a;return n.ftruncatePromise(u,o)}ftruncateSync(r,o){if((r&wa)!==this.magic)return this.baseFs.ftruncateSync(r,o);let a=this.fdMap.get(r);if(typeof a>"u")throw Io("ftruncateSync");let[n,u]=a;return n.ftruncateSync(u,o)}watch(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watch(r,o,a),(n,{subPath:u})=>n.watch(u,o,a))}watchFile(r,o,a){return this.makeCallSync(r,()=>this.baseFs.watchFile(r,o,a),()=>ry(this,r,o,a))}unwatchFile(r,o){return this.makeCallSync(r,()=>this.baseFs.unwatchFile(r,o),()=>Mg(this,r,o))}async makeCallPromise(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return await o();let u=this.resolve(r),A=this.findMount(u);return A?n&&A.subPath==="/"?await o():await this.getMountPromise(A.archivePath,async p=>await a(p,A)):await o()}makeCallSync(r,o,a,{requireSubpath:n=!0}={}){if(typeof r!="string")return o();let u=this.resolve(r),A=this.findMount(u);return!A||n&&A.subPath==="/"?o():this.getMountSync(A.archivePath,p=>a(p,A))}findMount(r){if(this.filter&&!this.filter.test(r))return null;let o="";for(;;){let a=r.substring(o.length),n=this.getMountPoint(a,o);if(!n)return null;if(o=this.pathUtils.join(o,n),!this.isMount.has(o)){if(this.notMount.has(o))continue;try{if(this.typeCheck!==null&&(this.baseFs.lstatSync(o).mode&jg.constants.S_IFMT)!==this.typeCheck){this.notMount.add(o);continue}}catch{return null}this.isMount.add(o)}return{archivePath:o,subPath:this.pathUtils.join(Bt.root,r.substring(o.length))}}}limitOpenFiles(r){if(this.mountInstances===null)return;let o=Date.now(),a=o+this.maxAge,n=r===null?0:this.mountInstances.size-r;for(let[u,{childFs:A,expiresAt:p,refCount:h}]of this.mountInstances.entries())if(!(h!==0||A.hasOpenFileHandles?.())){if(o>=p){A.saveAndClose?.(),this.mountInstances.delete(u),n-=1;continue}else if(r===null||n<=0){a=p;break}A.saveAndClose?.(),this.mountInstances.delete(u),n-=1}this.limitOpenFilesTimeout===null&&(r===null&&this.mountInstances.size>0||r!==null)&&isFinite(a)&&(this.limitOpenFilesTimeout=setTimeout(()=>{this.limitOpenFilesTimeout=null,this.limitOpenFiles(null)},a-o).unref())}async getMountPromise(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);if(!a){let n=await this.factoryPromise(this.baseFs,r);a=this.mountInstances.get(r),a||(a={childFs:n(),expiresAt:0,refCount:0})}this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,a.refCount+=1;try{return await o(a.childFs)}finally{a.refCount-=1}}else{let a=(await this.factoryPromise(this.baseFs,r))();try{return await o(a)}finally{a.saveAndClose?.()}}}getMountSync(r,o){if(this.mountInstances){let a=this.mountInstances.get(r);return a||(a={childFs:this.factorySync(this.baseFs,r),expiresAt:0,refCount:0}),this.mountInstances.delete(r),this.limitOpenFiles(this.maxOpenFiles-1),this.mountInstances.set(r,a),a.expiresAt=Date.now()+this.maxAge,o(a.childFs)}else{let a=this.factorySync(this.baseFs,r);try{return o(a)}finally{a.saveAndClose?.()}}}}});var Zt,KT,Gw,$7=Et(()=>{_g();Ca();Zt=()=>Object.assign(new Error("ENOSYS: unsupported filesystem access"),{code:"ENOSYS"}),KT=class extends hf{constructor(){super(K)}getExtractHint(){throw Zt()}getRealPath(){throw Zt()}resolve(){throw Zt()}async openPromise(){throw Zt()}openSync(){throw Zt()}async opendirPromise(){throw Zt()}opendirSync(){throw Zt()}async readPromise(){throw Zt()}readSync(){throw Zt()}async writePromise(){throw Zt()}writeSync(){throw Zt()}async closePromise(){throw Zt()}closeSync(){throw Zt()}createWriteStream(){throw Zt()}createReadStream(){throw Zt()}async realpathPromise(){throw Zt()}realpathSync(){throw Zt()}async readdirPromise(){throw Zt()}readdirSync(){throw Zt()}async existsPromise(e){throw Zt()}existsSync(e){throw Zt()}async accessPromise(){throw Zt()}accessSync(){throw Zt()}async statPromise(){throw Zt()}statSync(){throw Zt()}async fstatPromise(e){throw Zt()}fstatSync(e){throw Zt()}async lstatPromise(e){throw Zt()}lstatSync(e){throw Zt()}async fchmodPromise(){throw Zt()}fchmodSync(){throw Zt()}async chmodPromise(){throw Zt()}chmodSync(){throw Zt()}async fchownPromise(){throw Zt()}fchownSync(){throw Zt()}async chownPromise(){throw Zt()}chownSync(){throw Zt()}async mkdirPromise(){throw Zt()}mkdirSync(){throw Zt()}async rmdirPromise(){throw Zt()}rmdirSync(){throw Zt()}async linkPromise(){throw Zt()}linkSync(){throw Zt()}async symlinkPromise(){throw Zt()}symlinkSync(){throw Zt()}async renamePromise(){throw Zt()}renameSync(){throw Zt()}async copyFilePromise(){throw Zt()}copyFileSync(){throw Zt()}async appendFilePromise(){throw Zt()}appendFileSync(){throw Zt()}async writeFilePromise(){throw Zt()}writeFileSync(){throw Zt()}async unlinkPromise(){throw Zt()}unlinkSync(){throw Zt()}async utimesPromise(){throw Zt()}utimesSync(){throw Zt()}async lutimesPromise(){throw Zt()}lutimesSync(){throw Zt()}async readFilePromise(){throw Zt()}readFileSync(){throw Zt()}async readlinkPromise(){throw Zt()}readlinkSync(){throw Zt()}async truncatePromise(){throw Zt()}truncateSync(){throw Zt()}async ftruncatePromise(e,r){throw Zt()}ftruncateSync(e,r){throw Zt()}watch(){throw Zt()}watchFile(){throw Zt()}unwatchFile(){throw Zt()}},Gw=KT;Gw.instance=new KT});var Hp,eY=Et(()=>{gf();Ca();Hp=class extends Ps{constructor(r){super(ue);this.baseFs=r}mapFromBase(r){return ue.fromPortablePath(r)}mapToBase(r){return ue.toPortablePath(r)}}});var R_e,JT,N_e,mi,tY=Et(()=>{Hg();gf();Ca();R_e=/^[0-9]+$/,JT=/^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/,N_e=/^([^/]+-)?[a-f0-9]+$/,mi=class extends Ps{constructor({baseFs:r=new Rn}={}){super(K);this.baseFs=r}static makeVirtualPath(r,o,a){if(K.basename(r)!=="__virtual__")throw new Error('Assertion failed: Virtual folders must be named "__virtual__"');if(!K.basename(o).match(N_e))throw new Error("Assertion failed: Virtual components must be ended by an hexadecimal hash");let u=K.relative(K.dirname(r),a).split("/"),A=0;for(;A{zT=$e(Be("buffer")),kD=Be("url"),rY=Be("util");gf();Ca();bD=class extends Ps{constructor(r){super(ue);this.baseFs=r}mapFromBase(r){return r}mapToBase(r){if(typeof r=="string")return r;if(r instanceof kD.URL)return(0,kD.fileURLToPath)(r);if(Buffer.isBuffer(r)){let o=r.toString();if(!L_e(r,o))throw new Error("Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942");return o}throw new Error(`Unsupported path type: ${(0,rY.inspect)(r)}`)}}});var iY,Bo,df,jp,QD,FD,iy,Rc,Nc,M_e,O_e,U_e,__e,Yw,sY=Et(()=>{iY=Be("readline"),Bo=Symbol("kBaseFs"),df=Symbol("kFd"),jp=Symbol("kClosePromise"),QD=Symbol("kCloseResolve"),FD=Symbol("kCloseReject"),iy=Symbol("kRefs"),Rc=Symbol("kRef"),Nc=Symbol("kUnref"),Yw=class{constructor(e,r){this[M_e]=1;this[O_e]=void 0;this[U_e]=void 0;this[__e]=void 0;this[Bo]=r,this[df]=e}get fd(){return this[df]}async appendFile(e,r){try{this[Rc](this.appendFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;return await this[Bo].appendFilePromise(this.fd,e,o?{encoding:o}:void 0)}finally{this[Nc]()}}async chown(e,r){try{return this[Rc](this.chown),await this[Bo].fchownPromise(this.fd,e,r)}finally{this[Nc]()}}async chmod(e){try{return this[Rc](this.chmod),await this[Bo].fchmodPromise(this.fd,e)}finally{this[Nc]()}}createReadStream(e){return this[Bo].createReadStream(null,{...e,fd:this.fd})}createWriteStream(e){return this[Bo].createWriteStream(null,{...e,fd:this.fd})}datasync(){throw new Error("Method not implemented.")}sync(){throw new Error("Method not implemented.")}async read(e,r,o,a){try{this[Rc](this.read);let n;return Buffer.isBuffer(e)?n=e:(e??={},n=e.buffer??Buffer.alloc(16384),r=e.offset||0,o=e.length??n.byteLength,a=e.position??null),r??=0,o??=0,o===0?{bytesRead:o,buffer:n}:{bytesRead:await this[Bo].readPromise(this.fd,n,r,o,a),buffer:n}}finally{this[Nc]()}}async readFile(e){try{this[Rc](this.readFile);let r=(typeof e=="string"?e:e?.encoding)??void 0;return await this[Bo].readFilePromise(this.fd,r)}finally{this[Nc]()}}readLines(e){return(0,iY.createInterface)({input:this.createReadStream(e),crlfDelay:1/0})}async stat(e){try{return this[Rc](this.stat),await this[Bo].fstatPromise(this.fd,e)}finally{this[Nc]()}}async truncate(e){try{return this[Rc](this.truncate),await this[Bo].ftruncatePromise(this.fd,e)}finally{this[Nc]()}}utimes(e,r){throw new Error("Method not implemented.")}async writeFile(e,r){try{this[Rc](this.writeFile);let o=(typeof r=="string"?r:r?.encoding)??void 0;await this[Bo].writeFilePromise(this.fd,e,o)}finally{this[Nc]()}}async write(...e){try{if(this[Rc](this.write),ArrayBuffer.isView(e[0])){let[r,o,a,n]=e;return{bytesWritten:await this[Bo].writePromise(this.fd,r,o??void 0,a??void 0,n??void 0),buffer:r}}else{let[r,o,a]=e;return{bytesWritten:await this[Bo].writePromise(this.fd,r,o,a),buffer:r}}}finally{this[Nc]()}}async writev(e,r){try{this[Rc](this.writev);let o=0;if(typeof r<"u")for(let a of e){let n=await this.write(a,void 0,void 0,r);o+=n.bytesWritten,r+=n.bytesWritten}else for(let a of e){let n=await this.write(a);o+=n.bytesWritten}return{buffers:e,bytesWritten:o}}finally{this[Nc]()}}readv(e,r){throw new Error("Method not implemented.")}close(){if(this[df]===-1)return Promise.resolve();if(this[jp])return this[jp];if(this[iy]--,this[iy]===0){let e=this[df];this[df]=-1,this[jp]=this[Bo].closePromise(e).finally(()=>{this[jp]=void 0})}else this[jp]=new Promise((e,r)=>{this[QD]=e,this[FD]=r}).finally(()=>{this[jp]=void 0,this[FD]=void 0,this[QD]=void 0});return this[jp]}[(Bo,df,M_e=iy,O_e=jp,U_e=QD,__e=FD,Rc)](e){if(this[df]===-1){let r=new Error("file closed");throw r.code="EBADF",r.syscall=e.name,r}this[iy]++}[Nc](){if(this[iy]--,this[iy]===0){let e=this[df];this[df]=-1,this[Bo].closePromise(e).then(this[QD],this[FD])}}}});function Ww(t,e){e=new bD(e);let r=(o,a,n)=>{let u=o[a];o[a]=n,typeof u?.[sy.promisify.custom]<"u"&&(n[sy.promisify.custom]=u[sy.promisify.custom])};{r(t,"exists",(o,...a)=>{let u=typeof a[a.length-1]=="function"?a.pop():()=>{};process.nextTick(()=>{e.existsPromise(o).then(A=>{u(A)},()=>{u(!1)})})}),r(t,"read",(...o)=>{let[a,n,u,A,p,h]=o;if(o.length<=3){let E={};o.length<3?h=o[1]:(E=o[1],h=o[2]),{buffer:n=Buffer.alloc(16384),offset:u=0,length:A=n.byteLength,position:p}=E}if(u==null&&(u=0),A|=0,A===0){process.nextTick(()=>{h(null,0,n)});return}p==null&&(p=-1),process.nextTick(()=>{e.readPromise(a,n,u,A,p).then(E=>{h(null,E,n)},E=>{h(E,0,n)})})});for(let o of oY){let a=o.replace(/Promise$/,"");if(typeof t[a]>"u")continue;let n=e[o];if(typeof n>"u")continue;r(t,a,(...A)=>{let h=typeof A[A.length-1]=="function"?A.pop():()=>{};process.nextTick(()=>{n.apply(e,A).then(E=>{h(null,E)},E=>{h(E)})})})}t.realpath.native=t.realpath}{r(t,"existsSync",o=>{try{return e.existsSync(o)}catch{return!1}}),r(t,"readSync",(...o)=>{let[a,n,u,A,p]=o;return o.length<=3&&({offset:u=0,length:A=n.byteLength,position:p}=o[2]||{}),u==null&&(u=0),A|=0,A===0?0:(p==null&&(p=-1),e.readSync(a,n,u,A,p))});for(let o of H_e){let a=o;if(typeof t[a]>"u")continue;let n=e[o];typeof n>"u"||r(t,a,n.bind(e))}t.realpathSync.native=t.realpathSync}{let o=t.promises;for(let a of oY){let n=a.replace(/Promise$/,"");if(typeof o[n]>"u")continue;let u=e[a];typeof u>"u"||a!=="open"&&r(o,n,(A,...p)=>A instanceof Yw?A[n].apply(A,p):u.call(e,A,...p))}r(o,"open",async(...a)=>{let n=await e.openPromise(...a);return new Yw(n,e)})}t.read[sy.promisify.custom]=async(o,a,...n)=>({bytesRead:await e.readPromise(o,a,...n),buffer:a}),t.write[sy.promisify.custom]=async(o,a,...n)=>({bytesWritten:await e.writePromise(o,a,...n),buffer:a})}function TD(t,e){let r=Object.create(t);return Ww(r,e),r}var sy,H_e,oY,aY=Et(()=>{sy=Be("util");nY();sY();H_e=new Set(["accessSync","appendFileSync","createReadStream","createWriteStream","chmodSync","fchmodSync","chownSync","fchownSync","closeSync","copyFileSync","linkSync","lstatSync","fstatSync","lutimesSync","mkdirSync","openSync","opendirSync","readlinkSync","readFileSync","readdirSync","readlinkSync","realpathSync","renameSync","rmdirSync","statSync","symlinkSync","truncateSync","ftruncateSync","unlinkSync","unwatchFile","utimesSync","watch","watchFile","writeFileSync","writeSync"]),oY=new Set(["accessPromise","appendFilePromise","fchmodPromise","chmodPromise","fchownPromise","chownPromise","closePromise","copyFilePromise","linkPromise","fstatPromise","lstatPromise","lutimesPromise","mkdirPromise","openPromise","opendirPromise","readdirPromise","realpathPromise","readFilePromise","readdirPromise","readlinkPromise","renamePromise","rmdirPromise","statPromise","symlinkPromise","truncatePromise","ftruncatePromise","unlinkPromise","utimesPromise","writeFilePromise","writeSync"])});function lY(t){let e=Math.ceil(Math.random()*4294967296).toString(16).padStart(8,"0");return`${t}${e}`}function cY(){if(XT)return XT;let t=ue.toPortablePath(uY.default.tmpdir()),e=oe.realpathSync(t);return process.once("exit",()=>{oe.rmtempSync()}),XT={tmpdir:t,realTmpdir:e}}var uY,Lc,XT,oe,AY=Et(()=>{uY=$e(Be("os"));Hg();Ca();Lc=new Set,XT=null;oe=Object.assign(new Rn,{detachTemp(t){Lc.delete(t)},mktempSync(t){let{tmpdir:e,realTmpdir:r}=cY();for(;;){let o=lY("xfs-");try{this.mkdirSync(K.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=K.join(r,o);if(Lc.add(a),typeof t>"u")return a;try{return t(a)}finally{if(Lc.has(a)){Lc.delete(a);try{this.removeSync(a)}catch{}}}}},async mktempPromise(t){let{tmpdir:e,realTmpdir:r}=cY();for(;;){let o=lY("xfs-");try{await this.mkdirPromise(K.join(e,o))}catch(n){if(n.code==="EEXIST")continue;throw n}let a=K.join(r,o);if(Lc.add(a),typeof t>"u")return a;try{return await t(a)}finally{if(Lc.has(a)){Lc.delete(a);try{await this.removePromise(a)}catch{}}}}},async rmtempPromise(){await Promise.all(Array.from(Lc.values()).map(async t=>{try{await oe.removePromise(t,{maxRetries:0}),Lc.delete(t)}catch{}}))},rmtempSync(){for(let t of Lc)try{oe.removeSync(t),Lc.delete(t)}catch{}}})});var Vw={};Kt(Vw,{AliasFS:()=>Uu,BasePortableFakeFS:()=>Ou,CustomDir:()=>qw,CwdFS:()=>gn,FakeFS:()=>hf,Filename:()=>dr,JailFS:()=>_u,LazyFS:()=>ny,MountFS:()=>_p,NoFS:()=>Gw,NodeFS:()=>Rn,PortablePath:()=>Bt,PosixFS:()=>Hp,ProxiedFS:()=>Ps,VirtualFS:()=>mi,constants:()=>vi,errors:()=>ar,extendFs:()=>TD,normalizeLineEndings:()=>Ug,npath:()=>ue,opendir:()=>SD,patchFs:()=>Ww,ppath:()=>K,setupCopyIndex:()=>PD,statUtils:()=>Ea,unwatchAllFiles:()=>Og,unwatchFile:()=>Mg,watchFile:()=>ry,xfs:()=>oe});var Pt=Et(()=>{T7();BD();qT();WT();U7();VT();_g();Ca();Ca();Y7();_g();K7();z7();X7();Z7();$7();Hg();eY();gf();tY();aY();AY()});var dY=_((axt,gY)=>{gY.exports=hY;hY.sync=q_e;var fY=Be("fs");function j_e(t,e){var r=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!r||(r=r.split(";"),r.indexOf("")!==-1))return!0;for(var o=0;o{CY.exports=yY;yY.sync=G_e;var mY=Be("fs");function yY(t,e,r){mY.stat(t,function(o,a){r(o,o?!1:EY(a,e))})}function G_e(t,e){return EY(mY.statSync(t),e)}function EY(t,e){return t.isFile()&&Y_e(t,e)}function Y_e(t,e){var r=t.mode,o=t.uid,a=t.gid,n=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),u=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),A=parseInt("100",8),p=parseInt("010",8),h=parseInt("001",8),E=A|p,I=r&h||r&p&&a===u||r&A&&o===n||r&E&&n===0;return I}});var BY=_((uxt,IY)=>{var cxt=Be("fs"),RD;process.platform==="win32"||global.TESTING_WINDOWS?RD=dY():RD=wY();IY.exports=ZT;ZT.sync=W_e;function ZT(t,e,r){if(typeof e=="function"&&(r=e,e={}),!r){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(o,a){ZT(t,e||{},function(n,u){n?a(n):o(u)})})}RD(t,e||{},function(o,a){o&&(o.code==="EACCES"||e&&e.ignoreErrors)&&(o=null,a=!1),r(o,a)})}function W_e(t,e){try{return RD.sync(t,e||{})}catch(r){if(e&&e.ignoreErrors||r.code==="EACCES")return!1;throw r}}});var kY=_((Axt,bY)=>{var oy=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",vY=Be("path"),V_e=oy?";":":",DY=BY(),PY=t=>Object.assign(new Error(`not found: ${t}`),{code:"ENOENT"}),SY=(t,e)=>{let r=e.colon||V_e,o=t.match(/\//)||oy&&t.match(/\\/)?[""]:[...oy?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(r)],a=oy?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",n=oy?a.split(r):[""];return oy&&t.indexOf(".")!==-1&&n[0]!==""&&n.unshift(""),{pathEnv:o,pathExt:n,pathExtExe:a}},xY=(t,e,r)=>{typeof e=="function"&&(r=e,e={}),e||(e={});let{pathEnv:o,pathExt:a,pathExtExe:n}=SY(t,e),u=[],A=h=>new Promise((E,I)=>{if(h===o.length)return e.all&&u.length?E(u):I(PY(t));let v=o[h],b=/^".*"$/.test(v)?v.slice(1,-1):v,C=vY.join(b,t),T=!b&&/^\.[\\\/]/.test(t)?t.slice(0,2)+C:C;E(p(T,h,0))}),p=(h,E,I)=>new Promise((v,b)=>{if(I===a.length)return v(A(E+1));let C=a[I];DY(h+C,{pathExt:n},(T,L)=>{if(!T&&L)if(e.all)u.push(h+C);else return v(h+C);return v(p(h,E,I+1))})});return r?A(0).then(h=>r(null,h),r):A(0)},K_e=(t,e)=>{e=e||{};let{pathEnv:r,pathExt:o,pathExtExe:a}=SY(t,e),n=[];for(let u=0;u{"use strict";var QY=(t={})=>{let e=t.env||process.env;return(t.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(o=>o.toUpperCase()==="PATH")||"Path"};$T.exports=QY;$T.exports.default=QY});var LY=_((pxt,NY)=>{"use strict";var TY=Be("path"),J_e=kY(),z_e=FY();function RY(t,e){let r=t.options.env||process.env,o=process.cwd(),a=t.options.cwd!=null,n=a&&process.chdir!==void 0&&!process.chdir.disabled;if(n)try{process.chdir(t.options.cwd)}catch{}let u;try{u=J_e.sync(t.command,{path:r[z_e({env:r})],pathExt:e?TY.delimiter:void 0})}catch{}finally{n&&process.chdir(o)}return u&&(u=TY.resolve(a?t.options.cwd:"",u)),u}function X_e(t){return RY(t)||RY(t,!0)}NY.exports=X_e});var MY=_((hxt,tR)=>{"use strict";var eR=/([()\][%!^"`<>&|;, *?])/g;function Z_e(t){return t=t.replace(eR,"^$1"),t}function $_e(t,e){return t=`${t}`,t=t.replace(/(\\*)"/g,'$1$1\\"'),t=t.replace(/(\\*)$/,"$1$1"),t=`"${t}"`,t=t.replace(eR,"^$1"),e&&(t=t.replace(eR,"^$1")),t}tR.exports.command=Z_e;tR.exports.argument=$_e});var UY=_((gxt,OY)=>{"use strict";OY.exports=/^#!(.*)/});var HY=_((dxt,_Y)=>{"use strict";var e8e=UY();_Y.exports=(t="")=>{let e=t.match(e8e);if(!e)return null;let[r,o]=e[0].replace(/#! ?/,"").split(" "),a=r.split("/").pop();return a==="env"?o:o?`${a} ${o}`:a}});var qY=_((mxt,jY)=>{"use strict";var rR=Be("fs"),t8e=HY();function r8e(t){let r=Buffer.alloc(150),o;try{o=rR.openSync(t,"r"),rR.readSync(o,r,0,150,0),rR.closeSync(o)}catch{}return t8e(r.toString())}jY.exports=r8e});var VY=_((yxt,WY)=>{"use strict";var n8e=Be("path"),GY=LY(),YY=MY(),i8e=qY(),s8e=process.platform==="win32",o8e=/\.(?:com|exe)$/i,a8e=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function l8e(t){t.file=GY(t);let e=t.file&&i8e(t.file);return e?(t.args.unshift(t.file),t.command=e,GY(t)):t.file}function c8e(t){if(!s8e)return t;let e=l8e(t),r=!o8e.test(e);if(t.options.forceShell||r){let o=a8e.test(e);t.command=n8e.normalize(t.command),t.command=YY.command(t.command),t.args=t.args.map(n=>YY.argument(n,o));let a=[t.command].concat(t.args).join(" ");t.args=["/d","/s","/c",`"${a}"`],t.command=process.env.comspec||"cmd.exe",t.options.windowsVerbatimArguments=!0}return t}function u8e(t,e,r){e&&!Array.isArray(e)&&(r=e,e=null),e=e?e.slice(0):[],r=Object.assign({},r);let o={command:t,args:e,options:r,file:void 0,original:{command:t,args:e}};return r.shell?o:c8e(o)}WY.exports=u8e});var zY=_((Ext,JY)=>{"use strict";var nR=process.platform==="win32";function iR(t,e){return Object.assign(new Error(`${e} ${t.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${t.command}`,path:t.command,spawnargs:t.args})}function A8e(t,e){if(!nR)return;let r=t.emit;t.emit=function(o,a){if(o==="exit"){let n=KY(a,e,"spawn");if(n)return r.call(t,"error",n)}return r.apply(t,arguments)}}function KY(t,e){return nR&&t===1&&!e.file?iR(e.original,"spawn"):null}function f8e(t,e){return nR&&t===1&&!e.file?iR(e.original,"spawnSync"):null}JY.exports={hookChildProcess:A8e,verifyENOENT:KY,verifyENOENTSync:f8e,notFoundError:iR}});var aR=_((Cxt,ay)=>{"use strict";var XY=Be("child_process"),sR=VY(),oR=zY();function ZY(t,e,r){let o=sR(t,e,r),a=XY.spawn(o.command,o.args,o.options);return oR.hookChildProcess(a,o),a}function p8e(t,e,r){let o=sR(t,e,r),a=XY.spawnSync(o.command,o.args,o.options);return a.error=a.error||oR.verifyENOENTSync(a.status,o),a}ay.exports=ZY;ay.exports.spawn=ZY;ay.exports.sync=p8e;ay.exports._parse=sR;ay.exports._enoent=oR});var eW=_((wxt,$Y)=>{"use strict";function h8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function qg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,qg)}h8e(qg,Error);qg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I>",S=Br(">>",!1),y=">&",F=Br(">&",!1),z=">",X=Br(">",!1),Z="<<<",ie=Br("<<<",!1),Se="<&",Ne=Br("<&",!1),ot="<",dt=Br("<",!1),jt=function(N){return{type:"argument",segments:[].concat(...N)}},$t=function(N){return N},xt="$'",an=Br("$'",!1),Qr="'",mr=Br("'",!1),xr=function(N){return[{type:"text",text:N}]},Wr='""',Vn=Br('""',!1),Ns=function(){return{type:"text",text:""}},Ri='"',ps=Br('"',!1),io=function(N){return N},Si=function(N){return{type:"arithmetic",arithmetic:N,quoted:!0}},Ls=function(N){return{type:"shell",shell:N,quoted:!0}},so=function(N){return{type:"variable",...N,quoted:!0}},cc=function(N){return{type:"text",text:N}},cu=function(N){return{type:"arithmetic",arithmetic:N,quoted:!1}},ap=function(N){return{type:"shell",shell:N,quoted:!1}},lp=function(N){return{type:"variable",...N,quoted:!1}},Ms=function(N){return{type:"glob",pattern:N}},Dn=/^[^']/,oo=Cs(["'"],!0,!1),Os=function(N){return N.join("")},ml=/^[^$"]/,yl=Cs(["$",'"'],!0,!1),ao=`\\ +`,Kn=Br(`\\ +`,!1),Mn=function(){return""},Ni="\\",On=Br("\\",!1),_i=/^[\\$"`]/,tr=Cs(["\\","$",'"',"`"],!1,!1),Me=function(N){return N},ii="\\a",Oa=Br("\\a",!1),hr=function(){return"a"},uc="\\b",uu=Br("\\b",!1),Ac=function(){return"\b"},El=/^[Ee]/,vA=Cs(["E","e"],!1,!1),Au=function(){return"\x1B"},Ce="\\f",Tt=Br("\\f",!1),fc=function(){return"\f"},Hi="\\n",fu=Br("\\n",!1),Yt=function(){return` +`},Cl="\\r",DA=Br("\\r",!1),cp=function(){return"\r"},pc="\\t",PA=Br("\\t",!1),Qn=function(){return" "},hi="\\v",hc=Br("\\v",!1),SA=function(){return"\v"},sa=/^[\\'"?]/,Li=Cs(["\\","'",'"',"?"],!1,!1),_o=function(N){return String.fromCharCode(parseInt(N,16))},Ze="\\x",lo=Br("\\x",!1),gc="\\u",pu=Br("\\u",!1),ji="\\U",hu=Br("\\U",!1),xA=function(N){return String.fromCodePoint(parseInt(N,16))},Ua=/^[0-7]/,dc=Cs([["0","7"]],!1,!1),hs=/^[0-9a-fA-f]/,_t=Cs([["0","9"],["a","f"],["A","f"]],!1,!1),Fn=cg(),Ci="{}",oa=Br("{}",!1),co=function(){return"{}"},Us="-",aa=Br("-",!1),la="+",Ho=Br("+",!1),wi=".",gs=Br(".",!1),ds=function(N,V,re){return{type:"number",value:(N==="-"?-1:1)*parseFloat(V.join("")+"."+re.join(""))}},ms=function(N,V){return{type:"number",value:(N==="-"?-1:1)*parseInt(V.join(""))}},_s=function(N){return{type:"variable",...N}},Un=function(N){return{type:"variable",name:N}},Pn=function(N){return N},ys="*",We=Br("*",!1),tt="/",It=Br("/",!1),nr=function(N,V,re){return{type:V==="*"?"multiplication":"division",right:re}},$=function(N,V){return V.reduce((re,he)=>({left:re,...he}),N)},me=function(N,V,re){return{type:V==="+"?"addition":"subtraction",right:re}},Le="$((",ft=Br("$((",!1),pt="))",Rt=Br("))",!1),er=function(N){return N},Zr="$(",qi=Br("$(",!1),es=function(N){return N},xi="${",jo=Br("${",!1),bA=":-",kA=Br(":-",!1),up=function(N,V){return{name:N,defaultValue:V}},ng=":-}",gu=Br(":-}",!1),ig=function(N){return{name:N,defaultValue:[]}},du=":+",uo=Br(":+",!1),QA=function(N,V){return{name:N,alternativeValue:V}},mc=":+}",ca=Br(":+}",!1),sg=function(N){return{name:N,alternativeValue:[]}},yc=function(N){return{name:N}},Pm="$",og=Br("$",!1),$n=function(N){return e.isGlobPattern(N)},Ap=function(N){return N},ag=/^[a-zA-Z0-9_]/,FA=Cs([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),Hs=function(){return lg()},mu=/^[$@*?#a-zA-Z0-9_\-]/,Ha=Cs(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),Gi=/^[()}<>$|&; \t"']/,ua=Cs(["(",")","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),yu=/^[<>&; \t"']/,Es=Cs(["<",">","&",";"," "," ",'"',"'"],!1,!1),Ec=/^[ \t]/,Cc=Cs([" "," "],!1,!1),G=0,Dt=0,wl=[{line:1,column:1}],bi=0,wc=[],ct=0,Eu;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function lg(){return t.substring(Dt,G)}function mw(){return Ic(Dt,G)}function TA(N,V){throw V=V!==void 0?V:Ic(Dt,G),fg([Ag(N)],t.substring(Dt,G),V)}function fp(N,V){throw V=V!==void 0?V:Ic(Dt,G),Sm(N,V)}function Br(N,V){return{type:"literal",text:N,ignoreCase:V}}function Cs(N,V,re){return{type:"class",parts:N,inverted:V,ignoreCase:re}}function cg(){return{type:"any"}}function ug(){return{type:"end"}}function Ag(N){return{type:"other",description:N}}function pp(N){var V=wl[N],re;if(V)return V;for(re=N-1;!wl[re];)re--;for(V=wl[re],V={line:V.line,column:V.column};rebi&&(bi=G,wc=[]),wc.push(N))}function Sm(N,V){return new qg(N,null,null,V)}function fg(N,V,re){return new qg(qg.buildMessage(N,V),N,V,re)}function pg(){var N,V,re;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();return V!==r?(re=Cu(),re===r&&(re=null),re!==r?(Dt=N,V=n(re),N=V):(G=N,N=r)):(G=N,N=r),N}function Cu(){var N,V,re,he,ze;if(N=G,V=wu(),V!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();re!==r?(he=hg(),he!==r?(ze=xm(),ze===r&&(ze=null),ze!==r?(Dt=N,V=u(V,he,ze),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;if(N===r)if(N=G,V=wu(),V!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();re!==r?(he=hg(),he===r&&(he=null),he!==r?(Dt=N,V=A(V,he),N=V):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;return N}function xm(){var N,V,re,he,ze;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(re=Cu(),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();he!==r?(Dt=N,V=p(re),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r;return N}function hg(){var N;return t.charCodeAt(G)===59?(N=h,G++):(N=r,ct===0&&Ct(E)),N===r&&(t.charCodeAt(G)===38?(N=I,G++):(N=r,ct===0&&Ct(v))),N}function wu(){var N,V,re;return N=G,V=Aa(),V!==r?(re=yw(),re===r&&(re=null),re!==r?(Dt=N,V=b(V,re),N=V):(G=N,N=r)):(G=N,N=r),N}function yw(){var N,V,re,he,ze,mt,fr;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(re=bm(),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r)if(ze=wu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,V=C(re,ze),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;return N}function bm(){var N;return t.substr(G,2)===T?(N=T,G+=2):(N=r,ct===0&&Ct(L)),N===r&&(t.substr(G,2)===U?(N=U,G+=2):(N=r,ct===0&&Ct(J))),N}function Aa(){var N,V,re;return N=G,V=gg(),V!==r?(re=Bc(),re===r&&(re=null),re!==r?(Dt=N,V=te(V,re),N=V):(G=N,N=r)):(G=N,N=r),N}function Bc(){var N,V,re,he,ze,mt,fr;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(re=Il(),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r)if(ze=Aa(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,V=le(re,ze),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;return N}function Il(){var N;return t.substr(G,2)===pe?(N=pe,G+=2):(N=r,ct===0&&Ct(Ae)),N===r&&(t.charCodeAt(G)===124?(N=ye,G++):(N=r,ct===0&&Ct(ae))),N}function Iu(){var N,V,re,he,ze,mt;if(N=G,V=Eg(),V!==r)if(t.charCodeAt(G)===61?(re=we,G++):(re=r,ct===0&&Ct(Pe)),re!==r)if(he=qo(),he!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(Dt=N,V=g(V,he),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r;else G=N,N=r;if(N===r)if(N=G,V=Eg(),V!==r)if(t.charCodeAt(G)===61?(re=we,G++):(re=r,ct===0&&Ct(Pe)),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();he!==r?(Dt=N,V=Ee(V),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r;return N}function gg(){var N,V,re,he,ze,mt,fr,Cr,yn,oi,Mi;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(t.charCodeAt(G)===40?(re=De,G++):(re=r,ct===0&&Ct(ce)),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r)if(ze=Cu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(G)===41?(fr=ne,G++):(fr=r,ct===0&&Ct(ee)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=ja();oi!==r;)yn.push(oi),oi=ja();if(yn!==r){for(oi=[],Mi=Qt();Mi!==r;)oi.push(Mi),Mi=Qt();oi!==r?(Dt=N,V=Ie(ze,yn),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;if(N===r){for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r)if(t.charCodeAt(G)===123?(re=ke,G++):(re=r,ct===0&&Ct(ht)),re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r)if(ze=Cu(),ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();if(mt!==r)if(t.charCodeAt(G)===125?(fr=H,G++):(fr=r,ct===0&&Ct(lt)),fr!==r){for(Cr=[],yn=Qt();yn!==r;)Cr.push(yn),yn=Qt();if(Cr!==r){for(yn=[],oi=ja();oi!==r;)yn.push(oi),oi=ja();if(yn!==r){for(oi=[],Mi=Qt();Mi!==r;)oi.push(Mi),Mi=Qt();oi!==r?(Dt=N,V=Re(ze,yn),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r}else G=N,N=r;else G=N,N=r;if(N===r){for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r){for(re=[],he=Iu();he!==r;)re.push(he),he=Iu();if(re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();if(he!==r){if(ze=[],mt=hp(),mt!==r)for(;mt!==r;)ze.push(mt),mt=hp();else ze=r;if(ze!==r){for(mt=[],fr=Qt();fr!==r;)mt.push(fr),fr=Qt();mt!==r?(Dt=N,V=Qe(re,ze),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r}else G=N,N=r}else G=N,N=r;if(N===r){for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r){if(re=[],he=Iu(),he!==r)for(;he!==r;)re.push(he),he=Iu();else re=r;if(re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();he!==r?(Dt=N,V=be(re),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r}}}return N}function RA(){var N,V,re,he,ze;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r){if(re=[],he=gp(),he!==r)for(;he!==r;)re.push(he),he=gp();else re=r;if(re!==r){for(he=[],ze=Qt();ze!==r;)he.push(ze),ze=Qt();he!==r?(Dt=N,V=_e(re),N=V):(G=N,N=r)}else G=N,N=r}else G=N,N=r;return N}function hp(){var N,V,re;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();if(V!==r?(re=ja(),re!==r?(Dt=N,V=Te(re),N=V):(G=N,N=r)):(G=N,N=r),N===r){for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();V!==r?(re=gp(),re!==r?(Dt=N,V=Te(re),N=V):(G=N,N=r)):(G=N,N=r)}return N}function ja(){var N,V,re,he,ze;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();return V!==r?(Je.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(He)),re===r&&(re=null),re!==r?(he=dg(),he!==r?(ze=gp(),ze!==r?(Dt=N,V=x(re,he,ze),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function dg(){var N;return t.substr(G,2)===w?(N=w,G+=2):(N=r,ct===0&&Ct(S)),N===r&&(t.substr(G,2)===y?(N=y,G+=2):(N=r,ct===0&&Ct(F)),N===r&&(t.charCodeAt(G)===62?(N=z,G++):(N=r,ct===0&&Ct(X)),N===r&&(t.substr(G,3)===Z?(N=Z,G+=3):(N=r,ct===0&&Ct(ie)),N===r&&(t.substr(G,2)===Se?(N=Se,G+=2):(N=r,ct===0&&Ct(Ne)),N===r&&(t.charCodeAt(G)===60?(N=ot,G++):(N=r,ct===0&&Ct(dt))))))),N}function gp(){var N,V,re;for(N=G,V=[],re=Qt();re!==r;)V.push(re),re=Qt();return V!==r?(re=qo(),re!==r?(Dt=N,V=Te(re),N=V):(G=N,N=r)):(G=N,N=r),N}function qo(){var N,V,re;if(N=G,V=[],re=ws(),re!==r)for(;re!==r;)V.push(re),re=ws();else V=r;return V!==r&&(Dt=N,V=jt(V)),N=V,N}function ws(){var N,V;return N=G,V=Ii(),V!==r&&(Dt=N,V=$t(V)),N=V,N===r&&(N=G,V=km(),V!==r&&(Dt=N,V=$t(V)),N=V,N===r&&(N=G,V=Qm(),V!==r&&(Dt=N,V=$t(V)),N=V,N===r&&(N=G,V=Go(),V!==r&&(Dt=N,V=$t(V)),N=V))),N}function Ii(){var N,V,re,he;return N=G,t.substr(G,2)===xt?(V=xt,G+=2):(V=r,ct===0&&Ct(an)),V!==r?(re=ln(),re!==r?(t.charCodeAt(G)===39?(he=Qr,G++):(he=r,ct===0&&Ct(mr)),he!==r?(Dt=N,V=xr(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function km(){var N,V,re,he;return N=G,t.charCodeAt(G)===39?(V=Qr,G++):(V=r,ct===0&&Ct(mr)),V!==r?(re=mp(),re!==r?(t.charCodeAt(G)===39?(he=Qr,G++):(he=r,ct===0&&Ct(mr)),he!==r?(Dt=N,V=xr(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function Qm(){var N,V,re,he;if(N=G,t.substr(G,2)===Wr?(V=Wr,G+=2):(V=r,ct===0&&Ct(Vn)),V!==r&&(Dt=N,V=Ns()),N=V,N===r)if(N=G,t.charCodeAt(G)===34?(V=Ri,G++):(V=r,ct===0&&Ct(ps)),V!==r){for(re=[],he=NA();he!==r;)re.push(he),he=NA();re!==r?(t.charCodeAt(G)===34?(he=Ri,G++):(he=r,ct===0&&Ct(ps)),he!==r?(Dt=N,V=io(re),N=V):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;return N}function Go(){var N,V,re;if(N=G,V=[],re=dp(),re!==r)for(;re!==r;)V.push(re),re=dp();else V=r;return V!==r&&(Dt=N,V=io(V)),N=V,N}function NA(){var N,V;return N=G,V=Gr(),V!==r&&(Dt=N,V=Si(V)),N=V,N===r&&(N=G,V=yp(),V!==r&&(Dt=N,V=Ls(V)),N=V,N===r&&(N=G,V=Dc(),V!==r&&(Dt=N,V=so(V)),N=V,N===r&&(N=G,V=mg(),V!==r&&(Dt=N,V=cc(V)),N=V))),N}function dp(){var N,V;return N=G,V=Gr(),V!==r&&(Dt=N,V=cu(V)),N=V,N===r&&(N=G,V=yp(),V!==r&&(Dt=N,V=ap(V)),N=V,N===r&&(N=G,V=Dc(),V!==r&&(Dt=N,V=lp(V)),N=V,N===r&&(N=G,V=Ew(),V!==r&&(Dt=N,V=Ms(V)),N=V,N===r&&(N=G,V=pa(),V!==r&&(Dt=N,V=cc(V)),N=V)))),N}function mp(){var N,V,re;for(N=G,V=[],Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo));re!==r;)V.push(re),Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo));return V!==r&&(Dt=N,V=Os(V)),N=V,N}function mg(){var N,V,re;if(N=G,V=[],re=fa(),re===r&&(ml.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(yl))),re!==r)for(;re!==r;)V.push(re),re=fa(),re===r&&(ml.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(yl)));else V=r;return V!==r&&(Dt=N,V=Os(V)),N=V,N}function fa(){var N,V,re;return N=G,t.substr(G,2)===ao?(V=ao,G+=2):(V=r,ct===0&&Ct(Kn)),V!==r&&(Dt=N,V=Mn()),N=V,N===r&&(N=G,t.charCodeAt(G)===92?(V=Ni,G++):(V=r,ct===0&&Ct(On)),V!==r?(_i.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(tr)),re!==r?(Dt=N,V=Me(re),N=V):(G=N,N=r)):(G=N,N=r)),N}function ln(){var N,V,re;for(N=G,V=[],re=Ao(),re===r&&(Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo)));re!==r;)V.push(re),re=Ao(),re===r&&(Dn.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(oo)));return V!==r&&(Dt=N,V=Os(V)),N=V,N}function Ao(){var N,V,re;return N=G,t.substr(G,2)===ii?(V=ii,G+=2):(V=r,ct===0&&Ct(Oa)),V!==r&&(Dt=N,V=hr()),N=V,N===r&&(N=G,t.substr(G,2)===uc?(V=uc,G+=2):(V=r,ct===0&&Ct(uu)),V!==r&&(Dt=N,V=Ac()),N=V,N===r&&(N=G,t.charCodeAt(G)===92?(V=Ni,G++):(V=r,ct===0&&Ct(On)),V!==r?(El.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(vA)),re!==r?(Dt=N,V=Au(),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===Ce?(V=Ce,G+=2):(V=r,ct===0&&Ct(Tt)),V!==r&&(Dt=N,V=fc()),N=V,N===r&&(N=G,t.substr(G,2)===Hi?(V=Hi,G+=2):(V=r,ct===0&&Ct(fu)),V!==r&&(Dt=N,V=Yt()),N=V,N===r&&(N=G,t.substr(G,2)===Cl?(V=Cl,G+=2):(V=r,ct===0&&Ct(DA)),V!==r&&(Dt=N,V=cp()),N=V,N===r&&(N=G,t.substr(G,2)===pc?(V=pc,G+=2):(V=r,ct===0&&Ct(PA)),V!==r&&(Dt=N,V=Qn()),N=V,N===r&&(N=G,t.substr(G,2)===hi?(V=hi,G+=2):(V=r,ct===0&&Ct(hc)),V!==r&&(Dt=N,V=SA()),N=V,N===r&&(N=G,t.charCodeAt(G)===92?(V=Ni,G++):(V=r,ct===0&&Ct(On)),V!==r?(sa.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Li)),re!==r?(Dt=N,V=Me(re),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=LA()))))))))),N}function LA(){var N,V,re,he,ze,mt,fr,Cr,yn,oi,Mi,wg;return N=G,t.charCodeAt(G)===92?(V=Ni,G++):(V=r,ct===0&&Ct(On)),V!==r?(re=qa(),re!==r?(Dt=N,V=_o(re),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===Ze?(V=Ze,G+=2):(V=r,ct===0&&Ct(lo)),V!==r?(re=G,he=G,ze=qa(),ze!==r?(mt=si(),mt!==r?(ze=[ze,mt],he=ze):(G=he,he=r)):(G=he,he=r),he===r&&(he=qa()),he!==r?re=t.substring(re,G):re=he,re!==r?(Dt=N,V=_o(re),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===gc?(V=gc,G+=2):(V=r,ct===0&&Ct(pu)),V!==r?(re=G,he=G,ze=si(),ze!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(ze=[ze,mt,fr,Cr],he=ze):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r),he!==r?re=t.substring(re,G):re=he,re!==r?(Dt=N,V=_o(re),N=V):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===ji?(V=ji,G+=2):(V=r,ct===0&&Ct(hu)),V!==r?(re=G,he=G,ze=si(),ze!==r?(mt=si(),mt!==r?(fr=si(),fr!==r?(Cr=si(),Cr!==r?(yn=si(),yn!==r?(oi=si(),oi!==r?(Mi=si(),Mi!==r?(wg=si(),wg!==r?(ze=[ze,mt,fr,Cr,yn,oi,Mi,wg],he=ze):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r)):(G=he,he=r),he!==r?re=t.substring(re,G):re=he,re!==r?(Dt=N,V=xA(re),N=V):(G=N,N=r)):(G=N,N=r)))),N}function qa(){var N;return Ua.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(dc)),N}function si(){var N;return hs.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(_t)),N}function pa(){var N,V,re,he,ze;if(N=G,V=[],re=G,t.charCodeAt(G)===92?(he=Ni,G++):(he=r,ct===0&&Ct(On)),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r),re===r&&(re=G,t.substr(G,2)===Ci?(he=Ci,G+=2):(he=r,ct===0&&Ct(oa)),he!==r&&(Dt=re,he=co()),re=he,re===r&&(re=G,he=G,ct++,ze=Fm(),ct--,ze===r?he=void 0:(G=he,he=r),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r))),re!==r)for(;re!==r;)V.push(re),re=G,t.charCodeAt(G)===92?(he=Ni,G++):(he=r,ct===0&&Ct(On)),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r),re===r&&(re=G,t.substr(G,2)===Ci?(he=Ci,G+=2):(he=r,ct===0&&Ct(oa)),he!==r&&(Dt=re,he=co()),re=he,re===r&&(re=G,he=G,ct++,ze=Fm(),ct--,ze===r?he=void 0:(G=he,he=r),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r)));else V=r;return V!==r&&(Dt=N,V=Os(V)),N=V,N}function vc(){var N,V,re,he,ze,mt;if(N=G,t.charCodeAt(G)===45?(V=Us,G++):(V=r,ct===0&&Ct(aa)),V===r&&(t.charCodeAt(G)===43?(V=la,G++):(V=r,ct===0&&Ct(Ho))),V===r&&(V=null),V!==r){if(re=[],Je.test(t.charAt(G))?(he=t.charAt(G),G++):(he=r,ct===0&&Ct(He)),he!==r)for(;he!==r;)re.push(he),Je.test(t.charAt(G))?(he=t.charAt(G),G++):(he=r,ct===0&&Ct(He));else re=r;if(re!==r)if(t.charCodeAt(G)===46?(he=wi,G++):(he=r,ct===0&&Ct(gs)),he!==r){if(ze=[],Je.test(t.charAt(G))?(mt=t.charAt(G),G++):(mt=r,ct===0&&Ct(He)),mt!==r)for(;mt!==r;)ze.push(mt),Je.test(t.charAt(G))?(mt=t.charAt(G),G++):(mt=r,ct===0&&Ct(He));else ze=r;ze!==r?(Dt=N,V=ds(V,re,ze),N=V):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;if(N===r){if(N=G,t.charCodeAt(G)===45?(V=Us,G++):(V=r,ct===0&&Ct(aa)),V===r&&(t.charCodeAt(G)===43?(V=la,G++):(V=r,ct===0&&Ct(Ho))),V===r&&(V=null),V!==r){if(re=[],Je.test(t.charAt(G))?(he=t.charAt(G),G++):(he=r,ct===0&&Ct(He)),he!==r)for(;he!==r;)re.push(he),Je.test(t.charAt(G))?(he=t.charAt(G),G++):(he=r,ct===0&&Ct(He));else re=r;re!==r?(Dt=N,V=ms(V,re),N=V):(G=N,N=r)}else G=N,N=r;if(N===r&&(N=G,V=Dc(),V!==r&&(Dt=N,V=_s(V)),N=V,N===r&&(N=G,V=Ga(),V!==r&&(Dt=N,V=Un(V)),N=V,N===r)))if(N=G,t.charCodeAt(G)===40?(V=De,G++):(V=r,ct===0&&Ct(ce)),V!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();if(re!==r)if(he=ts(),he!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(t.charCodeAt(G)===41?(mt=ne,G++):(mt=r,ct===0&&Ct(ee)),mt!==r?(Dt=N,V=Pn(he),N=V):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r}return N}function Bl(){var N,V,re,he,ze,mt,fr,Cr;if(N=G,V=vc(),V!==r){for(re=[],he=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===42?(mt=ys,G++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(G)===47?(mt=tt,G++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vc(),Cr!==r?(Dt=he,ze=nr(V,mt,Cr),he=ze):(G=he,he=r)):(G=he,he=r)}else G=he,he=r;else G=he,he=r;for(;he!==r;){for(re.push(he),he=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===42?(mt=ys,G++):(mt=r,ct===0&&Ct(We)),mt===r&&(t.charCodeAt(G)===47?(mt=tt,G++):(mt=r,ct===0&&Ct(It))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=vc(),Cr!==r?(Dt=he,ze=nr(V,mt,Cr),he=ze):(G=he,he=r)):(G=he,he=r)}else G=he,he=r;else G=he,he=r}re!==r?(Dt=N,V=$(V,re),N=V):(G=N,N=r)}else G=N,N=r;return N}function ts(){var N,V,re,he,ze,mt,fr,Cr;if(N=G,V=Bl(),V!==r){for(re=[],he=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===43?(mt=la,G++):(mt=r,ct===0&&Ct(Ho)),mt===r&&(t.charCodeAt(G)===45?(mt=Us,G++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Bl(),Cr!==r?(Dt=he,ze=me(V,mt,Cr),he=ze):(G=he,he=r)):(G=he,he=r)}else G=he,he=r;else G=he,he=r;for(;he!==r;){for(re.push(he),he=G,ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();if(ze!==r)if(t.charCodeAt(G)===43?(mt=la,G++):(mt=r,ct===0&&Ct(Ho)),mt===r&&(t.charCodeAt(G)===45?(mt=Us,G++):(mt=r,ct===0&&Ct(aa))),mt!==r){for(fr=[],Cr=Qt();Cr!==r;)fr.push(Cr),Cr=Qt();fr!==r?(Cr=Bl(),Cr!==r?(Dt=he,ze=me(V,mt,Cr),he=ze):(G=he,he=r)):(G=he,he=r)}else G=he,he=r;else G=he,he=r}re!==r?(Dt=N,V=$(V,re),N=V):(G=N,N=r)}else G=N,N=r;return N}function Gr(){var N,V,re,he,ze,mt;if(N=G,t.substr(G,3)===Le?(V=Le,G+=3):(V=r,ct===0&&Ct(ft)),V!==r){for(re=[],he=Qt();he!==r;)re.push(he),he=Qt();if(re!==r)if(he=ts(),he!==r){for(ze=[],mt=Qt();mt!==r;)ze.push(mt),mt=Qt();ze!==r?(t.substr(G,2)===pt?(mt=pt,G+=2):(mt=r,ct===0&&Ct(Rt)),mt!==r?(Dt=N,V=er(he),N=V):(G=N,N=r)):(G=N,N=r)}else G=N,N=r;else G=N,N=r}else G=N,N=r;return N}function yp(){var N,V,re,he;return N=G,t.substr(G,2)===Zr?(V=Zr,G+=2):(V=r,ct===0&&Ct(qi)),V!==r?(re=Cu(),re!==r?(t.charCodeAt(G)===41?(he=ne,G++):(he=r,ct===0&&Ct(ee)),he!==r?(Dt=N,V=es(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N}function Dc(){var N,V,re,he,ze,mt;return N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.substr(G,2)===bA?(he=bA,G+=2):(he=r,ct===0&&Ct(kA)),he!==r?(ze=RA(),ze!==r?(t.charCodeAt(G)===125?(mt=H,G++):(mt=r,ct===0&&Ct(lt)),mt!==r?(Dt=N,V=up(re,ze),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.substr(G,3)===ng?(he=ng,G+=3):(he=r,ct===0&&Ct(gu)),he!==r?(Dt=N,V=ig(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.substr(G,2)===du?(he=du,G+=2):(he=r,ct===0&&Ct(uo)),he!==r?(ze=RA(),ze!==r?(t.charCodeAt(G)===125?(mt=H,G++):(mt=r,ct===0&&Ct(lt)),mt!==r?(Dt=N,V=QA(re,ze),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.substr(G,3)===mc?(he=mc,G+=3):(he=r,ct===0&&Ct(ca)),he!==r?(Dt=N,V=sg(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.substr(G,2)===xi?(V=xi,G+=2):(V=r,ct===0&&Ct(jo)),V!==r?(re=Ga(),re!==r?(t.charCodeAt(G)===125?(he=H,G++):(he=r,ct===0&&Ct(lt)),he!==r?(Dt=N,V=yc(re),N=V):(G=N,N=r)):(G=N,N=r)):(G=N,N=r),N===r&&(N=G,t.charCodeAt(G)===36?(V=Pm,G++):(V=r,ct===0&&Ct(og)),V!==r?(re=Ga(),re!==r?(Dt=N,V=yc(re),N=V):(G=N,N=r)):(G=N,N=r)))))),N}function Ew(){var N,V,re;return N=G,V=yg(),V!==r?(Dt=G,re=$n(V),re?re=void 0:re=r,re!==r?(Dt=N,V=Ap(V),N=V):(G=N,N=r)):(G=N,N=r),N}function yg(){var N,V,re,he,ze;if(N=G,V=[],re=G,he=G,ct++,ze=Cg(),ct--,ze===r?he=void 0:(G=he,he=r),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r),re!==r)for(;re!==r;)V.push(re),re=G,he=G,ct++,ze=Cg(),ct--,ze===r?he=void 0:(G=he,he=r),he!==r?(t.length>G?(ze=t.charAt(G),G++):(ze=r,ct===0&&Ct(Fn)),ze!==r?(Dt=re,he=Me(ze),re=he):(G=re,re=r)):(G=re,re=r);else V=r;return V!==r&&(Dt=N,V=Os(V)),N=V,N}function Eg(){var N,V,re;if(N=G,V=[],ag.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(FA)),re!==r)for(;re!==r;)V.push(re),ag.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(FA));else V=r;return V!==r&&(Dt=N,V=Hs()),N=V,N}function Ga(){var N,V,re;if(N=G,V=[],mu.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Ha)),re!==r)for(;re!==r;)V.push(re),mu.test(t.charAt(G))?(re=t.charAt(G),G++):(re=r,ct===0&&Ct(Ha));else V=r;return V!==r&&(Dt=N,V=Hs()),N=V,N}function Fm(){var N;return Gi.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(ua)),N}function Cg(){var N;return yu.test(t.charAt(G))?(N=t.charAt(G),G++):(N=r,ct===0&&Ct(Es)),N}function Qt(){var N,V;if(N=[],Ec.test(t.charAt(G))?(V=t.charAt(G),G++):(V=r,ct===0&&Ct(Cc)),V!==r)for(;V!==r;)N.push(V),Ec.test(t.charAt(G))?(V=t.charAt(G),G++):(V=r,ct===0&&Ct(Cc));else N=r;return N}if(Eu=a(),Eu!==r&&G===t.length)return Eu;throw Eu!==r&&G!1}){try{return(0,tW.parse)(t,e)}catch(r){throw r.location&&(r.message=r.message.replace(/(\.)?$/,` (line ${r.location.start.line}, column ${r.location.start.column})$1`)),r}}function ly(t,{endSemicolon:e=!1}={}){return t.map(({command:r,type:o},a)=>`${MD(r)}${o===";"?a!==t.length-1||e?";":"":" &"}`).join(" ")}function MD(t){return`${cy(t.chain)}${t.then?` ${lR(t.then)}`:""}`}function lR(t){return`${t.type} ${MD(t.line)}`}function cy(t){return`${uR(t)}${t.then?` ${cR(t.then)}`:""}`}function cR(t){return`${t.type} ${cy(t.chain)}`}function uR(t){switch(t.type){case"command":return`${t.envs.length>0?`${t.envs.map(e=>ND(e)).join(" ")} `:""}${t.args.map(e=>AR(e)).join(" ")}`;case"subshell":return`(${ly(t.subshell)})${t.args.length>0?` ${t.args.map(e=>Kw(e)).join(" ")}`:""}`;case"group":return`{ ${ly(t.group,{endSemicolon:!0})} }${t.args.length>0?` ${t.args.map(e=>Kw(e)).join(" ")}`:""}`;case"envs":return t.envs.map(e=>ND(e)).join(" ");default:throw new Error(`Unsupported command type: "${t.type}"`)}}function ND(t){return`${t.name}=${t.args[0]?Gg(t.args[0]):""}`}function AR(t){switch(t.type){case"redirection":return Kw(t);case"argument":return Gg(t);default:throw new Error(`Unsupported argument type: "${t.type}"`)}}function Kw(t){return`${t.subtype} ${t.args.map(e=>Gg(e)).join(" ")}`}function Gg(t){return t.segments.map(e=>fR(e)).join("")}function fR(t){let e=(o,a)=>a?`"${o}"`:o,r=o=>o===""?"''":o.match(/[()}<>$|&;"'\n\t ]/)?o.match(/['\t\p{C}]/u)?o.match(/'/)?`"${o.replace(/["$\t\p{C}]/u,m8e)}"`:`$'${o.replace(/[\t\p{C}]/u,nW)}'`:`'${o}'`:o;switch(t.type){case"text":return r(t.text);case"glob":return t.pattern;case"shell":return e(`\${${ly(t.shell)}}`,t.quoted);case"variable":return e(typeof t.defaultValue>"u"?typeof t.alternativeValue>"u"?`\${${t.name}}`:t.alternativeValue.length===0?`\${${t.name}:+}`:`\${${t.name}:+${t.alternativeValue.map(o=>Gg(o)).join(" ")}}`:t.defaultValue.length===0?`\${${t.name}:-}`:`\${${t.name}:-${t.defaultValue.map(o=>Gg(o)).join(" ")}}`,t.quoted);case"arithmetic":return`$(( ${OD(t.arithmetic)} ))`;default:throw new Error(`Unsupported argument segment type: "${t.type}"`)}}function OD(t){let e=a=>{switch(a){case"addition":return"+";case"subtraction":return"-";case"multiplication":return"*";case"division":return"/";default:throw new Error(`Can't extract operator from arithmetic expression of type "${a}"`)}},r=(a,n)=>n?`( ${a} )`:a,o=a=>r(OD(a),!["number","variable"].includes(a.type));switch(t.type){case"number":return String(t.value);case"variable":return t.name;default:return`${o(t.left)} ${e(t.type)} ${o(t.right)}`}}var tW,rW,d8e,nW,m8e,iW=Et(()=>{tW=$e(eW());rW=new Map([["\f","\\f"],[` +`,"\\n"],["\r","\\r"],[" ","\\t"],["\v","\\v"],["\0","\\0"]]),d8e=new Map([["\\","\\\\"],["$","\\$"],['"','\\"'],...Array.from(rW,([t,e])=>[t,`"$'${e}'"`])]),nW=t=>rW.get(t)??`\\x${t.charCodeAt(0).toString(16).padStart(2,"0")}`,m8e=t=>d8e.get(t)??`"$'${nW(t)}'"`});var oW=_((Nxt,sW)=>{"use strict";function y8e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function Yg(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Yg)}y8e(Yg,Error);Yg.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;Ipe&&(pe=J,Ae=[]),Ae.push(He))}function lt(He,x){return new Yg(He,null,null,x)}function Re(He,x,w){return new Yg(Yg.buildMessage(He,x),He,x,w)}function Qe(){var He,x,w,S;return He=J,x=be(),x!==r?(t.charCodeAt(J)===47?(w=n,J++):(w=r,ye===0&&H(u)),w!==r?(S=be(),S!==r?(te=He,x=A(x,S),He=x):(J=He,He=r)):(J=He,He=r)):(J=He,He=r),He===r&&(He=J,x=be(),x!==r&&(te=He,x=p(x)),He=x),He}function be(){var He,x,w,S;return He=J,x=_e(),x!==r?(t.charCodeAt(J)===64?(w=h,J++):(w=r,ye===0&&H(E)),w!==r?(S=Je(),S!==r?(te=He,x=I(x,S),He=x):(J=He,He=r)):(J=He,He=r)):(J=He,He=r),He===r&&(He=J,x=_e(),x!==r&&(te=He,x=v(x)),He=x),He}function _e(){var He,x,w,S,y;return He=J,t.charCodeAt(J)===64?(x=h,J++):(x=r,ye===0&&H(E)),x!==r?(w=Te(),w!==r?(t.charCodeAt(J)===47?(S=n,J++):(S=r,ye===0&&H(u)),S!==r?(y=Te(),y!==r?(te=He,x=b(),He=x):(J=He,He=r)):(J=He,He=r)):(J=He,He=r)):(J=He,He=r),He===r&&(He=J,x=Te(),x!==r&&(te=He,x=b()),He=x),He}function Te(){var He,x,w;if(He=J,x=[],C.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,ye===0&&H(T)),w!==r)for(;w!==r;)x.push(w),C.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,ye===0&&H(T));else x=r;return x!==r&&(te=He,x=b()),He=x,He}function Je(){var He,x,w;if(He=J,x=[],L.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,ye===0&&H(U)),w!==r)for(;w!==r;)x.push(w),L.test(t.charAt(J))?(w=t.charAt(J),J++):(w=r,ye===0&&H(U));else x=r;return x!==r&&(te=He,x=b()),He=x,He}if(ae=a(),ae!==r&&J===t.length)return ae;throw ae!==r&&J{aW=$e(oW())});var Vg=_((Mxt,Wg)=>{"use strict";function cW(t){return typeof t>"u"||t===null}function C8e(t){return typeof t=="object"&&t!==null}function w8e(t){return Array.isArray(t)?t:cW(t)?[]:[t]}function I8e(t,e){var r,o,a,n;if(e)for(n=Object.keys(e),r=0,o=n.length;r{"use strict";function Jw(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}Jw.prototype=Object.create(Error.prototype);Jw.prototype.constructor=Jw;Jw.prototype.toString=function(e){var r=this.name+": ";return r+=this.reason||"(unknown reason)",!e&&this.mark&&(r+=" "+this.mark.toString()),r};uW.exports=Jw});var pW=_((Uxt,fW)=>{"use strict";var AW=Vg();function pR(t,e,r,o,a){this.name=t,this.buffer=e,this.position=r,this.line=o,this.column=a}pR.prototype.getSnippet=function(e,r){var o,a,n,u,A;if(!this.buffer)return null;for(e=e||4,r=r||75,o="",a=this.position;a>0&&`\0\r +\x85\u2028\u2029`.indexOf(this.buffer.charAt(a-1))===-1;)if(a-=1,this.position-a>r/2-1){o=" ... ",a+=5;break}for(n="",u=this.position;ur/2-1){n=" ... ",u-=5;break}return A=this.buffer.slice(a,u),AW.repeat(" ",e)+o+A+n+` +`+AW.repeat(" ",e+this.position-a+o.length)+"^"};pR.prototype.toString=function(e){var r,o="";return this.name&&(o+='in "'+this.name+'" '),o+="at line "+(this.line+1)+", column "+(this.column+1),e||(r=this.getSnippet(),r&&(o+=`: +`+r)),o};fW.exports=pR});var os=_((_xt,gW)=>{"use strict";var hW=uy(),D8e=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],P8e=["scalar","sequence","mapping"];function S8e(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(o){e[String(o)]=r})}),e}function x8e(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(D8e.indexOf(r)===-1)throw new hW('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=S8e(e.styleAliases||null),P8e.indexOf(this.kind)===-1)throw new hW('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}gW.exports=x8e});var Kg=_((Hxt,mW)=>{"use strict";var dW=Vg(),HD=uy(),b8e=os();function hR(t,e,r){var o=[];return t.include.forEach(function(a){r=hR(a,e,r)}),t[e].forEach(function(a){r.forEach(function(n,u){n.tag===a.tag&&n.kind===a.kind&&o.push(u)}),r.push(a)}),r.filter(function(a,n){return o.indexOf(n)===-1})}function k8e(){var t={scalar:{},sequence:{},mapping:{},fallback:{}},e,r;function o(a){t[a.kind][a.tag]=t.fallback[a.tag]=a}for(e=0,r=arguments.length;e{"use strict";var Q8e=os();yW.exports=new Q8e("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return t!==null?t:""}})});var wW=_((qxt,CW)=>{"use strict";var F8e=os();CW.exports=new F8e("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return t!==null?t:[]}})});var BW=_((Gxt,IW)=>{"use strict";var T8e=os();IW.exports=new T8e("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return t!==null?t:{}}})});var jD=_((Yxt,vW)=>{"use strict";var R8e=Kg();vW.exports=new R8e({explicit:[EW(),wW(),BW()]})});var PW=_((Wxt,DW)=>{"use strict";var N8e=os();function L8e(t){if(t===null)return!0;var e=t.length;return e===1&&t==="~"||e===4&&(t==="null"||t==="Null"||t==="NULL")}function M8e(){return null}function O8e(t){return t===null}DW.exports=new N8e("tag:yaml.org,2002:null",{kind:"scalar",resolve:L8e,construct:M8e,predicate:O8e,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var xW=_((Vxt,SW)=>{"use strict";var U8e=os();function _8e(t){if(t===null)return!1;var e=t.length;return e===4&&(t==="true"||t==="True"||t==="TRUE")||e===5&&(t==="false"||t==="False"||t==="FALSE")}function H8e(t){return t==="true"||t==="True"||t==="TRUE"}function j8e(t){return Object.prototype.toString.call(t)==="[object Boolean]"}SW.exports=new U8e("tag:yaml.org,2002:bool",{kind:"scalar",resolve:_8e,construct:H8e,predicate:j8e,represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"})});var kW=_((Kxt,bW)=>{"use strict";var q8e=Vg(),G8e=os();function Y8e(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function W8e(t){return 48<=t&&t<=55}function V8e(t){return 48<=t&&t<=57}function K8e(t){if(t===null)return!1;var e=t.length,r=0,o=!1,a;if(!e)return!1;if(a=t[r],(a==="-"||a==="+")&&(a=t[++r]),a==="0"){if(r+1===e)return!0;if(a=t[++r],a==="b"){for(r++;r=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0"+t.toString(8):"-0"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var TW=_((Jxt,FW)=>{"use strict";var QW=Vg(),X8e=os(),Z8e=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function $8e(t){return!(t===null||!Z8e.test(t)||t[t.length-1]==="_")}function eHe(t){var e,r,o,a;return e=t.replace(/_/g,"").toLowerCase(),r=e[0]==="-"?-1:1,a=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(n){a.unshift(parseFloat(n,10))}),e=0,o=1,a.forEach(function(n){e+=n*o,o*=60}),r*e):r*parseFloat(e,10)}var tHe=/^[-+]?[0-9]+e/;function rHe(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(QW.isNegativeZero(t))return"-0.0";return r=t.toString(10),tHe.test(r)?r.replace("e",".e"):r}function nHe(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||QW.isNegativeZero(t))}FW.exports=new X8e("tag:yaml.org,2002:float",{kind:"scalar",resolve:$8e,construct:eHe,predicate:nHe,represent:rHe,defaultStyle:"lowercase"})});var gR=_((zxt,RW)=>{"use strict";var iHe=Kg();RW.exports=new iHe({include:[jD()],implicit:[PW(),xW(),kW(),TW()]})});var dR=_((Xxt,NW)=>{"use strict";var sHe=Kg();NW.exports=new sHe({include:[gR()]})});var UW=_((Zxt,OW)=>{"use strict";var oHe=os(),LW=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),MW=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function aHe(t){return t===null?!1:LW.exec(t)!==null||MW.exec(t)!==null}function lHe(t){var e,r,o,a,n,u,A,p=0,h=null,E,I,v;if(e=LW.exec(t),e===null&&(e=MW.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],o=+e[2]-1,a=+e[3],!e[4])return new Date(Date.UTC(r,o,a));if(n=+e[4],u=+e[5],A=+e[6],e[7]){for(p=e[7].slice(0,3);p.length<3;)p+="0";p=+p}return e[9]&&(E=+e[10],I=+(e[11]||0),h=(E*60+I)*6e4,e[9]==="-"&&(h=-h)),v=new Date(Date.UTC(r,o,a,n,u,A,p)),h&&v.setTime(v.getTime()-h),v}function cHe(t){return t.toISOString()}OW.exports=new oHe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:aHe,construct:lHe,instanceOf:Date,represent:cHe})});var HW=_(($xt,_W)=>{"use strict";var uHe=os();function AHe(t){return t==="<<"||t===null}_W.exports=new uHe("tag:yaml.org,2002:merge",{kind:"scalar",resolve:AHe})});var GW=_((ebt,qW)=>{"use strict";var Jg;try{jW=Be,Jg=jW("buffer").Buffer}catch{}var jW,fHe=os(),mR=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function pHe(t){if(t===null)return!1;var e,r,o=0,a=t.length,n=mR;for(r=0;r64)){if(e<0)return!1;o+=6}return o%8===0}function hHe(t){var e,r,o=t.replace(/[\r\n=]/g,""),a=o.length,n=mR,u=0,A=[];for(e=0;e>16&255),A.push(u>>8&255),A.push(u&255)),u=u<<6|n.indexOf(o.charAt(e));return r=a%4*6,r===0?(A.push(u>>16&255),A.push(u>>8&255),A.push(u&255)):r===18?(A.push(u>>10&255),A.push(u>>2&255)):r===12&&A.push(u>>4&255),Jg?Jg.from?Jg.from(A):new Jg(A):A}function gHe(t){var e="",r=0,o,a,n=t.length,u=mR;for(o=0;o>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]),r=(r<<8)+t[o];return a=n%3,a===0?(e+=u[r>>18&63],e+=u[r>>12&63],e+=u[r>>6&63],e+=u[r&63]):a===2?(e+=u[r>>10&63],e+=u[r>>4&63],e+=u[r<<2&63],e+=u[64]):a===1&&(e+=u[r>>2&63],e+=u[r<<4&63],e+=u[64],e+=u[64]),e}function dHe(t){return Jg&&Jg.isBuffer(t)}qW.exports=new fHe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:pHe,construct:hHe,predicate:dHe,represent:gHe})});var WW=_((rbt,YW)=>{"use strict";var mHe=os(),yHe=Object.prototype.hasOwnProperty,EHe=Object.prototype.toString;function CHe(t){if(t===null)return!0;var e=[],r,o,a,n,u,A=t;for(r=0,o=A.length;r{"use strict";var IHe=os(),BHe=Object.prototype.toString;function vHe(t){if(t===null)return!0;var e,r,o,a,n,u=t;for(n=new Array(u.length),e=0,r=u.length;e{"use strict";var PHe=os(),SHe=Object.prototype.hasOwnProperty;function xHe(t){if(t===null)return!0;var e,r=t;for(e in r)if(SHe.call(r,e)&&r[e]!==null)return!1;return!0}function bHe(t){return t!==null?t:{}}JW.exports=new PHe("tag:yaml.org,2002:set",{kind:"mapping",resolve:xHe,construct:bHe})});var fy=_((sbt,XW)=>{"use strict";var kHe=Kg();XW.exports=new kHe({include:[dR()],implicit:[UW(),HW()],explicit:[GW(),WW(),KW(),zW()]})});var $W=_((obt,ZW)=>{"use strict";var QHe=os();function FHe(){return!0}function THe(){}function RHe(){return""}function NHe(t){return typeof t>"u"}ZW.exports=new QHe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:FHe,construct:THe,predicate:NHe,represent:RHe})});var tV=_((abt,eV)=>{"use strict";var LHe=os();function MHe(t){if(t===null||t.length===0)return!1;var e=t,r=/\/([gim]*)$/.exec(t),o="";return!(e[0]==="/"&&(r&&(o=r[1]),o.length>3||e[e.length-o.length-1]!=="/"))}function OHe(t){var e=t,r=/\/([gim]*)$/.exec(t),o="";return e[0]==="/"&&(r&&(o=r[1]),e=e.slice(1,e.length-o.length-1)),new RegExp(e,o)}function UHe(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multiline&&(e+="m"),t.ignoreCase&&(e+="i"),e}function _He(t){return Object.prototype.toString.call(t)==="[object RegExp]"}eV.exports=new LHe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:MHe,construct:OHe,predicate:_He,represent:UHe})});var iV=_((lbt,nV)=>{"use strict";var qD;try{rV=Be,qD=rV("esprima")}catch{typeof window<"u"&&(qD=window.esprima)}var rV,HHe=os();function jHe(t){if(t===null)return!1;try{var e="("+t+")",r=qD.parse(e,{range:!0});return!(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")}catch{return!1}}function qHe(t){var e="("+t+")",r=qD.parse(e,{range:!0}),o=[],a;if(r.type!=="Program"||r.body.length!==1||r.body[0].type!=="ExpressionStatement"||r.body[0].expression.type!=="ArrowFunctionExpression"&&r.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return r.body[0].expression.params.forEach(function(n){o.push(n.name)}),a=r.body[0].expression.body.range,r.body[0].expression.body.type==="BlockStatement"?new Function(o,e.slice(a[0]+1,a[1]-1)):new Function(o,"return "+e.slice(a[0],a[1]))}function GHe(t){return t.toString()}function YHe(t){return Object.prototype.toString.call(t)==="[object Function]"}nV.exports=new HHe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:jHe,construct:qHe,predicate:YHe,represent:GHe})});var zw=_((ubt,oV)=>{"use strict";var sV=Kg();oV.exports=sV.DEFAULT=new sV({include:[fy()],explicit:[$W(),tV(),iV()]})});var DV=_((Abt,Xw)=>{"use strict";var mf=Vg(),pV=uy(),WHe=pW(),hV=fy(),VHe=zw(),Gp=Object.prototype.hasOwnProperty,GD=1,gV=2,dV=3,YD=4,yR=1,KHe=2,aV=3,JHe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,zHe=/[\x85\u2028\u2029]/,XHe=/[,\[\]\{\}]/,mV=/^(?:!|!!|![a-z\-]+!)$/i,yV=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function lV(t){return Object.prototype.toString.call(t)}function Hu(t){return t===10||t===13}function Xg(t){return t===9||t===32}function Ia(t){return t===9||t===32||t===10||t===13}function py(t){return t===44||t===91||t===93||t===123||t===125}function ZHe(t){var e;return 48<=t&&t<=57?t-48:(e=t|32,97<=e&&e<=102?e-97+10:-1)}function $He(t){return t===120?2:t===117?4:t===85?8:0}function e6e(t){return 48<=t&&t<=57?t-48:-1}function cV(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t===9?" ":t===110?` +`:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"\x1B":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"\x85":t===95?"\xA0":t===76?"\u2028":t===80?"\u2029":""}function t6e(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}var EV=new Array(256),CV=new Array(256);for(zg=0;zg<256;zg++)EV[zg]=cV(zg)?1:0,CV[zg]=cV(zg);var zg;function r6e(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||VHe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function wV(t,e){return new pV(e,new WHe(t.filename,t.input,t.position,t.line,t.position-t.lineStart))}function Sr(t,e){throw wV(t,e)}function WD(t,e){t.onWarning&&t.onWarning.call(null,wV(t,e))}var uV={YAML:function(e,r,o){var a,n,u;e.version!==null&&Sr(e,"duplication of %YAML directive"),o.length!==1&&Sr(e,"YAML directive accepts exactly one argument"),a=/^([0-9]+)\.([0-9]+)$/.exec(o[0]),a===null&&Sr(e,"ill-formed argument of the YAML directive"),n=parseInt(a[1],10),u=parseInt(a[2],10),n!==1&&Sr(e,"unacceptable YAML version of the document"),e.version=o[0],e.checkLineBreaks=u<2,u!==1&&u!==2&&WD(e,"unsupported YAML version of the document")},TAG:function(e,r,o){var a,n;o.length!==2&&Sr(e,"TAG directive accepts exactly two arguments"),a=o[0],n=o[1],mV.test(a)||Sr(e,"ill-formed tag handle (first argument) of the TAG directive"),Gp.call(e.tagMap,a)&&Sr(e,'there is a previously declared suffix for "'+a+'" tag handle'),yV.test(n)||Sr(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[a]=n}};function qp(t,e,r,o){var a,n,u,A;if(e1&&(t.result+=mf.repeat(` +`,e-1))}function n6e(t,e,r){var o,a,n,u,A,p,h,E,I=t.kind,v=t.result,b;if(b=t.input.charCodeAt(t.position),Ia(b)||py(b)||b===35||b===38||b===42||b===33||b===124||b===62||b===39||b===34||b===37||b===64||b===96||(b===63||b===45)&&(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&py(a)))return!1;for(t.kind="scalar",t.result="",n=u=t.position,A=!1;b!==0;){if(b===58){if(a=t.input.charCodeAt(t.position+1),Ia(a)||r&&py(a))break}else if(b===35){if(o=t.input.charCodeAt(t.position-1),Ia(o))break}else{if(t.position===t.lineStart&&VD(t)||r&&py(b))break;if(Hu(b))if(p=t.line,h=t.lineStart,E=t.lineIndent,Wi(t,!1,-1),t.lineIndent>=e){A=!0,b=t.input.charCodeAt(t.position);continue}else{t.position=u,t.line=p,t.lineStart=h,t.lineIndent=E;break}}A&&(qp(t,n,u,!1),CR(t,t.line-p),n=u=t.position,A=!1),Xg(b)||(u=t.position+1),b=t.input.charCodeAt(++t.position)}return qp(t,n,u,!1),t.result?!0:(t.kind=I,t.result=v,!1)}function i6e(t,e){var r,o,a;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,o=a=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(qp(t,o,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)o=t.position,t.position++,a=t.position;else return!0;else Hu(r)?(qp(t,o,a,!0),CR(t,Wi(t,!1,e)),o=a=t.position):t.position===t.lineStart&&VD(t)?Sr(t,"unexpected end of the document within a single quoted scalar"):(t.position++,a=t.position);Sr(t,"unexpected end of the stream within a single quoted scalar")}function s6e(t,e){var r,o,a,n,u,A;if(A=t.input.charCodeAt(t.position),A!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=o=t.position;(A=t.input.charCodeAt(t.position))!==0;){if(A===34)return qp(t,r,t.position,!0),t.position++,!0;if(A===92){if(qp(t,r,t.position,!0),A=t.input.charCodeAt(++t.position),Hu(A))Wi(t,!1,e);else if(A<256&&EV[A])t.result+=CV[A],t.position++;else if((u=$He(A))>0){for(a=u,n=0;a>0;a--)A=t.input.charCodeAt(++t.position),(u=ZHe(A))>=0?n=(n<<4)+u:Sr(t,"expected hexadecimal character");t.result+=t6e(n),t.position++}else Sr(t,"unknown escape sequence");r=o=t.position}else Hu(A)?(qp(t,r,o,!0),CR(t,Wi(t,!1,e)),r=o=t.position):t.position===t.lineStart&&VD(t)?Sr(t,"unexpected end of the document within a double quoted scalar"):(t.position++,o=t.position)}Sr(t,"unexpected end of the stream within a double quoted scalar")}function o6e(t,e){var r=!0,o,a=t.tag,n,u=t.anchor,A,p,h,E,I,v={},b,C,T,L;if(L=t.input.charCodeAt(t.position),L===91)p=93,I=!1,n=[];else if(L===123)p=125,I=!0,n={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=n),L=t.input.charCodeAt(++t.position);L!==0;){if(Wi(t,!0,e),L=t.input.charCodeAt(t.position),L===p)return t.position++,t.tag=a,t.anchor=u,t.kind=I?"mapping":"sequence",t.result=n,!0;r||Sr(t,"missed comma between flow collection entries"),C=b=T=null,h=E=!1,L===63&&(A=t.input.charCodeAt(t.position+1),Ia(A)&&(h=E=!0,t.position++,Wi(t,!0,e))),o=t.line,gy(t,e,GD,!1,!0),C=t.tag,b=t.result,Wi(t,!0,e),L=t.input.charCodeAt(t.position),(E||t.line===o)&&L===58&&(h=!0,L=t.input.charCodeAt(++t.position),Wi(t,!0,e),gy(t,e,GD,!1,!0),T=t.result),I?hy(t,n,v,C,b,T):h?n.push(hy(t,null,v,C,b,T)):n.push(b),Wi(t,!0,e),L=t.input.charCodeAt(t.position),L===44?(r=!0,L=t.input.charCodeAt(++t.position)):r=!1}Sr(t,"unexpected end of the stream within a flow collection")}function a6e(t,e){var r,o,a=yR,n=!1,u=!1,A=e,p=0,h=!1,E,I;if(I=t.input.charCodeAt(t.position),I===124)o=!1;else if(I===62)o=!0;else return!1;for(t.kind="scalar",t.result="";I!==0;)if(I=t.input.charCodeAt(++t.position),I===43||I===45)yR===a?a=I===43?aV:KHe:Sr(t,"repeat of a chomping mode identifier");else if((E=e6e(I))>=0)E===0?Sr(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?Sr(t,"repeat of an indentation width identifier"):(A=e+E-1,u=!0);else break;if(Xg(I)){do I=t.input.charCodeAt(++t.position);while(Xg(I));if(I===35)do I=t.input.charCodeAt(++t.position);while(!Hu(I)&&I!==0)}for(;I!==0;){for(ER(t),t.lineIndent=0,I=t.input.charCodeAt(t.position);(!u||t.lineIndentA&&(A=t.lineIndent),Hu(I)){p++;continue}if(t.lineIndente)&&p!==0)Sr(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(gy(t,e,YD,!0,a)&&(C?v=t.result:b=t.result),C||(hy(t,h,E,I,v,b,n,u),I=v=b=null),Wi(t,!0,-1),L=t.input.charCodeAt(t.position)),t.lineIndent>e&&L!==0)Sr(t,"bad indentation of a mapping entry");else if(t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndente?p=1:t.lineIndent===e?p=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),I=0,v=t.implicitTypes.length;I tag; it should be "'+b.kind+'", not "'+t.kind+'"'),b.resolve(t.result)?(t.result=b.construct(t.result),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Sr(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")):Sr(t,"unknown tag !<"+t.tag+">");return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||E}function f6e(t){var e=t.position,r,o,a,n=!1,u;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap={},t.anchorMap={};(u=t.input.charCodeAt(t.position))!==0&&(Wi(t,!0,-1),u=t.input.charCodeAt(t.position),!(t.lineIndent>0||u!==37));){for(n=!0,u=t.input.charCodeAt(++t.position),r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);for(o=t.input.slice(r,t.position),a=[],o.length<1&&Sr(t,"directive name must not be less than one character in length");u!==0;){for(;Xg(u);)u=t.input.charCodeAt(++t.position);if(u===35){do u=t.input.charCodeAt(++t.position);while(u!==0&&!Hu(u));break}if(Hu(u))break;for(r=t.position;u!==0&&!Ia(u);)u=t.input.charCodeAt(++t.position);a.push(t.input.slice(r,t.position))}u!==0&&ER(t),Gp.call(uV,o)?uV[o](t,o,a):WD(t,'unknown document directive "'+o+'"')}if(Wi(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Wi(t,!0,-1)):n&&Sr(t,"directives end mark is expected"),gy(t,t.lineIndent-1,YD,!1,!0),Wi(t,!0,-1),t.checkLineBreaks&&zHe.test(t.input.slice(e,t.position))&&WD(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&VD(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Wi(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var o=IV(t,r);if(typeof e!="function")return o;for(var a=0,n=o.length;a"u"&&(r=e,e=null),BV(t,e,mf.extend({schema:hV},r))}function h6e(t,e){return vV(t,mf.extend({schema:hV},e))}Xw.exports.loadAll=BV;Xw.exports.load=vV;Xw.exports.safeLoadAll=p6e;Xw.exports.safeLoad=h6e});var KV=_((fbt,vR)=>{"use strict";var $w=Vg(),eI=uy(),g6e=zw(),d6e=fy(),TV=Object.prototype.toString,RV=Object.prototype.hasOwnProperty,m6e=9,Zw=10,y6e=13,E6e=32,C6e=33,w6e=34,NV=35,I6e=37,B6e=38,v6e=39,D6e=42,LV=44,P6e=45,MV=58,S6e=61,x6e=62,b6e=63,k6e=64,OV=91,UV=93,Q6e=96,_V=123,F6e=124,HV=125,vo={};vo[0]="\\0";vo[7]="\\a";vo[8]="\\b";vo[9]="\\t";vo[10]="\\n";vo[11]="\\v";vo[12]="\\f";vo[13]="\\r";vo[27]="\\e";vo[34]='\\"';vo[92]="\\\\";vo[133]="\\N";vo[160]="\\_";vo[8232]="\\L";vo[8233]="\\P";var T6e=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function R6e(t,e){var r,o,a,n,u,A,p;if(e===null)return{};for(r={},o=Object.keys(e),a=0,n=o.length;a0?t.charCodeAt(n-1):null,v=v&&xV(u,A)}else{for(n=0;no&&t[I+1]!==" ",I=n);else if(!dy(u))return KD;A=n>0?t.charCodeAt(n-1):null,v=v&&xV(u,A)}h=h||E&&n-I-1>o&&t[I+1]!==" "}return!p&&!h?v&&!a(t)?qV:GV:r>9&&jV(t)?KD:h?WV:YV}function _6e(t,e,r,o){t.dump=function(){if(e.length===0)return"''";if(!t.noCompatMode&&T6e.indexOf(e)!==-1)return"'"+e+"'";var a=t.indent*Math.max(1,r),n=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),u=o||t.flowLevel>-1&&r>=t.flowLevel;function A(p){return L6e(t,p)}switch(U6e(e,u,t.indent,n,A)){case qV:return e;case GV:return"'"+e.replace(/'/g,"''")+"'";case YV:return"|"+bV(e,t.indent)+kV(SV(e,a));case WV:return">"+bV(e,t.indent)+kV(SV(H6e(e,n),a));case KD:return'"'+j6e(e,n)+'"';default:throw new eI("impossible error: invalid scalar style")}}()}function bV(t,e){var r=jV(t)?String(e):"",o=t[t.length-1]===` +`,a=o&&(t[t.length-2]===` +`||t===` +`),n=a?"+":o?"":"-";return r+n+` +`}function kV(t){return t[t.length-1]===` +`?t.slice(0,-1):t}function H6e(t,e){for(var r=/(\n+)([^\n]*)/g,o=function(){var h=t.indexOf(` +`);return h=h!==-1?h:t.length,r.lastIndex=h,QV(t.slice(0,h),e)}(),a=t[0]===` +`||t[0]===" ",n,u;u=r.exec(t);){var A=u[1],p=u[2];n=p[0]===" ",o+=A+(!a&&!n&&p!==""?` +`:"")+QV(p,e),a=n}return o}function QV(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,o,a=0,n,u=0,A=0,p="";o=r.exec(t);)A=o.index,A-a>e&&(n=u>a?u:A,p+=` +`+t.slice(a,n),a=n+1),u=A;return p+=` +`,t.length-a>e&&u>a?p+=t.slice(a,u)+` +`+t.slice(u+1):p+=t.slice(a),p.slice(1)}function j6e(t){for(var e="",r,o,a,n=0;n=55296&&r<=56319&&(o=t.charCodeAt(n+1),o>=56320&&o<=57343)){e+=PV((r-55296)*1024+o-56320+65536),n++;continue}a=vo[r],e+=!a&&dy(r)?t[n]:a||PV(r)}return e}function q6e(t,e,r){var o="",a=t.tag,n,u;for(n=0,u=r.length;n1024&&(E+="? "),E+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Zg(t,e,h,!1,!1)&&(E+=t.dump,o+=E));t.tag=a,t.dump="{"+o+"}"}function W6e(t,e,r,o){var a="",n=t.tag,u=Object.keys(r),A,p,h,E,I,v;if(t.sortKeys===!0)u.sort();else if(typeof t.sortKeys=="function")u.sort(t.sortKeys);else if(t.sortKeys)throw new eI("sortKeys must be a boolean or a function");for(A=0,p=u.length;A1024,I&&(t.dump&&Zw===t.dump.charCodeAt(0)?v+="?":v+="? "),v+=t.dump,I&&(v+=wR(t,e)),Zg(t,e+1,E,!0,I)&&(t.dump&&Zw===t.dump.charCodeAt(0)?v+=":":v+=": ",v+=t.dump,a+=v));t.tag=n,t.dump=a||"{}"}function FV(t,e,r){var o,a,n,u,A,p;for(a=r?t.explicitTypes:t.implicitTypes,n=0,u=a.length;n tag resolver accepts not "'+p+'" style');t.dump=o}return!0}return!1}function Zg(t,e,r,o,a,n){t.tag=null,t.dump=r,FV(t,r,!1)||FV(t,r,!0);var u=TV.call(t.dump);o&&(o=t.flowLevel<0||t.flowLevel>e);var A=u==="[object Object]"||u==="[object Array]",p,h;if(A&&(p=t.duplicates.indexOf(r),h=p!==-1),(t.tag!==null&&t.tag!=="?"||h||t.indent!==2&&e>0)&&(a=!1),h&&t.usedDuplicates[p])t.dump="*ref_"+p;else{if(A&&h&&!t.usedDuplicates[p]&&(t.usedDuplicates[p]=!0),u==="[object Object]")o&&Object.keys(t.dump).length!==0?(W6e(t,e,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(Y6e(t,e,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump));else if(u==="[object Array]"){var E=t.noArrayIndent&&e>0?e-1:e;o&&t.dump.length!==0?(G6e(t,E,t.dump,a),h&&(t.dump="&ref_"+p+t.dump)):(q6e(t,E,t.dump),h&&(t.dump="&ref_"+p+" "+t.dump))}else if(u==="[object String]")t.tag!=="?"&&_6e(t,t.dump,e,n);else{if(t.skipInvalid)return!1;throw new eI("unacceptable kind of an object to dump "+u)}t.tag!==null&&t.tag!=="?"&&(t.dump="!<"+t.tag+"> "+t.dump)}return!0}function V6e(t,e){var r=[],o=[],a,n;for(IR(t,r,o),a=0,n=o.length;a{"use strict";var JD=DV(),JV=KV();function zD(t){return function(){throw new Error("Function "+t+" is deprecated and cannot be used.")}}ki.exports.Type=os();ki.exports.Schema=Kg();ki.exports.FAILSAFE_SCHEMA=jD();ki.exports.JSON_SCHEMA=gR();ki.exports.CORE_SCHEMA=dR();ki.exports.DEFAULT_SAFE_SCHEMA=fy();ki.exports.DEFAULT_FULL_SCHEMA=zw();ki.exports.load=JD.load;ki.exports.loadAll=JD.loadAll;ki.exports.safeLoad=JD.safeLoad;ki.exports.safeLoadAll=JD.safeLoadAll;ki.exports.dump=JV.dump;ki.exports.safeDump=JV.safeDump;ki.exports.YAMLException=uy();ki.exports.MINIMAL_SCHEMA=jD();ki.exports.SAFE_SCHEMA=fy();ki.exports.DEFAULT_SCHEMA=zw();ki.exports.scan=zD("scan");ki.exports.parse=zD("parse");ki.exports.compose=zD("compose");ki.exports.addConstructor=zD("addConstructor")});var ZV=_((hbt,XV)=>{"use strict";var J6e=zV();XV.exports=J6e});var eK=_((gbt,$V)=>{"use strict";function z6e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function $g(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,$g)}z6e($g,Error);$g.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I({[ft]:Le})))},pe=function($){return $},Ae=function($){return $},ye=sa("correct indentation"),ae=" ",we=Qn(" ",!1),Pe=function($){return $.length===nr*It},g=function($){return $.length===(nr+1)*It},Ee=function(){return nr++,!0},De=function(){return nr--,!0},ce=function(){return DA()},ne=sa("pseudostring"),ee=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,Ie=hi(["\r",` +`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),ke=/^[^\r\n\t ,\][{}:#"']/,ht=hi(["\r",` +`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),H=function(){return DA().replace(/^ *| *$/g,"")},lt="--",Re=Qn("--",!1),Qe=/^[a-zA-Z\/0-9]/,be=hi([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),_e=/^[^\r\n\t :,]/,Te=hi(["\r",` +`," "," ",":",","],!0,!1),Je="null",He=Qn("null",!1),x=function(){return null},w="true",S=Qn("true",!1),y=function(){return!0},F="false",z=Qn("false",!1),X=function(){return!1},Z=sa("string"),ie='"',Se=Qn('"',!1),Ne=function(){return""},ot=function($){return $},dt=function($){return $.join("")},jt=/^[^"\\\0-\x1F\x7F]/,$t=hi(['"',"\\",["\0",""],"\x7F"],!0,!1),xt='\\"',an=Qn('\\"',!1),Qr=function(){return'"'},mr="\\\\",xr=Qn("\\\\",!1),Wr=function(){return"\\"},Vn="\\/",Ns=Qn("\\/",!1),Ri=function(){return"/"},ps="\\b",io=Qn("\\b",!1),Si=function(){return"\b"},Ls="\\f",so=Qn("\\f",!1),cc=function(){return"\f"},cu="\\n",ap=Qn("\\n",!1),lp=function(){return` +`},Ms="\\r",Dn=Qn("\\r",!1),oo=function(){return"\r"},Os="\\t",ml=Qn("\\t",!1),yl=function(){return" "},ao="\\u",Kn=Qn("\\u",!1),Mn=function($,me,Le,ft){return String.fromCharCode(parseInt(`0x${$}${me}${Le}${ft}`))},Ni=/^[0-9a-fA-F]/,On=hi([["0","9"],["a","f"],["A","F"]],!1,!1),_i=sa("blank space"),tr=/^[ \t]/,Me=hi([" "," "],!1,!1),ii=sa("white space"),Oa=/^[ \t\n\r]/,hr=hi([" "," ",` +`,"\r"],!1,!1),uc=`\r +`,uu=Qn(`\r +`,!1),Ac=` +`,El=Qn(` +`,!1),vA="\r",Au=Qn("\r",!1),Ce=0,Tt=0,fc=[{line:1,column:1}],Hi=0,fu=[],Yt=0,Cl;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function DA(){return t.substring(Tt,Ce)}function cp(){return _o(Tt,Ce)}function pc($,me){throw me=me!==void 0?me:_o(Tt,Ce),gc([sa($)],t.substring(Tt,Ce),me)}function PA($,me){throw me=me!==void 0?me:_o(Tt,Ce),lo($,me)}function Qn($,me){return{type:"literal",text:$,ignoreCase:me}}function hi($,me,Le){return{type:"class",parts:$,inverted:me,ignoreCase:Le}}function hc(){return{type:"any"}}function SA(){return{type:"end"}}function sa($){return{type:"other",description:$}}function Li($){var me=fc[$],Le;if(me)return me;for(Le=$-1;!fc[Le];)Le--;for(me=fc[Le],me={line:me.line,column:me.column};Le<$;)t.charCodeAt(Le)===10?(me.line++,me.column=1):me.column++,Le++;return fc[$]=me,me}function _o($,me){var Le=Li($),ft=Li(me);return{start:{offset:$,line:Le.line,column:Le.column},end:{offset:me,line:ft.line,column:ft.column}}}function Ze($){CeHi&&(Hi=Ce,fu=[]),fu.push($))}function lo($,me){return new $g($,null,null,me)}function gc($,me,Le){return new $g($g.buildMessage($,me),$,me,Le)}function pu(){var $;return $=xA(),$}function ji(){var $,me,Le;for($=Ce,me=[],Le=hu();Le!==r;)me.push(Le),Le=hu();return me!==r&&(Tt=$,me=n(me)),$=me,$}function hu(){var $,me,Le,ft,pt;return $=Ce,me=hs(),me!==r?(t.charCodeAt(Ce)===45?(Le=u,Ce++):(Le=r,Yt===0&&Ze(A)),Le!==r?(ft=Pn(),ft!==r?(pt=dc(),pt!==r?(Tt=$,me=p(pt),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$}function xA(){var $,me,Le;for($=Ce,me=[],Le=Ua();Le!==r;)me.push(Le),Le=Ua();return me!==r&&(Tt=$,me=h(me)),$=me,$}function Ua(){var $,me,Le,ft,pt,Rt,er,Zr,qi;if($=Ce,me=Pn(),me===r&&(me=null),me!==r){if(Le=Ce,t.charCodeAt(Ce)===35?(ft=E,Ce++):(ft=r,Yt===0&&Ze(I)),ft!==r){if(pt=[],Rt=Ce,er=Ce,Yt++,Zr=tt(),Yt--,Zr===r?er=void 0:(Ce=er,er=r),er!==r?(t.length>Ce?(Zr=t.charAt(Ce),Ce++):(Zr=r,Yt===0&&Ze(v)),Zr!==r?(er=[er,Zr],Rt=er):(Ce=Rt,Rt=r)):(Ce=Rt,Rt=r),Rt!==r)for(;Rt!==r;)pt.push(Rt),Rt=Ce,er=Ce,Yt++,Zr=tt(),Yt--,Zr===r?er=void 0:(Ce=er,er=r),er!==r?(t.length>Ce?(Zr=t.charAt(Ce),Ce++):(Zr=r,Yt===0&&Ze(v)),Zr!==r?(er=[er,Zr],Rt=er):(Ce=Rt,Rt=r)):(Ce=Rt,Rt=r);else pt=r;pt!==r?(ft=[ft,pt],Le=ft):(Ce=Le,Le=r)}else Ce=Le,Le=r;if(Le===r&&(Le=null),Le!==r){if(ft=[],pt=We(),pt!==r)for(;pt!==r;)ft.push(pt),pt=We();else ft=r;ft!==r?(Tt=$,me=b(),$=me):(Ce=$,$=r)}else Ce=$,$=r}else Ce=$,$=r;if($===r&&($=Ce,me=hs(),me!==r?(Le=oa(),Le!==r?(ft=Pn(),ft===r&&(ft=null),ft!==r?(t.charCodeAt(Ce)===58?(pt=C,Ce++):(pt=r,Yt===0&&Ze(T)),pt!==r?(Rt=Pn(),Rt===r&&(Rt=null),Rt!==r?(er=dc(),er!==r?(Tt=$,me=L(Le,er),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,me=hs(),me!==r?(Le=co(),Le!==r?(ft=Pn(),ft===r&&(ft=null),ft!==r?(t.charCodeAt(Ce)===58?(pt=C,Ce++):(pt=r,Yt===0&&Ze(T)),pt!==r?(Rt=Pn(),Rt===r&&(Rt=null),Rt!==r?(er=dc(),er!==r?(Tt=$,me=L(Le,er),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r))){if($=Ce,me=hs(),me!==r)if(Le=co(),Le!==r)if(ft=Pn(),ft!==r)if(pt=aa(),pt!==r){if(Rt=[],er=We(),er!==r)for(;er!==r;)Rt.push(er),er=We();else Rt=r;Rt!==r?(Tt=$,me=L(Le,pt),$=me):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r;else Ce=$,$=r;else Ce=$,$=r;if($===r)if($=Ce,me=hs(),me!==r)if(Le=co(),Le!==r){if(ft=[],pt=Ce,Rt=Pn(),Rt===r&&(Rt=null),Rt!==r?(t.charCodeAt(Ce)===44?(er=U,Ce++):(er=r,Yt===0&&Ze(J)),er!==r?(Zr=Pn(),Zr===r&&(Zr=null),Zr!==r?(qi=co(),qi!==r?(Tt=pt,Rt=te(Le,qi),pt=Rt):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r),pt!==r)for(;pt!==r;)ft.push(pt),pt=Ce,Rt=Pn(),Rt===r&&(Rt=null),Rt!==r?(t.charCodeAt(Ce)===44?(er=U,Ce++):(er=r,Yt===0&&Ze(J)),er!==r?(Zr=Pn(),Zr===r&&(Zr=null),Zr!==r?(qi=co(),qi!==r?(Tt=pt,Rt=te(Le,qi),pt=Rt):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r)):(Ce=pt,pt=r);else ft=r;ft!==r?(pt=Pn(),pt===r&&(pt=null),pt!==r?(t.charCodeAt(Ce)===58?(Rt=C,Ce++):(Rt=r,Yt===0&&Ze(T)),Rt!==r?(er=Pn(),er===r&&(er=null),er!==r?(Zr=dc(),Zr!==r?(Tt=$,me=le(Le,ft,Zr),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r}return $}function dc(){var $,me,Le,ft,pt,Rt,er;if($=Ce,me=Ce,Yt++,Le=Ce,ft=tt(),ft!==r?(pt=_t(),pt!==r?(t.charCodeAt(Ce)===45?(Rt=u,Ce++):(Rt=r,Yt===0&&Ze(A)),Rt!==r?(er=Pn(),er!==r?(ft=[ft,pt,Rt,er],Le=ft):(Ce=Le,Le=r)):(Ce=Le,Le=r)):(Ce=Le,Le=r)):(Ce=Le,Le=r),Yt--,Le!==r?(Ce=me,me=void 0):me=r,me!==r?(Le=We(),Le!==r?(ft=Fn(),ft!==r?(pt=ji(),pt!==r?(Rt=Ci(),Rt!==r?(Tt=$,me=pe(pt),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,me=tt(),me!==r?(Le=Fn(),Le!==r?(ft=xA(),ft!==r?(pt=Ci(),pt!==r?(Tt=$,me=pe(ft),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r),$===r))if($=Ce,me=Us(),me!==r){if(Le=[],ft=We(),ft!==r)for(;ft!==r;)Le.push(ft),ft=We();else Le=r;Le!==r?(Tt=$,me=Ae(me),$=me):(Ce=$,$=r)}else Ce=$,$=r;return $}function hs(){var $,me,Le;for(Yt++,$=Ce,me=[],t.charCodeAt(Ce)===32?(Le=ae,Ce++):(Le=r,Yt===0&&Ze(we));Le!==r;)me.push(Le),t.charCodeAt(Ce)===32?(Le=ae,Ce++):(Le=r,Yt===0&&Ze(we));return me!==r?(Tt=Ce,Le=Pe(me),Le?Le=void 0:Le=r,Le!==r?(me=[me,Le],$=me):(Ce=$,$=r)):(Ce=$,$=r),Yt--,$===r&&(me=r,Yt===0&&Ze(ye)),$}function _t(){var $,me,Le;for($=Ce,me=[],t.charCodeAt(Ce)===32?(Le=ae,Ce++):(Le=r,Yt===0&&Ze(we));Le!==r;)me.push(Le),t.charCodeAt(Ce)===32?(Le=ae,Ce++):(Le=r,Yt===0&&Ze(we));return me!==r?(Tt=Ce,Le=g(me),Le?Le=void 0:Le=r,Le!==r?(me=[me,Le],$=me):(Ce=$,$=r)):(Ce=$,$=r),$}function Fn(){var $;return Tt=Ce,$=Ee(),$?$=void 0:$=r,$}function Ci(){var $;return Tt=Ce,$=De(),$?$=void 0:$=r,$}function oa(){var $;return $=ds(),$===r&&($=la()),$}function co(){var $,me,Le;if($=ds(),$===r){if($=Ce,me=[],Le=Ho(),Le!==r)for(;Le!==r;)me.push(Le),Le=Ho();else me=r;me!==r&&(Tt=$,me=ce()),$=me}return $}function Us(){var $;return $=wi(),$===r&&($=gs(),$===r&&($=ds(),$===r&&($=la()))),$}function aa(){var $;return $=wi(),$===r&&($=ds(),$===r&&($=Ho())),$}function la(){var $,me,Le,ft,pt,Rt;if(Yt++,$=Ce,ee.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(Ie)),me!==r){for(Le=[],ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(ke.test(t.charAt(Ce))?(Rt=t.charAt(Ce),Ce++):(Rt=r,Yt===0&&Ze(ht)),Rt!==r?(pt=[pt,Rt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);ft!==r;)Le.push(ft),ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(ke.test(t.charAt(Ce))?(Rt=t.charAt(Ce),Ce++):(Rt=r,Yt===0&&Ze(ht)),Rt!==r?(pt=[pt,Rt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);Le!==r?(Tt=$,me=H(),$=me):(Ce=$,$=r)}else Ce=$,$=r;return Yt--,$===r&&(me=r,Yt===0&&Ze(ne)),$}function Ho(){var $,me,Le,ft,pt;if($=Ce,t.substr(Ce,2)===lt?(me=lt,Ce+=2):(me=r,Yt===0&&Ze(Re)),me===r&&(me=null),me!==r)if(Qe.test(t.charAt(Ce))?(Le=t.charAt(Ce),Ce++):(Le=r,Yt===0&&Ze(be)),Le!==r){for(ft=[],_e.test(t.charAt(Ce))?(pt=t.charAt(Ce),Ce++):(pt=r,Yt===0&&Ze(Te));pt!==r;)ft.push(pt),_e.test(t.charAt(Ce))?(pt=t.charAt(Ce),Ce++):(pt=r,Yt===0&&Ze(Te));ft!==r?(Tt=$,me=H(),$=me):(Ce=$,$=r)}else Ce=$,$=r;else Ce=$,$=r;return $}function wi(){var $,me;return $=Ce,t.substr(Ce,4)===Je?(me=Je,Ce+=4):(me=r,Yt===0&&Ze(He)),me!==r&&(Tt=$,me=x()),$=me,$}function gs(){var $,me;return $=Ce,t.substr(Ce,4)===w?(me=w,Ce+=4):(me=r,Yt===0&&Ze(S)),me!==r&&(Tt=$,me=y()),$=me,$===r&&($=Ce,t.substr(Ce,5)===F?(me=F,Ce+=5):(me=r,Yt===0&&Ze(z)),me!==r&&(Tt=$,me=X()),$=me),$}function ds(){var $,me,Le,ft;return Yt++,$=Ce,t.charCodeAt(Ce)===34?(me=ie,Ce++):(me=r,Yt===0&&Ze(Se)),me!==r?(t.charCodeAt(Ce)===34?(Le=ie,Ce++):(Le=r,Yt===0&&Ze(Se)),Le!==r?(Tt=$,me=Ne(),$=me):(Ce=$,$=r)):(Ce=$,$=r),$===r&&($=Ce,t.charCodeAt(Ce)===34?(me=ie,Ce++):(me=r,Yt===0&&Ze(Se)),me!==r?(Le=ms(),Le!==r?(t.charCodeAt(Ce)===34?(ft=ie,Ce++):(ft=r,Yt===0&&Ze(Se)),ft!==r?(Tt=$,me=ot(Le),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)),Yt--,$===r&&(me=r,Yt===0&&Ze(Z)),$}function ms(){var $,me,Le;if($=Ce,me=[],Le=_s(),Le!==r)for(;Le!==r;)me.push(Le),Le=_s();else me=r;return me!==r&&(Tt=$,me=dt(me)),$=me,$}function _s(){var $,me,Le,ft,pt,Rt;return jt.test(t.charAt(Ce))?($=t.charAt(Ce),Ce++):($=r,Yt===0&&Ze($t)),$===r&&($=Ce,t.substr(Ce,2)===xt?(me=xt,Ce+=2):(me=r,Yt===0&&Ze(an)),me!==r&&(Tt=$,me=Qr()),$=me,$===r&&($=Ce,t.substr(Ce,2)===mr?(me=mr,Ce+=2):(me=r,Yt===0&&Ze(xr)),me!==r&&(Tt=$,me=Wr()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Vn?(me=Vn,Ce+=2):(me=r,Yt===0&&Ze(Ns)),me!==r&&(Tt=$,me=Ri()),$=me,$===r&&($=Ce,t.substr(Ce,2)===ps?(me=ps,Ce+=2):(me=r,Yt===0&&Ze(io)),me!==r&&(Tt=$,me=Si()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Ls?(me=Ls,Ce+=2):(me=r,Yt===0&&Ze(so)),me!==r&&(Tt=$,me=cc()),$=me,$===r&&($=Ce,t.substr(Ce,2)===cu?(me=cu,Ce+=2):(me=r,Yt===0&&Ze(ap)),me!==r&&(Tt=$,me=lp()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Ms?(me=Ms,Ce+=2):(me=r,Yt===0&&Ze(Dn)),me!==r&&(Tt=$,me=oo()),$=me,$===r&&($=Ce,t.substr(Ce,2)===Os?(me=Os,Ce+=2):(me=r,Yt===0&&Ze(ml)),me!==r&&(Tt=$,me=yl()),$=me,$===r&&($=Ce,t.substr(Ce,2)===ao?(me=ao,Ce+=2):(me=r,Yt===0&&Ze(Kn)),me!==r?(Le=Un(),Le!==r?(ft=Un(),ft!==r?(pt=Un(),pt!==r?(Rt=Un(),Rt!==r?(Tt=$,me=Mn(Le,ft,pt,Rt),$=me):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)):(Ce=$,$=r)))))))))),$}function Un(){var $;return Ni.test(t.charAt(Ce))?($=t.charAt(Ce),Ce++):($=r,Yt===0&&Ze(On)),$}function Pn(){var $,me;if(Yt++,$=[],tr.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(Me)),me!==r)for(;me!==r;)$.push(me),tr.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(Me));else $=r;return Yt--,$===r&&(me=r,Yt===0&&Ze(_i)),$}function ys(){var $,me;if(Yt++,$=[],Oa.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(hr)),me!==r)for(;me!==r;)$.push(me),Oa.test(t.charAt(Ce))?(me=t.charAt(Ce),Ce++):(me=r,Yt===0&&Ze(hr));else $=r;return Yt--,$===r&&(me=r,Yt===0&&Ze(ii)),$}function We(){var $,me,Le,ft,pt,Rt;if($=Ce,me=tt(),me!==r){for(Le=[],ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(Rt=tt(),Rt!==r?(pt=[pt,Rt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);ft!==r;)Le.push(ft),ft=Ce,pt=Pn(),pt===r&&(pt=null),pt!==r?(Rt=tt(),Rt!==r?(pt=[pt,Rt],ft=pt):(Ce=ft,ft=r)):(Ce=ft,ft=r);Le!==r?(me=[me,Le],$=me):(Ce=$,$=r)}else Ce=$,$=r;return $}function tt(){var $;return t.substr(Ce,2)===uc?($=uc,Ce+=2):($=r,Yt===0&&Ze(uu)),$===r&&(t.charCodeAt(Ce)===10?($=Ac,Ce++):($=r,Yt===0&&Ze(El)),$===r&&(t.charCodeAt(Ce)===13?($=vA,Ce++):($=r,Yt===0&&Ze(Au)))),$}let It=2,nr=0;if(Cl=a(),Cl!==r&&Ce===t.length)return Cl;throw Cl!==r&&Ce"u"?!0:typeof t=="object"&&t!==null&&!Array.isArray(t)?Object.keys(t).every(e=>iK(t[e])):!1}function DR(t,e,r){if(t===null)return`null +`;if(typeof t=="number"||typeof t=="boolean")return`${t.toString()} +`;if(typeof t=="string")return`${rK(t)} +`;if(Array.isArray(t)){if(t.length===0)return`[] +`;let o=" ".repeat(e);return` +${t.map(n=>`${o}- ${DR(n,e+1,!1)}`).join("")}`}if(typeof t=="object"&&t){let[o,a]=t instanceof XD?[t.data,!1]:[t,!0],n=" ".repeat(e),u=Object.keys(o);a&&u.sort((p,h)=>{let E=tK.indexOf(p),I=tK.indexOf(h);return E===-1&&I===-1?ph?1:0:E!==-1&&I===-1?-1:E===-1&&I!==-1?1:E-I});let A=u.filter(p=>!iK(o[p])).map((p,h)=>{let E=o[p],I=rK(p),v=DR(E,e+1,!0),b=h>0||r?n:"",C=I.length>1024?`? ${I} +${b}:`:`${I}:`,T=v.startsWith(` +`)?v:` ${v}`;return`${b}${C}${T}`}).join(e===0?` +`:"")||` +`;return r?` +${A}`:`${A}`}throw new Error(`Unsupported value type (${t})`)}function Ba(t){try{let e=DR(t,0,!1);return e!==` +`?e:""}catch(e){throw e.location&&(e.message=e.message.replace(/(\.)?$/,` (line ${e.location.start.line}, column ${e.location.start.column})$1`)),e}}function $6e(t){return t.endsWith(` +`)||(t+=` +`),(0,nK.parse)(t)}function tje(t){if(eje.test(t))return $6e(t);let e=(0,ZD.safeLoad)(t,{schema:ZD.FAILSAFE_SCHEMA,json:!0});if(e==null)return{};if(typeof e!="object")throw new Error(`Expected an indexed object, got a ${typeof e} instead. Does your file follow Yaml's rules?`);if(Array.isArray(e))throw new Error("Expected an indexed object, got an array instead. Does your file follow Yaml's rules?");return e}function Vi(t){return tje(t)}var ZD,nK,Z6e,tK,XD,eje,sK=Et(()=>{ZD=$e(ZV()),nK=$e(eK()),Z6e=/^(?![-?:,\][{}#&*!|>'"%@` \t\r\n]).([ \t]*(?![,\][{}:# \t\r\n]).)*$/,tK=["__metadata","version","resolution","dependencies","peerDependencies","dependenciesMeta","peerDependenciesMeta","binaries"],XD=class{constructor(e){this.data=e}};Ba.PreserveOrdering=XD;eje=/^(#.*(\r?\n))*?#\s+yarn\s+lockfile\s+v1\r?\n/i});var tI={};Kt(tI,{parseResolution:()=>UD,parseShell:()=>LD,parseSyml:()=>Vi,stringifyArgument:()=>AR,stringifyArgumentSegment:()=>fR,stringifyArithmeticExpression:()=>OD,stringifyCommand:()=>uR,stringifyCommandChain:()=>cy,stringifyCommandChainThen:()=>cR,stringifyCommandLine:()=>MD,stringifyCommandLineThen:()=>lR,stringifyEnvSegment:()=>ND,stringifyRedirectArgument:()=>Kw,stringifyResolution:()=>_D,stringifyShell:()=>ly,stringifyShellLine:()=>ly,stringifySyml:()=>Ba,stringifyValueArgument:()=>Gg});var Nl=Et(()=>{iW();lW();sK()});var aK=_((Cbt,PR)=>{"use strict";var rje=t=>{let e=!1,r=!1,o=!1;for(let a=0;a{if(!(typeof t=="string"||Array.isArray(t)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let r=a=>e.pascalCase?a.charAt(0).toUpperCase()+a.slice(1):a;return Array.isArray(t)?t=t.map(a=>a.trim()).filter(a=>a.length).join("-"):t=t.trim(),t.length===0?"":t.length===1?e.pascalCase?t.toUpperCase():t.toLowerCase():(t!==t.toLowerCase()&&(t=rje(t)),t=t.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(a,n)=>n.toUpperCase()).replace(/\d+(\w|$)/g,a=>a.toUpperCase()),r(t))};PR.exports=oK;PR.exports.default=oK});var lK=_((wbt,nje)=>{nje.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitHub Actions",constant:"GITHUB_ACTIONS",env:"GITHUB_ACTIONS",pr:{GITHUB_EVENT_NAME:"pull_request"}},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI",pr:"CI_MERGE_REQUEST_ID"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}},{name:"Vercel",constant:"VERCEL",env:"NOW_BUILDER"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"}]});var ed=_(Xa=>{"use strict";var uK=lK(),ju=process.env;Object.defineProperty(Xa,"_vendors",{value:uK.map(function(t){return t.constant})});Xa.name=null;Xa.isPR=null;uK.forEach(function(t){let r=(Array.isArray(t.env)?t.env:[t.env]).every(function(o){return cK(o)});if(Xa[t.constant]=r,r)switch(Xa.name=t.name,typeof t.pr){case"string":Xa.isPR=!!ju[t.pr];break;case"object":"env"in t.pr?Xa.isPR=t.pr.env in ju&&ju[t.pr.env]!==t.pr.ne:"any"in t.pr?Xa.isPR=t.pr.any.some(function(o){return!!ju[o]}):Xa.isPR=cK(t.pr);break;default:Xa.isPR=null}});Xa.isCI=!!(ju.CI||ju.CONTINUOUS_INTEGRATION||ju.BUILD_NUMBER||ju.RUN_ID||Xa.name);function cK(t){return typeof t=="string"?!!ju[t]:Object.keys(t).every(function(e){return ju[e]===t[e]})}});var Hn,cn,td,SR,$D,AK,xR,bR,eP=Et(()=>{(function(t){t.StartOfInput="\0",t.EndOfInput="",t.EndOfPartialInput=""})(Hn||(Hn={}));(function(t){t[t.InitialNode=0]="InitialNode",t[t.SuccessNode=1]="SuccessNode",t[t.ErrorNode=2]="ErrorNode",t[t.CustomNode=3]="CustomNode"})(cn||(cn={}));td=-1,SR=/^(-h|--help)(?:=([0-9]+))?$/,$D=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,AK=/^-[a-zA-Z]{2,}$/,xR=/^([^=]+)=([\s\S]*)$/,bR=process.env.DEBUG_CLI==="1"});var it,my,tP,kR,rP=Et(()=>{eP();it=class extends Error{constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageError"}},my=class extends Error{constructor(e,r){if(super(),this.input=e,this.candidates=r,this.clipanion={type:"none"},this.name="UnknownSyntaxError",this.candidates.length===0)this.message="Command not found, but we're not sure what's the alternative.";else if(this.candidates.every(o=>o.reason!==null&&o.reason===r[0].reason)){let[{reason:o}]=this.candidates;this.message=`${o} + +${this.candidates.map(({usage:a})=>`$ ${a}`).join(` +`)}`}else if(this.candidates.length===1){let[{usage:o}]=this.candidates;this.message=`Command not found; did you mean: + +$ ${o} +${kR(e)}`}else this.message=`Command not found; did you mean one of: + +${this.candidates.map(({usage:o},a)=>`${`${a}.`.padStart(4)} ${o}`).join(` +`)} + +${kR(e)}`}},tP=class extends Error{constructor(e,r){super(),this.input=e,this.usages=r,this.clipanion={type:"none"},this.name="AmbiguousSyntaxError",this.message=`Cannot find which to pick amongst the following alternatives: + +${this.usages.map((o,a)=>`${`${a}.`.padStart(4)} ${o}`).join(` +`)} + +${kR(e)}`}},kR=t=>`While running ${t.filter(e=>e!==Hn.EndOfInput&&e!==Hn.EndOfPartialInput).map(e=>{let r=JSON.stringify(e);return e.match(/\s/)||e.length===0||r!==`"${e}"`?r:e}).join(" ")}`});function ije(t){let e=t.split(` +`),r=e.filter(a=>a.match(/\S/)),o=r.length>0?r.reduce((a,n)=>Math.min(a,n.length-n.trimStart().length),Number.MAX_VALUE):0;return e.map(a=>a.slice(o).trimRight()).join(` +`)}function Do(t,{format:e,paragraphs:r}){return t=t.replace(/\r\n?/g,` +`),t=ije(t),t=t.replace(/^\n+|\n+$/g,""),t=t.replace(/^(\s*)-([^\n]*?)\n+/gm,`$1-$2 + +`),t=t.replace(/\n(\n)?\n*/g,(o,a)=>a||" "),r&&(t=t.split(/\n/).map(o=>{let a=o.match(/^\s*[*-][\t ]+(.*)/);if(!a)return o.match(/(.{1,80})(?: |$)/g).join(` +`);let n=o.length-o.trimStart().length;return a[1].match(new RegExp(`(.{1,${78-n}})(?: |$)`,"g")).map((u,A)=>" ".repeat(n)+(A===0?"- ":" ")+u).join(` +`)}).join(` + +`)),t=t.replace(/(`+)((?:.|[\n])*?)\1/g,(o,a,n)=>e.code(a+n+a)),t=t.replace(/(\*\*)((?:.|[\n])*?)\1/g,(o,a,n)=>e.bold(a+n+a)),t?`${t} +`:""}var QR,fK,pK,FR=Et(()=>{QR=Array(80).fill("\u2501");for(let t=0;t<=24;++t)QR[QR.length-t]=`\x1B[38;5;${232+t}m\u2501`;fK={header:t=>`\x1B[1m\u2501\u2501\u2501 ${t}${t.length<80-5?` ${QR.slice(t.length+5).join("")}`:":"}\x1B[0m`,bold:t=>`\x1B[1m${t}\x1B[22m`,error:t=>`\x1B[31m\x1B[1m${t}\x1B[22m\x1B[39m`,code:t=>`\x1B[36m${t}\x1B[39m`},pK={header:t=>t,bold:t=>t,error:t=>t,code:t=>t}});function Vo(t){return{...t,[rI]:!0}}function qu(t,e){return typeof t>"u"?[t,e]:typeof t=="object"&&t!==null&&!Array.isArray(t)?[void 0,t]:[t,e]}function nP(t,{mergeName:e=!1}={}){let r=t.match(/^([^:]+): (.*)$/m);if(!r)return"validation failed";let[,o,a]=r;return e&&(a=a[0].toLowerCase()+a.slice(1)),a=o!=="."||!e?`${o.replace(/^\.(\[|$)/,"$1")}: ${a}`:`: ${a}`,a}function nI(t,e){return e.length===1?new it(`${t}${nP(e[0],{mergeName:!0})}`):new it(`${t}: +${e.map(r=>` +- ${nP(r)}`).join("")}`)}function rd(t,e,r){if(typeof r>"u")return e;let o=[],a=[],n=A=>{let p=e;return e=A,n.bind(null,p)};if(!r(e,{errors:o,coercions:a,coercion:n}))throw nI(`Invalid value for ${t}`,o);for(let[,A]of a)A();return e}var rI,yf=Et(()=>{rP();rI=Symbol("clipanion/isOption")});var Ko={};Kt(Ko,{KeyRelationship:()=>Gu,TypeAssertionError:()=>Wp,applyCascade:()=>oI,as:()=>Bje,assert:()=>Cje,assertWithErrors:()=>wje,cascade:()=>aP,fn:()=>vje,hasAtLeastOneKey:()=>UR,hasExactLength:()=>yK,hasForbiddenKeys:()=>qje,hasKeyRelationship:()=>lI,hasMaxLength:()=>Pje,hasMinLength:()=>Dje,hasMutuallyExclusiveKeys:()=>Gje,hasRequiredKeys:()=>jje,hasUniqueItems:()=>Sje,isArray:()=>iP,isAtLeast:()=>MR,isAtMost:()=>kje,isBase64:()=>Oje,isBoolean:()=>fje,isDate:()=>hje,isDict:()=>mje,isEnum:()=>Vs,isHexColor:()=>Mje,isISO8601:()=>Lje,isInExclusiveRange:()=>Fje,isInInclusiveRange:()=>Qje,isInstanceOf:()=>Eje,isInteger:()=>OR,isJSON:()=>Uje,isLiteral:()=>gK,isLowerCase:()=>Tje,isMap:()=>dje,isNegative:()=>xje,isNullable:()=>Hje,isNumber:()=>NR,isObject:()=>dK,isOneOf:()=>LR,isOptional:()=>_je,isPartial:()=>yje,isPayload:()=>pje,isPositive:()=>bje,isRecord:()=>oP,isSet:()=>gje,isString:()=>Ey,isTuple:()=>sP,isUUID4:()=>Nje,isUnknown:()=>RR,isUpperCase:()=>Rje,makeTrait:()=>mK,makeValidator:()=>Hr,matchesRegExp:()=>sI,softAssert:()=>Ije});function jn(t){return t===null?"null":t===void 0?"undefined":t===""?"an empty string":typeof t=="symbol"?`<${t.toString()}>`:Array.isArray(t)?"an array":JSON.stringify(t)}function yy(t,e){if(t.length===0)return"nothing";if(t.length===1)return jn(t[0]);let r=t.slice(0,-1),o=t[t.length-1],a=t.length>2?`, ${e} `:` ${e} `;return`${r.map(n=>jn(n)).join(", ")}${a}${jn(o)}`}function Yp(t,e){var r,o,a;return typeof e=="number"?`${(r=t?.p)!==null&&r!==void 0?r:"."}[${e}]`:sje.test(e)?`${(o=t?.p)!==null&&o!==void 0?o:""}.${e}`:`${(a=t?.p)!==null&&a!==void 0?a:"."}[${JSON.stringify(e)}]`}function TR(t,e,r){return t===1?e:r}function pr({errors:t,p:e}={},r){return t?.push(`${e??"."}: ${r}`),!1}function uje(t,e){return r=>{t[e]=r}}function Yu(t,e){return r=>{let o=t[e];return t[e]=r,Yu(t,e).bind(null,o)}}function iI(t,e,r){let o=()=>(t(r()),a),a=()=>(t(e),o);return o}function RR(){return Hr({test:(t,e)=>!0})}function gK(t){return Hr({test:(e,r)=>e!==t?pr(r,`Expected ${jn(t)} (got ${jn(e)})`):!0})}function Ey(){return Hr({test:(t,e)=>typeof t!="string"?pr(e,`Expected a string (got ${jn(t)})`):!0})}function Vs(t){let e=Array.isArray(t)?t:Object.values(t),r=e.every(a=>typeof a=="string"||typeof a=="number"),o=new Set(e);return o.size===1?gK([...o][0]):Hr({test:(a,n)=>o.has(a)?!0:r?pr(n,`Expected one of ${yy(e,"or")} (got ${jn(a)})`):pr(n,`Expected a valid enumeration value (got ${jn(a)})`)})}function fje(){return Hr({test:(t,e)=>{var r;if(typeof t!="boolean"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o=Aje.get(t);if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a boolean (got ${jn(t)})`)}return!0}})}function NR(){return Hr({test:(t,e)=>{var r;if(typeof t!="number"){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"){let a;try{a=JSON.parse(t)}catch{}if(typeof a=="number")if(JSON.stringify(a)===t)o=a;else return pr(e,`Received a number that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a number (got ${jn(t)})`)}return!0}})}function pje(t){return Hr({test:(e,r)=>{var o;if(typeof r?.coercions>"u")return pr(r,"The isPayload predicate can only be used with coercion enabled");if(typeof r.coercion>"u")return pr(r,"Unbound coercion result");if(typeof e!="string")return pr(r,`Expected a string (got ${jn(e)})`);let a;try{a=JSON.parse(e)}catch{return pr(r,`Expected a JSON string (got ${jn(e)})`)}let n={value:a};return t(a,Object.assign(Object.assign({},r),{coercion:Yu(n,"value")}))?(r.coercions.push([(o=r.p)!==null&&o!==void 0?o:".",r.coercion.bind(null,n.value)]),!0):!1}})}function hje(){return Hr({test:(t,e)=>{var r;if(!(t instanceof Date)){if(typeof e?.coercions<"u"){if(typeof e?.coercion>"u")return pr(e,"Unbound coercion result");let o;if(typeof t=="string"&&hK.test(t))o=new Date(t);else{let a;if(typeof t=="string"){let n;try{n=JSON.parse(t)}catch{}typeof n=="number"&&(a=n)}else typeof t=="number"&&(a=t);if(typeof a<"u")if(Number.isSafeInteger(a)||!Number.isSafeInteger(a*1e3))o=new Date(a*1e3);else return pr(e,`Received a timestamp that can't be safely represented by the runtime (${t})`)}if(typeof o<"u")return e.coercions.push([(r=e.p)!==null&&r!==void 0?r:".",e.coercion.bind(null,o)]),!0}return pr(e,`Expected a date (got ${jn(t)})`)}return!0}})}function iP(t,{delimiter:e}={}){return Hr({test:(r,o)=>{var a;let n=r;if(typeof r=="string"&&typeof e<"u"&&typeof o?.coercions<"u"){if(typeof o?.coercion>"u")return pr(o,"Unbound coercion result");r=r.split(e)}if(!Array.isArray(r))return pr(o,`Expected an array (got ${jn(r)})`);let u=!0;for(let A=0,p=r.length;A{var n,u;if(Object.getPrototypeOf(o).toString()==="[object Set]")if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A=[...o],p=[...o];if(!r(p,Object.assign(Object.assign({},a),{coercion:void 0})))return!1;let h=()=>p.some((E,I)=>E!==A[I])?new Set(p):o;return a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",iI(a.coercion,o,h)]),!0}else{let A=!0;for(let p of o)if(A=t(p,Object.assign({},a))&&A,!A&&a?.errors==null)break;return A}if(typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");let A={value:o};return r(o,Object.assign(Object.assign({},a),{coercion:Yu(A,"value")}))?(a.coercions.push([(u=a.p)!==null&&u!==void 0?u:".",iI(a.coercion,o,()=>new Set(A.value))]),!0):!1}return pr(a,`Expected a set (got ${jn(o)})`)}})}function dje(t,e){let r=iP(sP([t,e])),o=oP(e,{keys:t});return Hr({test:(a,n)=>{var u,A,p;if(Object.getPrototypeOf(a).toString()==="[object Map]")if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h=[...a],E=[...a];if(!r(E,Object.assign(Object.assign({},n),{coercion:void 0})))return!1;let I=()=>E.some((v,b)=>v[0]!==h[b][0]||v[1]!==h[b][1])?new Map(E):a;return n.coercions.push([(u=n.p)!==null&&u!==void 0?u:".",iI(n.coercion,a,I)]),!0}else{let h=!0;for(let[E,I]of a)if(h=t(E,Object.assign({},n))&&h,!h&&n?.errors==null||(h=e(I,Object.assign(Object.assign({},n),{p:Yp(n,E)}))&&h,!h&&n?.errors==null))break;return h}if(typeof n?.coercions<"u"){if(typeof n?.coercion>"u")return pr(n,"Unbound coercion result");let h={value:a};return Array.isArray(a)?r(a,Object.assign(Object.assign({},n),{coercion:void 0}))?(n.coercions.push([(A=n.p)!==null&&A!==void 0?A:".",iI(n.coercion,a,()=>new Map(h.value))]),!0):!1:o(a,Object.assign(Object.assign({},n),{coercion:Yu(h,"value")}))?(n.coercions.push([(p=n.p)!==null&&p!==void 0?p:".",iI(n.coercion,a,()=>new Map(Object.entries(h.value)))]),!0):!1}return pr(n,`Expected a map (got ${jn(a)})`)}})}function sP(t,{delimiter:e}={}){let r=yK(t.length);return Hr({test:(o,a)=>{var n;if(typeof o=="string"&&typeof e<"u"&&typeof a?.coercions<"u"){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");o=o.split(e),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)])}if(!Array.isArray(o))return pr(a,`Expected a tuple (got ${jn(o)})`);let u=r(o,Object.assign({},a));for(let A=0,p=o.length;A{var n;if(Array.isArray(o)&&typeof a?.coercions<"u")return typeof a?.coercion>"u"?pr(a,"Unbound coercion result"):r(o,Object.assign(Object.assign({},a),{coercion:void 0}))?(o=Object.fromEntries(o),a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,o)]),!0):!1;if(typeof o!="object"||o===null)return pr(a,`Expected an object (got ${jn(o)})`);let u=Object.keys(o),A=!0;for(let p=0,h=u.length;p{if(typeof a!="object"||a===null)return pr(n,`Expected an object (got ${jn(a)})`);let u=new Set([...r,...Object.keys(a)]),A={},p=!0;for(let h of u){if(h==="constructor"||h==="__proto__")p=pr(Object.assign(Object.assign({},n),{p:Yp(n,h)}),"Unsafe property name");else{let E=Object.prototype.hasOwnProperty.call(t,h)?t[h]:void 0,I=Object.prototype.hasOwnProperty.call(a,h)?a[h]:void 0;typeof E<"u"?p=E(I,Object.assign(Object.assign({},n),{p:Yp(n,h),coercion:Yu(a,h)}))&&p:e===null?p=pr(Object.assign(Object.assign({},n),{p:Yp(n,h)}),`Extraneous property (got ${jn(I)})`):Object.defineProperty(A,h,{enumerable:!0,get:()=>I,set:uje(a,h)})}if(!p&&n?.errors==null)break}return e!==null&&(p||n?.errors!=null)&&(p=e(A,n)&&p),p}});return Object.assign(o,{properties:t})}function yje(t){return dK(t,{extra:oP(RR())})}function mK(t){return()=>t}function Hr({test:t}){return mK(t)()}function Cje(t,e){if(!e(t))throw new Wp}function wje(t,e){let r=[];if(!e(t,{errors:r}))throw new Wp({errors:r})}function Ije(t,e){}function Bje(t,e,{coerce:r=!1,errors:o,throw:a}={}){let n=o?[]:void 0;if(!r){if(e(t,{errors:n}))return a?t:{value:t,errors:void 0};if(a)throw new Wp({errors:n});return{value:void 0,errors:n??!0}}let u={value:t},A=Yu(u,"value"),p=[];if(!e(t,{errors:n,coercion:A,coercions:p})){if(a)throw new Wp({errors:n});return{value:void 0,errors:n??!0}}for(let[,h]of p)h();return a?u.value:{value:u.value,errors:void 0}}function vje(t,e){let r=sP(t);return(...o)=>{if(!r(o))throw new Wp;return e(...o)}}function Dje(t){return Hr({test:(e,r)=>e.length>=t?!0:pr(r,`Expected to have a length of at least ${t} elements (got ${e.length})`)})}function Pje(t){return Hr({test:(e,r)=>e.length<=t?!0:pr(r,`Expected to have a length of at most ${t} elements (got ${e.length})`)})}function yK(t){return Hr({test:(e,r)=>e.length!==t?pr(r,`Expected to have a length of exactly ${t} elements (got ${e.length})`):!0})}function Sje({map:t}={}){return Hr({test:(e,r)=>{let o=new Set,a=new Set;for(let n=0,u=e.length;nt<=0?!0:pr(e,`Expected to be negative (got ${t})`)})}function bje(){return Hr({test:(t,e)=>t>=0?!0:pr(e,`Expected to be positive (got ${t})`)})}function MR(t){return Hr({test:(e,r)=>e>=t?!0:pr(r,`Expected to be at least ${t} (got ${e})`)})}function kje(t){return Hr({test:(e,r)=>e<=t?!0:pr(r,`Expected to be at most ${t} (got ${e})`)})}function Qje(t,e){return Hr({test:(r,o)=>r>=t&&r<=e?!0:pr(o,`Expected to be in the [${t}; ${e}] range (got ${r})`)})}function Fje(t,e){return Hr({test:(r,o)=>r>=t&&re!==Math.round(e)?pr(r,`Expected to be an integer (got ${e})`):!t&&!Number.isSafeInteger(e)?pr(r,`Expected to be a safe integer (got ${e})`):!0})}function sI(t){return Hr({test:(e,r)=>t.test(e)?!0:pr(r,`Expected to match the pattern ${t.toString()} (got ${jn(e)})`)})}function Tje(){return Hr({test:(t,e)=>t!==t.toLowerCase()?pr(e,`Expected to be all-lowercase (got ${t})`):!0})}function Rje(){return Hr({test:(t,e)=>t!==t.toUpperCase()?pr(e,`Expected to be all-uppercase (got ${t})`):!0})}function Nje(){return Hr({test:(t,e)=>cje.test(t)?!0:pr(e,`Expected to be a valid UUID v4 (got ${jn(t)})`)})}function Lje(){return Hr({test:(t,e)=>hK.test(t)?!0:pr(e,`Expected to be a valid ISO 8601 date string (got ${jn(t)})`)})}function Mje({alpha:t=!1}){return Hr({test:(e,r)=>(t?oje.test(e):aje.test(e))?!0:pr(r,`Expected to be a valid hexadecimal color string (got ${jn(e)})`)})}function Oje(){return Hr({test:(t,e)=>lje.test(t)?!0:pr(e,`Expected to be a valid base 64 string (got ${jn(t)})`)})}function Uje(t=RR()){return Hr({test:(e,r)=>{let o;try{o=JSON.parse(e)}catch{return pr(r,`Expected to be a valid JSON string (got ${jn(e)})`)}return t(o,r)}})}function aP(t,...e){let r=Array.isArray(e[0])?e[0]:e;return Hr({test:(o,a)=>{var n,u;let A={value:o},p=typeof a?.coercions<"u"?Yu(A,"value"):void 0,h=typeof a?.coercions<"u"?[]:void 0;if(!t(o,Object.assign(Object.assign({},a),{coercion:p,coercions:h})))return!1;let E=[];if(typeof h<"u")for(let[,I]of h)E.push(I());try{if(typeof a?.coercions<"u"){if(A.value!==o){if(typeof a?.coercion>"u")return pr(a,"Unbound coercion result");a.coercions.push([(n=a.p)!==null&&n!==void 0?n:".",a.coercion.bind(null,A.value)])}(u=a?.coercions)===null||u===void 0||u.push(...h)}return r.every(I=>I(A.value,a))}finally{for(let I of E)I()}}})}function oI(t,...e){let r=Array.isArray(e[0])?e[0]:e;return aP(t,r)}function _je(t){return Hr({test:(e,r)=>typeof e>"u"?!0:t(e,r)})}function Hje(t){return Hr({test:(e,r)=>e===null?!0:t(e,r)})}function jje(t,e){var r;let o=new Set(t),a=aI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)||p.push(h);return p.length>0?pr(u,`Missing required ${TR(p.length,"property","properties")} ${yy(p,"and")}`):!0}})}function UR(t,e){var r;let o=new Set(t),a=aI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>Object.keys(n).some(h=>a(o,h,n))?!0:pr(u,`Missing at least one property from ${yy(Array.from(o),"or")}`)})}function qje(t,e){var r;let o=new Set(t),a=aI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>0?pr(u,`Forbidden ${TR(p.length,"property","properties")} ${yy(p,"and")}`):!0}})}function Gje(t,e){var r;let o=new Set(t),a=aI[(r=e?.missingIf)!==null&&r!==void 0?r:"missing"];return Hr({test:(n,u)=>{let A=new Set(Object.keys(n)),p=[];for(let h of o)a(A,h,n)&&p.push(h);return p.length>1?pr(u,`Mutually exclusive properties ${yy(p,"and")}`):!0}})}function lI(t,e,r,o){var a,n;let u=new Set((a=o?.ignore)!==null&&a!==void 0?a:[]),A=aI[(n=o?.missingIf)!==null&&n!==void 0?n:"missing"],p=new Set(r),h=Yje[e],E=e===Gu.Forbids?"or":"and";return Hr({test:(I,v)=>{let b=new Set(Object.keys(I));if(!A(b,t,I)||u.has(I[t]))return!0;let C=[];for(let T of p)(A(b,T,I)&&!u.has(I[T]))!==h.expect&&C.push(T);return C.length>=1?pr(v,`Property "${t}" ${h.message} ${TR(C.length,"property","properties")} ${yy(C,E)}`):!0}})}var sje,oje,aje,lje,cje,hK,Aje,Eje,LR,Wp,aI,Gu,Yje,Za=Et(()=>{sje=/^[a-zA-Z_][a-zA-Z0-9_]*$/;oje=/^#[0-9a-f]{6}$/i,aje=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,lje=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,cje=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,hK=/^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/;Aje=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]);Eje=t=>Hr({test:(e,r)=>e instanceof t?!0:pr(r,`Expected an instance of ${t.name} (got ${jn(e)})`)}),LR=(t,{exclusive:e=!1}={})=>Hr({test:(r,o)=>{var a,n,u;let A=[],p=typeof o?.errors<"u"?[]:void 0;for(let h=0,E=t.length;h1?pr(o,`Expected to match exactly a single predicate (matched ${A.join(", ")})`):(u=o?.errors)===null||u===void 0||u.push(...p),!1}});Wp=class extends Error{constructor({errors:e}={}){let r="Type mismatch";if(e&&e.length>0){r+=` +`;for(let o of e)r+=` +- ${o}`}super(r)}};aI={missing:(t,e)=>t.has(e),undefined:(t,e,r)=>t.has(e)&&typeof r[e]<"u",nil:(t,e,r)=>t.has(e)&&r[e]!=null,falsy:(t,e,r)=>t.has(e)&&!!r[e]};(function(t){t.Forbids="Forbids",t.Requires="Requires"})(Gu||(Gu={}));Yje={[Gu.Forbids]:{expect:!1,message:"forbids using"},[Gu.Requires]:{expect:!0,message:"requires using"}}});var nt,Vp=Et(()=>{yf();nt=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let r=this.constructor.schema;if(Array.isArray(r)){let{isDict:a,isUnknown:n,applyCascade:u}=await Promise.resolve().then(()=>(Za(),Ko)),A=u(a(n()),r),p=[],h=[];if(!A(this,{errors:p,coercions:h}))throw nI("Invalid option schema",p);for(let[,I]of h)I()}else if(r!=null)throw new Error("Invalid command schema");let o=await this.execute();return typeof o<"u"?o:0}};nt.isOption=rI;nt.Default=[]});function va(t){bR&&console.log(t)}function CK(){let t={nodes:[]};for(let e=0;e{if(e.has(o))return;e.add(o);let a=t.nodes[o];for(let u of Object.values(a.statics))for(let{to:A}of u)r(A);for(let[,{to:u}]of a.dynamics)r(u);for(let{to:u}of a.shortcuts)r(u);let n=new Set(a.shortcuts.map(({to:u})=>u));for(;a.shortcuts.length>0;){let{to:u}=a.shortcuts.shift(),A=t.nodes[u];for(let[p,h]of Object.entries(A.statics)){let E=Object.prototype.hasOwnProperty.call(a.statics,p)?a.statics[p]:a.statics[p]=[];for(let I of h)E.some(({to:v})=>I.to===v)||E.push(I)}for(let[p,h]of A.dynamics)a.dynamics.some(([E,{to:I}])=>p===E&&h.to===I)||a.dynamics.push([p,h]);for(let p of A.shortcuts)n.has(p.to)||(a.shortcuts.push(p),n.add(p.to))}};r(cn.InitialNode)}function Kje(t,{prefix:e=""}={}){if(bR){va(`${e}Nodes are:`);for(let r=0;rE!==cn.ErrorNode).map(({state:E})=>({usage:E.candidateUsage,reason:null})));if(h.every(({node:E})=>E===cn.ErrorNode))throw new my(e,h.map(({state:E})=>({usage:E.candidateUsage,reason:E.errorMessage})));o=Xje(h)}if(o.length>0){va(" Results:");for(let n of o)va(` - ${n.node} -> ${JSON.stringify(n.state)}`)}else va(" No results");return o}function zje(t,e,{endToken:r=Hn.EndOfInput}={}){let o=Jje(t,[...e,r]);return Zje(e,o.map(({state:a})=>a))}function Xje(t){let e=0;for(let{state:r}of t)r.path.length>e&&(e=r.path.length);return t.filter(({state:r})=>r.path.length===e)}function Zje(t,e){let r=e.filter(v=>v.selectedIndex!==null),o=r.filter(v=>!v.partial);if(o.length>0&&(r=o),r.length===0)throw new Error;let a=r.filter(v=>v.selectedIndex===td||v.requiredOptions.every(b=>b.some(C=>v.options.find(T=>T.name===C))));if(a.length===0)throw new my(t,r.map(v=>({usage:v.candidateUsage,reason:null})));let n=0;for(let v of a)v.path.length>n&&(n=v.path.length);let u=a.filter(v=>v.path.length===n),A=v=>v.positionals.filter(({extra:b})=>!b).length+v.options.length,p=u.map(v=>({state:v,positionalCount:A(v)})),h=0;for(let{positionalCount:v}of p)v>h&&(h=v);let E=p.filter(({positionalCount:v})=>v===h).map(({state:v})=>v),I=$je(E);if(I.length>1)throw new tP(t,I.map(v=>v.candidateUsage));return I[0]}function $je(t){let e=[],r=[];for(let o of t)o.selectedIndex===td?r.push(o):e.push(o);return r.length>0&&e.push({...EK,path:wK(...r.map(o=>o.path)),options:r.reduce((o,a)=>o.concat(a.options),[])}),e}function wK(t,e,...r){return e===void 0?Array.from(t):wK(t.filter((o,a)=>o===e[a]),...r)}function $a(){return{dynamics:[],shortcuts:[],statics:{}}}function IK(t){return t===cn.SuccessNode||t===cn.ErrorNode}function _R(t,e=0){return{to:IK(t.to)?t.to:t.to>=cn.CustomNode?t.to+e-cn.CustomNode+1:t.to+e,reducer:t.reducer}}function eqe(t,e=0){let r=$a();for(let[o,a]of t.dynamics)r.dynamics.push([o,_R(a,e)]);for(let o of t.shortcuts)r.shortcuts.push(_R(o,e));for(let[o,a]of Object.entries(t.statics))r.statics[o]=a.map(n=>_R(n,e));return r}function Ss(t,e,r,o,a){t.nodes[e].dynamics.push([r,{to:o,reducer:a}])}function Cy(t,e,r,o){t.nodes[e].shortcuts.push({to:r,reducer:o})}function Jo(t,e,r,o,a){(Object.prototype.hasOwnProperty.call(t.nodes[e].statics,r)?t.nodes[e].statics[r]:t.nodes[e].statics[r]=[]).push({to:o,reducer:a})}function lP(t,e,r,o,a){if(Array.isArray(e)){let[n,...u]=e;return t[n](r,o,a,...u)}else return t[e](r,o,a)}var EK,tqe,HR,el,jR,wy,cP=Et(()=>{eP();rP();EK={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:td,partial:!1,tokens:[]};tqe={always:()=>!0,isOptionLike:(t,e)=>!t.ignoreOptions&&e!=="-"&&e.startsWith("-"),isNotOptionLike:(t,e)=>t.ignoreOptions||e==="-"||!e.startsWith("-"),isOption:(t,e,r,o)=>!t.ignoreOptions&&e===o,isBatchOption:(t,e,r,o)=>!t.ignoreOptions&&AK.test(e)&&[...e.slice(1)].every(a=>o.has(`-${a}`)),isBoundOption:(t,e,r,o,a)=>{let n=e.match(xR);return!t.ignoreOptions&&!!n&&$D.test(n[1])&&o.has(n[1])&&a.filter(u=>u.nameSet.includes(n[1])).every(u=>u.allowBinding)},isNegatedOption:(t,e,r,o)=>!t.ignoreOptions&&e===`--no-${o.slice(2)}`,isHelp:(t,e)=>!t.ignoreOptions&&SR.test(e),isUnsupportedOption:(t,e,r,o)=>!t.ignoreOptions&&e.startsWith("-")&&$D.test(e)&&!o.has(e),isInvalidOption:(t,e)=>!t.ignoreOptions&&e.startsWith("-")&&!$D.test(e)},HR={setCandidateState:(t,e,r,o)=>({...t,...o}),setSelectedIndex:(t,e,r,o)=>({...t,selectedIndex:o}),setPartialIndex:(t,e,r,o)=>({...t,selectedIndex:o,partial:!0}),pushBatch:(t,e,r,o)=>{let a=t.options.slice(),n=t.tokens.slice();for(let u=1;u{let[,o,a]=e.match(xR),n=t.options.concat({name:o,value:a}),u=t.tokens.concat([{segmentIndex:r,type:"option",slice:[0,o.length],option:o},{segmentIndex:r,type:"assign",slice:[o.length,o.length+1]},{segmentIndex:r,type:"value",slice:[o.length+1,o.length+a.length+1]}]);return{...t,options:n,tokens:u}},pushPath:(t,e,r)=>{let o=t.path.concat(e),a=t.tokens.concat({segmentIndex:r,type:"path"});return{...t,path:o,tokens:a}},pushPositional:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!1}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtra:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:!0}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushExtraNoLimits:(t,e,r)=>{let o=t.positionals.concat({value:e,extra:el}),a=t.tokens.concat({segmentIndex:r,type:"positional"});return{...t,positionals:o,tokens:a}},pushTrue:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushFalse:(t,e,r,o)=>{let a=t.options.concat({name:o,value:!1}),n=t.tokens.concat({segmentIndex:r,type:"option",option:o});return{...t,options:a,tokens:n}},pushUndefined:(t,e,r,o)=>{let a=t.options.concat({name:e,value:void 0}),n=t.tokens.concat({segmentIndex:r,type:"option",option:e});return{...t,options:a,tokens:n}},pushStringValue:(t,e,r)=>{var o;let a=t.options[t.options.length-1],n=t.options.slice(),u=t.tokens.concat({segmentIndex:r,type:"value"});return a.value=((o=a.value)!==null&&o!==void 0?o:[]).concat([e]),{...t,options:n,tokens:u}},setStringValue:(t,e,r)=>{let o=t.options[t.options.length-1],a=t.options.slice(),n=t.tokens.concat({segmentIndex:r,type:"value"});return o.value=e,{...t,options:a,tokens:n}},inhibateOptions:t=>({...t,ignoreOptions:!0}),useHelp:(t,e,r,o)=>{let[,,a]=e.match(SR);return typeof a<"u"?{...t,options:[{name:"-c",value:String(o)},{name:"-i",value:a}]}:{...t,options:[{name:"-c",value:String(o)}]}},setError:(t,e,r,o)=>e===Hn.EndOfInput||e===Hn.EndOfPartialInput?{...t,errorMessage:`${o}.`}:{...t,errorMessage:`${o} ("${e}").`},setOptionArityError:(t,e)=>{let r=t.options[t.options.length-1];return{...t,errorMessage:`Not enough arguments to option ${r.name}.`}}},el=Symbol(),jR=class{constructor(e,r){this.allOptionNames=new Map,this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=r}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:r=this.arity.trailing,extra:o=this.arity.extra,proxy:a=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:r,extra:o,proxy:a})}addPositional({name:e="arg",required:r=!0}={}){if(!r&&this.arity.extra===el)throw new Error("Optional parameters cannot be declared when using .rest() or .proxy()");if(!r&&this.arity.trailing.length>0)throw new Error("Optional parameters cannot be declared after the required trailing positional arguments");!r&&this.arity.extra!==el?this.arity.extra.push(e):this.arity.extra!==el&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e="arg",required:r=0}={}){if(this.arity.extra===el)throw new Error("Infinite lists cannot be declared multiple times in the same command");if(this.arity.trailing.length>0)throw new Error("Infinite lists cannot be declared after the required trailing positional arguments");for(let o=0;o1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(o))throw new Error(`The arity must be an integer, got ${o}`);if(o<0)throw new Error(`The arity must be positive, got ${o}`);let A=e.reduce((p,h)=>h.length>p.length?h:p,"");for(let p of e)this.allOptionNames.set(p,A);this.options.push({preferredName:A,nameSet:e,description:r,arity:o,hidden:a,required:n,allowBinding:u})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:r=!0}={}){let o=[this.cliOpts.binaryName],a=[];if(this.paths.length>0&&o.push(...this.paths[0]),e){for(let{preferredName:u,nameSet:A,arity:p,hidden:h,description:E,required:I}of this.options){if(h)continue;let v=[];for(let C=0;C`:`[${b}]`)}o.push(...this.arity.leading.map(u=>`<${u}>`)),this.arity.extra===el?o.push("..."):o.push(...this.arity.extra.map(u=>`[${u}]`)),o.push(...this.arity.trailing.map(u=>`<${u}>`))}return{usage:o.join(" "),options:a}}compile(){if(typeof this.context>"u")throw new Error("Assertion failed: No context attached");let e=CK(),r=cn.InitialNode,o=this.usage().usage,a=this.options.filter(A=>A.required).map(A=>A.nameSet);r=Mc(e,$a()),Jo(e,cn.InitialNode,Hn.StartOfInput,r,["setCandidateState",{candidateUsage:o,requiredOptions:a}]);let n=this.arity.proxy?"always":"isNotOptionLike",u=this.paths.length>0?this.paths:[[]];for(let A of u){let p=r;if(A.length>0){let v=Mc(e,$a());Cy(e,p,v),this.registerOptions(e,v),p=v}for(let v=0;v0||!this.arity.proxy){let v=Mc(e,$a());Ss(e,p,"isHelp",v,["useHelp",this.cliIndex]),Ss(e,v,"always",v,"pushExtra"),Jo(e,v,Hn.EndOfInput,cn.SuccessNode,["setSelectedIndex",td]),this.registerOptions(e,p)}this.arity.leading.length>0&&(Jo(e,p,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,p,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex]));let h=p;for(let v=0;v0||v+1!==this.arity.leading.length)&&(Jo(e,b,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,b,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex])),Ss(e,h,"isNotOptionLike",b,"pushPositional"),h=b}let E=h;if(this.arity.extra===el||this.arity.extra.length>0){let v=Mc(e,$a());if(Cy(e,h,v),this.arity.extra===el){let b=Mc(e,$a());this.arity.proxy||this.registerOptions(e,b),Ss(e,h,n,b,"pushExtraNoLimits"),Ss(e,b,n,b,"pushExtraNoLimits"),Cy(e,b,v)}else for(let b=0;b0)&&this.registerOptions(e,C),Ss(e,E,n,C,"pushExtra"),Cy(e,C,v),E=C}E=v}this.arity.trailing.length>0&&(Jo(e,E,Hn.EndOfInput,cn.ErrorNode,["setError","Not enough positional arguments"]),Jo(e,E,Hn.EndOfPartialInput,cn.SuccessNode,["setPartialIndex",this.cliIndex]));let I=E;for(let v=0;v=0&&e{let u=n?Hn.EndOfPartialInput:Hn.EndOfInput;return zje(o,a,{endToken:u})}}}}});function vK(){return uP.default&&"getColorDepth"in uP.default.WriteStream.prototype?uP.default.WriteStream.prototype.getColorDepth():process.env.FORCE_COLOR==="0"?1:process.env.FORCE_COLOR==="1"||typeof process.stdout<"u"&&process.stdout.isTTY?8:1}function DK(t){let e=BK;if(typeof e>"u"){if(t.stdout===process.stdout&&t.stderr===process.stderr)return null;let{AsyncLocalStorage:r}=Be("async_hooks");e=BK=new r;let o=process.stdout._write;process.stdout._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?o.call(this,n,u,A):p.stdout.write(n,u,A)};let a=process.stderr._write;process.stderr._write=function(n,u,A){let p=e.getStore();return typeof p>"u"?a.call(this,n,u,A):p.stderr.write(n,u,A)}}return r=>e.run(t,r)}var uP,BK,PK=Et(()=>{uP=$e(Be("tty"),1)});var Iy,SK=Et(()=>{Vp();Iy=class extends nt{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,r){let o=new Iy(r);o.path=e.path;for(let a of e.options)switch(a.name){case"-c":o.commands.push(Number(a.value));break;case"-i":o.index=Number(a.value);break}return o}async execute(){let e=this.commands;if(typeof this.index<"u"&&this.index>=0&&this.index1){this.context.stdout.write(`Multiple commands match your selection: +`),this.context.stdout.write(` +`);let r=0;for(let o of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[o].commandClass,{prefix:`${r++}. `.padStart(5)}));this.context.stdout.write(` +`),this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands. +`)}}}});async function kK(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=FK(t);return as.from(r,e).runExit(o,a)}async function QK(...t){let{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}=FK(t);return as.from(r,e).run(o,a)}function FK(t){let e,r,o,a;switch(typeof process<"u"&&typeof process.argv<"u"&&(o=process.argv.slice(2)),t.length){case 1:r=t[0];break;case 2:t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],Array.isArray(t[1])?o=t[1]:a=t[1]):(e=t[0],r=t[1]);break;case 3:Array.isArray(t[2])?(e=t[0],r=t[1],o=t[2]):t[0]&&t[0].prototype instanceof nt||Array.isArray(t[0])?(r=t[0],o=t[1],a=t[2]):(e=t[0],r=t[1],a=t[2]);break;default:e=t[0],r=t[1],o=t[2],a=t[3];break}if(typeof o>"u")throw new Error("The argv parameter must be provided when running Clipanion outside of a Node context");return{resolvedOptions:e,resolvedCommandClasses:r,resolvedArgv:o,resolvedContext:a}}function bK(t){return t()}var xK,as,TK=Et(()=>{eP();cP();FR();PK();Vp();SK();xK=Symbol("clipanion/errorCommand");as=class{constructor({binaryLabel:e,binaryName:r="...",binaryVersion:o,enableCapture:a=!1,enableColors:n}={}){this.registrations=new Map,this.builder=new wy({binaryName:r}),this.binaryLabel=e,this.binaryName=r,this.binaryVersion=o,this.enableCapture=a,this.enableColors=n}static from(e,r={}){let o=new as(r),a=Array.isArray(e)?e:[e];for(let n of a)o.register(n);return o}register(e){var r;let o=new Map,a=new e;for(let p in a){let h=a[p];typeof h=="object"&&h!==null&&h[nt.isOption]&&o.set(p,h)}let n=this.builder.command(),u=n.cliIndex,A=(r=e.paths)!==null&&r!==void 0?r:a.paths;if(typeof A<"u")for(let p of A)n.addPath(p);this.registrations.set(e,{specs:o,builder:n,index:u});for(let[p,{definition:h}]of o.entries())h(n,p);n.setContext({commandClass:e})}process(e,r){let{input:o,context:a,partial:n}=typeof e=="object"&&Array.isArray(e)?{input:e,context:r}:e,{contexts:u,process:A}=this.builder.compile(),p=A(o,{partial:n}),h={...as.defaultContext,...a};switch(p.selectedIndex){case td:{let E=Iy.from(p,u);return E.context=h,E.tokens=p.tokens,E}default:{let{commandClass:E}=u[p.selectedIndex],I=this.registrations.get(E);if(typeof I>"u")throw new Error("Assertion failed: Expected the command class to have been registered.");let v=new E;v.context=h,v.tokens=p.tokens,v.path=p.path;try{for(let[b,{transformer:C}]of I.specs.entries())v[b]=C(I.builder,b,p,h);return v}catch(b){throw b[xK]=v,b}}break}}async run(e,r){var o,a;let n,u={...as.defaultContext,...r},A=(o=this.enableColors)!==null&&o!==void 0?o:u.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e,u)}catch(E){return u.stdout.write(this.error(E,{colored:A})),1}if(n.help)return u.stdout.write(this.usage(n,{colored:A,detailed:!0})),0;n.context=u,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),definition:E=>this.definition(E),error:(E,I)=>this.error(E,I),format:E=>this.format(E),process:(E,I)=>this.process(E,{...u,...I}),run:(E,I)=>this.run(E,{...u,...I}),usage:(E,I)=>this.usage(E,I)};let p=this.enableCapture&&(a=DK(u))!==null&&a!==void 0?a:bK,h;try{h=await p(()=>n.validateAndExecute().catch(E=>n.catch(E).then(()=>0)))}catch(E){return u.stdout.write(this.error(E,{colored:A,command:n})),1}return h}async runExit(e,r){process.exitCode=await this.run(e,r)}definition(e,{colored:r=!1}={}){if(!e.usage)return null;let{usage:o}=this.getUsageByRegistration(e,{detailed:!1}),{usage:a,options:n}=this.getUsageByRegistration(e,{detailed:!0,inlineOptions:!1}),u=typeof e.usage.category<"u"?Do(e.usage.category,{format:this.format(r),paragraphs:!1}):void 0,A=typeof e.usage.description<"u"?Do(e.usage.description,{format:this.format(r),paragraphs:!1}):void 0,p=typeof e.usage.details<"u"?Do(e.usage.details,{format:this.format(r),paragraphs:!0}):void 0,h=typeof e.usage.examples<"u"?e.usage.examples.map(([E,I])=>[Do(E,{format:this.format(r),paragraphs:!1}),I.replace(/\$0/g,this.binaryName)]):void 0;return{path:o,usage:a,category:u,description:A,details:p,examples:h,options:n}}definitions({colored:e=!1}={}){let r=[];for(let o of this.registrations.keys()){let a=this.definition(o,{colored:e});!a||r.push(a)}return r}usage(e=null,{colored:r,detailed:o=!1,prefix:a="$ "}={}){var n;if(e===null){for(let p of this.registrations.keys()){let h=p.paths,E=typeof p.usage<"u";if(!h||h.length===0||h.length===1&&h[0].length===0||((n=h?.some(b=>b.length===0))!==null&&n!==void 0?n:!1))if(e){e=null;break}else e=p;else if(E){e=null;continue}}e&&(o=!0)}let u=e!==null&&e instanceof nt?e.constructor:e,A="";if(u)if(o){let{description:p="",details:h="",examples:E=[]}=u.usage||{};p!==""&&(A+=Do(p,{format:this.format(r),paragraphs:!1}).replace(/^./,b=>b.toUpperCase()),A+=` +`),(h!==""||E.length>0)&&(A+=`${this.format(r).header("Usage")} +`,A+=` +`);let{usage:I,options:v}=this.getUsageByRegistration(u,{inlineOptions:!1});if(A+=`${this.format(r).bold(a)}${I} +`,v.length>0){A+=` +`,A+=`${this.format(r).header("Options")} +`;let b=v.reduce((C,T)=>Math.max(C,T.definition.length),0);A+=` +`;for(let{definition:C,description:T}of v)A+=` ${this.format(r).bold(C.padEnd(b))} ${Do(T,{format:this.format(r),paragraphs:!1})}`}if(h!==""&&(A+=` +`,A+=`${this.format(r).header("Details")} +`,A+=` +`,A+=Do(h,{format:this.format(r),paragraphs:!0})),E.length>0){A+=` +`,A+=`${this.format(r).header("Examples")} +`;for(let[b,C]of E)A+=` +`,A+=Do(b,{format:this.format(r),paragraphs:!1}),A+=`${C.replace(/^/m,` ${this.format(r).bold(a)}`).replace(/\$0/g,this.binaryName)} +`}}else{let{usage:p}=this.getUsageByRegistration(u);A+=`${this.format(r).bold(a)}${p} +`}else{let p=new Map;for(let[v,{index:b}]of this.registrations.entries()){if(typeof v.usage>"u")continue;let C=typeof v.usage.category<"u"?Do(v.usage.category,{format:this.format(r),paragraphs:!1}):null,T=p.get(C);typeof T>"u"&&p.set(C,T=[]);let{usage:L}=this.getUsageByIndex(b);T.push({commandClass:v,usage:L})}let h=Array.from(p.keys()).sort((v,b)=>v===null?-1:b===null?1:v.localeCompare(b,"en",{usage:"sort",caseFirst:"upper"})),E=typeof this.binaryLabel<"u",I=typeof this.binaryVersion<"u";E||I?(E&&I?A+=`${this.format(r).header(`${this.binaryLabel} - ${this.binaryVersion}`)} + +`:E?A+=`${this.format(r).header(`${this.binaryLabel}`)} +`:A+=`${this.format(r).header(`${this.binaryVersion}`)} +`,A+=` ${this.format(r).bold(a)}${this.binaryName} +`):A+=`${this.format(r).bold(a)}${this.binaryName} +`;for(let v of h){let b=p.get(v).slice().sort((T,L)=>T.usage.localeCompare(L.usage,"en",{usage:"sort",caseFirst:"upper"})),C=v!==null?v.trim():"General commands";A+=` +`,A+=`${this.format(r).header(`${C}`)} +`;for(let{commandClass:T,usage:L}of b){let U=T.usage.description||"undocumented";A+=` +`,A+=` ${this.format(r).bold(L)} +`,A+=` ${Do(U,{format:this.format(r),paragraphs:!1})}`}}A+=` +`,A+=Do("You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.",{format:this.format(r),paragraphs:!0})}return A}error(e,r){var o,{colored:a,command:n=(o=e[xK])!==null&&o!==void 0?o:null}=r===void 0?{}:r;(!e||typeof e!="object"||!("stack"in e))&&(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let u="",A=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");A==="Error"&&(A="Internal Error"),u+=`${this.format(a).error(A)}: ${e.message} +`;let p=e.clipanion;return typeof p<"u"?p.type==="usage"&&(u+=` +`,u+=this.usage(n)):e.stack&&(u+=`${e.stack.replace(/^.*\n/,"")} +`),u}format(e){var r;return((r=e??this.enableColors)!==null&&r!==void 0?r:as.defaultContext.colorDepth>1)?fK:pK}getUsageByRegistration(e,r){let o=this.registrations.get(e);if(typeof o>"u")throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(o.index,r)}getUsageByIndex(e,r){return this.builder.getBuilderByIndex(e).usage(r)}};as.defaultContext={env:process.env,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:vK()}});var cI,RK=Et(()=>{Vp();cI=class extends nt{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)} +`)}};cI.paths=[["--clipanion=definitions"]]});var uI,NK=Et(()=>{Vp();uI=class extends nt{async execute(){this.context.stdout.write(this.cli.usage())}};uI.paths=[["-h"],["--help"]]});function AP(t={}){return Vo({definition(e,r){var o;e.addProxy({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){return o.positionals.map(({value:a})=>a)}})}var qR=Et(()=>{yf()});var AI,LK=Et(()=>{Vp();qR();AI=class extends nt{constructor(){super(...arguments),this.args=AP()}async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.process(this.args).tokens,null,2)} +`)}};AI.paths=[["--clipanion=tokens"]]});var fI,MK=Et(()=>{Vp();fI=class extends nt{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:""} +`)}};fI.paths=[["-v"],["--version"]]});var GR={};Kt(GR,{DefinitionsCommand:()=>cI,HelpCommand:()=>uI,TokensCommand:()=>AI,VersionCommand:()=>fI});var OK=Et(()=>{RK();NK();LK();MK()});function UK(t,e,r){let[o,a]=qu(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Vo({definition(p){p.addOption({names:u,arity:n,hidden:a?.hidden,description:a?.description,required:a.required})},transformer(p,h,E){let I,v=typeof o<"u"?[...o]:void 0;for(let{name:b,value:C}of E.options)!A.has(b)||(I=b,v=v??[],v.push(C));return typeof v<"u"?rd(I??h,v,a.validator):v}})}var _K=Et(()=>{yf()});function HK(t,e,r){let[o,a]=qu(e,r??{}),n=t.split(","),u=new Set(n);return Vo({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:I,value:v}of h.options)!u.has(I)||(E=v);return E}})}var jK=Et(()=>{yf()});function qK(t,e,r){let[o,a]=qu(e,r??{}),n=t.split(","),u=new Set(n);return Vo({definition(A){A.addOption({names:n,allowBinding:!1,arity:0,hidden:a.hidden,description:a.description,required:a.required})},transformer(A,p,h){let E=o;for(let{name:I,value:v}of h.options)!u.has(I)||(E??(E=0),v?E+=1:E=0);return E}})}var GK=Et(()=>{yf()});function YK(t={}){return Vo({definition(e,r){var o;e.addRest({name:(o=t.name)!==null&&o!==void 0?o:r,required:t.required})},transformer(e,r,o){let a=u=>{let A=o.positionals[u];return A.extra===el||A.extra===!1&&uu)}})}var WK=Et(()=>{cP();yf()});function rqe(t,e,r){let[o,a]=qu(e,r??{}),{arity:n=1}=a,u=t.split(","),A=new Set(u);return Vo({definition(p){p.addOption({names:u,arity:a.tolerateBoolean?0:n,hidden:a.hidden,description:a.description,required:a.required})},transformer(p,h,E,I){let v,b=o;typeof a.env<"u"&&I.env[a.env]&&(v=a.env,b=I.env[a.env]);for(let{name:C,value:T}of E.options)!A.has(C)||(v=C,b=T);return typeof b=="string"?rd(v??h,b,a.validator):b}})}function nqe(t={}){let{required:e=!0}=t;return Vo({definition(r,o){var a;r.addPositional({name:(a=t.name)!==null&&a!==void 0?a:o,required:t.required})},transformer(r,o,a){var n;for(let u=0;u{cP();yf()});var ge={};Kt(ge,{Array:()=>UK,Boolean:()=>HK,Counter:()=>qK,Proxy:()=>AP,Rest:()=>YK,String:()=>VK,applyValidator:()=>rd,cleanValidationError:()=>nP,formatError:()=>nI,isOptionSymbol:()=>rI,makeCommandOption:()=>Vo,rerouteArguments:()=>qu});var JK=Et(()=>{yf();qR();_K();jK();GK();WK();KK()});var pI={};Kt(pI,{Builtins:()=>GR,Cli:()=>as,Command:()=>nt,Option:()=>ge,UsageError:()=>it,formatMarkdownish:()=>Do,run:()=>QK,runExit:()=>kK});var qt=Et(()=>{rP();FR();Vp();TK();OK();JK()});var zK=_((xkt,iqe)=>{iqe.exports={name:"dotenv",version:"16.3.1",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard","lint-readme":"standard-markdown",pretest:"npm run lint && npm run dts-check",test:"tap tests/*.js --100 -Rspec",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},funding:"https://github.com/motdotla/dotenv?sponsor=1",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@definitelytyped/dtslint":"^0.0.133","@types/node":"^18.11.3",decache:"^4.6.1",sinon:"^14.0.1",standard:"^17.0.0","standard-markdown":"^7.1.0","standard-version":"^9.5.0",tap:"^16.3.0",tar:"^6.1.11",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:!1}}});var eJ=_((bkt,Ef)=>{var XK=Be("fs"),WR=Be("path"),sqe=Be("os"),oqe=Be("crypto"),aqe=zK(),VR=aqe.version,lqe=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function cqe(t){let e={},r=t.toString();r=r.replace(/\r\n?/mg,` +`);let o;for(;(o=lqe.exec(r))!=null;){let a=o[1],n=o[2]||"";n=n.trim();let u=n[0];n=n.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),u==='"'&&(n=n.replace(/\\n/g,` +`),n=n.replace(/\\r/g,"\r")),e[a]=n}return e}function uqe(t){let e=$K(t),r=xs.configDotenv({path:e});if(!r.parsed)throw new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);let o=ZK(t).split(","),a=o.length,n;for(let u=0;u=a)throw A}return xs.parse(n)}function Aqe(t){console.log(`[dotenv@${VR}][INFO] ${t}`)}function fqe(t){console.log(`[dotenv@${VR}][WARN] ${t}`)}function YR(t){console.log(`[dotenv@${VR}][DEBUG] ${t}`)}function ZK(t){return t&&t.DOTENV_KEY&&t.DOTENV_KEY.length>0?t.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function pqe(t,e){let r;try{r=new URL(e)}catch(A){throw A.code==="ERR_INVALID_URL"?new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenv.org/vault/.env.vault?environment=development"):A}let o=r.password;if(!o)throw new Error("INVALID_DOTENV_KEY: Missing key part");let a=r.searchParams.get("environment");if(!a)throw new Error("INVALID_DOTENV_KEY: Missing environment part");let n=`DOTENV_VAULT_${a.toUpperCase()}`,u=t.parsed[n];if(!u)throw new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${n} in your .env.vault file.`);return{ciphertext:u,key:o}}function $K(t){let e=WR.resolve(process.cwd(),".env");return t&&t.path&&t.path.length>0&&(e=t.path),e.endsWith(".vault")?e:`${e}.vault`}function hqe(t){return t[0]==="~"?WR.join(sqe.homedir(),t.slice(1)):t}function gqe(t){Aqe("Loading env from encrypted .env.vault");let e=xs._parseVault(t),r=process.env;return t&&t.processEnv!=null&&(r=t.processEnv),xs.populate(r,e,t),{parsed:e}}function dqe(t){let e=WR.resolve(process.cwd(),".env"),r="utf8",o=Boolean(t&&t.debug);t&&(t.path!=null&&(e=hqe(t.path)),t.encoding!=null&&(r=t.encoding));try{let a=xs.parse(XK.readFileSync(e,{encoding:r})),n=process.env;return t&&t.processEnv!=null&&(n=t.processEnv),xs.populate(n,a,t),{parsed:a}}catch(a){return o&&YR(`Failed to load ${e} ${a.message}`),{error:a}}}function mqe(t){let e=$K(t);return ZK(t).length===0?xs.configDotenv(t):XK.existsSync(e)?xs._configVault(t):(fqe(`You set DOTENV_KEY but you are missing a .env.vault file at ${e}. Did you forget to build it?`),xs.configDotenv(t))}function yqe(t,e){let r=Buffer.from(e.slice(-64),"hex"),o=Buffer.from(t,"base64"),a=o.slice(0,12),n=o.slice(-16);o=o.slice(12,-16);try{let u=oqe.createDecipheriv("aes-256-gcm",r,a);return u.setAuthTag(n),`${u.update(o)}${u.final()}`}catch(u){let A=u instanceof RangeError,p=u.message==="Invalid key length",h=u.message==="Unsupported state or unable to authenticate data";if(A||p){let E="INVALID_DOTENV_KEY: It must be 64 characters long (or more)";throw new Error(E)}else if(h){let E="DECRYPTION_FAILED: Please check your DOTENV_KEY";throw new Error(E)}else throw console.error("Error: ",u.code),console.error("Error: ",u.message),u}}function Eqe(t,e,r={}){let o=Boolean(r&&r.debug),a=Boolean(r&&r.override);if(typeof e!="object")throw new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");for(let n of Object.keys(e))Object.prototype.hasOwnProperty.call(t,n)?(a===!0&&(t[n]=e[n]),o&&YR(a===!0?`"${n}" is already defined and WAS overwritten`:`"${n}" is already defined and was NOT overwritten`)):t[n]=e[n]}var xs={configDotenv:dqe,_configVault:gqe,_parseVault:uqe,config:mqe,decrypt:yqe,parse:cqe,populate:Eqe};Ef.exports.configDotenv=xs.configDotenv;Ef.exports._configVault=xs._configVault;Ef.exports._parseVault=xs._parseVault;Ef.exports.config=xs.config;Ef.exports.decrypt=xs.decrypt;Ef.exports.parse=xs.parse;Ef.exports.populate=xs.populate;Ef.exports=xs});var rJ=_((kkt,tJ)=>{"use strict";tJ.exports=(t,...e)=>new Promise(r=>{r(t(...e))})});var nd=_((Qkt,KR)=>{"use strict";var Cqe=rJ(),nJ=t=>{if(t<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],r=0,o=()=>{r--,e.length>0&&e.shift()()},a=(A,p,...h)=>{r++;let E=Cqe(A,...h);p(E),E.then(o,o)},n=(A,p,...h)=>{rnew Promise(h=>n(A,h,...p));return Object.defineProperties(u,{activeCount:{get:()=>r},pendingCount:{get:()=>e.length}}),u};KR.exports=nJ;KR.exports.default=nJ});function Wu(t){return`YN${t.toString(10).padStart(4,"0")}`}function fP(t){let e=Number(t.slice(2));if(typeof wr[e]>"u")throw new Error(`Unknown message name: "${t}"`);return e}var wr,pP=Et(()=>{wr=(Me=>(Me[Me.UNNAMED=0]="UNNAMED",Me[Me.EXCEPTION=1]="EXCEPTION",Me[Me.MISSING_PEER_DEPENDENCY=2]="MISSING_PEER_DEPENDENCY",Me[Me.CYCLIC_DEPENDENCIES=3]="CYCLIC_DEPENDENCIES",Me[Me.DISABLED_BUILD_SCRIPTS=4]="DISABLED_BUILD_SCRIPTS",Me[Me.BUILD_DISABLED=5]="BUILD_DISABLED",Me[Me.SOFT_LINK_BUILD=6]="SOFT_LINK_BUILD",Me[Me.MUST_BUILD=7]="MUST_BUILD",Me[Me.MUST_REBUILD=8]="MUST_REBUILD",Me[Me.BUILD_FAILED=9]="BUILD_FAILED",Me[Me.RESOLVER_NOT_FOUND=10]="RESOLVER_NOT_FOUND",Me[Me.FETCHER_NOT_FOUND=11]="FETCHER_NOT_FOUND",Me[Me.LINKER_NOT_FOUND=12]="LINKER_NOT_FOUND",Me[Me.FETCH_NOT_CACHED=13]="FETCH_NOT_CACHED",Me[Me.YARN_IMPORT_FAILED=14]="YARN_IMPORT_FAILED",Me[Me.REMOTE_INVALID=15]="REMOTE_INVALID",Me[Me.REMOTE_NOT_FOUND=16]="REMOTE_NOT_FOUND",Me[Me.RESOLUTION_PACK=17]="RESOLUTION_PACK",Me[Me.CACHE_CHECKSUM_MISMATCH=18]="CACHE_CHECKSUM_MISMATCH",Me[Me.UNUSED_CACHE_ENTRY=19]="UNUSED_CACHE_ENTRY",Me[Me.MISSING_LOCKFILE_ENTRY=20]="MISSING_LOCKFILE_ENTRY",Me[Me.WORKSPACE_NOT_FOUND=21]="WORKSPACE_NOT_FOUND",Me[Me.TOO_MANY_MATCHING_WORKSPACES=22]="TOO_MANY_MATCHING_WORKSPACES",Me[Me.CONSTRAINTS_MISSING_DEPENDENCY=23]="CONSTRAINTS_MISSING_DEPENDENCY",Me[Me.CONSTRAINTS_INCOMPATIBLE_DEPENDENCY=24]="CONSTRAINTS_INCOMPATIBLE_DEPENDENCY",Me[Me.CONSTRAINTS_EXTRANEOUS_DEPENDENCY=25]="CONSTRAINTS_EXTRANEOUS_DEPENDENCY",Me[Me.CONSTRAINTS_INVALID_DEPENDENCY=26]="CONSTRAINTS_INVALID_DEPENDENCY",Me[Me.CANT_SUGGEST_RESOLUTIONS=27]="CANT_SUGGEST_RESOLUTIONS",Me[Me.FROZEN_LOCKFILE_EXCEPTION=28]="FROZEN_LOCKFILE_EXCEPTION",Me[Me.CROSS_DRIVE_VIRTUAL_LOCAL=29]="CROSS_DRIVE_VIRTUAL_LOCAL",Me[Me.FETCH_FAILED=30]="FETCH_FAILED",Me[Me.DANGEROUS_NODE_MODULES=31]="DANGEROUS_NODE_MODULES",Me[Me.NODE_GYP_INJECTED=32]="NODE_GYP_INJECTED",Me[Me.AUTHENTICATION_NOT_FOUND=33]="AUTHENTICATION_NOT_FOUND",Me[Me.INVALID_CONFIGURATION_KEY=34]="INVALID_CONFIGURATION_KEY",Me[Me.NETWORK_ERROR=35]="NETWORK_ERROR",Me[Me.LIFECYCLE_SCRIPT=36]="LIFECYCLE_SCRIPT",Me[Me.CONSTRAINTS_MISSING_FIELD=37]="CONSTRAINTS_MISSING_FIELD",Me[Me.CONSTRAINTS_INCOMPATIBLE_FIELD=38]="CONSTRAINTS_INCOMPATIBLE_FIELD",Me[Me.CONSTRAINTS_EXTRANEOUS_FIELD=39]="CONSTRAINTS_EXTRANEOUS_FIELD",Me[Me.CONSTRAINTS_INVALID_FIELD=40]="CONSTRAINTS_INVALID_FIELD",Me[Me.AUTHENTICATION_INVALID=41]="AUTHENTICATION_INVALID",Me[Me.PROLOG_UNKNOWN_ERROR=42]="PROLOG_UNKNOWN_ERROR",Me[Me.PROLOG_SYNTAX_ERROR=43]="PROLOG_SYNTAX_ERROR",Me[Me.PROLOG_EXISTENCE_ERROR=44]="PROLOG_EXISTENCE_ERROR",Me[Me.STACK_OVERFLOW_RESOLUTION=45]="STACK_OVERFLOW_RESOLUTION",Me[Me.AUTOMERGE_FAILED_TO_PARSE=46]="AUTOMERGE_FAILED_TO_PARSE",Me[Me.AUTOMERGE_IMMUTABLE=47]="AUTOMERGE_IMMUTABLE",Me[Me.AUTOMERGE_SUCCESS=48]="AUTOMERGE_SUCCESS",Me[Me.AUTOMERGE_REQUIRED=49]="AUTOMERGE_REQUIRED",Me[Me.DEPRECATED_CLI_SETTINGS=50]="DEPRECATED_CLI_SETTINGS",Me[Me.PLUGIN_NAME_NOT_FOUND=51]="PLUGIN_NAME_NOT_FOUND",Me[Me.INVALID_PLUGIN_REFERENCE=52]="INVALID_PLUGIN_REFERENCE",Me[Me.CONSTRAINTS_AMBIGUITY=53]="CONSTRAINTS_AMBIGUITY",Me[Me.CACHE_OUTSIDE_PROJECT=54]="CACHE_OUTSIDE_PROJECT",Me[Me.IMMUTABLE_INSTALL=55]="IMMUTABLE_INSTALL",Me[Me.IMMUTABLE_CACHE=56]="IMMUTABLE_CACHE",Me[Me.INVALID_MANIFEST=57]="INVALID_MANIFEST",Me[Me.PACKAGE_PREPARATION_FAILED=58]="PACKAGE_PREPARATION_FAILED",Me[Me.INVALID_RANGE_PEER_DEPENDENCY=59]="INVALID_RANGE_PEER_DEPENDENCY",Me[Me.INCOMPATIBLE_PEER_DEPENDENCY=60]="INCOMPATIBLE_PEER_DEPENDENCY",Me[Me.DEPRECATED_PACKAGE=61]="DEPRECATED_PACKAGE",Me[Me.INCOMPATIBLE_OS=62]="INCOMPATIBLE_OS",Me[Me.INCOMPATIBLE_CPU=63]="INCOMPATIBLE_CPU",Me[Me.FROZEN_ARTIFACT_EXCEPTION=64]="FROZEN_ARTIFACT_EXCEPTION",Me[Me.TELEMETRY_NOTICE=65]="TELEMETRY_NOTICE",Me[Me.PATCH_HUNK_FAILED=66]="PATCH_HUNK_FAILED",Me[Me.INVALID_CONFIGURATION_VALUE=67]="INVALID_CONFIGURATION_VALUE",Me[Me.UNUSED_PACKAGE_EXTENSION=68]="UNUSED_PACKAGE_EXTENSION",Me[Me.REDUNDANT_PACKAGE_EXTENSION=69]="REDUNDANT_PACKAGE_EXTENSION",Me[Me.AUTO_NM_SUCCESS=70]="AUTO_NM_SUCCESS",Me[Me.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK=71]="NM_CANT_INSTALL_EXTERNAL_SOFT_LINK",Me[Me.NM_PRESERVE_SYMLINKS_REQUIRED=72]="NM_PRESERVE_SYMLINKS_REQUIRED",Me[Me.UPDATE_LOCKFILE_ONLY_SKIP_LINK=73]="UPDATE_LOCKFILE_ONLY_SKIP_LINK",Me[Me.NM_HARDLINKS_MODE_DOWNGRADED=74]="NM_HARDLINKS_MODE_DOWNGRADED",Me[Me.PROLOG_INSTANTIATION_ERROR=75]="PROLOG_INSTANTIATION_ERROR",Me[Me.INCOMPATIBLE_ARCHITECTURE=76]="INCOMPATIBLE_ARCHITECTURE",Me[Me.GHOST_ARCHITECTURE=77]="GHOST_ARCHITECTURE",Me[Me.RESOLUTION_MISMATCH=78]="RESOLUTION_MISMATCH",Me[Me.PROLOG_LIMIT_EXCEEDED=79]="PROLOG_LIMIT_EXCEEDED",Me[Me.NETWORK_DISABLED=80]="NETWORK_DISABLED",Me[Me.NETWORK_UNSAFE_HTTP=81]="NETWORK_UNSAFE_HTTP",Me[Me.RESOLUTION_FAILED=82]="RESOLUTION_FAILED",Me[Me.AUTOMERGE_GIT_ERROR=83]="AUTOMERGE_GIT_ERROR",Me[Me.CONSTRAINTS_CHECK_FAILED=84]="CONSTRAINTS_CHECK_FAILED",Me[Me.UPDATED_RESOLUTION_RECORD=85]="UPDATED_RESOLUTION_RECORD",Me[Me.EXPLAIN_PEER_DEPENDENCIES_CTA=86]="EXPLAIN_PEER_DEPENDENCIES_CTA",Me[Me.MIGRATION_SUCCESS=87]="MIGRATION_SUCCESS",Me[Me.VERSION_NOTICE=88]="VERSION_NOTICE",Me[Me.TIPS_NOTICE=89]="TIPS_NOTICE",Me[Me.OFFLINE_MODE_ENABLED=90]="OFFLINE_MODE_ENABLED",Me))(wr||{})});var hI=_((Tkt,iJ)=>{var wqe="2.0.0",Iqe=Number.MAX_SAFE_INTEGER||9007199254740991,Bqe=16,vqe=256-6,Dqe=["major","premajor","minor","preminor","patch","prepatch","prerelease"];iJ.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:Bqe,MAX_SAFE_BUILD_LENGTH:vqe,MAX_SAFE_INTEGER:Iqe,RELEASE_TYPES:Dqe,SEMVER_SPEC_VERSION:wqe,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var gI=_((Rkt,sJ)=>{var Pqe=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...t)=>console.error("SEMVER",...t):()=>{};sJ.exports=Pqe});var By=_((Cf,oJ)=>{var{MAX_SAFE_COMPONENT_LENGTH:JR,MAX_SAFE_BUILD_LENGTH:Sqe,MAX_LENGTH:xqe}=hI(),bqe=gI();Cf=oJ.exports={};var kqe=Cf.re=[],Qqe=Cf.safeRe=[],lr=Cf.src=[],cr=Cf.t={},Fqe=0,zR="[a-zA-Z0-9-]",Tqe=[["\\s",1],["\\d",xqe],[zR,Sqe]],Rqe=t=>{for(let[e,r]of Tqe)t=t.split(`${e}*`).join(`${e}{0,${r}}`).split(`${e}+`).join(`${e}{1,${r}}`);return t},Jr=(t,e,r)=>{let o=Rqe(e),a=Fqe++;bqe(t,a,e),cr[t]=a,lr[a]=e,kqe[a]=new RegExp(e,r?"g":void 0),Qqe[a]=new RegExp(o,r?"g":void 0)};Jr("NUMERICIDENTIFIER","0|[1-9]\\d*");Jr("NUMERICIDENTIFIERLOOSE","\\d+");Jr("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${zR}*`);Jr("MAINVERSION",`(${lr[cr.NUMERICIDENTIFIER]})\\.(${lr[cr.NUMERICIDENTIFIER]})\\.(${lr[cr.NUMERICIDENTIFIER]})`);Jr("MAINVERSIONLOOSE",`(${lr[cr.NUMERICIDENTIFIERLOOSE]})\\.(${lr[cr.NUMERICIDENTIFIERLOOSE]})\\.(${lr[cr.NUMERICIDENTIFIERLOOSE]})`);Jr("PRERELEASEIDENTIFIER",`(?:${lr[cr.NUMERICIDENTIFIER]}|${lr[cr.NONNUMERICIDENTIFIER]})`);Jr("PRERELEASEIDENTIFIERLOOSE",`(?:${lr[cr.NUMERICIDENTIFIERLOOSE]}|${lr[cr.NONNUMERICIDENTIFIER]})`);Jr("PRERELEASE",`(?:-(${lr[cr.PRERELEASEIDENTIFIER]}(?:\\.${lr[cr.PRERELEASEIDENTIFIER]})*))`);Jr("PRERELEASELOOSE",`(?:-?(${lr[cr.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${lr[cr.PRERELEASEIDENTIFIERLOOSE]})*))`);Jr("BUILDIDENTIFIER",`${zR}+`);Jr("BUILD",`(?:\\+(${lr[cr.BUILDIDENTIFIER]}(?:\\.${lr[cr.BUILDIDENTIFIER]})*))`);Jr("FULLPLAIN",`v?${lr[cr.MAINVERSION]}${lr[cr.PRERELEASE]}?${lr[cr.BUILD]}?`);Jr("FULL",`^${lr[cr.FULLPLAIN]}$`);Jr("LOOSEPLAIN",`[v=\\s]*${lr[cr.MAINVERSIONLOOSE]}${lr[cr.PRERELEASELOOSE]}?${lr[cr.BUILD]}?`);Jr("LOOSE",`^${lr[cr.LOOSEPLAIN]}$`);Jr("GTLT","((?:<|>)?=?)");Jr("XRANGEIDENTIFIERLOOSE",`${lr[cr.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);Jr("XRANGEIDENTIFIER",`${lr[cr.NUMERICIDENTIFIER]}|x|X|\\*`);Jr("XRANGEPLAIN",`[v=\\s]*(${lr[cr.XRANGEIDENTIFIER]})(?:\\.(${lr[cr.XRANGEIDENTIFIER]})(?:\\.(${lr[cr.XRANGEIDENTIFIER]})(?:${lr[cr.PRERELEASE]})?${lr[cr.BUILD]}?)?)?`);Jr("XRANGEPLAINLOOSE",`[v=\\s]*(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:\\.(${lr[cr.XRANGEIDENTIFIERLOOSE]})(?:${lr[cr.PRERELEASELOOSE]})?${lr[cr.BUILD]}?)?)?`);Jr("XRANGE",`^${lr[cr.GTLT]}\\s*${lr[cr.XRANGEPLAIN]}$`);Jr("XRANGELOOSE",`^${lr[cr.GTLT]}\\s*${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("COERCE",`(^|[^\\d])(\\d{1,${JR}})(?:\\.(\\d{1,${JR}}))?(?:\\.(\\d{1,${JR}}))?(?:$|[^\\d])`);Jr("COERCERTL",lr[cr.COERCE],!0);Jr("LONETILDE","(?:~>?)");Jr("TILDETRIM",`(\\s*)${lr[cr.LONETILDE]}\\s+`,!0);Cf.tildeTrimReplace="$1~";Jr("TILDE",`^${lr[cr.LONETILDE]}${lr[cr.XRANGEPLAIN]}$`);Jr("TILDELOOSE",`^${lr[cr.LONETILDE]}${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("LONECARET","(?:\\^)");Jr("CARETTRIM",`(\\s*)${lr[cr.LONECARET]}\\s+`,!0);Cf.caretTrimReplace="$1^";Jr("CARET",`^${lr[cr.LONECARET]}${lr[cr.XRANGEPLAIN]}$`);Jr("CARETLOOSE",`^${lr[cr.LONECARET]}${lr[cr.XRANGEPLAINLOOSE]}$`);Jr("COMPARATORLOOSE",`^${lr[cr.GTLT]}\\s*(${lr[cr.LOOSEPLAIN]})$|^$`);Jr("COMPARATOR",`^${lr[cr.GTLT]}\\s*(${lr[cr.FULLPLAIN]})$|^$`);Jr("COMPARATORTRIM",`(\\s*)${lr[cr.GTLT]}\\s*(${lr[cr.LOOSEPLAIN]}|${lr[cr.XRANGEPLAIN]})`,!0);Cf.comparatorTrimReplace="$1$2$3";Jr("HYPHENRANGE",`^\\s*(${lr[cr.XRANGEPLAIN]})\\s+-\\s+(${lr[cr.XRANGEPLAIN]})\\s*$`);Jr("HYPHENRANGELOOSE",`^\\s*(${lr[cr.XRANGEPLAINLOOSE]})\\s+-\\s+(${lr[cr.XRANGEPLAINLOOSE]})\\s*$`);Jr("STAR","(<|>)?=?\\s*\\*");Jr("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");Jr("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var hP=_((Nkt,aJ)=>{var Nqe=Object.freeze({loose:!0}),Lqe=Object.freeze({}),Mqe=t=>t?typeof t!="object"?Nqe:t:Lqe;aJ.exports=Mqe});var XR=_((Lkt,uJ)=>{var lJ=/^[0-9]+$/,cJ=(t,e)=>{let r=lJ.test(t),o=lJ.test(e);return r&&o&&(t=+t,e=+e),t===e?0:r&&!o?-1:o&&!r?1:tcJ(e,t);uJ.exports={compareIdentifiers:cJ,rcompareIdentifiers:Oqe}});var Po=_((Mkt,hJ)=>{var gP=gI(),{MAX_LENGTH:AJ,MAX_SAFE_INTEGER:dP}=hI(),{safeRe:fJ,t:pJ}=By(),Uqe=hP(),{compareIdentifiers:vy}=XR(),tl=class{constructor(e,r){if(r=Uqe(r),e instanceof tl){if(e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>AJ)throw new TypeError(`version is longer than ${AJ} characters`);gP("SemVer",e,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let o=e.trim().match(r.loose?fJ[pJ.LOOSE]:fJ[pJ.FULL]);if(!o)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+o[1],this.minor=+o[2],this.patch=+o[3],this.major>dP||this.major<0)throw new TypeError("Invalid major version");if(this.minor>dP||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>dP||this.patch<0)throw new TypeError("Invalid patch version");o[4]?this.prerelease=o[4].split(".").map(a=>{if(/^[0-9]+$/.test(a)){let n=+a;if(n>=0&&n=0;)typeof this.prerelease[n]=="number"&&(this.prerelease[n]++,n=-2);if(n===-1){if(r===this.prerelease.join(".")&&o===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(a)}}if(r){let n=[r,a];o===!1&&(n=[r]),vy(this.prerelease[0],r)===0?isNaN(this.prerelease[1])&&(this.prerelease=n):this.prerelease=n}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};hJ.exports=tl});var id=_((Okt,dJ)=>{var gJ=Po(),_qe=(t,e,r=!1)=>{if(t instanceof gJ)return t;try{return new gJ(t,e)}catch(o){if(!r)return null;throw o}};dJ.exports=_qe});var yJ=_((Ukt,mJ)=>{var Hqe=id(),jqe=(t,e)=>{let r=Hqe(t,e);return r?r.version:null};mJ.exports=jqe});var CJ=_((_kt,EJ)=>{var qqe=id(),Gqe=(t,e)=>{let r=qqe(t.trim().replace(/^[=v]+/,""),e);return r?r.version:null};EJ.exports=Gqe});var BJ=_((Hkt,IJ)=>{var wJ=Po(),Yqe=(t,e,r,o,a)=>{typeof r=="string"&&(a=o,o=r,r=void 0);try{return new wJ(t instanceof wJ?t.version:t,r).inc(e,o,a).version}catch{return null}};IJ.exports=Yqe});var PJ=_((jkt,DJ)=>{var vJ=id(),Wqe=(t,e)=>{let r=vJ(t,null,!0),o=vJ(e,null,!0),a=r.compare(o);if(a===0)return null;let n=a>0,u=n?r:o,A=n?o:r,p=!!u.prerelease.length;if(!!A.prerelease.length&&!p)return!A.patch&&!A.minor?"major":u.patch?"patch":u.minor?"minor":"major";let E=p?"pre":"";return r.major!==o.major?E+"major":r.minor!==o.minor?E+"minor":r.patch!==o.patch?E+"patch":"prerelease"};DJ.exports=Wqe});var xJ=_((qkt,SJ)=>{var Vqe=Po(),Kqe=(t,e)=>new Vqe(t,e).major;SJ.exports=Kqe});var kJ=_((Gkt,bJ)=>{var Jqe=Po(),zqe=(t,e)=>new Jqe(t,e).minor;bJ.exports=zqe});var FJ=_((Ykt,QJ)=>{var Xqe=Po(),Zqe=(t,e)=>new Xqe(t,e).patch;QJ.exports=Zqe});var RJ=_((Wkt,TJ)=>{var $qe=id(),eGe=(t,e)=>{let r=$qe(t,e);return r&&r.prerelease.length?r.prerelease:null};TJ.exports=eGe});var Ll=_((Vkt,LJ)=>{var NJ=Po(),tGe=(t,e,r)=>new NJ(t,r).compare(new NJ(e,r));LJ.exports=tGe});var OJ=_((Kkt,MJ)=>{var rGe=Ll(),nGe=(t,e,r)=>rGe(e,t,r);MJ.exports=nGe});var _J=_((Jkt,UJ)=>{var iGe=Ll(),sGe=(t,e)=>iGe(t,e,!0);UJ.exports=sGe});var mP=_((zkt,jJ)=>{var HJ=Po(),oGe=(t,e,r)=>{let o=new HJ(t,r),a=new HJ(e,r);return o.compare(a)||o.compareBuild(a)};jJ.exports=oGe});var GJ=_((Xkt,qJ)=>{var aGe=mP(),lGe=(t,e)=>t.sort((r,o)=>aGe(r,o,e));qJ.exports=lGe});var WJ=_((Zkt,YJ)=>{var cGe=mP(),uGe=(t,e)=>t.sort((r,o)=>cGe(o,r,e));YJ.exports=uGe});var dI=_(($kt,VJ)=>{var AGe=Ll(),fGe=(t,e,r)=>AGe(t,e,r)>0;VJ.exports=fGe});var yP=_((eQt,KJ)=>{var pGe=Ll(),hGe=(t,e,r)=>pGe(t,e,r)<0;KJ.exports=hGe});var ZR=_((tQt,JJ)=>{var gGe=Ll(),dGe=(t,e,r)=>gGe(t,e,r)===0;JJ.exports=dGe});var $R=_((rQt,zJ)=>{var mGe=Ll(),yGe=(t,e,r)=>mGe(t,e,r)!==0;zJ.exports=yGe});var EP=_((nQt,XJ)=>{var EGe=Ll(),CGe=(t,e,r)=>EGe(t,e,r)>=0;XJ.exports=CGe});var CP=_((iQt,ZJ)=>{var wGe=Ll(),IGe=(t,e,r)=>wGe(t,e,r)<=0;ZJ.exports=IGe});var eN=_((sQt,$J)=>{var BGe=ZR(),vGe=$R(),DGe=dI(),PGe=EP(),SGe=yP(),xGe=CP(),bGe=(t,e,r,o)=>{switch(e){case"===":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t===r;case"!==":return typeof t=="object"&&(t=t.version),typeof r=="object"&&(r=r.version),t!==r;case"":case"=":case"==":return BGe(t,r,o);case"!=":return vGe(t,r,o);case">":return DGe(t,r,o);case">=":return PGe(t,r,o);case"<":return SGe(t,r,o);case"<=":return xGe(t,r,o);default:throw new TypeError(`Invalid operator: ${e}`)}};$J.exports=bGe});var tz=_((oQt,ez)=>{var kGe=Po(),QGe=id(),{safeRe:wP,t:IP}=By(),FGe=(t,e)=>{if(t instanceof kGe)return t;if(typeof t=="number"&&(t=String(t)),typeof t!="string")return null;e=e||{};let r=null;if(!e.rtl)r=t.match(wP[IP.COERCE]);else{let o;for(;(o=wP[IP.COERCERTL].exec(t))&&(!r||r.index+r[0].length!==t.length);)(!r||o.index+o[0].length!==r.index+r[0].length)&&(r=o),wP[IP.COERCERTL].lastIndex=o.index+o[1].length+o[2].length;wP[IP.COERCERTL].lastIndex=-1}return r===null?null:QGe(`${r[2]}.${r[3]||"0"}.${r[4]||"0"}`,e)};ez.exports=FGe});var nz=_((aQt,rz)=>{"use strict";rz.exports=function(t){t.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var BP=_((lQt,iz)=>{"use strict";iz.exports=Cn;Cn.Node=sd;Cn.create=Cn;function Cn(t){var e=this;if(e instanceof Cn||(e=new Cn),e.tail=null,e.head=null,e.length=0,t&&typeof t.forEach=="function")t.forEach(function(a){e.push(a)});else if(arguments.length>0)for(var r=0,o=arguments.length;r1)r=e;else if(this.head)o=this.head.next,r=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=0;o!==null;a++)r=t(r,o.value,a),o=o.next;return r};Cn.prototype.reduceReverse=function(t,e){var r,o=this.tail;if(arguments.length>1)r=e;else if(this.tail)o=this.tail.prev,r=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var a=this.length-1;o!==null;a--)r=t(r,o.value,a),o=o.prev;return r};Cn.prototype.toArray=function(){for(var t=new Array(this.length),e=0,r=this.head;r!==null;e++)t[e]=r.value,r=r.next;return t};Cn.prototype.toArrayReverse=function(){for(var t=new Array(this.length),e=0,r=this.tail;r!==null;e++)t[e]=r.value,r=r.prev;return t};Cn.prototype.slice=function(t,e){e=e||this.length,e<0&&(e+=this.length),t=t||0,t<0&&(t+=this.length);var r=new Cn;if(ethis.length&&(e=this.length);for(var o=0,a=this.head;a!==null&&othis.length&&(e=this.length);for(var o=this.length,a=this.tail;a!==null&&o>e;o--)a=a.prev;for(;a!==null&&o>t;o--,a=a.prev)r.push(a.value);return r};Cn.prototype.splice=function(t,e,...r){t>this.length&&(t=this.length-1),t<0&&(t=this.length+t);for(var o=0,a=this.head;a!==null&&o{"use strict";var LGe=BP(),od=Symbol("max"),If=Symbol("length"),Dy=Symbol("lengthCalculator"),yI=Symbol("allowStale"),ad=Symbol("maxAge"),wf=Symbol("dispose"),sz=Symbol("noDisposeOnSet"),bs=Symbol("lruList"),Oc=Symbol("cache"),az=Symbol("updateAgeOnGet"),tN=()=>1,nN=class{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let r=this[od]=e.max||1/0,o=e.length||tN;if(this[Dy]=typeof o!="function"?tN:o,this[yI]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[ad]=e.maxAge||0,this[wf]=e.dispose,this[sz]=e.noDisposeOnSet||!1,this[az]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[od]=e||1/0,mI(this)}get max(){return this[od]}set allowStale(e){this[yI]=!!e}get allowStale(){return this[yI]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[ad]=e,mI(this)}get maxAge(){return this[ad]}set lengthCalculator(e){typeof e!="function"&&(e=tN),e!==this[Dy]&&(this[Dy]=e,this[If]=0,this[bs].forEach(r=>{r.length=this[Dy](r.value,r.key),this[If]+=r.length})),mI(this)}get lengthCalculator(){return this[Dy]}get length(){return this[If]}get itemCount(){return this[bs].length}rforEach(e,r){r=r||this;for(let o=this[bs].tail;o!==null;){let a=o.prev;oz(this,e,o,r),o=a}}forEach(e,r){r=r||this;for(let o=this[bs].head;o!==null;){let a=o.next;oz(this,e,o,r),o=a}}keys(){return this[bs].toArray().map(e=>e.key)}values(){return this[bs].toArray().map(e=>e.value)}reset(){this[wf]&&this[bs]&&this[bs].length&&this[bs].forEach(e=>this[wf](e.key,e.value)),this[Oc]=new Map,this[bs]=new LGe,this[If]=0}dump(){return this[bs].map(e=>vP(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[bs]}set(e,r,o){if(o=o||this[ad],o&&typeof o!="number")throw new TypeError("maxAge must be a number");let a=o?Date.now():0,n=this[Dy](r,e);if(this[Oc].has(e)){if(n>this[od])return Py(this,this[Oc].get(e)),!1;let p=this[Oc].get(e).value;return this[wf]&&(this[sz]||this[wf](e,p.value)),p.now=a,p.maxAge=o,p.value=r,this[If]+=n-p.length,p.length=n,this.get(e),mI(this),!0}let u=new iN(e,r,n,a,o);return u.length>this[od]?(this[wf]&&this[wf](e,r),!1):(this[If]+=u.length,this[bs].unshift(u),this[Oc].set(e,this[bs].head),mI(this),!0)}has(e){if(!this[Oc].has(e))return!1;let r=this[Oc].get(e).value;return!vP(this,r)}get(e){return rN(this,e,!0)}peek(e){return rN(this,e,!1)}pop(){let e=this[bs].tail;return e?(Py(this,e),e.value):null}del(e){Py(this,this[Oc].get(e))}load(e){this.reset();let r=Date.now();for(let o=e.length-1;o>=0;o--){let a=e[o],n=a.e||0;if(n===0)this.set(a.k,a.v);else{let u=n-r;u>0&&this.set(a.k,a.v,u)}}}prune(){this[Oc].forEach((e,r)=>rN(this,r,!1))}},rN=(t,e,r)=>{let o=t[Oc].get(e);if(o){let a=o.value;if(vP(t,a)){if(Py(t,o),!t[yI])return}else r&&(t[az]&&(o.value.now=Date.now()),t[bs].unshiftNode(o));return a.value}},vP=(t,e)=>{if(!e||!e.maxAge&&!t[ad])return!1;let r=Date.now()-e.now;return e.maxAge?r>e.maxAge:t[ad]&&r>t[ad]},mI=t=>{if(t[If]>t[od])for(let e=t[bs].tail;t[If]>t[od]&&e!==null;){let r=e.prev;Py(t,e),e=r}},Py=(t,e)=>{if(e){let r=e.value;t[wf]&&t[wf](r.key,r.value),t[If]-=r.length,t[Oc].delete(r.key),t[bs].removeNode(e)}},iN=class{constructor(e,r,o,a,n){this.key=e,this.value=r,this.length=o,this.now=a,this.maxAge=n||0}},oz=(t,e,r,o)=>{let a=r.value;vP(t,a)&&(Py(t,r),t[yI]||(a=void 0)),a&&e.call(o,a.value,a.key,t)};lz.exports=nN});var Ml=_((uQt,pz)=>{var ld=class{constructor(e,r){if(r=OGe(r),e instanceof ld)return e.loose===!!r.loose&&e.includePrerelease===!!r.includePrerelease?e:new ld(e.raw,r);if(e instanceof sN)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=e.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map(o=>this.parseRange(o.trim())).filter(o=>o.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let o=this.set[0];if(this.set=this.set.filter(a=>!Az(a[0])),this.set.length===0)this.set=[o];else if(this.set.length>1){for(let a of this.set)if(a.length===1&&YGe(a[0])){this.set=[a];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){let o=((this.options.includePrerelease&&qGe)|(this.options.loose&&GGe))+":"+e,a=uz.get(o);if(a)return a;let n=this.options.loose,u=n?Da[zo.HYPHENRANGELOOSE]:Da[zo.HYPHENRANGE];e=e.replace(u,t5e(this.options.includePrerelease)),ci("hyphen replace",e),e=e.replace(Da[zo.COMPARATORTRIM],_Ge),ci("comparator trim",e),e=e.replace(Da[zo.TILDETRIM],HGe),ci("tilde trim",e),e=e.replace(Da[zo.CARETTRIM],jGe),ci("caret trim",e);let A=e.split(" ").map(I=>WGe(I,this.options)).join(" ").split(/\s+/).map(I=>e5e(I,this.options));n&&(A=A.filter(I=>(ci("loose invalid filter",I,this.options),!!I.match(Da[zo.COMPARATORLOOSE])))),ci("range list",A);let p=new Map,h=A.map(I=>new sN(I,this.options));for(let I of h){if(Az(I))return[I];p.set(I.value,I)}p.size>1&&p.has("")&&p.delete("");let E=[...p.values()];return uz.set(o,E),E}intersects(e,r){if(!(e instanceof ld))throw new TypeError("a Range is required");return this.set.some(o=>fz(o,r)&&e.set.some(a=>fz(a,r)&&o.every(n=>a.every(u=>n.intersects(u,r)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new UGe(e,this.options)}catch{return!1}for(let r=0;rt.value==="<0.0.0-0",YGe=t=>t.value==="",fz=(t,e)=>{let r=!0,o=t.slice(),a=o.pop();for(;r&&o.length;)r=o.every(n=>a.intersects(n,e)),a=o.pop();return r},WGe=(t,e)=>(ci("comp",t,e),t=JGe(t,e),ci("caret",t),t=VGe(t,e),ci("tildes",t),t=XGe(t,e),ci("xrange",t),t=$Ge(t,e),ci("stars",t),t),Xo=t=>!t||t.toLowerCase()==="x"||t==="*",VGe=(t,e)=>t.trim().split(/\s+/).map(r=>KGe(r,e)).join(" "),KGe=(t,e)=>{let r=e.loose?Da[zo.TILDELOOSE]:Da[zo.TILDE];return t.replace(r,(o,a,n,u,A)=>{ci("tilde",t,o,a,n,u,A);let p;return Xo(a)?p="":Xo(n)?p=`>=${a}.0.0 <${+a+1}.0.0-0`:Xo(u)?p=`>=${a}.${n}.0 <${a}.${+n+1}.0-0`:A?(ci("replaceTilde pr",A),p=`>=${a}.${n}.${u}-${A} <${a}.${+n+1}.0-0`):p=`>=${a}.${n}.${u} <${a}.${+n+1}.0-0`,ci("tilde return",p),p})},JGe=(t,e)=>t.trim().split(/\s+/).map(r=>zGe(r,e)).join(" "),zGe=(t,e)=>{ci("caret",t,e);let r=e.loose?Da[zo.CARETLOOSE]:Da[zo.CARET],o=e.includePrerelease?"-0":"";return t.replace(r,(a,n,u,A,p)=>{ci("caret",t,a,n,u,A,p);let h;return Xo(n)?h="":Xo(u)?h=`>=${n}.0.0${o} <${+n+1}.0.0-0`:Xo(A)?n==="0"?h=`>=${n}.${u}.0${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.0${o} <${+n+1}.0.0-0`:p?(ci("replaceCaret pr",p),n==="0"?u==="0"?h=`>=${n}.${u}.${A}-${p} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}-${p} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A}-${p} <${+n+1}.0.0-0`):(ci("no pr"),n==="0"?u==="0"?h=`>=${n}.${u}.${A}${o} <${n}.${u}.${+A+1}-0`:h=`>=${n}.${u}.${A}${o} <${n}.${+u+1}.0-0`:h=`>=${n}.${u}.${A} <${+n+1}.0.0-0`),ci("caret return",h),h})},XGe=(t,e)=>(ci("replaceXRanges",t,e),t.split(/\s+/).map(r=>ZGe(r,e)).join(" ")),ZGe=(t,e)=>{t=t.trim();let r=e.loose?Da[zo.XRANGELOOSE]:Da[zo.XRANGE];return t.replace(r,(o,a,n,u,A,p)=>{ci("xRange",t,o,a,n,u,A,p);let h=Xo(n),E=h||Xo(u),I=E||Xo(A),v=I;return a==="="&&v&&(a=""),p=e.includePrerelease?"-0":"",h?a===">"||a==="<"?o="<0.0.0-0":o="*":a&&v?(E&&(u=0),A=0,a===">"?(a=">=",E?(n=+n+1,u=0,A=0):(u=+u+1,A=0)):a==="<="&&(a="<",E?n=+n+1:u=+u+1),a==="<"&&(p="-0"),o=`${a+n}.${u}.${A}${p}`):E?o=`>=${n}.0.0${p} <${+n+1}.0.0-0`:I&&(o=`>=${n}.${u}.0${p} <${n}.${+u+1}.0-0`),ci("xRange return",o),o})},$Ge=(t,e)=>(ci("replaceStars",t,e),t.trim().replace(Da[zo.STAR],"")),e5e=(t,e)=>(ci("replaceGTE0",t,e),t.trim().replace(Da[e.includePrerelease?zo.GTE0PRE:zo.GTE0],"")),t5e=t=>(e,r,o,a,n,u,A,p,h,E,I,v,b)=>(Xo(o)?r="":Xo(a)?r=`>=${o}.0.0${t?"-0":""}`:Xo(n)?r=`>=${o}.${a}.0${t?"-0":""}`:u?r=`>=${r}`:r=`>=${r}${t?"-0":""}`,Xo(h)?p="":Xo(E)?p=`<${+h+1}.0.0-0`:Xo(I)?p=`<${h}.${+E+1}.0-0`:v?p=`<=${h}.${E}.${I}-${v}`:t?p=`<${h}.${E}.${+I+1}-0`:p=`<=${p}`,`${r} ${p}`.trim()),r5e=(t,e,r)=>{for(let o=0;o0){let a=t[o].semver;if(a.major===e.major&&a.minor===e.minor&&a.patch===e.patch)return!0}return!1}return!0}});var EI=_((AQt,Ez)=>{var CI=Symbol("SemVer ANY"),Sy=class{static get ANY(){return CI}constructor(e,r){if(r=hz(r),e instanceof Sy){if(e.loose===!!r.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),aN("comparator",e,r),this.options=r,this.loose=!!r.loose,this.parse(e),this.semver===CI?this.value="":this.value=this.operator+this.semver.version,aN("comp",this)}parse(e){let r=this.options.loose?gz[dz.COMPARATORLOOSE]:gz[dz.COMPARATOR],o=e.match(r);if(!o)throw new TypeError(`Invalid comparator: ${e}`);this.operator=o[1]!==void 0?o[1]:"",this.operator==="="&&(this.operator=""),o[2]?this.semver=new mz(o[2],this.options.loose):this.semver=CI}toString(){return this.value}test(e){if(aN("Comparator.test",e,this.options.loose),this.semver===CI||e===CI)return!0;if(typeof e=="string")try{e=new mz(e,this.options)}catch{return!1}return oN(e,this.operator,this.semver,this.options)}intersects(e,r){if(!(e instanceof Sy))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new yz(e.value,r).test(this.value):e.operator===""?e.value===""?!0:new yz(this.value,r).test(e.semver):(r=hz(r),r.includePrerelease&&(this.value==="<0.0.0-0"||e.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&e.operator.startsWith(">")||this.operator.startsWith("<")&&e.operator.startsWith("<")||this.semver.version===e.semver.version&&this.operator.includes("=")&&e.operator.includes("=")||oN(this.semver,"<",e.semver,r)&&this.operator.startsWith(">")&&e.operator.startsWith("<")||oN(this.semver,">",e.semver,r)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}};Ez.exports=Sy;var hz=hP(),{safeRe:gz,t:dz}=By(),oN=eN(),aN=gI(),mz=Po(),yz=Ml()});var wI=_((fQt,Cz)=>{var n5e=Ml(),i5e=(t,e,r)=>{try{e=new n5e(e,r)}catch{return!1}return e.test(t)};Cz.exports=i5e});var Iz=_((pQt,wz)=>{var s5e=Ml(),o5e=(t,e)=>new s5e(t,e).set.map(r=>r.map(o=>o.value).join(" ").trim().split(" "));wz.exports=o5e});var vz=_((hQt,Bz)=>{var a5e=Po(),l5e=Ml(),c5e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new l5e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===-1)&&(o=u,a=new a5e(o,r))}),o};Bz.exports=c5e});var Pz=_((gQt,Dz)=>{var u5e=Po(),A5e=Ml(),f5e=(t,e,r)=>{let o=null,a=null,n=null;try{n=new A5e(e,r)}catch{return null}return t.forEach(u=>{n.test(u)&&(!o||a.compare(u)===1)&&(o=u,a=new u5e(o,r))}),o};Dz.exports=f5e});var bz=_((dQt,xz)=>{var lN=Po(),p5e=Ml(),Sz=dI(),h5e=(t,e)=>{t=new p5e(t,e);let r=new lN("0.0.0");if(t.test(r)||(r=new lN("0.0.0-0"),t.test(r)))return r;r=null;for(let o=0;o{let A=new lN(u.semver.version);switch(u.operator){case">":A.prerelease.length===0?A.patch++:A.prerelease.push(0),A.raw=A.format();case"":case">=":(!n||Sz(A,n))&&(n=A);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${u.operator}`)}}),n&&(!r||Sz(r,n))&&(r=n)}return r&&t.test(r)?r:null};xz.exports=h5e});var Qz=_((mQt,kz)=>{var g5e=Ml(),d5e=(t,e)=>{try{return new g5e(t,e).range||"*"}catch{return null}};kz.exports=d5e});var DP=_((yQt,Nz)=>{var m5e=Po(),Rz=EI(),{ANY:y5e}=Rz,E5e=Ml(),C5e=wI(),Fz=dI(),Tz=yP(),w5e=CP(),I5e=EP(),B5e=(t,e,r,o)=>{t=new m5e(t,o),e=new E5e(e,o);let a,n,u,A,p;switch(r){case">":a=Fz,n=w5e,u=Tz,A=">",p=">=";break;case"<":a=Tz,n=I5e,u=Fz,A="<",p="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(C5e(t,e,o))return!1;for(let h=0;h{b.semver===y5e&&(b=new Rz(">=0.0.0")),I=I||b,v=v||b,a(b.semver,I.semver,o)?I=b:u(b.semver,v.semver,o)&&(v=b)}),I.operator===A||I.operator===p||(!v.operator||v.operator===A)&&n(t,v.semver))return!1;if(v.operator===p&&u(t,v.semver))return!1}return!0};Nz.exports=B5e});var Mz=_((EQt,Lz)=>{var v5e=DP(),D5e=(t,e,r)=>v5e(t,e,">",r);Lz.exports=D5e});var Uz=_((CQt,Oz)=>{var P5e=DP(),S5e=(t,e,r)=>P5e(t,e,"<",r);Oz.exports=S5e});var jz=_((wQt,Hz)=>{var _z=Ml(),x5e=(t,e,r)=>(t=new _z(t,r),e=new _z(e,r),t.intersects(e,r));Hz.exports=x5e});var Gz=_((IQt,qz)=>{var b5e=wI(),k5e=Ll();qz.exports=(t,e,r)=>{let o=[],a=null,n=null,u=t.sort((E,I)=>k5e(E,I,r));for(let E of u)b5e(E,e,r)?(n=E,a||(a=E)):(n&&o.push([a,n]),n=null,a=null);a&&o.push([a,null]);let A=[];for(let[E,I]of o)E===I?A.push(E):!I&&E===u[0]?A.push("*"):I?E===u[0]?A.push(`<=${I}`):A.push(`${E} - ${I}`):A.push(`>=${E}`);let p=A.join(" || "),h=typeof e.raw=="string"?e.raw:String(e);return p.length{var Yz=Ml(),uN=EI(),{ANY:cN}=uN,II=wI(),AN=Ll(),Q5e=(t,e,r={})=>{if(t===e)return!0;t=new Yz(t,r),e=new Yz(e,r);let o=!1;e:for(let a of t.set){for(let n of e.set){let u=T5e(a,n,r);if(o=o||u!==null,u)continue e}if(o)return!1}return!0},F5e=[new uN(">=0.0.0-0")],Wz=[new uN(">=0.0.0")],T5e=(t,e,r)=>{if(t===e)return!0;if(t.length===1&&t[0].semver===cN){if(e.length===1&&e[0].semver===cN)return!0;r.includePrerelease?t=F5e:t=Wz}if(e.length===1&&e[0].semver===cN){if(r.includePrerelease)return!0;e=Wz}let o=new Set,a,n;for(let b of t)b.operator===">"||b.operator===">="?a=Vz(a,b,r):b.operator==="<"||b.operator==="<="?n=Kz(n,b,r):o.add(b.semver);if(o.size>1)return null;let u;if(a&&n){if(u=AN(a.semver,n.semver,r),u>0)return null;if(u===0&&(a.operator!==">="||n.operator!=="<="))return null}for(let b of o){if(a&&!II(b,String(a),r)||n&&!II(b,String(n),r))return null;for(let C of e)if(!II(b,String(C),r))return!1;return!0}let A,p,h,E,I=n&&!r.includePrerelease&&n.semver.prerelease.length?n.semver:!1,v=a&&!r.includePrerelease&&a.semver.prerelease.length?a.semver:!1;I&&I.prerelease.length===1&&n.operator==="<"&&I.prerelease[0]===0&&(I=!1);for(let b of e){if(E=E||b.operator===">"||b.operator===">=",h=h||b.operator==="<"||b.operator==="<=",a){if(v&&b.semver.prerelease&&b.semver.prerelease.length&&b.semver.major===v.major&&b.semver.minor===v.minor&&b.semver.patch===v.patch&&(v=!1),b.operator===">"||b.operator===">="){if(A=Vz(a,b,r),A===b&&A!==a)return!1}else if(a.operator===">="&&!II(a.semver,String(b),r))return!1}if(n){if(I&&b.semver.prerelease&&b.semver.prerelease.length&&b.semver.major===I.major&&b.semver.minor===I.minor&&b.semver.patch===I.patch&&(I=!1),b.operator==="<"||b.operator==="<="){if(p=Kz(n,b,r),p===b&&p!==n)return!1}else if(n.operator==="<="&&!II(n.semver,String(b),r))return!1}if(!b.operator&&(n||a)&&u!==0)return!1}return!(a&&h&&!n&&u!==0||n&&E&&!a&&u!==0||v||I)},Vz=(t,e,r)=>{if(!t)return e;let o=AN(t.semver,e.semver,r);return o>0?t:o<0||e.operator===">"&&t.operator===">="?e:t},Kz=(t,e,r)=>{if(!t)return e;let o=AN(t.semver,e.semver,r);return o<0?t:o>0||e.operator==="<"&&t.operator==="<="?e:t};Jz.exports=Q5e});var zn=_((vQt,$z)=>{var fN=By(),Xz=hI(),R5e=Po(),Zz=XR(),N5e=id(),L5e=yJ(),M5e=CJ(),O5e=BJ(),U5e=PJ(),_5e=xJ(),H5e=kJ(),j5e=FJ(),q5e=RJ(),G5e=Ll(),Y5e=OJ(),W5e=_J(),V5e=mP(),K5e=GJ(),J5e=WJ(),z5e=dI(),X5e=yP(),Z5e=ZR(),$5e=$R(),e9e=EP(),t9e=CP(),r9e=eN(),n9e=tz(),i9e=EI(),s9e=Ml(),o9e=wI(),a9e=Iz(),l9e=vz(),c9e=Pz(),u9e=bz(),A9e=Qz(),f9e=DP(),p9e=Mz(),h9e=Uz(),g9e=jz(),d9e=Gz(),m9e=zz();$z.exports={parse:N5e,valid:L5e,clean:M5e,inc:O5e,diff:U5e,major:_5e,minor:H5e,patch:j5e,prerelease:q5e,compare:G5e,rcompare:Y5e,compareLoose:W5e,compareBuild:V5e,sort:K5e,rsort:J5e,gt:z5e,lt:X5e,eq:Z5e,neq:$5e,gte:e9e,lte:t9e,cmp:r9e,coerce:n9e,Comparator:i9e,Range:s9e,satisfies:o9e,toComparators:a9e,maxSatisfying:l9e,minSatisfying:c9e,minVersion:u9e,validRange:A9e,outside:f9e,gtr:p9e,ltr:h9e,intersects:g9e,simplifyRange:d9e,subset:m9e,SemVer:R5e,re:fN.re,src:fN.src,tokens:fN.t,SEMVER_SPEC_VERSION:Xz.SEMVER_SPEC_VERSION,RELEASE_TYPES:Xz.RELEASE_TYPES,compareIdentifiers:Zz.compareIdentifiers,rcompareIdentifiers:Zz.rcompareIdentifiers}});var tX=_((DQt,eX)=>{"use strict";function y9e(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r}function cd(t,e,r,o){this.message=t,this.expected=e,this.found=r,this.location=o,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,cd)}y9e(cd,Error);cd.buildMessage=function(t,e){var r={literal:function(h){return'"'+a(h.text)+'"'},class:function(h){var E="",I;for(I=0;I0){for(I=1,v=1;I{switch(Ne[1]){case"|":return Se|Ne[3];case"&":return Se&Ne[3];case"^":return Se^Ne[3]}},Z)},v="!",b=Re("!",!1),C=function(Z){return!Z},T="(",L=Re("(",!1),U=")",J=Re(")",!1),te=function(Z){return Z},le=/^[^ \t\n\r()!|&\^]/,pe=Qe([" "," ",` +`,"\r","(",")","!","|","&","^"],!0,!1),Ae=function(Z){return e.queryPattern.test(Z)},ye=function(Z){return e.checkFn(Z)},ae=Te("whitespace"),we=/^[ \t\n\r]/,Pe=Qe([" "," ",` +`,"\r"],!1,!1),g=0,Ee=0,De=[{line:1,column:1}],ce=0,ne=[],ee=0,Ie;if("startRule"in e){if(!(e.startRule in o))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');a=o[e.startRule]}function ke(){return t.substring(Ee,g)}function ht(){return He(Ee,g)}function H(Z,ie){throw ie=ie!==void 0?ie:He(Ee,g),S([Te(Z)],t.substring(Ee,g),ie)}function lt(Z,ie){throw ie=ie!==void 0?ie:He(Ee,g),w(Z,ie)}function Re(Z,ie){return{type:"literal",text:Z,ignoreCase:ie}}function Qe(Z,ie,Se){return{type:"class",parts:Z,inverted:ie,ignoreCase:Se}}function be(){return{type:"any"}}function _e(){return{type:"end"}}function Te(Z){return{type:"other",description:Z}}function Je(Z){var ie=De[Z],Se;if(ie)return ie;for(Se=Z-1;!De[Se];)Se--;for(ie=De[Se],ie={line:ie.line,column:ie.column};Sece&&(ce=g,ne=[]),ne.push(Z))}function w(Z,ie){return new cd(Z,null,null,ie)}function S(Z,ie,Se){return new cd(cd.buildMessage(Z,ie),Z,ie,Se)}function y(){var Z,ie,Se,Ne,ot,dt,jt,$t;if(Z=g,ie=F(),ie!==r){for(Se=[],Ne=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&x(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&x(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&x(E)))),dt!==r?(jt=X(),jt!==r?($t=F(),$t!==r?(ot=[ot,dt,jt,$t],Ne=ot):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r);Ne!==r;)Se.push(Ne),Ne=g,ot=X(),ot!==r?(t.charCodeAt(g)===124?(dt=n,g++):(dt=r,ee===0&&x(u)),dt===r&&(t.charCodeAt(g)===38?(dt=A,g++):(dt=r,ee===0&&x(p)),dt===r&&(t.charCodeAt(g)===94?(dt=h,g++):(dt=r,ee===0&&x(E)))),dt!==r?(jt=X(),jt!==r?($t=F(),$t!==r?(ot=[ot,dt,jt,$t],Ne=ot):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r)):(g=Ne,Ne=r);Se!==r?(Ee=Z,ie=I(ie,Se),Z=ie):(g=Z,Z=r)}else g=Z,Z=r;return Z}function F(){var Z,ie,Se,Ne,ot,dt;return Z=g,t.charCodeAt(g)===33?(ie=v,g++):(ie=r,ee===0&&x(b)),ie!==r?(Se=F(),Se!==r?(Ee=Z,ie=C(Se),Z=ie):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=g,t.charCodeAt(g)===40?(ie=T,g++):(ie=r,ee===0&&x(L)),ie!==r?(Se=X(),Se!==r?(Ne=y(),Ne!==r?(ot=X(),ot!==r?(t.charCodeAt(g)===41?(dt=U,g++):(dt=r,ee===0&&x(J)),dt!==r?(Ee=Z,ie=te(Ne),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r)):(g=Z,Z=r),Z===r&&(Z=z())),Z}function z(){var Z,ie,Se,Ne,ot;if(Z=g,ie=X(),ie!==r){if(Se=g,Ne=[],le.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&x(pe)),ot!==r)for(;ot!==r;)Ne.push(ot),le.test(t.charAt(g))?(ot=t.charAt(g),g++):(ot=r,ee===0&&x(pe));else Ne=r;Ne!==r?Se=t.substring(Se,g):Se=Ne,Se!==r?(Ee=g,Ne=Ae(Se),Ne?Ne=void 0:Ne=r,Ne!==r?(Ee=Z,ie=ye(Se),Z=ie):(g=Z,Z=r)):(g=Z,Z=r)}else g=Z,Z=r;return Z}function X(){var Z,ie;for(ee++,Z=[],we.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&x(Pe));ie!==r;)Z.push(ie),we.test(t.charAt(g))?(ie=t.charAt(g),g++):(ie=r,ee===0&&x(Pe));return ee--,Z===r&&(ie=r,ee===0&&x(ae)),Z}if(Ie=a(),Ie!==r&&g===t.length)return Ie;throw Ie!==r&&g{var{parse:C9e}=tX();PP.makeParser=(t=/[a-z]+/)=>(e,r)=>C9e(e,{queryPattern:t,checkFn:r});PP.parse=PP.makeParser()});var iX=_((SQt,nX)=>{"use strict";nX.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var pN=_((xQt,oX)=>{var BI=iX(),sX={};for(let t of Object.keys(BI))sX[BI[t]]=t;var Ar={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};oX.exports=Ar;for(let t of Object.keys(Ar)){if(!("channels"in Ar[t]))throw new Error("missing channels property: "+t);if(!("labels"in Ar[t]))throw new Error("missing channel labels property: "+t);if(Ar[t].labels.length!==Ar[t].channels)throw new Error("channel and label counts mismatch: "+t);let{channels:e,labels:r}=Ar[t];delete Ar[t].channels,delete Ar[t].labels,Object.defineProperty(Ar[t],"channels",{value:e}),Object.defineProperty(Ar[t],"labels",{value:r})}Ar.rgb.hsl=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(e,r,o),n=Math.max(e,r,o),u=n-a,A,p;n===a?A=0:e===n?A=(r-o)/u:r===n?A=2+(o-e)/u:o===n&&(A=4+(e-r)/u),A=Math.min(A*60,360),A<0&&(A+=360);let h=(a+n)/2;return n===a?p=0:h<=.5?p=u/(n+a):p=u/(2-n-a),[A,p*100,h*100]};Ar.rgb.hsv=function(t){let e,r,o,a,n,u=t[0]/255,A=t[1]/255,p=t[2]/255,h=Math.max(u,A,p),E=h-Math.min(u,A,p),I=function(v){return(h-v)/6/E+1/2};return E===0?(a=0,n=0):(n=E/h,e=I(u),r=I(A),o=I(p),u===h?a=o-r:A===h?a=1/3+e-o:p===h&&(a=2/3+r-e),a<0?a+=1:a>1&&(a-=1)),[a*360,n*100,h*100]};Ar.rgb.hwb=function(t){let e=t[0],r=t[1],o=t[2],a=Ar.rgb.hsl(t)[0],n=1/255*Math.min(e,Math.min(r,o));return o=1-1/255*Math.max(e,Math.max(r,o)),[a,n*100,o*100]};Ar.rgb.cmyk=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(1-e,1-r,1-o),n=(1-e-a)/(1-a)||0,u=(1-r-a)/(1-a)||0,A=(1-o-a)/(1-a)||0;return[n*100,u*100,A*100,a*100]};function w9e(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}Ar.rgb.keyword=function(t){let e=sX[t];if(e)return e;let r=1/0,o;for(let a of Object.keys(BI)){let n=BI[a],u=w9e(t,n);u.04045?((e+.055)/1.055)**2.4:e/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,o=o>.04045?((o+.055)/1.055)**2.4:o/12.92;let a=e*.4124+r*.3576+o*.1805,n=e*.2126+r*.7152+o*.0722,u=e*.0193+r*.1192+o*.9505;return[a*100,n*100,u*100]};Ar.rgb.lab=function(t){let e=Ar.rgb.xyz(t),r=e[0],o=e[1],a=e[2];r/=95.047,o/=100,a/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116,a=a>.008856?a**(1/3):7.787*a+16/116;let n=116*o-16,u=500*(r-o),A=200*(o-a);return[n,u,A]};Ar.hsl.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a,n,u;if(r===0)return u=o*255,[u,u,u];o<.5?a=o*(1+r):a=o+r-o*r;let A=2*o-a,p=[0,0,0];for(let h=0;h<3;h++)n=e+1/3*-(h-1),n<0&&n++,n>1&&n--,6*n<1?u=A+(a-A)*6*n:2*n<1?u=a:3*n<2?u=A+(a-A)*(2/3-n)*6:u=A,p[h]=u*255;return p};Ar.hsl.hsv=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=r,n=Math.max(o,.01);o*=2,r*=o<=1?o:2-o,a*=n<=1?n:2-n;let u=(o+r)/2,A=o===0?2*a/(n+a):2*r/(o+r);return[e,A*100,u*100]};Ar.hsv.rgb=function(t){let e=t[0]/60,r=t[1]/100,o=t[2]/100,a=Math.floor(e)%6,n=e-Math.floor(e),u=255*o*(1-r),A=255*o*(1-r*n),p=255*o*(1-r*(1-n));switch(o*=255,a){case 0:return[o,p,u];case 1:return[A,o,u];case 2:return[u,o,p];case 3:return[u,A,o];case 4:return[p,u,o];case 5:return[o,u,A]}};Ar.hsv.hsl=function(t){let e=t[0],r=t[1]/100,o=t[2]/100,a=Math.max(o,.01),n,u;u=(2-r)*o;let A=(2-r)*a;return n=r*a,n/=A<=1?A:2-A,n=n||0,u/=2,[e,n*100,u*100]};Ar.hwb.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100,a=r+o,n;a>1&&(r/=a,o/=a);let u=Math.floor(6*e),A=1-o;n=6*e-u,(u&1)!==0&&(n=1-n);let p=r+n*(A-r),h,E,I;switch(u){default:case 6:case 0:h=A,E=p,I=r;break;case 1:h=p,E=A,I=r;break;case 2:h=r,E=A,I=p;break;case 3:h=r,E=p,I=A;break;case 4:h=p,E=r,I=A;break;case 5:h=A,E=r,I=p;break}return[h*255,E*255,I*255]};Ar.cmyk.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a=t[3]/100,n=1-Math.min(1,e*(1-a)+a),u=1-Math.min(1,r*(1-a)+a),A=1-Math.min(1,o*(1-a)+a);return[n*255,u*255,A*255]};Ar.xyz.rgb=function(t){let e=t[0]/100,r=t[1]/100,o=t[2]/100,a,n,u;return a=e*3.2406+r*-1.5372+o*-.4986,n=e*-.9689+r*1.8758+o*.0415,u=e*.0557+r*-.204+o*1.057,a=a>.0031308?1.055*a**(1/2.4)-.055:a*12.92,n=n>.0031308?1.055*n**(1/2.4)-.055:n*12.92,u=u>.0031308?1.055*u**(1/2.4)-.055:u*12.92,a=Math.min(Math.max(0,a),1),n=Math.min(Math.max(0,n),1),u=Math.min(Math.max(0,u),1),[a*255,n*255,u*255]};Ar.xyz.lab=function(t){let e=t[0],r=t[1],o=t[2];e/=95.047,r/=100,o/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,o=o>.008856?o**(1/3):7.787*o+16/116;let a=116*r-16,n=500*(e-r),u=200*(r-o);return[a,n,u]};Ar.lab.xyz=function(t){let e=t[0],r=t[1],o=t[2],a,n,u;n=(e+16)/116,a=r/500+n,u=n-o/200;let A=n**3,p=a**3,h=u**3;return n=A>.008856?A:(n-16/116)/7.787,a=p>.008856?p:(a-16/116)/7.787,u=h>.008856?h:(u-16/116)/7.787,a*=95.047,n*=100,u*=108.883,[a,n,u]};Ar.lab.lch=function(t){let e=t[0],r=t[1],o=t[2],a;a=Math.atan2(o,r)*360/2/Math.PI,a<0&&(a+=360);let u=Math.sqrt(r*r+o*o);return[e,u,a]};Ar.lch.lab=function(t){let e=t[0],r=t[1],a=t[2]/360*2*Math.PI,n=r*Math.cos(a),u=r*Math.sin(a);return[e,n,u]};Ar.rgb.ansi16=function(t,e=null){let[r,o,a]=t,n=e===null?Ar.rgb.hsv(t)[2]:e;if(n=Math.round(n/50),n===0)return 30;let u=30+(Math.round(a/255)<<2|Math.round(o/255)<<1|Math.round(r/255));return n===2&&(u+=60),u};Ar.hsv.ansi16=function(t){return Ar.rgb.ansi16(Ar.hsv.rgb(t),t[2])};Ar.rgb.ansi256=function(t){let e=t[0],r=t[1],o=t[2];return e===r&&r===o?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(r/255*5)+Math.round(o/255*5)};Ar.ansi16.rgb=function(t){let e=t%10;if(e===0||e===7)return t>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let r=(~~(t>50)+1)*.5,o=(e&1)*r*255,a=(e>>1&1)*r*255,n=(e>>2&1)*r*255;return[o,a,n]};Ar.ansi256.rgb=function(t){if(t>=232){let n=(t-232)*10+8;return[n,n,n]}t-=16;let e,r=Math.floor(t/36)/5*255,o=Math.floor((e=t%36)/6)/5*255,a=e%6/5*255;return[r,o,a]};Ar.rgb.hex=function(t){let r=(((Math.round(t[0])&255)<<16)+((Math.round(t[1])&255)<<8)+(Math.round(t[2])&255)).toString(16).toUpperCase();return"000000".substring(r.length)+r};Ar.hex.rgb=function(t){let e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let r=e[0];e[0].length===3&&(r=r.split("").map(A=>A+A).join(""));let o=parseInt(r,16),a=o>>16&255,n=o>>8&255,u=o&255;return[a,n,u]};Ar.rgb.hcg=function(t){let e=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.max(Math.max(e,r),o),n=Math.min(Math.min(e,r),o),u=a-n,A,p;return u<1?A=n/(1-u):A=0,u<=0?p=0:a===e?p=(r-o)/u%6:a===r?p=2+(o-e)/u:p=4+(e-r)/u,p/=6,p%=1,[p*360,u*100,A*100]};Ar.hsl.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=r<.5?2*e*r:2*e*(1-r),a=0;return o<1&&(a=(r-.5*o)/(1-o)),[t[0],o*100,a*100]};Ar.hsv.hcg=function(t){let e=t[1]/100,r=t[2]/100,o=e*r,a=0;return o<1&&(a=(r-o)/(1-o)),[t[0],o*100,a*100]};Ar.hcg.rgb=function(t){let e=t[0]/360,r=t[1]/100,o=t[2]/100;if(r===0)return[o*255,o*255,o*255];let a=[0,0,0],n=e%1*6,u=n%1,A=1-u,p=0;switch(Math.floor(n)){case 0:a[0]=1,a[1]=u,a[2]=0;break;case 1:a[0]=A,a[1]=1,a[2]=0;break;case 2:a[0]=0,a[1]=1,a[2]=u;break;case 3:a[0]=0,a[1]=A,a[2]=1;break;case 4:a[0]=u,a[1]=0,a[2]=1;break;default:a[0]=1,a[1]=0,a[2]=A}return p=(1-r)*o,[(r*a[0]+p)*255,(r*a[1]+p)*255,(r*a[2]+p)*255]};Ar.hcg.hsv=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e),a=0;return o>0&&(a=e/o),[t[0],a*100,o*100]};Ar.hcg.hsl=function(t){let e=t[1]/100,o=t[2]/100*(1-e)+.5*e,a=0;return o>0&&o<.5?a=e/(2*o):o>=.5&&o<1&&(a=e/(2*(1-o))),[t[0],a*100,o*100]};Ar.hcg.hwb=function(t){let e=t[1]/100,r=t[2]/100,o=e+r*(1-e);return[t[0],(o-e)*100,(1-o)*100]};Ar.hwb.hcg=function(t){let e=t[1]/100,o=1-t[2]/100,a=o-e,n=0;return a<1&&(n=(o-a)/(1-a)),[t[0],a*100,n*100]};Ar.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]};Ar.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]};Ar.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]};Ar.gray.hsl=function(t){return[0,0,t[0]]};Ar.gray.hsv=Ar.gray.hsl;Ar.gray.hwb=function(t){return[0,100,t[0]]};Ar.gray.cmyk=function(t){return[0,0,0,t[0]]};Ar.gray.lab=function(t){return[t[0],0,0]};Ar.gray.hex=function(t){let e=Math.round(t[0]/100*255)&255,o=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(o.length)+o};Ar.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}});var lX=_((bQt,aX)=>{var SP=pN();function I9e(){let t={},e=Object.keys(SP);for(let r=e.length,o=0;o{var hN=pN(),P9e=lX(),xy={},S9e=Object.keys(hN);function x9e(t){let e=function(...r){let o=r[0];return o==null?o:(o.length>1&&(r=o),t(r))};return"conversion"in t&&(e.conversion=t.conversion),e}function b9e(t){let e=function(...r){let o=r[0];if(o==null)return o;o.length>1&&(r=o);let a=t(r);if(typeof a=="object")for(let n=a.length,u=0;u{xy[t]={},Object.defineProperty(xy[t],"channels",{value:hN[t].channels}),Object.defineProperty(xy[t],"labels",{value:hN[t].labels});let e=P9e(t);Object.keys(e).forEach(o=>{let a=e[o];xy[t][o]=b9e(a),xy[t][o].raw=x9e(a)})});cX.exports=xy});var vI=_((QQt,gX)=>{"use strict";var AX=(t,e)=>(...r)=>`\x1B[${t(...r)+e}m`,fX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};5;${o}m`},pX=(t,e)=>(...r)=>{let o=t(...r);return`\x1B[${38+e};2;${o[0]};${o[1]};${o[2]}m`},xP=t=>t,hX=(t,e,r)=>[t,e,r],by=(t,e,r)=>{Object.defineProperty(t,e,{get:()=>{let o=r();return Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0}),o},enumerable:!0,configurable:!0})},gN,ky=(t,e,r,o)=>{gN===void 0&&(gN=uX());let a=o?10:0,n={};for(let[u,A]of Object.entries(gN)){let p=u==="ansi16"?"ansi":u;u===e?n[p]=t(r,a):typeof A=="object"&&(n[p]=t(A[e],a))}return n};function k9e(){let t=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[r,o]of Object.entries(e)){for(let[a,n]of Object.entries(o))e[a]={open:`\x1B[${n[0]}m`,close:`\x1B[${n[1]}m`},o[a]=e[a],t.set(n[0],n[1]);Object.defineProperty(e,r,{value:o,enumerable:!1})}return Object.defineProperty(e,"codes",{value:t,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",by(e.color,"ansi",()=>ky(AX,"ansi16",xP,!1)),by(e.color,"ansi256",()=>ky(fX,"ansi256",xP,!1)),by(e.color,"ansi16m",()=>ky(pX,"rgb",hX,!1)),by(e.bgColor,"ansi",()=>ky(AX,"ansi16",xP,!0)),by(e.bgColor,"ansi256",()=>ky(fX,"ansi256",xP,!0)),by(e.bgColor,"ansi16m",()=>ky(pX,"rgb",hX,!0)),e}Object.defineProperty(gX,"exports",{enumerable:!0,get:k9e})});var mX=_((FQt,dX)=>{"use strict";dX.exports=(t,e=process.argv)=>{let r=t.startsWith("-")?"":t.length===1?"-":"--",o=e.indexOf(r+t),a=e.indexOf("--");return o!==-1&&(a===-1||o{"use strict";var Q9e=Be("os"),yX=Be("tty"),Ol=mX(),{env:ls}=process,Kp;Ol("no-color")||Ol("no-colors")||Ol("color=false")||Ol("color=never")?Kp=0:(Ol("color")||Ol("colors")||Ol("color=true")||Ol("color=always"))&&(Kp=1);"FORCE_COLOR"in ls&&(ls.FORCE_COLOR==="true"?Kp=1:ls.FORCE_COLOR==="false"?Kp=0:Kp=ls.FORCE_COLOR.length===0?1:Math.min(parseInt(ls.FORCE_COLOR,10),3));function dN(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function mN(t,e){if(Kp===0)return 0;if(Ol("color=16m")||Ol("color=full")||Ol("color=truecolor"))return 3;if(Ol("color=256"))return 2;if(t&&!e&&Kp===void 0)return 0;let r=Kp||0;if(ls.TERM==="dumb")return r;if(process.platform==="win32"){let o=Q9e.release().split(".");return Number(o[0])>=10&&Number(o[2])>=10586?Number(o[2])>=14931?3:2:1}if("CI"in ls)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(o=>o in ls)||ls.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in ls)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ls.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in ls)return 1;if(ls.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in ls){let o=parseInt((ls.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ls.TERM_PROGRAM){case"iTerm.app":return o>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ls.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ls.TERM)||"COLORTERM"in ls?1:r}function F9e(t){let e=mN(t,t&&t.isTTY);return dN(e)}EX.exports={supportsColor:F9e,stdout:dN(mN(!0,yX.isatty(1))),stderr:dN(mN(!0,yX.isatty(2)))}});var wX=_((RQt,CX)=>{"use strict";var T9e=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},R9e=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r +`:` +`)+r,a=o+1,o=t.indexOf(` +`,a)}while(o!==-1);return n+=t.substr(a),n};CX.exports={stringReplaceAll:T9e,stringEncaseCRLFWithFirstIndex:R9e}});var PX=_((NQt,DX)=>{"use strict";var N9e=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,IX=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,L9e=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,M9e=/\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.)|([^\\])/gi,O9e=new Map([["n",` +`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function vX(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&r?String.fromCodePoint(parseInt(t.slice(2,-1),16)):O9e.get(t)||t}function U9e(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(L9e))r.push(a[2].replace(M9e,(A,p,h)=>p?vX(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function _9e(t){IX.lastIndex=0;let e=[],r;for(;(r=IX.exec(t))!==null;){let o=r[1];if(r[2]){let a=U9e(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function BX(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}DX.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(N9e,(n,u,A,p,h,E)=>{if(u)a.push(vX(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:BX(t,r)(I)),r.push({inverse:A,styles:_9e(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(BX(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var vN=_((LQt,kX)=>{"use strict";var DI=vI(),{stdout:CN,stderr:wN}=yN(),{stringReplaceAll:H9e,stringEncaseCRLFWithFirstIndex:j9e}=wX(),SX=["ansi","ansi","ansi256","ansi16m"],Qy=Object.create(null),q9e=(t,e={})=>{if(e.level>3||e.level<0)throw new Error("The `level` option should be an integer from 0 to 3");let r=CN?CN.level:0;t.level=e.level===void 0?r:e.level},IN=class{constructor(e){return xX(e)}},xX=t=>{let e={};return q9e(e,t),e.template=(...r)=>W9e(e.template,...r),Object.setPrototypeOf(e,bP.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=IN,e.template};function bP(t){return xX(t)}for(let[t,e]of Object.entries(DI))Qy[t]={get(){let r=kP(this,BN(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};Qy.visible={get(){let t=kP(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var bX=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of bX)Qy[t]={get(){let{level:e}=this;return function(...r){let o=BN(DI.color[SX[e]][t](...r),DI.color.close,this._styler);return kP(this,o,this._isEmpty)}}};for(let t of bX){let e="bg"+t[0].toUpperCase()+t.slice(1);Qy[e]={get(){let{level:r}=this;return function(...o){let a=BN(DI.bgColor[SX[r]][t](...o),DI.bgColor.close,this._styler);return kP(this,a,this._isEmpty)}}}}var G9e=Object.defineProperties(()=>{},{...Qy,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),BN=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},kP=(t,e,r)=>{let o=(...a)=>Y9e(o,a.length===1?""+a[0]:a.join(" "));return o.__proto__=G9e,o._generator=t,o._styler=e,o._isEmpty=r,o},Y9e=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=H9e(e,r.close,r.open),r=r.parent;let n=e.indexOf(` +`);return n!==-1&&(e=j9e(e,a,o,n)),o+e+a},EN,W9e=(t,...e)=>{let[r]=e;if(!Array.isArray(r))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";Ul.isInteger=t=>typeof t=="number"?Number.isInteger(t):typeof t=="string"&&t.trim()!==""?Number.isInteger(Number(t)):!1;Ul.find=(t,e)=>t.nodes.find(r=>r.type===e);Ul.exceedsLimit=(t,e,r=1,o)=>o===!1||!Ul.isInteger(t)||!Ul.isInteger(e)?!1:(Number(e)-Number(t))/Number(r)>=o;Ul.escapeNode=(t,e=0,r)=>{let o=t.nodes[e];!o||(r&&o.type===r||o.type==="open"||o.type==="close")&&o.escaped!==!0&&(o.value="\\"+o.value,o.escaped=!0)};Ul.encloseBrace=t=>t.type!=="brace"?!1:t.commas>>0+t.ranges>>0===0?(t.invalid=!0,!0):!1;Ul.isInvalidBrace=t=>t.type!=="brace"?!1:t.invalid===!0||t.dollar?!0:t.commas>>0+t.ranges>>0===0||t.open!==!0||t.close!==!0?(t.invalid=!0,!0):!1;Ul.isOpenOrClose=t=>t.type==="open"||t.type==="close"?!0:t.open===!0||t.close===!0;Ul.reduce=t=>t.reduce((e,r)=>(r.type==="text"&&e.push(r.value),r.type==="range"&&(r.type="text"),e),[]);Ul.flatten=(...t)=>{let e=[],r=o=>{for(let a=0;a{"use strict";var QX=QP();FX.exports=(t,e={})=>{let r=(o,a={})=>{let n=e.escapeInvalid&&QX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A="";if(o.value)return(n||u)&&QX.isOpenOrClose(o)?"\\"+o.value:o.value;if(o.value)return o.value;if(o.nodes)for(let p of o.nodes)A+=r(p);return A};return r(t)}});var RX=_((UQt,TX)=>{"use strict";TX.exports=function(t){return typeof t=="number"?t-t===0:typeof t=="string"&&t.trim()!==""?Number.isFinite?Number.isFinite(+t):isFinite(+t):!1}});var qX=_((_Qt,jX)=>{"use strict";var NX=RX(),ud=(t,e,r)=>{if(NX(t)===!1)throw new TypeError("toRegexRange: expected the first argument to be a number");if(e===void 0||t===e)return String(t);if(NX(e)===!1)throw new TypeError("toRegexRange: expected the second argument to be a number.");let o={relaxZeros:!0,...r};typeof o.strictZeros=="boolean"&&(o.relaxZeros=o.strictZeros===!1);let a=String(o.relaxZeros),n=String(o.shorthand),u=String(o.capture),A=String(o.wrap),p=t+":"+e+"="+a+n+u+A;if(ud.cache.hasOwnProperty(p))return ud.cache[p].result;let h=Math.min(t,e),E=Math.max(t,e);if(Math.abs(h-E)===1){let T=t+"|"+e;return o.capture?`(${T})`:o.wrap===!1?T:`(?:${T})`}let I=HX(t)||HX(e),v={min:t,max:e,a:h,b:E},b=[],C=[];if(I&&(v.isPadded=I,v.maxLen=String(v.max).length),h<0){let T=E<0?Math.abs(E):1;C=LX(T,Math.abs(h),v,o),h=v.a=0}return E>=0&&(b=LX(h,E,v,o)),v.negatives=C,v.positives=b,v.result=V9e(C,b,o),o.capture===!0?v.result=`(${v.result})`:o.wrap!==!1&&b.length+C.length>1&&(v.result=`(?:${v.result})`),ud.cache[p]=v,v.result};function V9e(t,e,r){let o=DN(t,e,"-",!1,r)||[],a=DN(e,t,"",!1,r)||[],n=DN(t,e,"-?",!0,r)||[];return o.concat(n).concat(a).join("|")}function K9e(t,e){let r=1,o=1,a=OX(t,r),n=new Set([e]);for(;t<=a&&a<=e;)n.add(a),r+=1,a=OX(t,r);for(a=UX(e+1,o)-1;t1&&A.count.pop(),A.count.push(E.count[0]),A.string=A.pattern+_X(A.count),u=h+1;continue}r.isPadded&&(I=$9e(h,r,o)),E.string=I+E.pattern+_X(E.count),n.push(E),u=h+1,A=E}return n}function DN(t,e,r,o,a){let n=[];for(let u of t){let{string:A}=u;!o&&!MX(e,"string",A)&&n.push(r+A),o&&MX(e,"string",A)&&n.push(r+A)}return n}function z9e(t,e){let r=[];for(let o=0;oe?1:e>t?-1:0}function MX(t,e,r){return t.some(o=>o[e]===r)}function OX(t,e){return Number(String(t).slice(0,-e)+"9".repeat(e))}function UX(t,e){return t-t%Math.pow(10,e)}function _X(t){let[e=0,r=""]=t;return r||e>1?`{${e+(r?","+r:"")}}`:""}function Z9e(t,e,r){return`[${t}${e-t===1?"":"-"}${e}]`}function HX(t){return/^-?(0+)\d/.test(t)}function $9e(t,e,r){if(!e.isPadded)return t;let o=Math.abs(e.maxLen-String(t).length),a=r.relaxZeros!==!1;switch(o){case 0:return"";case 1:return a?"0?":"0";case 2:return a?"0{0,2}":"00";default:return a?`0{0,${o}}`:`0{${o}}`}}ud.cache={};ud.clearCache=()=>ud.cache={};jX.exports=ud});var xN=_((HQt,XX)=>{"use strict";var e7e=Be("util"),WX=qX(),GX=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),t7e=t=>e=>t===!0?Number(e):String(e),PN=t=>typeof t=="number"||typeof t=="string"&&t!=="",SI=t=>Number.isInteger(+t),SN=t=>{let e=`${t}`,r=-1;if(e[0]==="-"&&(e=e.slice(1)),e==="0")return!1;for(;e[++r]==="0";);return r>0},r7e=(t,e,r)=>typeof t=="string"||typeof e=="string"?!0:r.stringify===!0,n7e=(t,e,r)=>{if(e>0){let o=t[0]==="-"?"-":"";o&&(t=t.slice(1)),t=o+t.padStart(o?e-1:e,"0")}return r===!1?String(t):t},YX=(t,e)=>{let r=t[0]==="-"?"-":"";for(r&&(t=t.slice(1),e--);t.length{t.negatives.sort((u,A)=>uA?1:0),t.positives.sort((u,A)=>uA?1:0);let r=e.capture?"":"?:",o="",a="",n;return t.positives.length&&(o=t.positives.join("|")),t.negatives.length&&(a=`-(${r}${t.negatives.join("|")})`),o&&a?n=`${o}|${a}`:n=o||a,e.wrap?`(${r}${n})`:n},VX=(t,e,r,o)=>{if(r)return WX(t,e,{wrap:!1,...o});let a=String.fromCharCode(t);if(t===e)return a;let n=String.fromCharCode(e);return`[${a}-${n}]`},KX=(t,e,r)=>{if(Array.isArray(t)){let o=r.wrap===!0,a=r.capture?"":"?:";return o?`(${a}${t.join("|")})`:t.join("|")}return WX(t,e,r)},JX=(...t)=>new RangeError("Invalid range arguments: "+e7e.inspect(...t)),zX=(t,e,r)=>{if(r.strictRanges===!0)throw JX([t,e]);return[]},s7e=(t,e)=>{if(e.strictRanges===!0)throw new TypeError(`Expected step "${t}" to be a number`);return[]},o7e=(t,e,r=1,o={})=>{let a=Number(t),n=Number(e);if(!Number.isInteger(a)||!Number.isInteger(n)){if(o.strictRanges===!0)throw JX([t,e]);return[]}a===0&&(a=0),n===0&&(n=0);let u=a>n,A=String(t),p=String(e),h=String(r);r=Math.max(Math.abs(r),1);let E=SN(A)||SN(p)||SN(h),I=E?Math.max(A.length,p.length,h.length):0,v=E===!1&&r7e(t,e,o)===!1,b=o.transform||t7e(v);if(o.toRegex&&r===1)return VX(YX(t,I),YX(e,I),!0,o);let C={negatives:[],positives:[]},T=J=>C[J<0?"negatives":"positives"].push(Math.abs(J)),L=[],U=0;for(;u?a>=n:a<=n;)o.toRegex===!0&&r>1?T(a):L.push(n7e(b(a,U),I,v)),a=u?a-r:a+r,U++;return o.toRegex===!0?r>1?i7e(C,o):KX(L,null,{wrap:!1,...o}):L},a7e=(t,e,r=1,o={})=>{if(!SI(t)&&t.length>1||!SI(e)&&e.length>1)return zX(t,e,o);let a=o.transform||(v=>String.fromCharCode(v)),n=`${t}`.charCodeAt(0),u=`${e}`.charCodeAt(0),A=n>u,p=Math.min(n,u),h=Math.max(n,u);if(o.toRegex&&r===1)return VX(p,h,!1,o);let E=[],I=0;for(;A?n>=u:n<=u;)E.push(a(n,I)),n=A?n-r:n+r,I++;return o.toRegex===!0?KX(E,null,{wrap:!1,options:o}):E},TP=(t,e,r,o={})=>{if(e==null&&PN(t))return[t];if(!PN(t)||!PN(e))return zX(t,e,o);if(typeof r=="function")return TP(t,e,1,{transform:r});if(GX(r))return TP(t,e,0,r);let a={...o};return a.capture===!0&&(a.wrap=!0),r=r||a.step||1,SI(r)?SI(t)&&SI(e)?o7e(t,e,r,a):a7e(t,e,Math.max(Math.abs(r),1),a):r!=null&&!GX(r)?s7e(r,a):TP(t,e,1,r)};XX.exports=TP});var eZ=_((jQt,$X)=>{"use strict";var l7e=xN(),ZX=QP(),c7e=(t,e={})=>{let r=(o,a={})=>{let n=ZX.isInvalidBrace(a),u=o.invalid===!0&&e.escapeInvalid===!0,A=n===!0||u===!0,p=e.escapeInvalid===!0?"\\":"",h="";if(o.isOpen===!0||o.isClose===!0)return p+o.value;if(o.type==="open")return A?p+o.value:"(";if(o.type==="close")return A?p+o.value:")";if(o.type==="comma")return o.prev.type==="comma"?"":A?o.value:"|";if(o.value)return o.value;if(o.nodes&&o.ranges>0){let E=ZX.reduce(o.nodes),I=l7e(...E,{...e,wrap:!1,toRegex:!0});if(I.length!==0)return E.length>1&&I.length>1?`(${I})`:I}if(o.nodes)for(let E of o.nodes)h+=r(E,o);return h};return r(t)};$X.exports=c7e});var nZ=_((qQt,rZ)=>{"use strict";var u7e=xN(),tZ=FP(),Fy=QP(),Ad=(t="",e="",r=!1)=>{let o=[];if(t=[].concat(t),e=[].concat(e),!e.length)return t;if(!t.length)return r?Fy.flatten(e).map(a=>`{${a}}`):e;for(let a of t)if(Array.isArray(a))for(let n of a)o.push(Ad(n,e,r));else for(let n of e)r===!0&&typeof n=="string"&&(n=`{${n}}`),o.push(Array.isArray(n)?Ad(a,n,r):a+n);return Fy.flatten(o)},A7e=(t,e={})=>{let r=e.rangeLimit===void 0?1e3:e.rangeLimit,o=(a,n={})=>{a.queue=[];let u=n,A=n.queue;for(;u.type!=="brace"&&u.type!=="root"&&u.parent;)u=u.parent,A=u.queue;if(a.invalid||a.dollar){A.push(Ad(A.pop(),tZ(a,e)));return}if(a.type==="brace"&&a.invalid!==!0&&a.nodes.length===2){A.push(Ad(A.pop(),["{}"]));return}if(a.nodes&&a.ranges>0){let I=Fy.reduce(a.nodes);if(Fy.exceedsLimit(...I,e.step,r))throw new RangeError("expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.");let v=u7e(...I,e);v.length===0&&(v=tZ(a,e)),A.push(Ad(A.pop(),v)),a.nodes=[];return}let p=Fy.encloseBrace(a),h=a.queue,E=a;for(;E.type!=="brace"&&E.type!=="root"&&E.parent;)E=E.parent,h=E.queue;for(let I=0;I{"use strict";iZ.exports={MAX_LENGTH:1024*64,CHAR_0:"0",CHAR_9:"9",CHAR_UPPERCASE_A:"A",CHAR_LOWERCASE_A:"a",CHAR_UPPERCASE_Z:"Z",CHAR_LOWERCASE_Z:"z",CHAR_LEFT_PARENTHESES:"(",CHAR_RIGHT_PARENTHESES:")",CHAR_ASTERISK:"*",CHAR_AMPERSAND:"&",CHAR_AT:"@",CHAR_BACKSLASH:"\\",CHAR_BACKTICK:"`",CHAR_CARRIAGE_RETURN:"\r",CHAR_CIRCUMFLEX_ACCENT:"^",CHAR_COLON:":",CHAR_COMMA:",",CHAR_DOLLAR:"$",CHAR_DOT:".",CHAR_DOUBLE_QUOTE:'"',CHAR_EQUAL:"=",CHAR_EXCLAMATION_MARK:"!",CHAR_FORM_FEED:"\f",CHAR_FORWARD_SLASH:"/",CHAR_HASH:"#",CHAR_HYPHEN_MINUS:"-",CHAR_LEFT_ANGLE_BRACKET:"<",CHAR_LEFT_CURLY_BRACE:"{",CHAR_LEFT_SQUARE_BRACKET:"[",CHAR_LINE_FEED:` +`,CHAR_NO_BREAK_SPACE:"\xA0",CHAR_PERCENT:"%",CHAR_PLUS:"+",CHAR_QUESTION_MARK:"?",CHAR_RIGHT_ANGLE_BRACKET:">",CHAR_RIGHT_CURLY_BRACE:"}",CHAR_RIGHT_SQUARE_BRACKET:"]",CHAR_SEMICOLON:";",CHAR_SINGLE_QUOTE:"'",CHAR_SPACE:" ",CHAR_TAB:" ",CHAR_UNDERSCORE:"_",CHAR_VERTICAL_LINE:"|",CHAR_ZERO_WIDTH_NOBREAK_SPACE:"\uFEFF"}});var uZ=_((YQt,cZ)=>{"use strict";var f7e=FP(),{MAX_LENGTH:oZ,CHAR_BACKSLASH:bN,CHAR_BACKTICK:p7e,CHAR_COMMA:h7e,CHAR_DOT:g7e,CHAR_LEFT_PARENTHESES:d7e,CHAR_RIGHT_PARENTHESES:m7e,CHAR_LEFT_CURLY_BRACE:y7e,CHAR_RIGHT_CURLY_BRACE:E7e,CHAR_LEFT_SQUARE_BRACKET:aZ,CHAR_RIGHT_SQUARE_BRACKET:lZ,CHAR_DOUBLE_QUOTE:C7e,CHAR_SINGLE_QUOTE:w7e,CHAR_NO_BREAK_SPACE:I7e,CHAR_ZERO_WIDTH_NOBREAK_SPACE:B7e}=sZ(),v7e=(t,e={})=>{if(typeof t!="string")throw new TypeError("Expected a string");let r=e||{},o=typeof r.maxLength=="number"?Math.min(oZ,r.maxLength):oZ;if(t.length>o)throw new SyntaxError(`Input length (${t.length}), exceeds max characters (${o})`);let a={type:"root",input:t,nodes:[]},n=[a],u=a,A=a,p=0,h=t.length,E=0,I=0,v,b={},C=()=>t[E++],T=L=>{if(L.type==="text"&&A.type==="dot"&&(A.type="text"),A&&A.type==="text"&&L.type==="text"){A.value+=L.value;return}return u.nodes.push(L),L.parent=u,L.prev=A,A=L,L};for(T({type:"bos"});E0){if(u.ranges>0){u.ranges=0;let L=u.nodes.shift();u.nodes=[L,{type:"text",value:f7e(u)}]}T({type:"comma",value:v}),u.commas++;continue}if(v===g7e&&I>0&&u.commas===0){let L=u.nodes;if(I===0||L.length===0){T({type:"text",value:v});continue}if(A.type==="dot"){if(u.range=[],A.value+=v,A.type="range",u.nodes.length!==3&&u.nodes.length!==5){u.invalid=!0,u.ranges=0,A.type="text";continue}u.ranges++,u.args=[];continue}if(A.type==="range"){L.pop();let U=L[L.length-1];U.value+=A.value+v,A=U,u.ranges--;continue}T({type:"dot",value:v});continue}T({type:"text",value:v})}do if(u=n.pop(),u.type!=="root"){u.nodes.forEach(J=>{J.nodes||(J.type==="open"&&(J.isOpen=!0),J.type==="close"&&(J.isClose=!0),J.nodes||(J.type="text"),J.invalid=!0)});let L=n[n.length-1],U=L.nodes.indexOf(u);L.nodes.splice(U,1,...u.nodes)}while(n.length>0);return T({type:"eos"}),a};cZ.exports=v7e});var pZ=_((WQt,fZ)=>{"use strict";var AZ=FP(),D7e=eZ(),P7e=nZ(),S7e=uZ(),rl=(t,e={})=>{let r=[];if(Array.isArray(t))for(let o of t){let a=rl.create(o,e);Array.isArray(a)?r.push(...a):r.push(a)}else r=[].concat(rl.create(t,e));return e&&e.expand===!0&&e.nodupes===!0&&(r=[...new Set(r)]),r};rl.parse=(t,e={})=>S7e(t,e);rl.stringify=(t,e={})=>AZ(typeof t=="string"?rl.parse(t,e):t,e);rl.compile=(t,e={})=>(typeof t=="string"&&(t=rl.parse(t,e)),D7e(t,e));rl.expand=(t,e={})=>{typeof t=="string"&&(t=rl.parse(t,e));let r=P7e(t,e);return e.noempty===!0&&(r=r.filter(Boolean)),e.nodupes===!0&&(r=[...new Set(r)]),r};rl.create=(t,e={})=>t===""||t.length<3?[t]:e.expand!==!0?rl.compile(t,e):rl.expand(t,e);fZ.exports=rl});var xI=_((VQt,yZ)=>{"use strict";var x7e=Be("path"),Vu="\\\\/",hZ=`[^${Vu}]`,Bf="\\.",b7e="\\+",k7e="\\?",RP="\\/",Q7e="(?=.)",gZ="[^/]",kN=`(?:${RP}|$)`,dZ=`(?:^|${RP})`,QN=`${Bf}{1,2}${kN}`,F7e=`(?!${Bf})`,T7e=`(?!${dZ}${QN})`,R7e=`(?!${Bf}{0,1}${kN})`,N7e=`(?!${QN})`,L7e=`[^.${RP}]`,M7e=`${gZ}*?`,mZ={DOT_LITERAL:Bf,PLUS_LITERAL:b7e,QMARK_LITERAL:k7e,SLASH_LITERAL:RP,ONE_CHAR:Q7e,QMARK:gZ,END_ANCHOR:kN,DOTS_SLASH:QN,NO_DOT:F7e,NO_DOTS:T7e,NO_DOT_SLASH:R7e,NO_DOTS_SLASH:N7e,QMARK_NO_DOT:L7e,STAR:M7e,START_ANCHOR:dZ},O7e={...mZ,SLASH_LITERAL:`[${Vu}]`,QMARK:hZ,STAR:`${hZ}*?`,DOTS_SLASH:`${Bf}{1,2}(?:[${Vu}]|$)`,NO_DOT:`(?!${Bf})`,NO_DOTS:`(?!(?:^|[${Vu}])${Bf}{1,2}(?:[${Vu}]|$))`,NO_DOT_SLASH:`(?!${Bf}{0,1}(?:[${Vu}]|$))`,NO_DOTS_SLASH:`(?!${Bf}{1,2}(?:[${Vu}]|$))`,QMARK_NO_DOT:`[^.${Vu}]`,START_ANCHOR:`(?:^|[${Vu}])`,END_ANCHOR:`(?:[${Vu}]|$)`},U7e={alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};yZ.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:U7e,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,SEP:x7e.sep,extglobChars(t){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${t.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(t){return t===!0?O7e:mZ}}});var bI=_(Pa=>{"use strict";var _7e=Be("path"),H7e=process.platform==="win32",{REGEX_BACKSLASH:j7e,REGEX_REMOVE_BACKSLASH:q7e,REGEX_SPECIAL_CHARS:G7e,REGEX_SPECIAL_CHARS_GLOBAL:Y7e}=xI();Pa.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);Pa.hasRegexChars=t=>G7e.test(t);Pa.isRegexChar=t=>t.length===1&&Pa.hasRegexChars(t);Pa.escapeRegex=t=>t.replace(Y7e,"\\$1");Pa.toPosixSlashes=t=>t.replace(j7e,"/");Pa.removeBackslashes=t=>t.replace(q7e,e=>e==="\\"?"":e);Pa.supportsLookbehinds=()=>{let t=process.version.slice(1).split(".").map(Number);return t.length===3&&t[0]>=9||t[0]===8&&t[1]>=10};Pa.isWindows=t=>t&&typeof t.windows=="boolean"?t.windows:H7e===!0||_7e.sep==="\\";Pa.escapeLast=(t,e,r)=>{let o=t.lastIndexOf(e,r);return o===-1?t:t[o-1]==="\\"?Pa.escapeLast(t,e,o-1):`${t.slice(0,o)}\\${t.slice(o)}`};Pa.removePrefix=(t,e={})=>{let r=t;return r.startsWith("./")&&(r=r.slice(2),e.prefix="./"),r};Pa.wrapOutput=(t,e={},r={})=>{let o=r.contains?"":"^",a=r.contains?"":"$",n=`${o}(?:${t})${a}`;return e.negated===!0&&(n=`(?:^(?!${n}).*$)`),n}});var PZ=_((JQt,DZ)=>{"use strict";var EZ=bI(),{CHAR_ASTERISK:FN,CHAR_AT:W7e,CHAR_BACKWARD_SLASH:kI,CHAR_COMMA:V7e,CHAR_DOT:TN,CHAR_EXCLAMATION_MARK:RN,CHAR_FORWARD_SLASH:vZ,CHAR_LEFT_CURLY_BRACE:NN,CHAR_LEFT_PARENTHESES:LN,CHAR_LEFT_SQUARE_BRACKET:K7e,CHAR_PLUS:J7e,CHAR_QUESTION_MARK:CZ,CHAR_RIGHT_CURLY_BRACE:z7e,CHAR_RIGHT_PARENTHESES:wZ,CHAR_RIGHT_SQUARE_BRACKET:X7e}=xI(),IZ=t=>t===vZ||t===kI,BZ=t=>{t.isPrefix!==!0&&(t.depth=t.isGlobstar?1/0:1)},Z7e=(t,e)=>{let r=e||{},o=t.length-1,a=r.parts===!0||r.scanToEnd===!0,n=[],u=[],A=[],p=t,h=-1,E=0,I=0,v=!1,b=!1,C=!1,T=!1,L=!1,U=!1,J=!1,te=!1,le=!1,pe=!1,Ae=0,ye,ae,we={value:"",depth:0,isGlob:!1},Pe=()=>h>=o,g=()=>p.charCodeAt(h+1),Ee=()=>(ye=ae,p.charCodeAt(++h));for(;h0&&(ce=p.slice(0,E),p=p.slice(E),I-=E),De&&C===!0&&I>0?(De=p.slice(0,I),ne=p.slice(I)):C===!0?(De="",ne=p):De=p,De&&De!==""&&De!=="/"&&De!==p&&IZ(De.charCodeAt(De.length-1))&&(De=De.slice(0,-1)),r.unescape===!0&&(ne&&(ne=EZ.removeBackslashes(ne)),De&&J===!0&&(De=EZ.removeBackslashes(De)));let ee={prefix:ce,input:t,start:E,base:De,glob:ne,isBrace:v,isBracket:b,isGlob:C,isExtglob:T,isGlobstar:L,negated:te,negatedExtglob:le};if(r.tokens===!0&&(ee.maxDepth=0,IZ(ae)||u.push(we),ee.tokens=u),r.parts===!0||r.tokens===!0){let Ie;for(let ke=0;ke{"use strict";var NP=xI(),nl=bI(),{MAX_LENGTH:LP,POSIX_REGEX_SOURCE:$7e,REGEX_NON_SPECIAL_CHARS:eYe,REGEX_SPECIAL_CHARS_BACKREF:tYe,REPLACEMENTS:SZ}=NP,rYe=(t,e)=>{if(typeof e.expandRange=="function")return e.expandRange(...t,e);t.sort();let r=`[${t.join("-")}]`;try{new RegExp(r)}catch{return t.map(a=>nl.escapeRegex(a)).join("..")}return r},Ty=(t,e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`,MN=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");t=SZ[t]||t;let r={...e},o=typeof r.maxLength=="number"?Math.min(LP,r.maxLength):LP,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);let n={type:"bos",value:"",output:r.prepend||""},u=[n],A=r.capture?"":"?:",p=nl.isWindows(e),h=NP.globChars(p),E=NP.extglobChars(h),{DOT_LITERAL:I,PLUS_LITERAL:v,SLASH_LITERAL:b,ONE_CHAR:C,DOTS_SLASH:T,NO_DOT:L,NO_DOT_SLASH:U,NO_DOTS_SLASH:J,QMARK:te,QMARK_NO_DOT:le,STAR:pe,START_ANCHOR:Ae}=h,ye=x=>`(${A}(?:(?!${Ae}${x.dot?T:I}).)*?)`,ae=r.dot?"":L,we=r.dot?te:le,Pe=r.bash===!0?ye(r):pe;r.capture&&(Pe=`(${Pe})`),typeof r.noext=="boolean"&&(r.noextglob=r.noext);let g={input:t,index:-1,start:0,dot:r.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:u};t=nl.removePrefix(t,g),a=t.length;let Ee=[],De=[],ce=[],ne=n,ee,Ie=()=>g.index===a-1,ke=g.peek=(x=1)=>t[g.index+x],ht=g.advance=()=>t[++g.index]||"",H=()=>t.slice(g.index+1),lt=(x="",w=0)=>{g.consumed+=x,g.index+=w},Re=x=>{g.output+=x.output!=null?x.output:x.value,lt(x.value)},Qe=()=>{let x=1;for(;ke()==="!"&&(ke(2)!=="("||ke(3)==="?");)ht(),g.start++,x++;return x%2===0?!1:(g.negated=!0,g.start++,!0)},be=x=>{g[x]++,ce.push(x)},_e=x=>{g[x]--,ce.pop()},Te=x=>{if(ne.type==="globstar"){let w=g.braces>0&&(x.type==="comma"||x.type==="brace"),S=x.extglob===!0||Ee.length&&(x.type==="pipe"||x.type==="paren");x.type!=="slash"&&x.type!=="paren"&&!w&&!S&&(g.output=g.output.slice(0,-ne.output.length),ne.type="star",ne.value="*",ne.output=Pe,g.output+=ne.output)}if(Ee.length&&x.type!=="paren"&&(Ee[Ee.length-1].inner+=x.value),(x.value||x.output)&&Re(x),ne&&ne.type==="text"&&x.type==="text"){ne.value+=x.value,ne.output=(ne.output||"")+x.value;return}x.prev=ne,u.push(x),ne=x},Je=(x,w)=>{let S={...E[w],conditions:1,inner:""};S.prev=ne,S.parens=g.parens,S.output=g.output;let y=(r.capture?"(":"")+S.open;be("parens"),Te({type:x,value:w,output:g.output?"":C}),Te({type:"paren",extglob:!0,value:ht(),output:y}),Ee.push(S)},He=x=>{let w=x.close+(r.capture?")":""),S;if(x.type==="negate"){let y=Pe;if(x.inner&&x.inner.length>1&&x.inner.includes("/")&&(y=ye(r)),(y!==Pe||Ie()||/^\)+$/.test(H()))&&(w=x.close=`)$))${y}`),x.inner.includes("*")&&(S=H())&&/^\.[^\\/.]+$/.test(S)){let F=MN(S,{...e,fastpaths:!1}).output;w=x.close=`)${F})${y})`}x.prev.type==="bos"&&(g.negatedExtglob=!0)}Te({type:"paren",extglob:!0,value:ee,output:w}),_e("parens")};if(r.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(t)){let x=!1,w=t.replace(tYe,(S,y,F,z,X,Z)=>z==="\\"?(x=!0,S):z==="?"?y?y+z+(X?te.repeat(X.length):""):Z===0?we+(X?te.repeat(X.length):""):te.repeat(F.length):z==="."?I.repeat(F.length):z==="*"?y?y+z+(X?Pe:""):Pe:y?S:`\\${S}`);return x===!0&&(r.unescape===!0?w=w.replace(/\\/g,""):w=w.replace(/\\+/g,S=>S.length%2===0?"\\\\":S?"\\":"")),w===t&&r.contains===!0?(g.output=t,g):(g.output=nl.wrapOutput(w,g,e),g)}for(;!Ie();){if(ee=ht(),ee==="\0")continue;if(ee==="\\"){let S=ke();if(S==="/"&&r.bash!==!0||S==="."||S===";")continue;if(!S){ee+="\\",Te({type:"text",value:ee});continue}let y=/^\\+/.exec(H()),F=0;if(y&&y[0].length>2&&(F=y[0].length,g.index+=F,F%2!==0&&(ee+="\\")),r.unescape===!0?ee=ht():ee+=ht(),g.brackets===0){Te({type:"text",value:ee});continue}}if(g.brackets>0&&(ee!=="]"||ne.value==="["||ne.value==="[^")){if(r.posix!==!1&&ee===":"){let S=ne.value.slice(1);if(S.includes("[")&&(ne.posix=!0,S.includes(":"))){let y=ne.value.lastIndexOf("["),F=ne.value.slice(0,y),z=ne.value.slice(y+2),X=$7e[z];if(X){ne.value=F+X,g.backtrack=!0,ht(),!n.output&&u.indexOf(ne)===1&&(n.output=C);continue}}}(ee==="["&&ke()!==":"||ee==="-"&&ke()==="]")&&(ee=`\\${ee}`),ee==="]"&&(ne.value==="["||ne.value==="[^")&&(ee=`\\${ee}`),r.posix===!0&&ee==="!"&&ne.value==="["&&(ee="^"),ne.value+=ee,Re({value:ee});continue}if(g.quotes===1&&ee!=='"'){ee=nl.escapeRegex(ee),ne.value+=ee,Re({value:ee});continue}if(ee==='"'){g.quotes=g.quotes===1?0:1,r.keepQuotes===!0&&Te({type:"text",value:ee});continue}if(ee==="("){be("parens"),Te({type:"paren",value:ee});continue}if(ee===")"){if(g.parens===0&&r.strictBrackets===!0)throw new SyntaxError(Ty("opening","("));let S=Ee[Ee.length-1];if(S&&g.parens===S.parens+1){He(Ee.pop());continue}Te({type:"paren",value:ee,output:g.parens?")":"\\)"}),_e("parens");continue}if(ee==="["){if(r.nobracket===!0||!H().includes("]")){if(r.nobracket!==!0&&r.strictBrackets===!0)throw new SyntaxError(Ty("closing","]"));ee=`\\${ee}`}else be("brackets");Te({type:"bracket",value:ee});continue}if(ee==="]"){if(r.nobracket===!0||ne&&ne.type==="bracket"&&ne.value.length===1){Te({type:"text",value:ee,output:`\\${ee}`});continue}if(g.brackets===0){if(r.strictBrackets===!0)throw new SyntaxError(Ty("opening","["));Te({type:"text",value:ee,output:`\\${ee}`});continue}_e("brackets");let S=ne.value.slice(1);if(ne.posix!==!0&&S[0]==="^"&&!S.includes("/")&&(ee=`/${ee}`),ne.value+=ee,Re({value:ee}),r.literalBrackets===!1||nl.hasRegexChars(S))continue;let y=nl.escapeRegex(ne.value);if(g.output=g.output.slice(0,-ne.value.length),r.literalBrackets===!0){g.output+=y,ne.value=y;continue}ne.value=`(${A}${y}|${ne.value})`,g.output+=ne.value;continue}if(ee==="{"&&r.nobrace!==!0){be("braces");let S={type:"brace",value:ee,output:"(",outputIndex:g.output.length,tokensIndex:g.tokens.length};De.push(S),Te(S);continue}if(ee==="}"){let S=De[De.length-1];if(r.nobrace===!0||!S){Te({type:"text",value:ee,output:ee});continue}let y=")";if(S.dots===!0){let F=u.slice(),z=[];for(let X=F.length-1;X>=0&&(u.pop(),F[X].type!=="brace");X--)F[X].type!=="dots"&&z.unshift(F[X].value);y=rYe(z,r),g.backtrack=!0}if(S.comma!==!0&&S.dots!==!0){let F=g.output.slice(0,S.outputIndex),z=g.tokens.slice(S.tokensIndex);S.value=S.output="\\{",ee=y="\\}",g.output=F;for(let X of z)g.output+=X.output||X.value}Te({type:"brace",value:ee,output:y}),_e("braces"),De.pop();continue}if(ee==="|"){Ee.length>0&&Ee[Ee.length-1].conditions++,Te({type:"text",value:ee});continue}if(ee===","){let S=ee,y=De[De.length-1];y&&ce[ce.length-1]==="braces"&&(y.comma=!0,S="|"),Te({type:"comma",value:ee,output:S});continue}if(ee==="/"){if(ne.type==="dot"&&g.index===g.start+1){g.start=g.index+1,g.consumed="",g.output="",u.pop(),ne=n;continue}Te({type:"slash",value:ee,output:b});continue}if(ee==="."){if(g.braces>0&&ne.type==="dot"){ne.value==="."&&(ne.output=I);let S=De[De.length-1];ne.type="dots",ne.output+=ee,ne.value+=ee,S.dots=!0;continue}if(g.braces+g.parens===0&&ne.type!=="bos"&&ne.type!=="slash"){Te({type:"text",value:ee,output:I});continue}Te({type:"dot",value:ee,output:I});continue}if(ee==="?"){if(!(ne&&ne.value==="(")&&r.noextglob!==!0&&ke()==="("&&ke(2)!=="?"){Je("qmark",ee);continue}if(ne&&ne.type==="paren"){let y=ke(),F=ee;if(y==="<"&&!nl.supportsLookbehinds())throw new Error("Node.js v10 or higher is required for regex lookbehinds");(ne.value==="("&&!/[!=<:]/.test(y)||y==="<"&&!/<([!=]|\w+>)/.test(H()))&&(F=`\\${ee}`),Te({type:"text",value:ee,output:F});continue}if(r.dot!==!0&&(ne.type==="slash"||ne.type==="bos")){Te({type:"qmark",value:ee,output:le});continue}Te({type:"qmark",value:ee,output:te});continue}if(ee==="!"){if(r.noextglob!==!0&&ke()==="("&&(ke(2)!=="?"||!/[!=<:]/.test(ke(3)))){Je("negate",ee);continue}if(r.nonegate!==!0&&g.index===0){Qe();continue}}if(ee==="+"){if(r.noextglob!==!0&&ke()==="("&&ke(2)!=="?"){Je("plus",ee);continue}if(ne&&ne.value==="("||r.regex===!1){Te({type:"plus",value:ee,output:v});continue}if(ne&&(ne.type==="bracket"||ne.type==="paren"||ne.type==="brace")||g.parens>0){Te({type:"plus",value:ee});continue}Te({type:"plus",value:v});continue}if(ee==="@"){if(r.noextglob!==!0&&ke()==="("&&ke(2)!=="?"){Te({type:"at",extglob:!0,value:ee,output:""});continue}Te({type:"text",value:ee});continue}if(ee!=="*"){(ee==="$"||ee==="^")&&(ee=`\\${ee}`);let S=eYe.exec(H());S&&(ee+=S[0],g.index+=S[0].length),Te({type:"text",value:ee});continue}if(ne&&(ne.type==="globstar"||ne.star===!0)){ne.type="star",ne.star=!0,ne.value+=ee,ne.output=Pe,g.backtrack=!0,g.globstar=!0,lt(ee);continue}let x=H();if(r.noextglob!==!0&&/^\([^?]/.test(x)){Je("star",ee);continue}if(ne.type==="star"){if(r.noglobstar===!0){lt(ee);continue}let S=ne.prev,y=S.prev,F=S.type==="slash"||S.type==="bos",z=y&&(y.type==="star"||y.type==="globstar");if(r.bash===!0&&(!F||x[0]&&x[0]!=="/")){Te({type:"star",value:ee,output:""});continue}let X=g.braces>0&&(S.type==="comma"||S.type==="brace"),Z=Ee.length&&(S.type==="pipe"||S.type==="paren");if(!F&&S.type!=="paren"&&!X&&!Z){Te({type:"star",value:ee,output:""});continue}for(;x.slice(0,3)==="/**";){let ie=t[g.index+4];if(ie&&ie!=="/")break;x=x.slice(3),lt("/**",3)}if(S.type==="bos"&&Ie()){ne.type="globstar",ne.value+=ee,ne.output=ye(r),g.output=ne.output,g.globstar=!0,lt(ee);continue}if(S.type==="slash"&&S.prev.type!=="bos"&&!z&&Ie()){g.output=g.output.slice(0,-(S.output+ne.output).length),S.output=`(?:${S.output}`,ne.type="globstar",ne.output=ye(r)+(r.strictSlashes?")":"|$)"),ne.value+=ee,g.globstar=!0,g.output+=S.output+ne.output,lt(ee);continue}if(S.type==="slash"&&S.prev.type!=="bos"&&x[0]==="/"){let ie=x[1]!==void 0?"|$":"";g.output=g.output.slice(0,-(S.output+ne.output).length),S.output=`(?:${S.output}`,ne.type="globstar",ne.output=`${ye(r)}${b}|${b}${ie})`,ne.value+=ee,g.output+=S.output+ne.output,g.globstar=!0,lt(ee+ht()),Te({type:"slash",value:"/",output:""});continue}if(S.type==="bos"&&x[0]==="/"){ne.type="globstar",ne.value+=ee,ne.output=`(?:^|${b}|${ye(r)}${b})`,g.output=ne.output,g.globstar=!0,lt(ee+ht()),Te({type:"slash",value:"/",output:""});continue}g.output=g.output.slice(0,-ne.output.length),ne.type="globstar",ne.output=ye(r),ne.value+=ee,g.output+=ne.output,g.globstar=!0,lt(ee);continue}let w={type:"star",value:ee,output:Pe};if(r.bash===!0){w.output=".*?",(ne.type==="bos"||ne.type==="slash")&&(w.output=ae+w.output),Te(w);continue}if(ne&&(ne.type==="bracket"||ne.type==="paren")&&r.regex===!0){w.output=ee,Te(w);continue}(g.index===g.start||ne.type==="slash"||ne.type==="dot")&&(ne.type==="dot"?(g.output+=U,ne.output+=U):r.dot===!0?(g.output+=J,ne.output+=J):(g.output+=ae,ne.output+=ae),ke()!=="*"&&(g.output+=C,ne.output+=C)),Te(w)}for(;g.brackets>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing","]"));g.output=nl.escapeLast(g.output,"["),_e("brackets")}for(;g.parens>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing",")"));g.output=nl.escapeLast(g.output,"("),_e("parens")}for(;g.braces>0;){if(r.strictBrackets===!0)throw new SyntaxError(Ty("closing","}"));g.output=nl.escapeLast(g.output,"{"),_e("braces")}if(r.strictSlashes!==!0&&(ne.type==="star"||ne.type==="bracket")&&Te({type:"maybe_slash",value:"",output:`${b}?`}),g.backtrack===!0){g.output="";for(let x of g.tokens)g.output+=x.output!=null?x.output:x.value,x.suffix&&(g.output+=x.suffix)}return g};MN.fastpaths=(t,e)=>{let r={...e},o=typeof r.maxLength=="number"?Math.min(LP,r.maxLength):LP,a=t.length;if(a>o)throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${o}`);t=SZ[t]||t;let n=nl.isWindows(e),{DOT_LITERAL:u,SLASH_LITERAL:A,ONE_CHAR:p,DOTS_SLASH:h,NO_DOT:E,NO_DOTS:I,NO_DOTS_SLASH:v,STAR:b,START_ANCHOR:C}=NP.globChars(n),T=r.dot?I:E,L=r.dot?v:E,U=r.capture?"":"?:",J={negated:!1,prefix:""},te=r.bash===!0?".*?":b;r.capture&&(te=`(${te})`);let le=ae=>ae.noglobstar===!0?te:`(${U}(?:(?!${C}${ae.dot?h:u}).)*?)`,pe=ae=>{switch(ae){case"*":return`${T}${p}${te}`;case".*":return`${u}${p}${te}`;case"*.*":return`${T}${te}${u}${p}${te}`;case"*/*":return`${T}${te}${A}${p}${L}${te}`;case"**":return T+le(r);case"**/*":return`(?:${T}${le(r)}${A})?${L}${p}${te}`;case"**/*.*":return`(?:${T}${le(r)}${A})?${L}${te}${u}${p}${te}`;case"**/.*":return`(?:${T}${le(r)}${A})?${u}${p}${te}`;default:{let we=/^(.*?)\.(\w+)$/.exec(ae);if(!we)return;let Pe=pe(we[1]);return Pe?Pe+u+we[2]:void 0}}},Ae=nl.removePrefix(t,J),ye=pe(Ae);return ye&&r.strictSlashes!==!0&&(ye+=`${A}?`),ye};xZ.exports=MN});var QZ=_((XQt,kZ)=>{"use strict";var nYe=Be("path"),iYe=PZ(),ON=bZ(),UN=bI(),sYe=xI(),oYe=t=>t&&typeof t=="object"&&!Array.isArray(t),Oi=(t,e,r=!1)=>{if(Array.isArray(t)){let E=t.map(v=>Oi(v,e,r));return v=>{for(let b of E){let C=b(v);if(C)return C}return!1}}let o=oYe(t)&&t.tokens&&t.input;if(t===""||typeof t!="string"&&!o)throw new TypeError("Expected pattern to be a non-empty string");let a=e||{},n=UN.isWindows(e),u=o?Oi.compileRe(t,e):Oi.makeRe(t,e,!1,!0),A=u.state;delete u.state;let p=()=>!1;if(a.ignore){let E={...e,ignore:null,onMatch:null,onResult:null};p=Oi(a.ignore,E,r)}let h=(E,I=!1)=>{let{isMatch:v,match:b,output:C}=Oi.test(E,u,e,{glob:t,posix:n}),T={glob:t,state:A,regex:u,posix:n,input:E,output:C,match:b,isMatch:v};return typeof a.onResult=="function"&&a.onResult(T),v===!1?(T.isMatch=!1,I?T:!1):p(E)?(typeof a.onIgnore=="function"&&a.onIgnore(T),T.isMatch=!1,I?T:!1):(typeof a.onMatch=="function"&&a.onMatch(T),I?T:!0)};return r&&(h.state=A),h};Oi.test=(t,e,r,{glob:o,posix:a}={})=>{if(typeof t!="string")throw new TypeError("Expected input to be a string");if(t==="")return{isMatch:!1,output:""};let n=r||{},u=n.format||(a?UN.toPosixSlashes:null),A=t===o,p=A&&u?u(t):t;return A===!1&&(p=u?u(t):t,A=p===o),(A===!1||n.capture===!0)&&(n.matchBase===!0||n.basename===!0?A=Oi.matchBase(t,e,r,a):A=e.exec(p)),{isMatch:Boolean(A),match:A,output:p}};Oi.matchBase=(t,e,r,o=UN.isWindows(r))=>(e instanceof RegExp?e:Oi.makeRe(e,r)).test(nYe.basename(t));Oi.isMatch=(t,e,r)=>Oi(e,r)(t);Oi.parse=(t,e)=>Array.isArray(t)?t.map(r=>Oi.parse(r,e)):ON(t,{...e,fastpaths:!1});Oi.scan=(t,e)=>iYe(t,e);Oi.compileRe=(t,e,r=!1,o=!1)=>{if(r===!0)return t.output;let a=e||{},n=a.contains?"":"^",u=a.contains?"":"$",A=`${n}(?:${t.output})${u}`;t&&t.negated===!0&&(A=`^(?!${A}).*$`);let p=Oi.toRegex(A,e);return o===!0&&(p.state=t),p};Oi.makeRe=(t,e={},r=!1,o=!1)=>{if(!t||typeof t!="string")throw new TypeError("Expected a non-empty string");let a={negated:!1,fastpaths:!0};return e.fastpaths!==!1&&(t[0]==="."||t[0]==="*")&&(a.output=ON.fastpaths(t,e)),a.output||(a=ON(t,e)),Oi.compileRe(a,e,r,o)};Oi.toRegex=(t,e)=>{try{let r=e||{};return new RegExp(t,r.flags||(r.nocase?"i":""))}catch(r){if(e&&e.debug===!0)throw r;return/$^/}};Oi.constants=sYe;kZ.exports=Oi});var TZ=_((ZQt,FZ)=>{"use strict";FZ.exports=QZ()});var Zo=_(($Qt,MZ)=>{"use strict";var NZ=Be("util"),LZ=pZ(),Ku=TZ(),_N=bI(),RZ=t=>t===""||t==="./",yi=(t,e,r)=>{e=[].concat(e),t=[].concat(t);let o=new Set,a=new Set,n=new Set,u=0,A=E=>{n.add(E.output),r&&r.onResult&&r.onResult(E)};for(let E=0;E!o.has(E));if(r&&h.length===0){if(r.failglob===!0)throw new Error(`No matches found for "${e.join(", ")}"`);if(r.nonull===!0||r.nullglob===!0)return r.unescape?e.map(E=>E.replace(/\\/g,"")):e}return h};yi.match=yi;yi.matcher=(t,e)=>Ku(t,e);yi.isMatch=(t,e,r)=>Ku(e,r)(t);yi.any=yi.isMatch;yi.not=(t,e,r={})=>{e=[].concat(e).map(String);let o=new Set,a=[],n=A=>{r.onResult&&r.onResult(A),a.push(A.output)},u=new Set(yi(t,e,{...r,onResult:n}));for(let A of a)u.has(A)||o.add(A);return[...o]};yi.contains=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${NZ.inspect(t)}"`);if(Array.isArray(e))return e.some(o=>yi.contains(t,o,r));if(typeof e=="string"){if(RZ(t)||RZ(e))return!1;if(t.includes(e)||t.startsWith("./")&&t.slice(2).includes(e))return!0}return yi.isMatch(t,e,{...r,contains:!0})};yi.matchKeys=(t,e,r)=>{if(!_N.isObject(t))throw new TypeError("Expected the first argument to be an object");let o=yi(Object.keys(t),e,r),a={};for(let n of o)a[n]=t[n];return a};yi.some=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Ku(String(a),r);if(o.some(u=>n(u)))return!0}return!1};yi.every=(t,e,r)=>{let o=[].concat(t);for(let a of[].concat(e)){let n=Ku(String(a),r);if(!o.every(u=>n(u)))return!1}return!0};yi.all=(t,e,r)=>{if(typeof t!="string")throw new TypeError(`Expected a string: "${NZ.inspect(t)}"`);return[].concat(e).every(o=>Ku(o,r)(t))};yi.capture=(t,e,r)=>{let o=_N.isWindows(r),n=Ku.makeRe(String(t),{...r,capture:!0}).exec(o?_N.toPosixSlashes(e):e);if(n)return n.slice(1).map(u=>u===void 0?"":u)};yi.makeRe=(...t)=>Ku.makeRe(...t);yi.scan=(...t)=>Ku.scan(...t);yi.parse=(t,e)=>{let r=[];for(let o of[].concat(t||[]))for(let a of LZ(String(o),e))r.push(Ku.parse(a,e));return r};yi.braces=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return e&&e.nobrace===!0||!/\{.*\}/.test(t)?[t]:LZ(t,e)};yi.braceExpand=(t,e)=>{if(typeof t!="string")throw new TypeError("Expected a string");return yi.braces(t,{...e,expand:!0})};MZ.exports=yi});var UZ=_((eFt,OZ)=>{"use strict";OZ.exports=({onlyFirst:t=!1}={})=>{let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t?void 0:"g")}});var MP=_((tFt,_Z)=>{"use strict";var aYe=UZ();_Z.exports=t=>typeof t=="string"?t.replace(aYe(),""):t});var jZ=_((rFt,HZ)=>{function lYe(){this.__data__=[],this.size=0}HZ.exports=lYe});var Ry=_((nFt,qZ)=>{function cYe(t,e){return t===e||t!==t&&e!==e}qZ.exports=cYe});var QI=_((iFt,GZ)=>{var uYe=Ry();function AYe(t,e){for(var r=t.length;r--;)if(uYe(t[r][0],e))return r;return-1}GZ.exports=AYe});var WZ=_((sFt,YZ)=>{var fYe=QI(),pYe=Array.prototype,hYe=pYe.splice;function gYe(t){var e=this.__data__,r=fYe(e,t);if(r<0)return!1;var o=e.length-1;return r==o?e.pop():hYe.call(e,r,1),--this.size,!0}YZ.exports=gYe});var KZ=_((oFt,VZ)=>{var dYe=QI();function mYe(t){var e=this.__data__,r=dYe(e,t);return r<0?void 0:e[r][1]}VZ.exports=mYe});var zZ=_((aFt,JZ)=>{var yYe=QI();function EYe(t){return yYe(this.__data__,t)>-1}JZ.exports=EYe});var ZZ=_((lFt,XZ)=>{var CYe=QI();function wYe(t,e){var r=this.__data__,o=CYe(r,t);return o<0?(++this.size,r.push([t,e])):r[o][1]=e,this}XZ.exports=wYe});var FI=_((cFt,$Z)=>{var IYe=jZ(),BYe=WZ(),vYe=KZ(),DYe=zZ(),PYe=ZZ();function Ny(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var SYe=FI();function xYe(){this.__data__=new SYe,this.size=0}e$.exports=xYe});var n$=_((AFt,r$)=>{function bYe(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}r$.exports=bYe});var s$=_((fFt,i$)=>{function kYe(t){return this.__data__.get(t)}i$.exports=kYe});var a$=_((pFt,o$)=>{function QYe(t){return this.__data__.has(t)}o$.exports=QYe});var HN=_((hFt,l$)=>{var FYe=typeof global=="object"&&global&&global.Object===Object&&global;l$.exports=FYe});var _l=_((gFt,c$)=>{var TYe=HN(),RYe=typeof self=="object"&&self&&self.Object===Object&&self,NYe=TYe||RYe||Function("return this")();c$.exports=NYe});var fd=_((dFt,u$)=>{var LYe=_l(),MYe=LYe.Symbol;u$.exports=MYe});var h$=_((mFt,p$)=>{var A$=fd(),f$=Object.prototype,OYe=f$.hasOwnProperty,UYe=f$.toString,TI=A$?A$.toStringTag:void 0;function _Ye(t){var e=OYe.call(t,TI),r=t[TI];try{t[TI]=void 0;var o=!0}catch{}var a=UYe.call(t);return o&&(e?t[TI]=r:delete t[TI]),a}p$.exports=_Ye});var d$=_((yFt,g$)=>{var HYe=Object.prototype,jYe=HYe.toString;function qYe(t){return jYe.call(t)}g$.exports=qYe});var pd=_((EFt,E$)=>{var m$=fd(),GYe=h$(),YYe=d$(),WYe="[object Null]",VYe="[object Undefined]",y$=m$?m$.toStringTag:void 0;function KYe(t){return t==null?t===void 0?VYe:WYe:y$&&y$ in Object(t)?GYe(t):YYe(t)}E$.exports=KYe});var il=_((CFt,C$)=>{function JYe(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}C$.exports=JYe});var OP=_((wFt,w$)=>{var zYe=pd(),XYe=il(),ZYe="[object AsyncFunction]",$Ye="[object Function]",eWe="[object GeneratorFunction]",tWe="[object Proxy]";function rWe(t){if(!XYe(t))return!1;var e=zYe(t);return e==$Ye||e==eWe||e==ZYe||e==tWe}w$.exports=rWe});var B$=_((IFt,I$)=>{var nWe=_l(),iWe=nWe["__core-js_shared__"];I$.exports=iWe});var P$=_((BFt,D$)=>{var jN=B$(),v$=function(){var t=/[^.]+$/.exec(jN&&jN.keys&&jN.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function sWe(t){return!!v$&&v$ in t}D$.exports=sWe});var qN=_((vFt,S$)=>{var oWe=Function.prototype,aWe=oWe.toString;function lWe(t){if(t!=null){try{return aWe.call(t)}catch{}try{return t+""}catch{}}return""}S$.exports=lWe});var b$=_((DFt,x$)=>{var cWe=OP(),uWe=P$(),AWe=il(),fWe=qN(),pWe=/[\\^$.*+?()[\]{}|]/g,hWe=/^\[object .+?Constructor\]$/,gWe=Function.prototype,dWe=Object.prototype,mWe=gWe.toString,yWe=dWe.hasOwnProperty,EWe=RegExp("^"+mWe.call(yWe).replace(pWe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function CWe(t){if(!AWe(t)||uWe(t))return!1;var e=cWe(t)?EWe:hWe;return e.test(fWe(t))}x$.exports=CWe});var Q$=_((PFt,k$)=>{function wWe(t,e){return t?.[e]}k$.exports=wWe});var Jp=_((SFt,F$)=>{var IWe=b$(),BWe=Q$();function vWe(t,e){var r=BWe(t,e);return IWe(r)?r:void 0}F$.exports=vWe});var UP=_((xFt,T$)=>{var DWe=Jp(),PWe=_l(),SWe=DWe(PWe,"Map");T$.exports=SWe});var RI=_((bFt,R$)=>{var xWe=Jp(),bWe=xWe(Object,"create");R$.exports=bWe});var M$=_((kFt,L$)=>{var N$=RI();function kWe(){this.__data__=N$?N$(null):{},this.size=0}L$.exports=kWe});var U$=_((QFt,O$)=>{function QWe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}O$.exports=QWe});var H$=_((FFt,_$)=>{var FWe=RI(),TWe="__lodash_hash_undefined__",RWe=Object.prototype,NWe=RWe.hasOwnProperty;function LWe(t){var e=this.__data__;if(FWe){var r=e[t];return r===TWe?void 0:r}return NWe.call(e,t)?e[t]:void 0}_$.exports=LWe});var q$=_((TFt,j$)=>{var MWe=RI(),OWe=Object.prototype,UWe=OWe.hasOwnProperty;function _We(t){var e=this.__data__;return MWe?e[t]!==void 0:UWe.call(e,t)}j$.exports=_We});var Y$=_((RFt,G$)=>{var HWe=RI(),jWe="__lodash_hash_undefined__";function qWe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=HWe&&e===void 0?jWe:e,this}G$.exports=qWe});var V$=_((NFt,W$)=>{var GWe=M$(),YWe=U$(),WWe=H$(),VWe=q$(),KWe=Y$();function Ly(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var K$=V$(),JWe=FI(),zWe=UP();function XWe(){this.size=0,this.__data__={hash:new K$,map:new(zWe||JWe),string:new K$}}J$.exports=XWe});var Z$=_((MFt,X$)=>{function ZWe(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}X$.exports=ZWe});var NI=_((OFt,$$)=>{var $We=Z$();function eVe(t,e){var r=t.__data__;return $We(e)?r[typeof e=="string"?"string":"hash"]:r.map}$$.exports=eVe});var tee=_((UFt,eee)=>{var tVe=NI();function rVe(t){var e=tVe(this,t).delete(t);return this.size-=e?1:0,e}eee.exports=rVe});var nee=_((_Ft,ree)=>{var nVe=NI();function iVe(t){return nVe(this,t).get(t)}ree.exports=iVe});var see=_((HFt,iee)=>{var sVe=NI();function oVe(t){return sVe(this,t).has(t)}iee.exports=oVe});var aee=_((jFt,oee)=>{var aVe=NI();function lVe(t,e){var r=aVe(this,t),o=r.size;return r.set(t,e),this.size+=r.size==o?0:1,this}oee.exports=lVe});var _P=_((qFt,lee)=>{var cVe=z$(),uVe=tee(),AVe=nee(),fVe=see(),pVe=aee();function My(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{var hVe=FI(),gVe=UP(),dVe=_P(),mVe=200;function yVe(t,e){var r=this.__data__;if(r instanceof hVe){var o=r.__data__;if(!gVe||o.length{var EVe=FI(),CVe=t$(),wVe=n$(),IVe=s$(),BVe=a$(),vVe=uee();function Oy(t){var e=this.__data__=new EVe(t);this.size=e.size}Oy.prototype.clear=CVe;Oy.prototype.delete=wVe;Oy.prototype.get=IVe;Oy.prototype.has=BVe;Oy.prototype.set=vVe;Aee.exports=Oy});var pee=_((WFt,fee)=>{var DVe="__lodash_hash_undefined__";function PVe(t){return this.__data__.set(t,DVe),this}fee.exports=PVe});var gee=_((VFt,hee)=>{function SVe(t){return this.__data__.has(t)}hee.exports=SVe});var mee=_((KFt,dee)=>{var xVe=_P(),bVe=pee(),kVe=gee();function jP(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new xVe;++e{function QVe(t,e){for(var r=-1,o=t==null?0:t.length;++r{function FVe(t,e){return t.has(e)}Cee.exports=FVe});var GN=_((XFt,Iee)=>{var TVe=mee(),RVe=Eee(),NVe=wee(),LVe=1,MVe=2;function OVe(t,e,r,o,a,n){var u=r&LVe,A=t.length,p=e.length;if(A!=p&&!(u&&p>A))return!1;var h=n.get(t),E=n.get(e);if(h&&E)return h==e&&E==t;var I=-1,v=!0,b=r&MVe?new TVe:void 0;for(n.set(t,e),n.set(e,t);++I{var UVe=_l(),_Ve=UVe.Uint8Array;Bee.exports=_Ve});var Dee=_(($Ft,vee)=>{function HVe(t){var e=-1,r=Array(t.size);return t.forEach(function(o,a){r[++e]=[a,o]}),r}vee.exports=HVe});var See=_((eTt,Pee)=>{function jVe(t){var e=-1,r=Array(t.size);return t.forEach(function(o){r[++e]=o}),r}Pee.exports=jVe});var Fee=_((tTt,Qee)=>{var xee=fd(),bee=YN(),qVe=Ry(),GVe=GN(),YVe=Dee(),WVe=See(),VVe=1,KVe=2,JVe="[object Boolean]",zVe="[object Date]",XVe="[object Error]",ZVe="[object Map]",$Ve="[object Number]",eKe="[object RegExp]",tKe="[object Set]",rKe="[object String]",nKe="[object Symbol]",iKe="[object ArrayBuffer]",sKe="[object DataView]",kee=xee?xee.prototype:void 0,WN=kee?kee.valueOf:void 0;function oKe(t,e,r,o,a,n,u){switch(r){case sKe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case iKe:return!(t.byteLength!=e.byteLength||!n(new bee(t),new bee(e)));case JVe:case zVe:case $Ve:return qVe(+t,+e);case XVe:return t.name==e.name&&t.message==e.message;case eKe:case rKe:return t==e+"";case ZVe:var A=YVe;case tKe:var p=o&VVe;if(A||(A=WVe),t.size!=e.size&&!p)return!1;var h=u.get(t);if(h)return h==e;o|=KVe,u.set(t,e);var E=GVe(A(t),A(e),o,a,n,u);return u.delete(t),E;case nKe:if(WN)return WN.call(t)==WN.call(e)}return!1}Qee.exports=oKe});var qP=_((rTt,Tee)=>{function aKe(t,e){for(var r=-1,o=e.length,a=t.length;++r{var lKe=Array.isArray;Ree.exports=lKe});var VN=_((iTt,Nee)=>{var cKe=qP(),uKe=Hl();function AKe(t,e,r){var o=e(t);return uKe(t)?o:cKe(o,r(t))}Nee.exports=AKe});var Mee=_((sTt,Lee)=>{function fKe(t,e){for(var r=-1,o=t==null?0:t.length,a=0,n=[];++r{function pKe(){return[]}Oee.exports=pKe});var GP=_((aTt,_ee)=>{var hKe=Mee(),gKe=KN(),dKe=Object.prototype,mKe=dKe.propertyIsEnumerable,Uee=Object.getOwnPropertySymbols,yKe=Uee?function(t){return t==null?[]:(t=Object(t),hKe(Uee(t),function(e){return mKe.call(t,e)}))}:gKe;_ee.exports=yKe});var jee=_((lTt,Hee)=>{function EKe(t,e){for(var r=-1,o=Array(t);++r{function CKe(t){return t!=null&&typeof t=="object"}qee.exports=CKe});var Yee=_((uTt,Gee)=>{var wKe=pd(),IKe=Ju(),BKe="[object Arguments]";function vKe(t){return IKe(t)&&wKe(t)==BKe}Gee.exports=vKe});var LI=_((ATt,Kee)=>{var Wee=Yee(),DKe=Ju(),Vee=Object.prototype,PKe=Vee.hasOwnProperty,SKe=Vee.propertyIsEnumerable,xKe=Wee(function(){return arguments}())?Wee:function(t){return DKe(t)&&PKe.call(t,"callee")&&!SKe.call(t,"callee")};Kee.exports=xKe});var zee=_((fTt,Jee)=>{function bKe(){return!1}Jee.exports=bKe});var OI=_((MI,Uy)=>{var kKe=_l(),QKe=zee(),$ee=typeof MI=="object"&&MI&&!MI.nodeType&&MI,Xee=$ee&&typeof Uy=="object"&&Uy&&!Uy.nodeType&&Uy,FKe=Xee&&Xee.exports===$ee,Zee=FKe?kKe.Buffer:void 0,TKe=Zee?Zee.isBuffer:void 0,RKe=TKe||QKe;Uy.exports=RKe});var UI=_((pTt,ete)=>{var NKe=9007199254740991,LKe=/^(?:0|[1-9]\d*)$/;function MKe(t,e){var r=typeof t;return e=e??NKe,!!e&&(r=="number"||r!="symbol"&&LKe.test(t))&&t>-1&&t%1==0&&t{var OKe=9007199254740991;function UKe(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=OKe}tte.exports=UKe});var nte=_((gTt,rte)=>{var _Ke=pd(),HKe=YP(),jKe=Ju(),qKe="[object Arguments]",GKe="[object Array]",YKe="[object Boolean]",WKe="[object Date]",VKe="[object Error]",KKe="[object Function]",JKe="[object Map]",zKe="[object Number]",XKe="[object Object]",ZKe="[object RegExp]",$Ke="[object Set]",eJe="[object String]",tJe="[object WeakMap]",rJe="[object ArrayBuffer]",nJe="[object DataView]",iJe="[object Float32Array]",sJe="[object Float64Array]",oJe="[object Int8Array]",aJe="[object Int16Array]",lJe="[object Int32Array]",cJe="[object Uint8Array]",uJe="[object Uint8ClampedArray]",AJe="[object Uint16Array]",fJe="[object Uint32Array]",ui={};ui[iJe]=ui[sJe]=ui[oJe]=ui[aJe]=ui[lJe]=ui[cJe]=ui[uJe]=ui[AJe]=ui[fJe]=!0;ui[qKe]=ui[GKe]=ui[rJe]=ui[YKe]=ui[nJe]=ui[WKe]=ui[VKe]=ui[KKe]=ui[JKe]=ui[zKe]=ui[XKe]=ui[ZKe]=ui[$Ke]=ui[eJe]=ui[tJe]=!1;function pJe(t){return jKe(t)&&HKe(t.length)&&!!ui[_Ke(t)]}rte.exports=pJe});var WP=_((dTt,ite)=>{function hJe(t){return function(e){return t(e)}}ite.exports=hJe});var VP=_((_I,_y)=>{var gJe=HN(),ste=typeof _I=="object"&&_I&&!_I.nodeType&&_I,HI=ste&&typeof _y=="object"&&_y&&!_y.nodeType&&_y,dJe=HI&&HI.exports===ste,JN=dJe&&gJe.process,mJe=function(){try{var t=HI&&HI.require&&HI.require("util").types;return t||JN&&JN.binding&&JN.binding("util")}catch{}}();_y.exports=mJe});var KP=_((mTt,lte)=>{var yJe=nte(),EJe=WP(),ote=VP(),ate=ote&&ote.isTypedArray,CJe=ate?EJe(ate):yJe;lte.exports=CJe});var zN=_((yTt,cte)=>{var wJe=jee(),IJe=LI(),BJe=Hl(),vJe=OI(),DJe=UI(),PJe=KP(),SJe=Object.prototype,xJe=SJe.hasOwnProperty;function bJe(t,e){var r=BJe(t),o=!r&&IJe(t),a=!r&&!o&&vJe(t),n=!r&&!o&&!a&&PJe(t),u=r||o||a||n,A=u?wJe(t.length,String):[],p=A.length;for(var h in t)(e||xJe.call(t,h))&&!(u&&(h=="length"||a&&(h=="offset"||h=="parent")||n&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||DJe(h,p)))&&A.push(h);return A}cte.exports=bJe});var JP=_((ETt,ute)=>{var kJe=Object.prototype;function QJe(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||kJe;return t===r}ute.exports=QJe});var XN=_((CTt,Ate)=>{function FJe(t,e){return function(r){return t(e(r))}}Ate.exports=FJe});var pte=_((wTt,fte)=>{var TJe=XN(),RJe=TJe(Object.keys,Object);fte.exports=RJe});var gte=_((ITt,hte)=>{var NJe=JP(),LJe=pte(),MJe=Object.prototype,OJe=MJe.hasOwnProperty;function UJe(t){if(!NJe(t))return LJe(t);var e=[];for(var r in Object(t))OJe.call(t,r)&&r!="constructor"&&e.push(r);return e}hte.exports=UJe});var jI=_((BTt,dte)=>{var _Je=OP(),HJe=YP();function jJe(t){return t!=null&&HJe(t.length)&&!_Je(t)}dte.exports=jJe});var zP=_((vTt,mte)=>{var qJe=zN(),GJe=gte(),YJe=jI();function WJe(t){return YJe(t)?qJe(t):GJe(t)}mte.exports=WJe});var ZN=_((DTt,yte)=>{var VJe=VN(),KJe=GP(),JJe=zP();function zJe(t){return VJe(t,JJe,KJe)}yte.exports=zJe});var wte=_((PTt,Cte)=>{var Ete=ZN(),XJe=1,ZJe=Object.prototype,$Je=ZJe.hasOwnProperty;function eze(t,e,r,o,a,n){var u=r&XJe,A=Ete(t),p=A.length,h=Ete(e),E=h.length;if(p!=E&&!u)return!1;for(var I=p;I--;){var v=A[I];if(!(u?v in e:$Je.call(e,v)))return!1}var b=n.get(t),C=n.get(e);if(b&&C)return b==e&&C==t;var T=!0;n.set(t,e),n.set(e,t);for(var L=u;++I{var tze=Jp(),rze=_l(),nze=tze(rze,"DataView");Ite.exports=nze});var Dte=_((xTt,vte)=>{var ize=Jp(),sze=_l(),oze=ize(sze,"Promise");vte.exports=oze});var Ste=_((bTt,Pte)=>{var aze=Jp(),lze=_l(),cze=aze(lze,"Set");Pte.exports=cze});var bte=_((kTt,xte)=>{var uze=Jp(),Aze=_l(),fze=uze(Aze,"WeakMap");xte.exports=fze});var qI=_((QTt,Lte)=>{var $N=Bte(),eL=UP(),tL=Dte(),rL=Ste(),nL=bte(),Nte=pd(),Hy=qN(),kte="[object Map]",pze="[object Object]",Qte="[object Promise]",Fte="[object Set]",Tte="[object WeakMap]",Rte="[object DataView]",hze=Hy($N),gze=Hy(eL),dze=Hy(tL),mze=Hy(rL),yze=Hy(nL),hd=Nte;($N&&hd(new $N(new ArrayBuffer(1)))!=Rte||eL&&hd(new eL)!=kte||tL&&hd(tL.resolve())!=Qte||rL&&hd(new rL)!=Fte||nL&&hd(new nL)!=Tte)&&(hd=function(t){var e=Nte(t),r=e==pze?t.constructor:void 0,o=r?Hy(r):"";if(o)switch(o){case hze:return Rte;case gze:return kte;case dze:return Qte;case mze:return Fte;case yze:return Tte}return e});Lte.exports=hd});var Gte=_((FTt,qte)=>{var iL=HP(),Eze=GN(),Cze=Fee(),wze=wte(),Mte=qI(),Ote=Hl(),Ute=OI(),Ize=KP(),Bze=1,_te="[object Arguments]",Hte="[object Array]",XP="[object Object]",vze=Object.prototype,jte=vze.hasOwnProperty;function Dze(t,e,r,o,a,n){var u=Ote(t),A=Ote(e),p=u?Hte:Mte(t),h=A?Hte:Mte(e);p=p==_te?XP:p,h=h==_te?XP:h;var E=p==XP,I=h==XP,v=p==h;if(v&&Ute(t)){if(!Ute(e))return!1;u=!0,E=!1}if(v&&!E)return n||(n=new iL),u||Ize(t)?Eze(t,e,r,o,a,n):Cze(t,e,p,r,o,a,n);if(!(r&Bze)){var b=E&&jte.call(t,"__wrapped__"),C=I&&jte.call(e,"__wrapped__");if(b||C){var T=b?t.value():t,L=C?e.value():e;return n||(n=new iL),a(T,L,r,o,n)}}return v?(n||(n=new iL),wze(t,e,r,o,a,n)):!1}qte.exports=Dze});var Kte=_((TTt,Vte)=>{var Pze=Gte(),Yte=Ju();function Wte(t,e,r,o,a){return t===e?!0:t==null||e==null||!Yte(t)&&!Yte(e)?t!==t&&e!==e:Pze(t,e,r,o,Wte,a)}Vte.exports=Wte});var zte=_((RTt,Jte)=>{var Sze=Kte();function xze(t,e){return Sze(t,e)}Jte.exports=xze});var sL=_((NTt,Xte)=>{var bze=Jp(),kze=function(){try{var t=bze(Object,"defineProperty");return t({},"",{}),t}catch{}}();Xte.exports=kze});var ZP=_((LTt,$te)=>{var Zte=sL();function Qze(t,e,r){e=="__proto__"&&Zte?Zte(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}$te.exports=Qze});var oL=_((MTt,ere)=>{var Fze=ZP(),Tze=Ry();function Rze(t,e,r){(r!==void 0&&!Tze(t[e],r)||r===void 0&&!(e in t))&&Fze(t,e,r)}ere.exports=Rze});var rre=_((OTt,tre)=>{function Nze(t){return function(e,r,o){for(var a=-1,n=Object(e),u=o(e),A=u.length;A--;){var p=u[t?A:++a];if(r(n[p],p,n)===!1)break}return e}}tre.exports=Nze});var ire=_((UTt,nre)=>{var Lze=rre(),Mze=Lze();nre.exports=Mze});var aL=_((GI,jy)=>{var Oze=_l(),lre=typeof GI=="object"&&GI&&!GI.nodeType&&GI,sre=lre&&typeof jy=="object"&&jy&&!jy.nodeType&&jy,Uze=sre&&sre.exports===lre,ore=Uze?Oze.Buffer:void 0,are=ore?ore.allocUnsafe:void 0;function _ze(t,e){if(e)return t.slice();var r=t.length,o=are?are(r):new t.constructor(r);return t.copy(o),o}jy.exports=_ze});var $P=_((_Tt,ure)=>{var cre=YN();function Hze(t){var e=new t.constructor(t.byteLength);return new cre(e).set(new cre(t)),e}ure.exports=Hze});var lL=_((HTt,Are)=>{var jze=$P();function qze(t,e){var r=e?jze(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}Are.exports=qze});var eS=_((jTt,fre)=>{function Gze(t,e){var r=-1,o=t.length;for(e||(e=Array(o));++r{var Yze=il(),pre=Object.create,Wze=function(){function t(){}return function(e){if(!Yze(e))return{};if(pre)return pre(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();hre.exports=Wze});var tS=_((GTt,dre)=>{var Vze=XN(),Kze=Vze(Object.getPrototypeOf,Object);dre.exports=Kze});var cL=_((YTt,mre)=>{var Jze=gre(),zze=tS(),Xze=JP();function Zze(t){return typeof t.constructor=="function"&&!Xze(t)?Jze(zze(t)):{}}mre.exports=Zze});var Ere=_((WTt,yre)=>{var $ze=jI(),eXe=Ju();function tXe(t){return eXe(t)&&$ze(t)}yre.exports=tXe});var uL=_((VTt,wre)=>{var rXe=pd(),nXe=tS(),iXe=Ju(),sXe="[object Object]",oXe=Function.prototype,aXe=Object.prototype,Cre=oXe.toString,lXe=aXe.hasOwnProperty,cXe=Cre.call(Object);function uXe(t){if(!iXe(t)||rXe(t)!=sXe)return!1;var e=nXe(t);if(e===null)return!0;var r=lXe.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&Cre.call(r)==cXe}wre.exports=uXe});var AL=_((KTt,Ire)=>{function AXe(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}Ire.exports=AXe});var rS=_((JTt,Bre)=>{var fXe=ZP(),pXe=Ry(),hXe=Object.prototype,gXe=hXe.hasOwnProperty;function dXe(t,e,r){var o=t[e];(!(gXe.call(t,e)&&pXe(o,r))||r===void 0&&!(e in t))&&fXe(t,e,r)}Bre.exports=dXe});var gd=_((zTt,vre)=>{var mXe=rS(),yXe=ZP();function EXe(t,e,r,o){var a=!r;r||(r={});for(var n=-1,u=e.length;++n{function CXe(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}Dre.exports=CXe});var xre=_((ZTt,Sre)=>{var wXe=il(),IXe=JP(),BXe=Pre(),vXe=Object.prototype,DXe=vXe.hasOwnProperty;function PXe(t){if(!wXe(t))return BXe(t);var e=IXe(t),r=[];for(var o in t)o=="constructor"&&(e||!DXe.call(t,o))||r.push(o);return r}Sre.exports=PXe});var qy=_(($Tt,bre)=>{var SXe=zN(),xXe=xre(),bXe=jI();function kXe(t){return bXe(t)?SXe(t,!0):xXe(t)}bre.exports=kXe});var Qre=_((eRt,kre)=>{var QXe=gd(),FXe=qy();function TXe(t){return QXe(t,FXe(t))}kre.exports=TXe});var Mre=_((tRt,Lre)=>{var Fre=oL(),RXe=aL(),NXe=lL(),LXe=eS(),MXe=cL(),Tre=LI(),Rre=Hl(),OXe=Ere(),UXe=OI(),_Xe=OP(),HXe=il(),jXe=uL(),qXe=KP(),Nre=AL(),GXe=Qre();function YXe(t,e,r,o,a,n,u){var A=Nre(t,r),p=Nre(e,r),h=u.get(p);if(h){Fre(t,r,h);return}var E=n?n(A,p,r+"",t,e,u):void 0,I=E===void 0;if(I){var v=Rre(p),b=!v&&UXe(p),C=!v&&!b&&qXe(p);E=p,v||b||C?Rre(A)?E=A:OXe(A)?E=LXe(A):b?(I=!1,E=RXe(p,!0)):C?(I=!1,E=NXe(p,!0)):E=[]:jXe(p)||Tre(p)?(E=A,Tre(A)?E=GXe(A):(!HXe(A)||_Xe(A))&&(E=MXe(p))):I=!1}I&&(u.set(p,E),a(E,p,o,n,u),u.delete(p)),Fre(t,r,E)}Lre.exports=YXe});var _re=_((rRt,Ure)=>{var WXe=HP(),VXe=oL(),KXe=ire(),JXe=Mre(),zXe=il(),XXe=qy(),ZXe=AL();function Ore(t,e,r,o,a){t!==e&&KXe(e,function(n,u){if(a||(a=new WXe),zXe(n))JXe(t,e,u,r,Ore,o,a);else{var A=o?o(ZXe(t,u),n,u+"",t,e,a):void 0;A===void 0&&(A=n),VXe(t,u,A)}},XXe)}Ure.exports=Ore});var fL=_((nRt,Hre)=>{function $Xe(t){return t}Hre.exports=$Xe});var qre=_((iRt,jre)=>{function eZe(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}jre.exports=eZe});var pL=_((sRt,Yre)=>{var tZe=qre(),Gre=Math.max;function rZe(t,e,r){return e=Gre(e===void 0?t.length-1:e,0),function(){for(var o=arguments,a=-1,n=Gre(o.length-e,0),u=Array(n);++a{function nZe(t){return function(){return t}}Wre.exports=nZe});var zre=_((aRt,Jre)=>{var iZe=Vre(),Kre=sL(),sZe=fL(),oZe=Kre?function(t,e){return Kre(t,"toString",{configurable:!0,enumerable:!1,value:iZe(e),writable:!0})}:sZe;Jre.exports=oZe});var Zre=_((lRt,Xre)=>{var aZe=800,lZe=16,cZe=Date.now;function uZe(t){var e=0,r=0;return function(){var o=cZe(),a=lZe-(o-r);if(r=o,a>0){if(++e>=aZe)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}Xre.exports=uZe});var hL=_((cRt,$re)=>{var AZe=zre(),fZe=Zre(),pZe=fZe(AZe);$re.exports=pZe});var tne=_((uRt,ene)=>{var hZe=fL(),gZe=pL(),dZe=hL();function mZe(t,e){return dZe(gZe(t,e,hZe),t+"")}ene.exports=mZe});var nne=_((ARt,rne)=>{var yZe=Ry(),EZe=jI(),CZe=UI(),wZe=il();function IZe(t,e,r){if(!wZe(r))return!1;var o=typeof e;return(o=="number"?EZe(r)&&CZe(e,r.length):o=="string"&&e in r)?yZe(r[e],t):!1}rne.exports=IZe});var sne=_((fRt,ine)=>{var BZe=tne(),vZe=nne();function DZe(t){return BZe(function(e,r){var o=-1,a=r.length,n=a>1?r[a-1]:void 0,u=a>2?r[2]:void 0;for(n=t.length>3&&typeof n=="function"?(a--,n):void 0,u&&vZe(r[0],r[1],u)&&(n=a<3?void 0:n,a=1),e=Object(e);++o{var PZe=_re(),SZe=sne(),xZe=SZe(function(t,e,r,o){PZe(t,e,r,o)});one.exports=xZe});var je={};Kt(je,{AsyncActions:()=>mL,BufferStream:()=>dL,CachingStrategy:()=>Ene,DefaultStream:()=>yL,allSettledSafe:()=>Uc,assertNever:()=>CL,bufferStream:()=>Vy,buildIgnorePattern:()=>NZe,convertMapsToIndexableObjects:()=>iS,dynamicRequire:()=>vf,escapeRegExp:()=>kZe,getArrayWithDefault:()=>Gy,getFactoryWithDefault:()=>ol,getMapWithDefault:()=>Yy,getSetWithDefault:()=>dd,groupBy:()=>BL,isIndexableObject:()=>gL,isPathLike:()=>LZe,isTaggedYarnVersion:()=>bZe,makeDeferred:()=>dne,mapAndFilter:()=>sl,mapAndFind:()=>WI,mergeIntoTarget:()=>wne,overrideType:()=>QZe,parseBoolean:()=>VI,parseInt:()=>Ky,parseOptionalBoolean:()=>Cne,plural:()=>nS,prettifyAsyncErrors:()=>Wy,prettifySyncErrors:()=>wL,releaseAfterUseAsync:()=>TZe,replaceEnvVariables:()=>sS,sortMap:()=>ks,toMerged:()=>MZe,tryParseOptionalBoolean:()=>IL,validateEnum:()=>FZe});function bZe(t){return!!(pne.default.valid(t)&&t.match(/^[^-]+(-rc\.[0-9]+)?$/))}function nS(t,{one:e,more:r,zero:o=r}){return t===0?o:t===1?e:r}function kZe(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function QZe(t){}function CL(t){throw new Error(`Assertion failed: Unexpected object '${t}'`)}function FZe(t,e){let r=Object.values(t);if(!r.includes(e))throw new it(`Invalid value for enumeration: ${JSON.stringify(e)} (expected one of ${r.map(o=>JSON.stringify(o)).join(", ")})`);return e}function sl(t,e){let r=[];for(let o of t){let a=e(o);a!==hne&&r.push(a)}return r}function WI(t,e){for(let r of t){let o=e(r);if(o!==gne)return o}}function gL(t){return typeof t=="object"&&t!==null}async function Uc(t){let e=await Promise.allSettled(t),r=[];for(let o of e){if(o.status==="rejected")throw o.reason;r.push(o.value)}return r}function iS(t){if(t instanceof Map&&(t=Object.fromEntries(t)),gL(t))for(let e of Object.keys(t)){let r=t[e];gL(r)&&(t[e]=iS(r))}return t}function ol(t,e,r){let o=t.get(e);return typeof o>"u"&&t.set(e,o=r()),o}function Gy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=[]),r}function dd(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Set),r}function Yy(t,e){let r=t.get(e);return typeof r>"u"&&t.set(e,r=new Map),r}async function TZe(t,e){if(e==null)return await t();try{return await t()}finally{await e()}}async function Wy(t,e){try{return await t()}catch(r){throw r.message=e(r.message),r}}function wL(t,e){try{return t()}catch(r){throw r.message=e(r.message),r}}async function Vy(t){return await new Promise((e,r)=>{let o=[];t.on("error",a=>{r(a)}),t.on("data",a=>{o.push(a)}),t.on("end",()=>{e(Buffer.concat(o))})})}function dne(){let t,e;return{promise:new Promise((o,a)=>{t=o,e=a}),resolve:t,reject:e}}function mne(t){return YI(ue.fromPortablePath(t))}function yne(path){let physicalPath=ue.fromPortablePath(path),currentCacheEntry=YI.cache[physicalPath];delete YI.cache[physicalPath];let result;try{result=mne(physicalPath);let freshCacheEntry=YI.cache[physicalPath],dynamicModule=eval("module"),freshCacheIndex=dynamicModule.children.indexOf(freshCacheEntry);freshCacheIndex!==-1&&dynamicModule.children.splice(freshCacheIndex,1)}finally{YI.cache[physicalPath]=currentCacheEntry}return result}function RZe(t){let e=lne.get(t),r=oe.statSync(t);if(e?.mtime===r.mtimeMs)return e.instance;let o=yne(t);return lne.set(t,{mtime:r.mtimeMs,instance:o}),o}function vf(t,{cachingStrategy:e=2}={}){switch(e){case 0:return yne(t);case 1:return RZe(t);case 2:return mne(t);default:throw new Error("Unsupported caching strategy")}}function ks(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function NZe(t){return t.length===0?null:t.map(e=>`(${Ane.default.makeRe(e,{windows:!1,dot:!0}).source})`).join("|")}function sS(t,{env:e}){let r=/\${(?[\d\w_]+)(?:)?(?:-(?[^}]*))?}/g;return t.replace(r,(...o)=>{let{variableName:a,colon:n,fallback:u}=o[o.length-1],A=Object.hasOwn(e,a),p=e[a];if(p||A&&!n)return p;if(u!=null)return u;throw new it(`Environment variable not found (${a})`)})}function VI(t){switch(t){case"true":case"1":case 1:case!0:return!0;case"false":case"0":case 0:case!1:return!1;default:throw new Error(`Couldn't parse "${t}" as a boolean`)}}function Cne(t){return typeof t>"u"?t:VI(t)}function IL(t){try{return Cne(t)}catch{return null}}function LZe(t){return!!(ue.isAbsolute(t)||t.match(/^(\.{1,2}|~)\//))}function wne(t,...e){let r=u=>({value:u}),o=r(t),a=e.map(u=>r(u)),{value:n}=(0,une.default)(o,...a,(u,A)=>{if(Array.isArray(u)&&Array.isArray(A)){for(let p of A)u.find(h=>(0,cne.default)(h,p))||u.push(p);return u}});return n}function MZe(...t){return wne({},...t)}function BL(t,e){let r=Object.create(null);for(let o of t){let a=o[e];r[a]??=[],r[a].push(o)}return r}function Ky(t){return typeof t=="string"?Number.parseInt(t,10):t}var cne,une,Ane,fne,pne,EL,hne,gne,dL,mL,yL,YI,lne,Ene,jl=Et(()=>{Pt();qt();cne=$e(zte()),une=$e(ane()),Ane=$e(Zo()),fne=$e(nd()),pne=$e(zn()),EL=Be("stream");hne=Symbol();sl.skip=hne;gne=Symbol();WI.skip=gne;dL=class extends EL.Transform{constructor(){super(...arguments);this.chunks=[]}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: BufferStream only accept buffers");this.chunks.push(r),a(null,null)}_flush(r){r(null,Buffer.concat(this.chunks))}};mL=class{constructor(e){this.deferred=new Map;this.promises=new Map;this.limit=(0,fne.default)(e)}set(e,r){let o=this.deferred.get(e);typeof o>"u"&&this.deferred.set(e,o=dne());let a=this.limit(()=>r());return this.promises.set(e,a),a.then(()=>{this.promises.get(e)===a&&o.resolve()},n=>{this.promises.get(e)===a&&o.reject(n)}),o.promise}reduce(e,r){let o=this.promises.get(e)??Promise.resolve();this.set(e,()=>r(o))}async wait(){await Promise.all(this.promises.values())}},yL=class extends EL.Transform{constructor(r=Buffer.alloc(0)){super();this.active=!0;this.ifEmpty=r}_transform(r,o,a){if(o!=="buffer"||!Buffer.isBuffer(r))throw new Error("Assertion failed: DefaultStream only accept buffers");this.active=!1,a(null,r)}_flush(r){this.active&&this.ifEmpty.length>0?r(null,this.ifEmpty):r(null)}},YI=eval("require");lne=new Map;Ene=(o=>(o[o.NoCache=0]="NoCache",o[o.FsTime=1]="FsTime",o[o.Node=2]="Node",o))(Ene||{})});var Jy,vL,DL,Ine=Et(()=>{Jy=(r=>(r.HARD="HARD",r.SOFT="SOFT",r))(Jy||{}),vL=(o=>(o.Dependency="Dependency",o.PeerDependency="PeerDependency",o.PeerDependencyMeta="PeerDependencyMeta",o))(vL||{}),DL=(o=>(o.Inactive="inactive",o.Redundant="redundant",o.Active="active",o))(DL||{})});var de={};Kt(de,{LogLevel:()=>uS,Style:()=>aS,Type:()=>yt,addLogFilterSupport:()=>zI,applyColor:()=>Ks,applyHyperlink:()=>Xy,applyStyle:()=>md,json:()=>yd,jsonOrPretty:()=>_Ze,mark:()=>kL,pretty:()=>Ot,prettyField:()=>zu,prettyList:()=>bL,prettyTruncatedLocatorList:()=>cS,stripAnsi:()=>zy.default,supportsColor:()=>lS,supportsHyperlinks:()=>xL,tuple:()=>_c});function Bne(t){let e=["KiB","MiB","GiB","TiB"],r=e.length;for(;r>1&&t<1024**r;)r-=1;let o=1024**r;return`${Math.floor(t*100/o)/100} ${e[r-1]}`}function _c(t,e){return[e,t]}function md(t,e,r){return t.get("enableColors")&&r&2&&(e=JI.default.bold(e)),e}function Ks(t,e,r){if(!t.get("enableColors"))return e;let o=OZe.get(r);if(o===null)return e;let a=typeof o>"u"?r:SL.level>=3?o[0]:o[1],n=typeof a=="number"?PL.ansi256(a):a.startsWith("#")?PL.hex(a):PL[a];if(typeof n!="function")throw new Error(`Invalid format type ${a}`);return n(e)}function Xy(t,e,r){return t.get("enableHyperlinks")?UZe?`\x1B]8;;${r}\x1B\\${e}\x1B]8;;\x1B\\`:`\x1B]8;;${r}\x07${e}\x1B]8;;\x07`:e}function Ot(t,e,r){if(e===null)return Ks(t,"null",yt.NULL);if(Object.hasOwn(oS,r))return oS[r].pretty(t,e);if(typeof e!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof e}`);return Ks(t,e,r)}function bL(t,e,r,{separator:o=", "}={}){return[...e].map(a=>Ot(t,a,r)).join(o)}function yd(t,e){if(t===null)return null;if(Object.hasOwn(oS,e))return oS[e].json(t);if(typeof t!="string")throw new Error(`Assertion failed: Expected the value to be a string, got ${typeof t}`);return t}function _Ze(t,e,[r,o]){return t?yd(r,o):Ot(e,r,o)}function kL(t){return{Check:Ks(t,"\u2713","green"),Cross:Ks(t,"\u2718","red"),Question:Ks(t,"?","cyan")}}function zu(t,{label:e,value:[r,o]}){return`${Ot(t,e,yt.CODE)}: ${Ot(t,r,o)}`}function cS(t,e,r){let o=[],a=[...e],n=r;for(;a.length>0;){let h=a[0],E=`${jr(t,h)}, `,I=QL(h).length+2;if(o.length>0&&nh).join("").slice(0,-2);let u="X".repeat(a.length.toString().length),A=`and ${u} more.`,p=a.length;for(;o.length>1&&nh).join(""),A.replace(u,Ot(t,p,yt.NUMBER))].join("")}function zI(t,{configuration:e}){let r=e.get("logFilters"),o=new Map,a=new Map,n=[];for(let I of r){let v=I.get("level");if(typeof v>"u")continue;let b=I.get("code");typeof b<"u"&&o.set(b,v);let C=I.get("text");typeof C<"u"&&a.set(C,v);let T=I.get("pattern");typeof T<"u"&&n.push([vne.default.matcher(T,{contains:!0}),v])}n.reverse();let u=(I,v,b)=>{if(I===null||I===0)return b;let C=a.size>0||n.length>0?(0,zy.default)(v):v;if(a.size>0){let T=a.get(C);if(typeof T<"u")return T??b}if(n.length>0){for(let[T,L]of n)if(T(C))return L??b}if(o.size>0){let T=o.get(Wu(I));if(typeof T<"u")return T??b}return b},A=t.reportInfo,p=t.reportWarning,h=t.reportError,E=function(I,v,b,C){switch(u(v,b,C)){case"info":A.call(I,v,b);break;case"warning":p.call(I,v??0,b);break;case"error":h.call(I,v??0,b);break}};t.reportInfo=function(...I){return E(this,...I,"info")},t.reportWarning=function(...I){return E(this,...I,"warning")},t.reportError=function(...I){return E(this,...I,"error")}}var JI,KI,vne,zy,Dne,yt,aS,SL,lS,xL,PL,OZe,So,oS,UZe,uS,ql=Et(()=>{Pt();JI=$e(vN()),KI=$e(ed());qt();vne=$e(Zo()),zy=$e(MP()),Dne=Be("util");pP();xo();yt={NO_HINT:"NO_HINT",ID:"ID",NULL:"NULL",SCOPE:"SCOPE",NAME:"NAME",RANGE:"RANGE",REFERENCE:"REFERENCE",NUMBER:"NUMBER",PATH:"PATH",URL:"URL",ADDED:"ADDED",REMOVED:"REMOVED",CODE:"CODE",INSPECT:"INSPECT",DURATION:"DURATION",SIZE:"SIZE",SIZE_DIFF:"SIZE_DIFF",IDENT:"IDENT",DESCRIPTOR:"DESCRIPTOR",LOCATOR:"LOCATOR",RESOLUTION:"RESOLUTION",DEPENDENT:"DEPENDENT",PACKAGE_EXTENSION:"PACKAGE_EXTENSION",SETTING:"SETTING",MARKDOWN:"MARKDOWN",MARKDOWN_INLINE:"MARKDOWN_INLINE"},aS=(e=>(e[e.BOLD=2]="BOLD",e))(aS||{}),SL=KI.default.GITHUB_ACTIONS?{level:2}:JI.default.supportsColor?{level:JI.default.supportsColor.level}:{level:0},lS=SL.level!==0,xL=lS&&!KI.default.GITHUB_ACTIONS&&!KI.default.CIRCLE&&!KI.default.GITLAB,PL=new JI.default.Instance(SL),OZe=new Map([[yt.NO_HINT,null],[yt.NULL,["#a853b5",129]],[yt.SCOPE,["#d75f00",166]],[yt.NAME,["#d7875f",173]],[yt.RANGE,["#00afaf",37]],[yt.REFERENCE,["#87afff",111]],[yt.NUMBER,["#ffd700",220]],[yt.PATH,["#d75fd7",170]],[yt.URL,["#d75fd7",170]],[yt.ADDED,["#5faf00",70]],[yt.REMOVED,["#ff3131",160]],[yt.CODE,["#87afff",111]],[yt.SIZE,["#ffd700",220]]]),So=t=>t;oS={[yt.ID]:So({pretty:(t,e)=>typeof e=="number"?Ks(t,`${e}`,yt.NUMBER):Ks(t,e,yt.CODE),json:t=>t}),[yt.INSPECT]:So({pretty:(t,e)=>(0,Dne.inspect)(e,{depth:1/0,colors:t.get("enableColors"),compact:!0,breakLength:1/0}),json:t=>t}),[yt.NUMBER]:So({pretty:(t,e)=>Ks(t,`${e}`,yt.NUMBER),json:t=>t}),[yt.IDENT]:So({pretty:(t,e)=>cs(t,e),json:t=>fn(t)}),[yt.LOCATOR]:So({pretty:(t,e)=>jr(t,e),json:t=>xa(t)}),[yt.DESCRIPTOR]:So({pretty:(t,e)=>qn(t,e),json:t=>Sa(t)}),[yt.RESOLUTION]:So({pretty:(t,{descriptor:e,locator:r})=>XI(t,e,r),json:({descriptor:t,locator:e})=>({descriptor:Sa(t),locator:e!==null?xa(e):null})}),[yt.DEPENDENT]:So({pretty:(t,{locator:e,descriptor:r})=>FL(t,e,r),json:({locator:t,descriptor:e})=>({locator:xa(t),descriptor:Sa(e)})}),[yt.PACKAGE_EXTENSION]:So({pretty:(t,e)=>{switch(e.type){case"Dependency":return`${cs(t,e.parentDescriptor)} \u27A4 ${Ks(t,"dependencies",yt.CODE)} \u27A4 ${cs(t,e.descriptor)}`;case"PeerDependency":return`${cs(t,e.parentDescriptor)} \u27A4 ${Ks(t,"peerDependencies",yt.CODE)} \u27A4 ${cs(t,e.descriptor)}`;case"PeerDependencyMeta":return`${cs(t,e.parentDescriptor)} \u27A4 ${Ks(t,"peerDependenciesMeta",yt.CODE)} \u27A4 ${cs(t,Js(e.selector))} \u27A4 ${Ks(t,e.key,yt.CODE)}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${e.type}`)}},json:t=>{switch(t.type){case"Dependency":return`${fn(t.parentDescriptor)} > ${fn(t.descriptor)}`;case"PeerDependency":return`${fn(t.parentDescriptor)} >> ${fn(t.descriptor)}`;case"PeerDependencyMeta":return`${fn(t.parentDescriptor)} >> ${t.selector} / ${t.key}`;default:throw new Error(`Assertion failed: Unsupported package extension type: ${t.type}`)}}}),[yt.SETTING]:So({pretty:(t,e)=>(t.get(e),Xy(t,Ks(t,e,yt.CODE),`https://yarnpkg.com/configuration/yarnrc#${e}`)),json:t=>t}),[yt.DURATION]:So({pretty:(t,e)=>{if(e>1e3*60){let r=Math.floor(e/1e3/60),o=Math.ceil((e-r*60*1e3)/1e3);return o===0?`${r}m`:`${r}m ${o}s`}else{let r=Math.floor(e/1e3),o=e-r*1e3;return o===0?`${r}s`:`${r}s ${o}ms`}},json:t=>t}),[yt.SIZE]:So({pretty:(t,e)=>Ks(t,Bne(e),yt.NUMBER),json:t=>t}),[yt.SIZE_DIFF]:So({pretty:(t,e)=>{let r=e>=0?"+":"-",o=r==="+"?yt.REMOVED:yt.ADDED;return Ks(t,`${r} ${Bne(Math.max(Math.abs(e),1))}`,o)},json:t=>t}),[yt.PATH]:So({pretty:(t,e)=>Ks(t,ue.fromPortablePath(e),yt.PATH),json:t=>ue.fromPortablePath(t)}),[yt.MARKDOWN]:So({pretty:(t,{text:e,format:r,paragraphs:o})=>Do(e,{format:r,paragraphs:o}),json:({text:t})=>t}),[yt.MARKDOWN_INLINE]:So({pretty:(t,e)=>(e=e.replace(/(`+)((?:.|[\n])*?)\1/g,(r,o,a)=>Ot(t,o+a+o,yt.CODE)),e=e.replace(/(\*\*)((?:.|[\n])*?)\1/g,(r,o,a)=>md(t,a,2)),e),json:t=>t})};UZe=!!process.env.KONSOLE_VERSION;uS=(a=>(a.Error="error",a.Warning="warning",a.Info="info",a.Discard="discard",a))(uS||{})});var Pne=_(Zy=>{"use strict";Object.defineProperty(Zy,"__esModule",{value:!0});Zy.splitWhen=Zy.flatten=void 0;function HZe(t){return t.reduce((e,r)=>[].concat(e,r),[])}Zy.flatten=HZe;function jZe(t,e){let r=[[]],o=0;for(let a of t)e(a)?(o++,r[o]=[]):r[o].push(a);return r}Zy.splitWhen=jZe});var Sne=_(AS=>{"use strict";Object.defineProperty(AS,"__esModule",{value:!0});AS.isEnoentCodeError=void 0;function qZe(t){return t.code==="ENOENT"}AS.isEnoentCodeError=qZe});var xne=_(fS=>{"use strict";Object.defineProperty(fS,"__esModule",{value:!0});fS.createDirentFromStats=void 0;var TL=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function GZe(t,e){return new TL(t,e)}fS.createDirentFromStats=GZe});var bne=_(Xu=>{"use strict";Object.defineProperty(Xu,"__esModule",{value:!0});Xu.removeLeadingDotSegment=Xu.escape=Xu.makeAbsolute=Xu.unixify=void 0;var YZe=Be("path"),WZe=2,VZe=/(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;function KZe(t){return t.replace(/\\/g,"/")}Xu.unixify=KZe;function JZe(t,e){return YZe.resolve(t,e)}Xu.makeAbsolute=JZe;function zZe(t){return t.replace(VZe,"\\$2")}Xu.escape=zZe;function XZe(t){if(t.charAt(0)==="."){let e=t.charAt(1);if(e==="/"||e==="\\")return t.slice(WZe)}return t}Xu.removeLeadingDotSegment=XZe});var Qne=_((xRt,kne)=>{kne.exports=function(e){if(typeof e!="string"||e==="")return!1;for(var r;r=/(\\).|([@?!+*]\(.*\))/g.exec(e);){if(r[2])return!0;e=e.slice(r.index+r[0].length)}return!1}});var Rne=_((bRt,Tne)=>{var ZZe=Qne(),Fne={"{":"}","(":")","[":"]"},$Ze=function(t){if(t[0]==="!")return!0;for(var e=0,r=-2,o=-2,a=-2,n=-2,u=-2;ee&&(u===-1||u>o||(u=t.indexOf("\\",e),u===-1||u>o)))||a!==-1&&t[e]==="{"&&t[e+1]!=="}"&&(a=t.indexOf("}",e),a>e&&(u=t.indexOf("\\",e),u===-1||u>a))||n!==-1&&t[e]==="("&&t[e+1]==="?"&&/[:!=]/.test(t[e+2])&&t[e+3]!==")"&&(n=t.indexOf(")",e),n>e&&(u=t.indexOf("\\",e),u===-1||u>n))||r!==-1&&t[e]==="("&&t[e+1]!=="|"&&(rr&&(u=t.indexOf("\\",r),u===-1||u>n))))return!0;if(t[e]==="\\"){var A=t[e+1];e+=2;var p=Fne[A];if(p){var h=t.indexOf(p,e);h!==-1&&(e=h+1)}if(t[e]==="!")return!0}else e++}return!1},e$e=function(t){if(t[0]==="!")return!0;for(var e=0;e{"use strict";var t$e=Rne(),r$e=Be("path").posix.dirname,n$e=Be("os").platform()==="win32",RL="/",i$e=/\\/g,s$e=/[\{\[].*[\}\]]$/,o$e=/(^|[^\\])([\{\[]|\([^\)]+$)/,a$e=/\\([\!\*\?\|\[\]\(\)\{\}])/g;Nne.exports=function(e,r){var o=Object.assign({flipBackslashes:!0},r);o.flipBackslashes&&n$e&&e.indexOf(RL)<0&&(e=e.replace(i$e,RL)),s$e.test(e)&&(e+=RL),e+="a";do e=r$e(e);while(t$e(e)||o$e.test(e));return e.replace(a$e,"$1")}});var Gne=_(qr=>{"use strict";Object.defineProperty(qr,"__esModule",{value:!0});qr.matchAny=qr.convertPatternsToRe=qr.makeRe=qr.getPatternParts=qr.expandBraceExpansion=qr.expandPatternsWithBraceExpansion=qr.isAffectDepthOfReadingPattern=qr.endsWithSlashGlobStar=qr.hasGlobStar=qr.getBaseDirectory=qr.isPatternRelatedToParentDirectory=qr.getPatternsOutsideCurrentDirectory=qr.getPatternsInsideCurrentDirectory=qr.getPositivePatterns=qr.getNegativePatterns=qr.isPositivePattern=qr.isNegativePattern=qr.convertToNegativePattern=qr.convertToPositivePattern=qr.isDynamicPattern=qr.isStaticPattern=void 0;var l$e=Be("path"),c$e=Lne(),NL=Zo(),Mne="**",u$e="\\",A$e=/[*?]|^!/,f$e=/\[[^[]*]/,p$e=/(?:^|[^!*+?@])\([^(]*\|[^|]*\)/,h$e=/[!*+?@]\([^(]*\)/,g$e=/,|\.\./;function One(t,e={}){return!Une(t,e)}qr.isStaticPattern=One;function Une(t,e={}){return t===""?!1:!!(e.caseSensitiveMatch===!1||t.includes(u$e)||A$e.test(t)||f$e.test(t)||p$e.test(t)||e.extglob!==!1&&h$e.test(t)||e.braceExpansion!==!1&&d$e(t))}qr.isDynamicPattern=Une;function d$e(t){let e=t.indexOf("{");if(e===-1)return!1;let r=t.indexOf("}",e+1);if(r===-1)return!1;let o=t.slice(e,r);return g$e.test(o)}function m$e(t){return pS(t)?t.slice(1):t}qr.convertToPositivePattern=m$e;function y$e(t){return"!"+t}qr.convertToNegativePattern=y$e;function pS(t){return t.startsWith("!")&&t[1]!=="("}qr.isNegativePattern=pS;function _ne(t){return!pS(t)}qr.isPositivePattern=_ne;function E$e(t){return t.filter(pS)}qr.getNegativePatterns=E$e;function C$e(t){return t.filter(_ne)}qr.getPositivePatterns=C$e;function w$e(t){return t.filter(e=>!LL(e))}qr.getPatternsInsideCurrentDirectory=w$e;function I$e(t){return t.filter(LL)}qr.getPatternsOutsideCurrentDirectory=I$e;function LL(t){return t.startsWith("..")||t.startsWith("./..")}qr.isPatternRelatedToParentDirectory=LL;function B$e(t){return c$e(t,{flipBackslashes:!1})}qr.getBaseDirectory=B$e;function v$e(t){return t.includes(Mne)}qr.hasGlobStar=v$e;function Hne(t){return t.endsWith("/"+Mne)}qr.endsWithSlashGlobStar=Hne;function D$e(t){let e=l$e.basename(t);return Hne(t)||One(e)}qr.isAffectDepthOfReadingPattern=D$e;function P$e(t){return t.reduce((e,r)=>e.concat(jne(r)),[])}qr.expandPatternsWithBraceExpansion=P$e;function jne(t){return NL.braces(t,{expand:!0,nodupes:!0})}qr.expandBraceExpansion=jne;function S$e(t,e){let{parts:r}=NL.scan(t,Object.assign(Object.assign({},e),{parts:!0}));return r.length===0&&(r=[t]),r[0].startsWith("/")&&(r[0]=r[0].slice(1),r.unshift("")),r}qr.getPatternParts=S$e;function qne(t,e){return NL.makeRe(t,e)}qr.makeRe=qne;function x$e(t,e){return t.map(r=>qne(r,e))}qr.convertPatternsToRe=x$e;function b$e(t,e){return e.some(r=>r.test(t))}qr.matchAny=b$e});var Kne=_((FRt,Vne)=>{"use strict";var k$e=Be("stream"),Yne=k$e.PassThrough,Q$e=Array.prototype.slice;Vne.exports=F$e;function F$e(){let t=[],e=Q$e.call(arguments),r=!1,o=e[e.length-1];o&&!Array.isArray(o)&&o.pipe==null?e.pop():o={};let a=o.end!==!1,n=o.pipeError===!0;o.objectMode==null&&(o.objectMode=!0),o.highWaterMark==null&&(o.highWaterMark=64*1024);let u=Yne(o);function A(){for(let E=0,I=arguments.length;E0||(r=!1,p())}function b(C){function T(){C.removeListener("merge2UnpipeEnd",T),C.removeListener("end",T),n&&C.removeListener("error",L),v()}function L(U){u.emit("error",U)}if(C._readableState.endEmitted)return v();C.on("merge2UnpipeEnd",T),C.on("end",T),n&&C.on("error",L),C.pipe(u,{end:!1}),C.resume()}for(let C=0;C{"use strict";Object.defineProperty(hS,"__esModule",{value:!0});hS.merge=void 0;var T$e=Kne();function R$e(t){let e=T$e(t);return t.forEach(r=>{r.once("error",o=>e.emit("error",o))}),e.once("close",()=>Jne(t)),e.once("end",()=>Jne(t)),e}hS.merge=R$e;function Jne(t){t.forEach(e=>e.emit("close"))}});var Xne=_($y=>{"use strict";Object.defineProperty($y,"__esModule",{value:!0});$y.isEmpty=$y.isString=void 0;function N$e(t){return typeof t=="string"}$y.isString=N$e;function L$e(t){return t===""}$y.isEmpty=L$e});var Df=_(bo=>{"use strict";Object.defineProperty(bo,"__esModule",{value:!0});bo.string=bo.stream=bo.pattern=bo.path=bo.fs=bo.errno=bo.array=void 0;var M$e=Pne();bo.array=M$e;var O$e=Sne();bo.errno=O$e;var U$e=xne();bo.fs=U$e;var _$e=bne();bo.path=_$e;var H$e=Gne();bo.pattern=H$e;var j$e=zne();bo.stream=j$e;var q$e=Xne();bo.string=q$e});var eie=_(ko=>{"use strict";Object.defineProperty(ko,"__esModule",{value:!0});ko.convertPatternGroupToTask=ko.convertPatternGroupsToTasks=ko.groupPatternsByBaseDirectory=ko.getNegativePatternsAsPositive=ko.getPositivePatterns=ko.convertPatternsToTasks=ko.generate=void 0;var Pf=Df();function G$e(t,e){let r=Zne(t),o=$ne(t,e.ignore),a=r.filter(p=>Pf.pattern.isStaticPattern(p,e)),n=r.filter(p=>Pf.pattern.isDynamicPattern(p,e)),u=ML(a,o,!1),A=ML(n,o,!0);return u.concat(A)}ko.generate=G$e;function ML(t,e,r){let o=[],a=Pf.pattern.getPatternsOutsideCurrentDirectory(t),n=Pf.pattern.getPatternsInsideCurrentDirectory(t),u=OL(a),A=OL(n);return o.push(...UL(u,e,r)),"."in A?o.push(_L(".",n,e,r)):o.push(...UL(A,e,r)),o}ko.convertPatternsToTasks=ML;function Zne(t){return Pf.pattern.getPositivePatterns(t)}ko.getPositivePatterns=Zne;function $ne(t,e){return Pf.pattern.getNegativePatterns(t).concat(e).map(Pf.pattern.convertToPositivePattern)}ko.getNegativePatternsAsPositive=$ne;function OL(t){let e={};return t.reduce((r,o)=>{let a=Pf.pattern.getBaseDirectory(o);return a in r?r[a].push(o):r[a]=[o],r},e)}ko.groupPatternsByBaseDirectory=OL;function UL(t,e,r){return Object.keys(t).map(o=>_L(o,t[o],e,r))}ko.convertPatternGroupsToTasks=UL;function _L(t,e,r,o){return{dynamic:o,positive:e,negative:r,base:t,patterns:[].concat(e,r.map(Pf.pattern.convertToNegativePattern))}}ko.convertPatternGroupToTask=_L});var rie=_(eE=>{"use strict";Object.defineProperty(eE,"__esModule",{value:!0});eE.removeDuplicateSlashes=eE.transform=void 0;var Y$e=/(?!^)\/{2,}/g;function W$e(t){return t.map(e=>tie(e))}eE.transform=W$e;function tie(t){return t.replace(Y$e,"/")}eE.removeDuplicateSlashes=tie});var iie=_(gS=>{"use strict";Object.defineProperty(gS,"__esModule",{value:!0});gS.read=void 0;function V$e(t,e,r){e.fs.lstat(t,(o,a)=>{if(o!==null){nie(r,o);return}if(!a.isSymbolicLink()||!e.followSymbolicLink){HL(r,a);return}e.fs.stat(t,(n,u)=>{if(n!==null){if(e.throwErrorOnBrokenSymbolicLink){nie(r,n);return}HL(r,a);return}e.markSymbolicLink&&(u.isSymbolicLink=()=>!0),HL(r,u)})})}gS.read=V$e;function nie(t,e){t(e)}function HL(t,e){t(null,e)}});var sie=_(dS=>{"use strict";Object.defineProperty(dS,"__esModule",{value:!0});dS.read=void 0;function K$e(t,e){let r=e.fs.lstatSync(t);if(!r.isSymbolicLink()||!e.followSymbolicLink)return r;try{let o=e.fs.statSync(t);return e.markSymbolicLink&&(o.isSymbolicLink=()=>!0),o}catch(o){if(!e.throwErrorOnBrokenSymbolicLink)return r;throw o}}dS.read=K$e});var oie=_(zp=>{"use strict";Object.defineProperty(zp,"__esModule",{value:!0});zp.createFileSystemAdapter=zp.FILE_SYSTEM_ADAPTER=void 0;var mS=Be("fs");zp.FILE_SYSTEM_ADAPTER={lstat:mS.lstat,stat:mS.stat,lstatSync:mS.lstatSync,statSync:mS.statSync};function J$e(t){return t===void 0?zp.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},zp.FILE_SYSTEM_ADAPTER),t)}zp.createFileSystemAdapter=J$e});var aie=_(qL=>{"use strict";Object.defineProperty(qL,"__esModule",{value:!0});var z$e=oie(),jL=class{constructor(e={}){this._options=e,this.followSymbolicLink=this._getValue(this._options.followSymbolicLink,!0),this.fs=z$e.createFileSystemAdapter(this._options.fs),this.markSymbolicLink=this._getValue(this._options.markSymbolicLink,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0)}_getValue(e,r){return e??r}};qL.default=jL});var Ed=_(Xp=>{"use strict";Object.defineProperty(Xp,"__esModule",{value:!0});Xp.statSync=Xp.stat=Xp.Settings=void 0;var lie=iie(),X$e=sie(),YL=aie();Xp.Settings=YL.default;function Z$e(t,e,r){if(typeof e=="function"){lie.read(t,WL(),e);return}lie.read(t,WL(e),r)}Xp.stat=Z$e;function $$e(t,e){let r=WL(e);return X$e.read(t,r)}Xp.statSync=$$e;function WL(t={}){return t instanceof YL.default?t:new YL.default(t)}});var uie=_((qRt,cie)=>{cie.exports=eet;function eet(t,e){var r,o,a,n=!0;Array.isArray(t)?(r=[],o=t.length):(a=Object.keys(t),r={},o=a.length);function u(p){function h(){e&&e(p,r),e=null}n?process.nextTick(h):h()}function A(p,h,E){r[p]=E,(--o===0||h)&&u(h)}o?a?a.forEach(function(p){t[p](function(h,E){A(p,h,E)})}):t.forEach(function(p,h){p(function(E,I){A(h,E,I)})}):u(null),n=!1}});var VL=_(ES=>{"use strict";Object.defineProperty(ES,"__esModule",{value:!0});ES.IS_SUPPORT_READDIR_WITH_FILE_TYPES=void 0;var yS=process.versions.node.split(".");if(yS[0]===void 0||yS[1]===void 0)throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);var Aie=Number.parseInt(yS[0],10),tet=Number.parseInt(yS[1],10),fie=10,ret=10,net=Aie>fie,iet=Aie===fie&&tet>=ret;ES.IS_SUPPORT_READDIR_WITH_FILE_TYPES=net||iet});var pie=_(CS=>{"use strict";Object.defineProperty(CS,"__esModule",{value:!0});CS.createDirentFromStats=void 0;var KL=class{constructor(e,r){this.name=e,this.isBlockDevice=r.isBlockDevice.bind(r),this.isCharacterDevice=r.isCharacterDevice.bind(r),this.isDirectory=r.isDirectory.bind(r),this.isFIFO=r.isFIFO.bind(r),this.isFile=r.isFile.bind(r),this.isSocket=r.isSocket.bind(r),this.isSymbolicLink=r.isSymbolicLink.bind(r)}};function set(t,e){return new KL(t,e)}CS.createDirentFromStats=set});var JL=_(wS=>{"use strict";Object.defineProperty(wS,"__esModule",{value:!0});wS.fs=void 0;var oet=pie();wS.fs=oet});var zL=_(IS=>{"use strict";Object.defineProperty(IS,"__esModule",{value:!0});IS.joinPathSegments=void 0;function aet(t,e,r){return t.endsWith(r)?t+e:t+r+e}IS.joinPathSegments=aet});var Eie=_(Zp=>{"use strict";Object.defineProperty(Zp,"__esModule",{value:!0});Zp.readdir=Zp.readdirWithFileTypes=Zp.read=void 0;var cet=Ed(),hie=uie(),uet=VL(),gie=JL(),die=zL();function Aet(t,e,r){if(!e.stats&&uet.IS_SUPPORT_READDIR_WITH_FILE_TYPES){mie(t,e,r);return}yie(t,e,r)}Zp.read=Aet;function mie(t,e,r){e.fs.readdir(t,{withFileTypes:!0},(o,a)=>{if(o!==null){BS(r,o);return}let n=a.map(A=>({dirent:A,name:A.name,path:die.joinPathSegments(t,A.name,e.pathSegmentSeparator)}));if(!e.followSymbolicLinks){XL(r,n);return}let u=n.map(A=>fet(A,e));hie(u,(A,p)=>{if(A!==null){BS(r,A);return}XL(r,p)})})}Zp.readdirWithFileTypes=mie;function fet(t,e){return r=>{if(!t.dirent.isSymbolicLink()){r(null,t);return}e.fs.stat(t.path,(o,a)=>{if(o!==null){if(e.throwErrorOnBrokenSymbolicLink){r(o);return}r(null,t);return}t.dirent=gie.fs.createDirentFromStats(t.name,a),r(null,t)})}}function yie(t,e,r){e.fs.readdir(t,(o,a)=>{if(o!==null){BS(r,o);return}let n=a.map(u=>{let A=die.joinPathSegments(t,u,e.pathSegmentSeparator);return p=>{cet.stat(A,e.fsStatSettings,(h,E)=>{if(h!==null){p(h);return}let I={name:u,path:A,dirent:gie.fs.createDirentFromStats(u,E)};e.stats&&(I.stats=E),p(null,I)})}});hie(n,(u,A)=>{if(u!==null){BS(r,u);return}XL(r,A)})})}Zp.readdir=yie;function BS(t,e){t(e)}function XL(t,e){t(null,e)}});var vie=_($p=>{"use strict";Object.defineProperty($p,"__esModule",{value:!0});$p.readdir=$p.readdirWithFileTypes=$p.read=void 0;var pet=Ed(),het=VL(),Cie=JL(),wie=zL();function get(t,e){return!e.stats&&het.IS_SUPPORT_READDIR_WITH_FILE_TYPES?Iie(t,e):Bie(t,e)}$p.read=get;function Iie(t,e){return e.fs.readdirSync(t,{withFileTypes:!0}).map(o=>{let a={dirent:o,name:o.name,path:wie.joinPathSegments(t,o.name,e.pathSegmentSeparator)};if(a.dirent.isSymbolicLink()&&e.followSymbolicLinks)try{let n=e.fs.statSync(a.path);a.dirent=Cie.fs.createDirentFromStats(a.name,n)}catch(n){if(e.throwErrorOnBrokenSymbolicLink)throw n}return a})}$p.readdirWithFileTypes=Iie;function Bie(t,e){return e.fs.readdirSync(t).map(o=>{let a=wie.joinPathSegments(t,o,e.pathSegmentSeparator),n=pet.statSync(a,e.fsStatSettings),u={name:o,path:a,dirent:Cie.fs.createDirentFromStats(o,n)};return e.stats&&(u.stats=n),u})}$p.readdir=Bie});var Die=_(eh=>{"use strict";Object.defineProperty(eh,"__esModule",{value:!0});eh.createFileSystemAdapter=eh.FILE_SYSTEM_ADAPTER=void 0;var tE=Be("fs");eh.FILE_SYSTEM_ADAPTER={lstat:tE.lstat,stat:tE.stat,lstatSync:tE.lstatSync,statSync:tE.statSync,readdir:tE.readdir,readdirSync:tE.readdirSync};function det(t){return t===void 0?eh.FILE_SYSTEM_ADAPTER:Object.assign(Object.assign({},eh.FILE_SYSTEM_ADAPTER),t)}eh.createFileSystemAdapter=det});var Pie=_($L=>{"use strict";Object.defineProperty($L,"__esModule",{value:!0});var met=Be("path"),yet=Ed(),Eet=Die(),ZL=class{constructor(e={}){this._options=e,this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!1),this.fs=Eet.createFileSystemAdapter(this._options.fs),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,met.sep),this.stats=this._getValue(this._options.stats,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!0),this.fsStatSettings=new yet.Settings({followSymbolicLink:this.followSymbolicLinks,fs:this.fs,throwErrorOnBrokenSymbolicLink:this.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};$L.default=ZL});var vS=_(th=>{"use strict";Object.defineProperty(th,"__esModule",{value:!0});th.Settings=th.scandirSync=th.scandir=void 0;var Sie=Eie(),Cet=vie(),eM=Pie();th.Settings=eM.default;function wet(t,e,r){if(typeof e=="function"){Sie.read(t,tM(),e);return}Sie.read(t,tM(e),r)}th.scandir=wet;function Iet(t,e){let r=tM(e);return Cet.read(t,r)}th.scandirSync=Iet;function tM(t={}){return t instanceof eM.default?t:new eM.default(t)}});var bie=_(($Rt,xie)=>{"use strict";function Bet(t){var e=new t,r=e;function o(){var n=e;return n.next?e=n.next:(e=new t,r=e),n.next=null,n}function a(n){r.next=n,r=n}return{get:o,release:a}}xie.exports=Bet});var Qie=_((eNt,rM)=>{"use strict";var vet=bie();function kie(t,e,r){if(typeof t=="function"&&(r=e,e=t,t=null),r<1)throw new Error("fastqueue concurrency must be greater than 1");var o=vet(Det),a=null,n=null,u=0,A=null,p={push:T,drain:Gl,saturated:Gl,pause:E,paused:!1,concurrency:r,running:h,resume:b,idle:C,length:I,getQueue:v,unshift:L,empty:Gl,kill:J,killAndDrain:te,error:le};return p;function h(){return u}function E(){p.paused=!0}function I(){for(var pe=a,Ae=0;pe;)pe=pe.next,Ae++;return Ae}function v(){for(var pe=a,Ae=[];pe;)Ae.push(pe.value),pe=pe.next;return Ae}function b(){if(!!p.paused){p.paused=!1;for(var pe=0;pe{"use strict";Object.defineProperty(Zu,"__esModule",{value:!0});Zu.joinPathSegments=Zu.replacePathSegmentSeparator=Zu.isAppliedFilter=Zu.isFatalError=void 0;function xet(t,e){return t.errorFilter===null?!0:!t.errorFilter(e)}Zu.isFatalError=xet;function bet(t,e){return t===null||t(e)}Zu.isAppliedFilter=bet;function ket(t,e){return t.split(/[/\\]/).join(e)}Zu.replacePathSegmentSeparator=ket;function Qet(t,e,r){return t===""?e:t.endsWith(r)?t+e:t+r+e}Zu.joinPathSegments=Qet});var sM=_(iM=>{"use strict";Object.defineProperty(iM,"__esModule",{value:!0});var Fet=DS(),nM=class{constructor(e,r){this._root=e,this._settings=r,this._root=Fet.replacePathSegmentSeparator(e,r.pathSegmentSeparator)}};iM.default=nM});var lM=_(aM=>{"use strict";Object.defineProperty(aM,"__esModule",{value:!0});var Tet=Be("events"),Ret=vS(),Net=Qie(),PS=DS(),Let=sM(),oM=class extends Let.default{constructor(e,r){super(e,r),this._settings=r,this._scandir=Ret.scandir,this._emitter=new Tet.EventEmitter,this._queue=Net(this._worker.bind(this),this._settings.concurrency),this._isFatalError=!1,this._isDestroyed=!1,this._queue.drain=()=>{this._isFatalError||this._emitter.emit("end")}}read(){return this._isFatalError=!1,this._isDestroyed=!1,setImmediate(()=>{this._pushToQueue(this._root,this._settings.basePath)}),this._emitter}get isDestroyed(){return this._isDestroyed}destroy(){if(this._isDestroyed)throw new Error("The reader is already destroyed");this._isDestroyed=!0,this._queue.killAndDrain()}onEntry(e){this._emitter.on("entry",e)}onError(e){this._emitter.once("error",e)}onEnd(e){this._emitter.once("end",e)}_pushToQueue(e,r){let o={directory:e,base:r};this._queue.push(o,a=>{a!==null&&this._handleError(a)})}_worker(e,r){this._scandir(e.directory,this._settings.fsScandirSettings,(o,a)=>{if(o!==null){r(o,void 0);return}for(let n of a)this._handleEntry(n,e.base);r(null,void 0)})}_handleError(e){this._isDestroyed||!PS.isFatalError(this._settings,e)||(this._isFatalError=!0,this._isDestroyed=!0,this._emitter.emit("error",e))}_handleEntry(e,r){if(this._isDestroyed||this._isFatalError)return;let o=e.path;r!==void 0&&(e.path=PS.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),PS.isAppliedFilter(this._settings.entryFilter,e)&&this._emitEntry(e),e.dirent.isDirectory()&&PS.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_emitEntry(e){this._emitter.emit("entry",e)}};aM.default=oM});var Fie=_(uM=>{"use strict";Object.defineProperty(uM,"__esModule",{value:!0});var Met=lM(),cM=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Met.default(this._root,this._settings),this._storage=[]}read(e){this._reader.onError(r=>{Oet(e,r)}),this._reader.onEntry(r=>{this._storage.push(r)}),this._reader.onEnd(()=>{Uet(e,this._storage)}),this._reader.read()}};uM.default=cM;function Oet(t,e){t(e)}function Uet(t,e){t(null,e)}});var Tie=_(fM=>{"use strict";Object.defineProperty(fM,"__esModule",{value:!0});var _et=Be("stream"),Het=lM(),AM=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Het.default(this._root,this._settings),this._stream=new _et.Readable({objectMode:!0,read:()=>{},destroy:()=>{this._reader.isDestroyed||this._reader.destroy()}})}read(){return this._reader.onError(e=>{this._stream.emit("error",e)}),this._reader.onEntry(e=>{this._stream.push(e)}),this._reader.onEnd(()=>{this._stream.push(null)}),this._reader.read(),this._stream}};fM.default=AM});var Rie=_(hM=>{"use strict";Object.defineProperty(hM,"__esModule",{value:!0});var jet=vS(),SS=DS(),qet=sM(),pM=class extends qet.default{constructor(){super(...arguments),this._scandir=jet.scandirSync,this._storage=[],this._queue=new Set}read(){return this._pushToQueue(this._root,this._settings.basePath),this._handleQueue(),this._storage}_pushToQueue(e,r){this._queue.add({directory:e,base:r})}_handleQueue(){for(let e of this._queue.values())this._handleDirectory(e.directory,e.base)}_handleDirectory(e,r){try{let o=this._scandir(e,this._settings.fsScandirSettings);for(let a of o)this._handleEntry(a,r)}catch(o){this._handleError(o)}}_handleError(e){if(!!SS.isFatalError(this._settings,e))throw e}_handleEntry(e,r){let o=e.path;r!==void 0&&(e.path=SS.joinPathSegments(r,e.name,this._settings.pathSegmentSeparator)),SS.isAppliedFilter(this._settings.entryFilter,e)&&this._pushToStorage(e),e.dirent.isDirectory()&&SS.isAppliedFilter(this._settings.deepFilter,e)&&this._pushToQueue(o,r===void 0?void 0:e.path)}_pushToStorage(e){this._storage.push(e)}};hM.default=pM});var Nie=_(dM=>{"use strict";Object.defineProperty(dM,"__esModule",{value:!0});var Get=Rie(),gM=class{constructor(e,r){this._root=e,this._settings=r,this._reader=new Get.default(this._root,this._settings)}read(){return this._reader.read()}};dM.default=gM});var Lie=_(yM=>{"use strict";Object.defineProperty(yM,"__esModule",{value:!0});var Yet=Be("path"),Wet=vS(),mM=class{constructor(e={}){this._options=e,this.basePath=this._getValue(this._options.basePath,void 0),this.concurrency=this._getValue(this._options.concurrency,Number.POSITIVE_INFINITY),this.deepFilter=this._getValue(this._options.deepFilter,null),this.entryFilter=this._getValue(this._options.entryFilter,null),this.errorFilter=this._getValue(this._options.errorFilter,null),this.pathSegmentSeparator=this._getValue(this._options.pathSegmentSeparator,Yet.sep),this.fsScandirSettings=new Wet.Settings({followSymbolicLinks:this._options.followSymbolicLinks,fs:this._options.fs,pathSegmentSeparator:this._options.pathSegmentSeparator,stats:this._options.stats,throwErrorOnBrokenSymbolicLink:this._options.throwErrorOnBrokenSymbolicLink})}_getValue(e,r){return e??r}};yM.default=mM});var bS=_($u=>{"use strict";Object.defineProperty($u,"__esModule",{value:!0});$u.Settings=$u.walkStream=$u.walkSync=$u.walk=void 0;var Mie=Fie(),Vet=Tie(),Ket=Nie(),EM=Lie();$u.Settings=EM.default;function Jet(t,e,r){if(typeof e=="function"){new Mie.default(t,xS()).read(e);return}new Mie.default(t,xS(e)).read(r)}$u.walk=Jet;function zet(t,e){let r=xS(e);return new Ket.default(t,r).read()}$u.walkSync=zet;function Xet(t,e){let r=xS(e);return new Vet.default(t,r).read()}$u.walkStream=Xet;function xS(t={}){return t instanceof EM.default?t:new EM.default(t)}});var kS=_(wM=>{"use strict";Object.defineProperty(wM,"__esModule",{value:!0});var Zet=Be("path"),$et=Ed(),Oie=Df(),CM=class{constructor(e){this._settings=e,this._fsStatSettings=new $et.Settings({followSymbolicLink:this._settings.followSymbolicLinks,fs:this._settings.fs,throwErrorOnBrokenSymbolicLink:this._settings.followSymbolicLinks})}_getFullEntryPath(e){return Zet.resolve(this._settings.cwd,e)}_makeEntry(e,r){let o={name:r,path:r,dirent:Oie.fs.createDirentFromStats(r,e)};return this._settings.stats&&(o.stats=e),o}_isFatalError(e){return!Oie.errno.isEnoentCodeError(e)&&!this._settings.suppressErrors}};wM.default=CM});var vM=_(BM=>{"use strict";Object.defineProperty(BM,"__esModule",{value:!0});var ett=Be("stream"),ttt=Ed(),rtt=bS(),ntt=kS(),IM=class extends ntt.default{constructor(){super(...arguments),this._walkStream=rtt.walkStream,this._stat=ttt.stat}dynamic(e,r){return this._walkStream(e,r)}static(e,r){let o=e.map(this._getFullEntryPath,this),a=new ett.PassThrough({objectMode:!0});a._write=(n,u,A)=>this._getEntry(o[n],e[n],r).then(p=>{p!==null&&r.entryFilter(p)&&a.push(p),n===o.length-1&&a.end(),A()}).catch(A);for(let n=0;nthis._makeEntry(a,r)).catch(a=>{if(o.errorFilter(a))return null;throw a})}_getStat(e){return new Promise((r,o)=>{this._stat(e,this._fsStatSettings,(a,n)=>a===null?r(n):o(a))})}};BM.default=IM});var Uie=_(PM=>{"use strict";Object.defineProperty(PM,"__esModule",{value:!0});var itt=bS(),stt=kS(),ott=vM(),DM=class extends stt.default{constructor(){super(...arguments),this._walkAsync=itt.walk,this._readerStream=new ott.default(this._settings)}dynamic(e,r){return new Promise((o,a)=>{this._walkAsync(e,r,(n,u)=>{n===null?o(u):a(n)})})}async static(e,r){let o=[],a=this._readerStream.static(e,r);return new Promise((n,u)=>{a.once("error",u),a.on("data",A=>o.push(A)),a.once("end",()=>n(o))})}};PM.default=DM});var _ie=_(xM=>{"use strict";Object.defineProperty(xM,"__esModule",{value:!0});var rE=Df(),SM=class{constructor(e,r,o){this._patterns=e,this._settings=r,this._micromatchOptions=o,this._storage=[],this._fillStorage()}_fillStorage(){let e=rE.pattern.expandPatternsWithBraceExpansion(this._patterns);for(let r of e){let o=this._getPatternSegments(r),a=this._splitSegmentsIntoSections(o);this._storage.push({complete:a.length<=1,pattern:r,segments:o,sections:a})}}_getPatternSegments(e){return rE.pattern.getPatternParts(e,this._micromatchOptions).map(o=>rE.pattern.isDynamicPattern(o,this._settings)?{dynamic:!0,pattern:o,patternRe:rE.pattern.makeRe(o,this._micromatchOptions)}:{dynamic:!1,pattern:o})}_splitSegmentsIntoSections(e){return rE.array.splitWhen(e,r=>r.dynamic&&rE.pattern.hasGlobStar(r.pattern))}};xM.default=SM});var Hie=_(kM=>{"use strict";Object.defineProperty(kM,"__esModule",{value:!0});var att=_ie(),bM=class extends att.default{match(e){let r=e.split("/"),o=r.length,a=this._storage.filter(n=>!n.complete||n.segments.length>o);for(let n of a){let u=n.sections[0];if(!n.complete&&o>u.length||r.every((p,h)=>{let E=n.segments[h];return!!(E.dynamic&&E.patternRe.test(p)||!E.dynamic&&E.pattern===p)}))return!0}return!1}};kM.default=bM});var jie=_(FM=>{"use strict";Object.defineProperty(FM,"__esModule",{value:!0});var QS=Df(),ltt=Hie(),QM=class{constructor(e,r){this._settings=e,this._micromatchOptions=r}getFilter(e,r,o){let a=this._getMatcher(r),n=this._getNegativePatternsRe(o);return u=>this._filter(e,u,a,n)}_getMatcher(e){return new ltt.default(e,this._settings,this._micromatchOptions)}_getNegativePatternsRe(e){let r=e.filter(QS.pattern.isAffectDepthOfReadingPattern);return QS.pattern.convertPatternsToRe(r,this._micromatchOptions)}_filter(e,r,o,a){if(this._isSkippedByDeep(e,r.path)||this._isSkippedSymbolicLink(r))return!1;let n=QS.path.removeLeadingDotSegment(r.path);return this._isSkippedByPositivePatterns(n,o)?!1:this._isSkippedByNegativePatterns(n,a)}_isSkippedByDeep(e,r){return this._settings.deep===1/0?!1:this._getEntryLevel(e,r)>=this._settings.deep}_getEntryLevel(e,r){let o=r.split("/").length;if(e==="")return o;let a=e.split("/").length;return o-a}_isSkippedSymbolicLink(e){return!this._settings.followSymbolicLinks&&e.dirent.isSymbolicLink()}_isSkippedByPositivePatterns(e,r){return!this._settings.baseNameMatch&&!r.match(e)}_isSkippedByNegativePatterns(e,r){return!QS.pattern.matchAny(e,r)}};FM.default=QM});var qie=_(RM=>{"use strict";Object.defineProperty(RM,"__esModule",{value:!0});var Cd=Df(),TM=class{constructor(e,r){this._settings=e,this._micromatchOptions=r,this.index=new Map}getFilter(e,r){let o=Cd.pattern.convertPatternsToRe(e,this._micromatchOptions),a=Cd.pattern.convertPatternsToRe(r,this._micromatchOptions);return n=>this._filter(n,o,a)}_filter(e,r,o){if(this._settings.unique&&this._isDuplicateEntry(e)||this._onlyFileFilter(e)||this._onlyDirectoryFilter(e)||this._isSkippedByAbsoluteNegativePatterns(e.path,o))return!1;let a=this._settings.baseNameMatch?e.name:e.path,n=e.dirent.isDirectory(),u=this._isMatchToPatterns(a,r,n)&&!this._isMatchToPatterns(e.path,o,n);return this._settings.unique&&u&&this._createIndexRecord(e),u}_isDuplicateEntry(e){return this.index.has(e.path)}_createIndexRecord(e){this.index.set(e.path,void 0)}_onlyFileFilter(e){return this._settings.onlyFiles&&!e.dirent.isFile()}_onlyDirectoryFilter(e){return this._settings.onlyDirectories&&!e.dirent.isDirectory()}_isSkippedByAbsoluteNegativePatterns(e,r){if(!this._settings.absolute)return!1;let o=Cd.path.makeAbsolute(this._settings.cwd,e);return Cd.pattern.matchAny(o,r)}_isMatchToPatterns(e,r,o){let a=Cd.path.removeLeadingDotSegment(e),n=Cd.pattern.matchAny(a,r);return!n&&o?Cd.pattern.matchAny(a+"/",r):n}};RM.default=TM});var Gie=_(LM=>{"use strict";Object.defineProperty(LM,"__esModule",{value:!0});var ctt=Df(),NM=class{constructor(e){this._settings=e}getFilter(){return e=>this._isNonFatalError(e)}_isNonFatalError(e){return ctt.errno.isEnoentCodeError(e)||this._settings.suppressErrors}};LM.default=NM});var Wie=_(OM=>{"use strict";Object.defineProperty(OM,"__esModule",{value:!0});var Yie=Df(),MM=class{constructor(e){this._settings=e}getTransformer(){return e=>this._transform(e)}_transform(e){let r=e.path;return this._settings.absolute&&(r=Yie.path.makeAbsolute(this._settings.cwd,r),r=Yie.path.unixify(r)),this._settings.markDirectories&&e.dirent.isDirectory()&&(r+="/"),this._settings.objectMode?Object.assign(Object.assign({},e),{path:r}):r}};OM.default=MM});var TS=_(_M=>{"use strict";Object.defineProperty(_M,"__esModule",{value:!0});var utt=Be("path"),Att=jie(),ftt=qie(),ptt=Gie(),htt=Wie(),UM=class{constructor(e){this._settings=e,this.errorFilter=new ptt.default(this._settings),this.entryFilter=new ftt.default(this._settings,this._getMicromatchOptions()),this.deepFilter=new Att.default(this._settings,this._getMicromatchOptions()),this.entryTransformer=new htt.default(this._settings)}_getRootDirectory(e){return utt.resolve(this._settings.cwd,e.base)}_getReaderOptions(e){let r=e.base==="."?"":e.base;return{basePath:r,pathSegmentSeparator:"/",concurrency:this._settings.concurrency,deepFilter:this.deepFilter.getFilter(r,e.positive,e.negative),entryFilter:this.entryFilter.getFilter(e.positive,e.negative),errorFilter:this.errorFilter.getFilter(),followSymbolicLinks:this._settings.followSymbolicLinks,fs:this._settings.fs,stats:this._settings.stats,throwErrorOnBrokenSymbolicLink:this._settings.throwErrorOnBrokenSymbolicLink,transform:this.entryTransformer.getTransformer()}}_getMicromatchOptions(){return{dot:this._settings.dot,matchBase:this._settings.baseNameMatch,nobrace:!this._settings.braceExpansion,nocase:!this._settings.caseSensitiveMatch,noext:!this._settings.extglob,noglobstar:!this._settings.globstar,posix:!0,strictSlashes:!1}}};_M.default=UM});var Vie=_(jM=>{"use strict";Object.defineProperty(jM,"__esModule",{value:!0});var gtt=Uie(),dtt=TS(),HM=class extends dtt.default{constructor(){super(...arguments),this._reader=new gtt.default(this._settings)}async read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return(await this.api(r,e,o)).map(n=>o.transform(n))}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};jM.default=HM});var Kie=_(GM=>{"use strict";Object.defineProperty(GM,"__esModule",{value:!0});var mtt=Be("stream"),ytt=vM(),Ett=TS(),qM=class extends Ett.default{constructor(){super(...arguments),this._reader=new ytt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e),a=this.api(r,e,o),n=new mtt.Readable({objectMode:!0,read:()=>{}});return a.once("error",u=>n.emit("error",u)).on("data",u=>n.emit("data",o.transform(u))).once("end",()=>n.emit("end")),n.once("close",()=>a.destroy()),n}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};GM.default=qM});var Jie=_(WM=>{"use strict";Object.defineProperty(WM,"__esModule",{value:!0});var Ctt=Ed(),wtt=bS(),Itt=kS(),YM=class extends Itt.default{constructor(){super(...arguments),this._walkSync=wtt.walkSync,this._statSync=Ctt.statSync}dynamic(e,r){return this._walkSync(e,r)}static(e,r){let o=[];for(let a of e){let n=this._getFullEntryPath(a),u=this._getEntry(n,a,r);u===null||!r.entryFilter(u)||o.push(u)}return o}_getEntry(e,r,o){try{let a=this._getStat(e);return this._makeEntry(a,r)}catch(a){if(o.errorFilter(a))return null;throw a}}_getStat(e){return this._statSync(e,this._fsStatSettings)}};WM.default=YM});var zie=_(KM=>{"use strict";Object.defineProperty(KM,"__esModule",{value:!0});var Btt=Jie(),vtt=TS(),VM=class extends vtt.default{constructor(){super(...arguments),this._reader=new Btt.default(this._settings)}read(e){let r=this._getRootDirectory(e),o=this._getReaderOptions(e);return this.api(r,e,o).map(o.transform)}api(e,r,o){return r.dynamic?this._reader.dynamic(e,o):this._reader.static(r.patterns,o)}};KM.default=VM});var Xie=_(iE=>{"use strict";Object.defineProperty(iE,"__esModule",{value:!0});iE.DEFAULT_FILE_SYSTEM_ADAPTER=void 0;var nE=Be("fs"),Dtt=Be("os"),Ptt=Math.max(Dtt.cpus().length,1);iE.DEFAULT_FILE_SYSTEM_ADAPTER={lstat:nE.lstat,lstatSync:nE.lstatSync,stat:nE.stat,statSync:nE.statSync,readdir:nE.readdir,readdirSync:nE.readdirSync};var JM=class{constructor(e={}){this._options=e,this.absolute=this._getValue(this._options.absolute,!1),this.baseNameMatch=this._getValue(this._options.baseNameMatch,!1),this.braceExpansion=this._getValue(this._options.braceExpansion,!0),this.caseSensitiveMatch=this._getValue(this._options.caseSensitiveMatch,!0),this.concurrency=this._getValue(this._options.concurrency,Ptt),this.cwd=this._getValue(this._options.cwd,process.cwd()),this.deep=this._getValue(this._options.deep,1/0),this.dot=this._getValue(this._options.dot,!1),this.extglob=this._getValue(this._options.extglob,!0),this.followSymbolicLinks=this._getValue(this._options.followSymbolicLinks,!0),this.fs=this._getFileSystemMethods(this._options.fs),this.globstar=this._getValue(this._options.globstar,!0),this.ignore=this._getValue(this._options.ignore,[]),this.markDirectories=this._getValue(this._options.markDirectories,!1),this.objectMode=this._getValue(this._options.objectMode,!1),this.onlyDirectories=this._getValue(this._options.onlyDirectories,!1),this.onlyFiles=this._getValue(this._options.onlyFiles,!0),this.stats=this._getValue(this._options.stats,!1),this.suppressErrors=this._getValue(this._options.suppressErrors,!1),this.throwErrorOnBrokenSymbolicLink=this._getValue(this._options.throwErrorOnBrokenSymbolicLink,!1),this.unique=this._getValue(this._options.unique,!0),this.onlyDirectories&&(this.onlyFiles=!1),this.stats&&(this.objectMode=!0)}_getValue(e,r){return e===void 0?r:e}_getFileSystemMethods(e={}){return Object.assign(Object.assign({},iE.DEFAULT_FILE_SYSTEM_ADAPTER),e)}};iE.default=JM});var RS=_((DNt,ese)=>{"use strict";var Zie=eie(),$ie=rie(),Stt=Vie(),xtt=Kie(),btt=zie(),zM=Xie(),wd=Df();async function XM(t,e){sE(t);let r=ZM(t,Stt.default,e),o=await Promise.all(r);return wd.array.flatten(o)}(function(t){function e(u,A){sE(u);let p=ZM(u,btt.default,A);return wd.array.flatten(p)}t.sync=e;function r(u,A){sE(u);let p=ZM(u,xtt.default,A);return wd.stream.merge(p)}t.stream=r;function o(u,A){sE(u);let p=$ie.transform([].concat(u)),h=new zM.default(A);return Zie.generate(p,h)}t.generateTasks=o;function a(u,A){sE(u);let p=new zM.default(A);return wd.pattern.isDynamicPattern(u,p)}t.isDynamicPattern=a;function n(u){return sE(u),wd.path.escape(u)}t.escapePath=n})(XM||(XM={}));function ZM(t,e,r){let o=$ie.transform([].concat(t)),a=new zM.default(r),n=Zie.generate(o,a),u=new e(a);return n.map(u.read,u)}function sE(t){if(![].concat(t).every(o=>wd.string.isString(o)&&!wd.string.isEmpty(o)))throw new TypeError("Patterns must be a string (non empty) or an array of strings")}ese.exports=XM});var wn={};Kt(wn,{checksumFile:()=>LS,checksumPattern:()=>MS,makeHash:()=>zs});function zs(...t){let e=(0,NS.createHash)("sha512"),r="";for(let o of t)typeof o=="string"?r+=o:o&&(r&&(e.update(r),r=""),e.update(o));return r&&e.update(r),e.digest("hex")}async function LS(t,{baseFs:e,algorithm:r}={baseFs:oe,algorithm:"sha512"}){let o=await e.openPromise(t,"r");try{let n=Buffer.allocUnsafeSlow(65536),u=(0,NS.createHash)(r),A=0;for(;(A=await e.readPromise(o,n,0,65536))!==0;)u.update(A===65536?n:n.slice(0,A));return u.digest("hex")}finally{await e.closePromise(o)}}async function MS(t,{cwd:e}){let o=(await(0,$M.default)(t,{cwd:ue.fromPortablePath(e),onlyDirectories:!0})).map(A=>`${A}/**/*`),a=await(0,$M.default)([t,...o],{cwd:ue.fromPortablePath(e),onlyFiles:!1});a.sort();let n=await Promise.all(a.map(async A=>{let p=[Buffer.from(A)],h=ue.toPortablePath(A),E=await oe.lstatPromise(h);return E.isSymbolicLink()?p.push(Buffer.from(await oe.readlinkPromise(h))):E.isFile()&&p.push(await oe.readFilePromise(h)),p.join("\0")})),u=(0,NS.createHash)("sha512");for(let A of n)u.update(A);return u.digest("hex")}var NS,$M,rh=Et(()=>{Pt();NS=Be("crypto"),$M=$e(RS())});var W={};Kt(W,{areDescriptorsEqual:()=>sse,areIdentsEqual:()=>r1,areLocatorsEqual:()=>n1,areVirtualPackagesEquivalent:()=>Ott,bindDescriptor:()=>Ltt,bindLocator:()=>Mtt,convertDescriptorToLocator:()=>OS,convertLocatorToDescriptor:()=>tO,convertPackageToLocator:()=>Ttt,convertToIdent:()=>Ftt,convertToManifestRange:()=>Ktt,copyPackage:()=>$I,devirtualizeDescriptor:()=>e1,devirtualizeLocator:()=>t1,ensureDevirtualizedDescriptor:()=>Rtt,ensureDevirtualizedLocator:()=>Ntt,getIdentVendorPath:()=>sO,isPackageCompatible:()=>qS,isVirtualDescriptor:()=>Sf,isVirtualLocator:()=>Hc,makeDescriptor:()=>In,makeIdent:()=>eA,makeLocator:()=>Qs,makeRange:()=>HS,parseDescriptor:()=>nh,parseFileStyleRange:()=>Wtt,parseIdent:()=>Js,parseLocator:()=>xf,parseRange:()=>Id,prettyDependent:()=>FL,prettyDescriptor:()=>qn,prettyIdent:()=>cs,prettyLocator:()=>jr,prettyLocatorNoColors:()=>QL,prettyRange:()=>lE,prettyReference:()=>s1,prettyResolution:()=>XI,prettyWorkspace:()=>o1,renamePackage:()=>rO,slugifyIdent:()=>eO,slugifyLocator:()=>aE,sortDescriptors:()=>cE,stringifyDescriptor:()=>Sa,stringifyIdent:()=>fn,stringifyLocator:()=>xa,tryParseDescriptor:()=>i1,tryParseIdent:()=>ose,tryParseLocator:()=>_S,tryParseRange:()=>Ytt,virtualizeDescriptor:()=>nO,virtualizePackage:()=>iO});function eA(t,e){if(t?.startsWith("@"))throw new Error("Invalid scope: don't prefix it with '@'");return{identHash:zs(t,e),scope:t,name:e}}function In(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:zs(t.identHash,e),range:e}}function Qs(t,e){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:zs(t.identHash,e),reference:e}}function Ftt(t){return{identHash:t.identHash,scope:t.scope,name:t.name}}function OS(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.descriptorHash,reference:t.range}}function tO(t){return{identHash:t.identHash,scope:t.scope,name:t.name,descriptorHash:t.locatorHash,range:t.reference}}function Ttt(t){return{identHash:t.identHash,scope:t.scope,name:t.name,locatorHash:t.locatorHash,reference:t.reference}}function rO(t,e){return{identHash:e.identHash,scope:e.scope,name:e.name,locatorHash:e.locatorHash,reference:e.reference,version:t.version,languageName:t.languageName,linkType:t.linkType,conditions:t.conditions,dependencies:new Map(t.dependencies),peerDependencies:new Map(t.peerDependencies),dependenciesMeta:new Map(t.dependenciesMeta),peerDependenciesMeta:new Map(t.peerDependenciesMeta),bin:new Map(t.bin)}}function $I(t){return rO(t,t)}function nO(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return In(t,`virtual:${e}#${t.range}`)}function iO(t,e){if(e.includes("#"))throw new Error("Invalid entropy");return rO(t,Qs(t,`virtual:${e}#${t.reference}`))}function Sf(t){return t.range.startsWith(ZI)}function Hc(t){return t.reference.startsWith(ZI)}function e1(t){if(!Sf(t))throw new Error("Not a virtual descriptor");return In(t,t.range.replace(US,""))}function t1(t){if(!Hc(t))throw new Error("Not a virtual descriptor");return Qs(t,t.reference.replace(US,""))}function Rtt(t){return Sf(t)?In(t,t.range.replace(US,"")):t}function Ntt(t){return Hc(t)?Qs(t,t.reference.replace(US,"")):t}function Ltt(t,e){return t.range.includes("::")?t:In(t,`${t.range}::${oE.default.stringify(e)}`)}function Mtt(t,e){return t.reference.includes("::")?t:Qs(t,`${t.reference}::${oE.default.stringify(e)}`)}function r1(t,e){return t.identHash===e.identHash}function sse(t,e){return t.descriptorHash===e.descriptorHash}function n1(t,e){return t.locatorHash===e.locatorHash}function Ott(t,e){if(!Hc(t))throw new Error("Invalid package type");if(!Hc(e))throw new Error("Invalid package type");if(!r1(t,e)||t.dependencies.size!==e.dependencies.size)return!1;for(let r of t.dependencies.values()){let o=e.dependencies.get(r.identHash);if(!o||!sse(r,o))return!1}return!0}function Js(t){let e=ose(t);if(!e)throw new Error(`Invalid ident (${t})`);return e}function ose(t){let e=t.match(Utt);if(!e)return null;let[,r,o]=e;return eA(typeof r<"u"?r:null,o)}function nh(t,e=!1){let r=i1(t,e);if(!r)throw new Error(`Invalid descriptor (${t})`);return r}function i1(t,e=!1){let r=e?t.match(_tt):t.match(Htt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid range (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return In(eA(u,a),A)}function xf(t,e=!1){let r=_S(t,e);if(!r)throw new Error(`Invalid locator (${t})`);return r}function _S(t,e=!1){let r=e?t.match(jtt):t.match(qtt);if(!r)return null;let[,o,a,n]=r;if(n==="unknown")throw new Error(`Invalid reference (${t})`);let u=typeof o<"u"?o:null,A=typeof n<"u"?n:"unknown";return Qs(eA(u,a),A)}function Id(t,e){let r=t.match(Gtt);if(r===null)throw new Error(`Invalid range (${t})`);let o=typeof r[1]<"u"?r[1]:null;if(typeof e?.requireProtocol=="string"&&o!==e.requireProtocol)throw new Error(`Invalid protocol (${o})`);if(e?.requireProtocol&&o===null)throw new Error(`Missing protocol (${o})`);let a=typeof r[3]<"u"?decodeURIComponent(r[2]):null;if(e?.requireSource&&a===null)throw new Error(`Missing source (${t})`);let n=typeof r[3]<"u"?decodeURIComponent(r[3]):decodeURIComponent(r[2]),u=e?.parseSelector?oE.default.parse(n):n,A=typeof r[4]<"u"?oE.default.parse(r[4]):null;return{protocol:o,source:a,selector:u,params:A}}function Ytt(t,e){try{return Id(t,e)}catch{return null}}function Wtt(t,{protocol:e}){let{selector:r,params:o}=Id(t,{requireProtocol:e,requireBindings:!0});if(typeof o.locator!="string")throw new Error(`Assertion failed: Invalid bindings for ${t}`);return{parentLocator:xf(o.locator,!0),path:r}}function tse(t){return t=t.replaceAll("%","%25"),t=t.replaceAll(":","%3A"),t=t.replaceAll("#","%23"),t}function Vtt(t){return t===null?!1:Object.entries(t).length>0}function HS({protocol:t,source:e,selector:r,params:o}){let a="";return t!==null&&(a+=`${t}`),e!==null&&(a+=`${tse(e)}#`),a+=tse(r),Vtt(o)&&(a+=`::${oE.default.stringify(o)}`),a}function Ktt(t){let{params:e,protocol:r,source:o,selector:a}=Id(t);for(let n in e)n.startsWith("__")&&delete e[n];return HS({protocol:r,source:o,params:e,selector:a})}function fn(t){return t.scope?`@${t.scope}/${t.name}`:`${t.name}`}function Sa(t){return t.scope?`@${t.scope}/${t.name}@${t.range}`:`${t.name}@${t.range}`}function xa(t){return t.scope?`@${t.scope}/${t.name}@${t.reference}`:`${t.name}@${t.reference}`}function eO(t){return t.scope!==null?`@${t.scope}-${t.name}`:t.name}function aE(t){let{protocol:e,selector:r}=Id(t.reference),o=e!==null?e.replace(Jtt,""):"exotic",a=rse.default.valid(r),n=a!==null?`${o}-${a}`:`${o}`,u=10;return t.scope?`${eO(t)}-${n}-${t.locatorHash.slice(0,u)}`:`${eO(t)}-${n}-${t.locatorHash.slice(0,u)}`}function cs(t,e){return e.scope?`${Ot(t,`@${e.scope}/`,yt.SCOPE)}${Ot(t,e.name,yt.NAME)}`:`${Ot(t,e.name,yt.NAME)}`}function jS(t){if(t.startsWith(ZI)){let e=jS(t.substring(t.indexOf("#")+1)),r=t.substring(ZI.length,ZI.length+ktt);return`${e} [${r}]`}else return t.replace(ztt,"?[...]")}function lE(t,e){return`${Ot(t,jS(e),yt.RANGE)}`}function qn(t,e){return`${cs(t,e)}${Ot(t,"@",yt.RANGE)}${lE(t,e.range)}`}function s1(t,e){return`${Ot(t,jS(e),yt.REFERENCE)}`}function jr(t,e){return`${cs(t,e)}${Ot(t,"@",yt.REFERENCE)}${s1(t,e.reference)}`}function QL(t){return`${fn(t)}@${jS(t.reference)}`}function cE(t){return ks(t,[e=>fn(e),e=>e.range])}function o1(t,e){return cs(t,e.anchoredLocator)}function XI(t,e,r){let o=Sf(e)?e1(e):e;return r===null?`${qn(t,o)} \u2192 ${kL(t).Cross}`:o.identHash===r.identHash?`${qn(t,o)} \u2192 ${s1(t,r.reference)}`:`${qn(t,o)} \u2192 ${jr(t,r)}`}function FL(t,e,r){return r===null?`${jr(t,e)}`:`${jr(t,e)} (via ${lE(t,r.range)})`}function sO(t){return`node_modules/${fn(t)}`}function qS(t,e){return t.conditions?Qtt(t.conditions,r=>{let[,o,a]=r.match(ise),n=e[o];return n?n.includes(a):!0}):!0}var oE,rse,nse,ZI,ktt,ise,Qtt,US,Utt,_tt,Htt,jtt,qtt,Gtt,Jtt,ztt,xo=Et(()=>{oE=$e(Be("querystring")),rse=$e(zn()),nse=$e(rX());ql();rh();jl();xo();ZI="virtual:",ktt=5,ise=/(os|cpu|libc)=([a-z0-9_-]+)/,Qtt=(0,nse.makeParser)(ise);US=/^[^#]*#/;Utt=/^(?:@([^/]+?)\/)?([^@/]+)$/;_tt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,Htt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;jtt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))$/,qtt=/^(?:@([^/]+?)\/)?([^@/]+?)(?:@(.+))?$/;Gtt=/^([^#:]*:)?((?:(?!::)[^#])*)(?:#((?:(?!::).)*))?(?:::(.*))?$/;Jtt=/:$/;ztt=/\?.*/});var ase,lse=Et(()=>{xo();ase={hooks:{reduceDependency:(t,e,r,o,{resolver:a,resolveOptions:n})=>{for(let{pattern:u,reference:A}of e.topLevelWorkspace.manifest.resolutions){if(u.from&&(u.from.fullName!==fn(r)||e.configuration.normalizeLocator(Qs(Js(u.from.fullName),u.from.description??r.reference)).locatorHash!==r.locatorHash)||u.descriptor.fullName!==fn(t)||e.configuration.normalizeDependency(In(xf(u.descriptor.fullName),u.descriptor.description??t.range)).descriptorHash!==t.descriptorHash)continue;return a.bindDescriptor(e.configuration.normalizeDependency(In(t,A)),e.topLevelWorkspace.anchoredLocator,n)}return t},validateProject:async(t,e)=>{for(let r of t.workspaces){let o=o1(t.configuration,r);await t.configuration.triggerHook(a=>a.validateWorkspace,r,{reportWarning:(a,n)=>e.reportWarning(a,`${o}: ${n}`),reportError:(a,n)=>e.reportError(a,`${o}: ${n}`)})}},validateWorkspace:async(t,e)=>{let{manifest:r}=t;r.resolutions.length&&t.cwd!==t.project.cwd&&r.errors.push(new Error("Resolutions field will be ignored"));for(let o of r.errors)e.reportWarning(57,o.message)}}}});var a1,Xn,Bd=Et(()=>{a1=class{supportsDescriptor(e,r){return!!(e.range.startsWith(a1.protocol)||r.project.tryWorkspaceByDescriptor(e)!==null)}supportsLocator(e,r){return!!e.reference.startsWith(a1.protocol)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[o.project.getWorkspaceByDescriptor(e).anchoredLocator]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.getWorkspaceByCwd(e.reference.slice(a1.protocol.length));return{...e,version:o.manifest.version||"0.0.0",languageName:"unknown",linkType:"SOFT",conditions:null,dependencies:r.project.configuration.normalizeDependencyMap(new Map([...o.manifest.dependencies,...o.manifest.devDependencies])),peerDependencies:new Map([...o.manifest.peerDependencies]),dependenciesMeta:o.manifest.dependenciesMeta,peerDependenciesMeta:o.manifest.peerDependenciesMeta,bin:o.manifest.bin}}},Xn=a1;Xn.protocol="workspace:"});var kr={};Kt(kr,{SemVer:()=>pse.SemVer,clean:()=>Ztt,getComparator:()=>Ase,mergeComparators:()=>oO,satisfiesWithPrereleases:()=>bf,simplifyRanges:()=>aO,stringifyComparator:()=>fse,validRange:()=>ba});function bf(t,e,r=!1){if(!t)return!1;let o=`${e}${r}`,a=cse.get(o);if(typeof a>"u")try{a=new ih.default.Range(e,{includePrerelease:!0,loose:r})}catch{return!1}finally{cse.set(o,a||null)}else if(a===null)return!1;let n;try{n=new ih.default.SemVer(t,a)}catch{return!1}return a.test(n)?!0:(n.prerelease&&(n.prerelease=[]),a.set.some(u=>{for(let A of u)A.semver.prerelease&&(A.semver.prerelease=[]);return u.every(A=>A.test(n))}))}function ba(t){if(t.indexOf(":")!==-1)return null;let e=use.get(t);if(typeof e<"u")return e;try{e=new ih.default.Range(t)}catch{e=null}return use.set(t,e),e}function Ztt(t){let e=Xtt.exec(t);return e?e[1]:null}function Ase(t){if(t.semver===ih.default.Comparator.ANY)return{gt:null,lt:null};switch(t.operator){case"":return{gt:[">=",t.semver],lt:["<=",t.semver]};case">":case">=":return{gt:[t.operator,t.semver],lt:null};case"<":case"<=":return{gt:null,lt:[t.operator,t.semver]};default:throw new Error(`Assertion failed: Unexpected comparator operator (${t.operator})`)}}function oO(t){if(t.length===0)return null;let e=null,r=null;for(let o of t){if(o.gt){let a=e!==null?ih.default.compare(o.gt[1],e[1]):null;(a===null||a>0||a===0&&o.gt[0]===">")&&(e=o.gt)}if(o.lt){let a=r!==null?ih.default.compare(o.lt[1],r[1]):null;(a===null||a<0||a===0&&o.lt[0]==="<")&&(r=o.lt)}}if(e&&r){let o=ih.default.compare(e[1],r[1]);if(o===0&&(e[0]===">"||r[0]==="<")||o>0)return null}return{gt:e,lt:r}}function fse(t){if(t.gt&&t.lt){if(t.gt[0]===">="&&t.lt[0]==="<="&&t.gt[1].version===t.lt[1].version)return t.gt[1].version;if(t.gt[0]===">="&&t.lt[0]==="<"){if(t.lt[1].version===`${t.gt[1].major+1}.0.0-0`)return`^${t.gt[1].version}`;if(t.lt[1].version===`${t.gt[1].major}.${t.gt[1].minor+1}.0-0`)return`~${t.gt[1].version}`}}let e=[];return t.gt&&e.push(t.gt[0]+t.gt[1].version),t.lt&&e.push(t.lt[0]+t.lt[1].version),e.length?e.join(" "):"*"}function aO(t){let e=t.map(o=>ba(o).set.map(a=>a.map(n=>Ase(n)))),r=e.shift().map(o=>oO(o)).filter(o=>o!==null);for(let o of e){let a=[];for(let n of r)for(let u of o){let A=oO([n,...u]);A!==null&&a.push(A)}r=a}return r.length===0?null:r.map(o=>fse(o)).join(" || ")}var ih,pse,cse,use,Xtt,kf=Et(()=>{ih=$e(zn()),pse=$e(zn()),cse=new Map;use=new Map;Xtt=/^(?:[\sv=]*?)((0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)(?:\s*)$/});function hse(t){let e=t.match(/^[ \t]+/m);return e?e[0]:" "}function gse(t){return t.charCodeAt(0)===65279?t.slice(1):t}function $o(t){return t.replace(/\\/g,"/")}function GS(t,{yamlCompatibilityMode:e}){return e?IL(t):typeof t>"u"||typeof t=="boolean"?t:null}function dse(t,e){let r=e.search(/[^!]/);if(r===-1)return"invalid";let o=r%2===0?"":"!",a=e.slice(r);return`${o}${t}=${a}`}function lO(t,e){return e.length===1?dse(t,e[0]):`(${e.map(r=>dse(t,r)).join(" | ")})`}var mse,uE,Mt,AE=Et(()=>{Pt();Nl();mse=$e(zn());Bd();jl();kf();xo();uE=class{constructor(){this.indent=" ";this.name=null;this.version=null;this.os=null;this.cpu=null;this.libc=null;this.type=null;this.packageManager=null;this.private=!1;this.license=null;this.main=null;this.module=null;this.browser=null;this.languageName=null;this.bin=new Map;this.scripts=new Map;this.dependencies=new Map;this.devDependencies=new Map;this.peerDependencies=new Map;this.workspaceDefinitions=[];this.dependenciesMeta=new Map;this.peerDependenciesMeta=new Map;this.resolutions=[];this.files=null;this.publishConfig=null;this.installConfig=null;this.preferUnplugged=null;this.raw={};this.errors=[]}static async tryFind(e,{baseFs:r=new Rn}={}){let o=K.join(e,"package.json");try{return await uE.fromFile(o,{baseFs:r})}catch(a){if(a.code==="ENOENT")return null;throw a}}static async find(e,{baseFs:r}={}){let o=await uE.tryFind(e,{baseFs:r});if(o===null)throw new Error("Manifest not found");return o}static async fromFile(e,{baseFs:r=new Rn}={}){let o=new uE;return await o.loadFile(e,{baseFs:r}),o}static fromText(e){let r=new uE;return r.loadFromText(e),r}loadFromText(e){let r;try{r=JSON.parse(gse(e)||"{}")}catch(o){throw o.message+=` (when parsing ${e})`,o}this.load(r),this.indent=hse(e)}async loadFile(e,{baseFs:r=new Rn}){let o=await r.readFilePromise(e,"utf8"),a;try{a=JSON.parse(gse(o)||"{}")}catch(n){throw n.message+=` (when parsing ${e})`,n}this.load(a),this.indent=hse(o)}load(e,{yamlCompatibilityMode:r=!1}={}){if(typeof e!="object"||e===null)throw new Error(`Utterly invalid manifest data (${e})`);this.raw=e;let o=[];if(this.name=null,typeof e.name=="string")try{this.name=Js(e.name)}catch{o.push(new Error("Parsing failed for the 'name' field"))}if(typeof e.version=="string"?this.version=e.version:this.version=null,Array.isArray(e.os)){let n=[];this.os=n;for(let u of e.os)typeof u!="string"?o.push(new Error("Parsing failed for the 'os' field")):n.push(u)}else this.os=null;if(Array.isArray(e.cpu)){let n=[];this.cpu=n;for(let u of e.cpu)typeof u!="string"?o.push(new Error("Parsing failed for the 'cpu' field")):n.push(u)}else this.cpu=null;if(Array.isArray(e.libc)){let n=[];this.libc=n;for(let u of e.libc)typeof u!="string"?o.push(new Error("Parsing failed for the 'libc' field")):n.push(u)}else this.libc=null;if(typeof e.type=="string"?this.type=e.type:this.type=null,typeof e.packageManager=="string"?this.packageManager=e.packageManager:this.packageManager=null,typeof e.private=="boolean"?this.private=e.private:this.private=!1,typeof e.license=="string"?this.license=e.license:this.license=null,typeof e.languageName=="string"?this.languageName=e.languageName:this.languageName=null,typeof e.main=="string"?this.main=$o(e.main):this.main=null,typeof e.module=="string"?this.module=$o(e.module):this.module=null,e.browser!=null)if(typeof e.browser=="string")this.browser=$o(e.browser);else{this.browser=new Map;for(let[n,u]of Object.entries(e.browser))this.browser.set($o(n),typeof u=="string"?$o(u):u)}else this.browser=null;if(this.bin=new Map,typeof e.bin=="string")e.bin.trim()===""?o.push(new Error("Invalid bin field")):this.name!==null?this.bin.set(this.name.name,$o(e.bin)):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.bin=="object"&&e.bin!==null)for(let[n,u]of Object.entries(e.bin)){if(typeof u!="string"||u.trim()===""){o.push(new Error(`Invalid bin definition for '${n}'`));continue}let A=Js(n);this.bin.set(A.name,$o(u))}if(this.scripts=new Map,typeof e.scripts=="object"&&e.scripts!==null)for(let[n,u]of Object.entries(e.scripts)){if(typeof u!="string"){o.push(new Error(`Invalid script definition for '${n}'`));continue}this.scripts.set(n,u)}if(this.dependencies=new Map,typeof e.dependencies=="object"&&e.dependencies!==null)for(let[n,u]of Object.entries(e.dependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p)}if(this.devDependencies=new Map,typeof e.devDependencies=="object"&&e.devDependencies!==null)for(let[n,u]of Object.entries(e.devDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.devDependencies.set(p.identHash,p)}if(this.peerDependencies=new Map,typeof e.peerDependencies=="object"&&e.peerDependencies!==null)for(let[n,u]of Object.entries(e.peerDependencies)){let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}(typeof u!="string"||!u.startsWith(Xn.protocol)&&!ba(u))&&(o.push(new Error(`Invalid dependency range for '${n}'`)),u="*");let p=In(A,u);this.peerDependencies.set(p.identHash,p)}typeof e.workspaces=="object"&&e.workspaces!==null&&e.workspaces.nohoist&&o.push(new Error("'nohoist' is deprecated, please use 'installConfig.hoistingLimits' instead"));let a=Array.isArray(e.workspaces)?e.workspaces:typeof e.workspaces=="object"&&e.workspaces!==null&&Array.isArray(e.workspaces.packages)?e.workspaces.packages:[];this.workspaceDefinitions=[];for(let n of a){if(typeof n!="string"){o.push(new Error(`Invalid workspace definition for '${n}'`));continue}this.workspaceDefinitions.push({pattern:n})}if(this.dependenciesMeta=new Map,typeof e.dependenciesMeta=="object"&&e.dependenciesMeta!==null)for(let[n,u]of Object.entries(e.dependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}`));continue}let A=nh(n),p=this.ensureDependencyMeta(A),h=GS(u.built,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid built meta field for '${n}'`));continue}let E=GS(u.optional,{yamlCompatibilityMode:r});if(E===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}let I=GS(u.unplugged,{yamlCompatibilityMode:r});if(I===null){o.push(new Error(`Invalid unplugged meta field for '${n}'`));continue}Object.assign(p,{built:h,optional:E,unplugged:I})}if(this.peerDependenciesMeta=new Map,typeof e.peerDependenciesMeta=="object"&&e.peerDependenciesMeta!==null)for(let[n,u]of Object.entries(e.peerDependenciesMeta)){if(typeof u!="object"||u===null){o.push(new Error(`Invalid meta field for '${n}'`));continue}let A=nh(n),p=this.ensurePeerDependencyMeta(A),h=GS(u.optional,{yamlCompatibilityMode:r});if(h===null){o.push(new Error(`Invalid optional meta field for '${n}'`));continue}Object.assign(p,{optional:h})}if(this.resolutions=[],typeof e.resolutions=="object"&&e.resolutions!==null)for(let[n,u]of Object.entries(e.resolutions)){if(typeof u!="string"){o.push(new Error(`Invalid resolution entry for '${n}'`));continue}try{this.resolutions.push({pattern:UD(n),reference:u})}catch(A){o.push(A);continue}}if(Array.isArray(e.files)){this.files=new Set;for(let n of e.files){if(typeof n!="string"){o.push(new Error(`Invalid files entry for '${n}'`));continue}this.files.add(n)}}else this.files=null;if(typeof e.publishConfig=="object"&&e.publishConfig!==null){if(this.publishConfig={},typeof e.publishConfig.access=="string"&&(this.publishConfig.access=e.publishConfig.access),typeof e.publishConfig.main=="string"&&(this.publishConfig.main=$o(e.publishConfig.main)),typeof e.publishConfig.module=="string"&&(this.publishConfig.module=$o(e.publishConfig.module)),e.publishConfig.browser!=null)if(typeof e.publishConfig.browser=="string")this.publishConfig.browser=$o(e.publishConfig.browser);else{this.publishConfig.browser=new Map;for(let[n,u]of Object.entries(e.publishConfig.browser))this.publishConfig.browser.set($o(n),typeof u=="string"?$o(u):u)}if(typeof e.publishConfig.registry=="string"&&(this.publishConfig.registry=e.publishConfig.registry),typeof e.publishConfig.bin=="string")this.name!==null?this.publishConfig.bin=new Map([[this.name.name,$o(e.publishConfig.bin)]]):o.push(new Error("String bin field, but no attached package name"));else if(typeof e.publishConfig.bin=="object"&&e.publishConfig.bin!==null){this.publishConfig.bin=new Map;for(let[n,u]of Object.entries(e.publishConfig.bin)){if(typeof u!="string"){o.push(new Error(`Invalid bin definition for '${n}'`));continue}this.publishConfig.bin.set(n,$o(u))}}if(Array.isArray(e.publishConfig.executableFiles)){this.publishConfig.executableFiles=new Set;for(let n of e.publishConfig.executableFiles){if(typeof n!="string"){o.push(new Error("Invalid executable file definition"));continue}this.publishConfig.executableFiles.add($o(n))}}}else this.publishConfig=null;if(typeof e.installConfig=="object"&&e.installConfig!==null){this.installConfig={};for(let n of Object.keys(e.installConfig))n==="hoistingLimits"?typeof e.installConfig.hoistingLimits=="string"?this.installConfig.hoistingLimits=e.installConfig.hoistingLimits:o.push(new Error("Invalid hoisting limits definition")):n=="selfReferences"?typeof e.installConfig.selfReferences=="boolean"?this.installConfig.selfReferences=e.installConfig.selfReferences:o.push(new Error("Invalid selfReferences definition, must be a boolean value")):o.push(new Error(`Unrecognized installConfig key: ${n}`))}else this.installConfig=null;if(typeof e.optionalDependencies=="object"&&e.optionalDependencies!==null)for(let[n,u]of Object.entries(e.optionalDependencies)){if(typeof u!="string"){o.push(new Error(`Invalid dependency range for '${n}'`));continue}let A;try{A=Js(n)}catch{o.push(new Error(`Parsing failed for the dependency name '${n}'`));continue}let p=In(A,u);this.dependencies.set(p.identHash,p);let h=In(A,"unknown"),E=this.ensureDependencyMeta(h);Object.assign(E,{optional:!0})}typeof e.preferUnplugged=="boolean"?this.preferUnplugged=e.preferUnplugged:this.preferUnplugged=null,this.errors=o}getForScope(e){switch(e){case"dependencies":return this.dependencies;case"devDependencies":return this.devDependencies;case"peerDependencies":return this.peerDependencies;default:throw new Error(`Unsupported value ("${e}")`)}}hasConsumerDependency(e){return!!(this.dependencies.has(e.identHash)||this.peerDependencies.has(e.identHash))}hasHardDependency(e){return!!(this.dependencies.has(e.identHash)||this.devDependencies.has(e.identHash))}hasSoftDependency(e){return!!this.peerDependencies.has(e.identHash)}hasDependency(e){return!!(this.hasHardDependency(e)||this.hasSoftDependency(e))}getConditions(){let e=[];return this.os&&this.os.length>0&&e.push(lO("os",this.os)),this.cpu&&this.cpu.length>0&&e.push(lO("cpu",this.cpu)),this.libc&&this.libc.length>0&&e.push(lO("libc",this.libc)),e.length>0?e.join(" & "):null}ensureDependencyMeta(e){if(e.range!=="unknown"&&!mse.default.valid(e.range))throw new Error(`Invalid meta field range for '${Sa(e)}'`);let r=fn(e),o=e.range!=="unknown"?e.range:null,a=this.dependenciesMeta.get(r);a||this.dependenciesMeta.set(r,a=new Map);let n=a.get(o);return n||a.set(o,n={}),n}ensurePeerDependencyMeta(e){if(e.range!=="unknown")throw new Error(`Invalid meta field range for '${Sa(e)}'`);let r=fn(e),o=this.peerDependenciesMeta.get(r);return o||this.peerDependenciesMeta.set(r,o={}),o}setRawField(e,r,{after:o=[]}={}){let a=new Set(o.filter(n=>Object.hasOwn(this.raw,n)));if(a.size===0||Object.hasOwn(this.raw,e))this.raw[e]=r;else{let n=this.raw,u=this.raw={},A=!1;for(let p of Object.keys(n))u[p]=n[p],A||(a.delete(p),a.size===0&&(u[e]=r,A=!0))}}exportTo(e,{compatibilityMode:r=!0}={}){if(Object.assign(e,this.raw),this.name!==null?e.name=fn(this.name):delete e.name,this.version!==null?e.version=this.version:delete e.version,this.os!==null?e.os=this.os:delete e.os,this.cpu!==null?e.cpu=this.cpu:delete e.cpu,this.type!==null?e.type=this.type:delete e.type,this.packageManager!==null?e.packageManager=this.packageManager:delete e.packageManager,this.private?e.private=!0:delete e.private,this.license!==null?e.license=this.license:delete e.license,this.languageName!==null?e.languageName=this.languageName:delete e.languageName,this.main!==null?e.main=this.main:delete e.main,this.module!==null?e.module=this.module:delete e.module,this.browser!==null){let n=this.browser;typeof n=="string"?e.browser=n:n instanceof Map&&(e.browser=Object.assign({},...Array.from(n.keys()).sort().map(u=>({[u]:n.get(u)}))))}else delete e.browser;this.bin.size===1&&this.name!==null&&this.bin.has(this.name.name)?e.bin=this.bin.get(this.name.name):this.bin.size>0?e.bin=Object.assign({},...Array.from(this.bin.keys()).sort().map(n=>({[n]:this.bin.get(n)}))):delete e.bin,this.workspaceDefinitions.length>0?this.raw.workspaces&&!Array.isArray(this.raw.workspaces)?e.workspaces={...this.raw.workspaces,packages:this.workspaceDefinitions.map(({pattern:n})=>n)}:e.workspaces=this.workspaceDefinitions.map(({pattern:n})=>n):this.raw.workspaces&&!Array.isArray(this.raw.workspaces)&&Object.keys(this.raw.workspaces).length>0?e.workspaces=this.raw.workspaces:delete e.workspaces;let o=[],a=[];for(let n of this.dependencies.values()){let u=this.dependenciesMeta.get(fn(n)),A=!1;if(r&&u){let p=u.get(null);p&&p.optional&&(A=!0)}A?a.push(n):o.push(n)}o.length>0?e.dependencies=Object.assign({},...cE(o).map(n=>({[fn(n)]:n.range}))):delete e.dependencies,a.length>0?e.optionalDependencies=Object.assign({},...cE(a).map(n=>({[fn(n)]:n.range}))):delete e.optionalDependencies,this.devDependencies.size>0?e.devDependencies=Object.assign({},...cE(this.devDependencies.values()).map(n=>({[fn(n)]:n.range}))):delete e.devDependencies,this.peerDependencies.size>0?e.peerDependencies=Object.assign({},...cE(this.peerDependencies.values()).map(n=>({[fn(n)]:n.range}))):delete e.peerDependencies,e.dependenciesMeta={};for(let[n,u]of ks(this.dependenciesMeta.entries(),([A,p])=>A))for(let[A,p]of ks(u.entries(),([h,E])=>h!==null?`0${h}`:"1")){let h=A!==null?Sa(In(Js(n),A)):n,E={...p};r&&A===null&&delete E.optional,Object.keys(E).length!==0&&(e.dependenciesMeta[h]=E)}if(Object.keys(e.dependenciesMeta).length===0&&delete e.dependenciesMeta,this.peerDependenciesMeta.size>0?e.peerDependenciesMeta=Object.assign({},...ks(this.peerDependenciesMeta.entries(),([n,u])=>n).map(([n,u])=>({[n]:u}))):delete e.peerDependenciesMeta,this.resolutions.length>0?e.resolutions=Object.assign({},...this.resolutions.map(({pattern:n,reference:u})=>({[_D(n)]:u}))):delete e.resolutions,this.files!==null?e.files=Array.from(this.files):delete e.files,this.preferUnplugged!==null?e.preferUnplugged=this.preferUnplugged:delete e.preferUnplugged,this.scripts!==null&&this.scripts.size>0){e.scripts??={};for(let n of Object.keys(e.scripts))this.scripts.has(n)||delete e.scripts[n];for(let[n,u]of this.scripts.entries())e.scripts[n]=u}else delete e.scripts;return e}},Mt=uE;Mt.fileName="package.json",Mt.allDependencies=["dependencies","devDependencies","peerDependencies"],Mt.hardDependencies=["dependencies","devDependencies"]});var Ese=_((_Nt,yse)=>{var $tt=_l(),ert=function(){return $tt.Date.now()};yse.exports=ert});var wse=_((HNt,Cse)=>{var trt=/\s/;function rrt(t){for(var e=t.length;e--&&trt.test(t.charAt(e)););return e}Cse.exports=rrt});var Bse=_((jNt,Ise)=>{var nrt=wse(),irt=/^\s+/;function srt(t){return t&&t.slice(0,nrt(t)+1).replace(irt,"")}Ise.exports=srt});var fE=_((qNt,vse)=>{var ort=pd(),art=Ju(),lrt="[object Symbol]";function crt(t){return typeof t=="symbol"||art(t)&&ort(t)==lrt}vse.exports=crt});var xse=_((GNt,Sse)=>{var urt=Bse(),Dse=il(),Art=fE(),Pse=0/0,frt=/^[-+]0x[0-9a-f]+$/i,prt=/^0b[01]+$/i,hrt=/^0o[0-7]+$/i,grt=parseInt;function drt(t){if(typeof t=="number")return t;if(Art(t))return Pse;if(Dse(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Dse(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=urt(t);var r=prt.test(t);return r||hrt.test(t)?grt(t.slice(2),r?2:8):frt.test(t)?Pse:+t}Sse.exports=drt});var Qse=_((YNt,kse)=>{var mrt=il(),cO=Ese(),bse=xse(),yrt="Expected a function",Ert=Math.max,Crt=Math.min;function wrt(t,e,r){var o,a,n,u,A,p,h=0,E=!1,I=!1,v=!0;if(typeof t!="function")throw new TypeError(yrt);e=bse(e)||0,mrt(r)&&(E=!!r.leading,I="maxWait"in r,n=I?Ert(bse(r.maxWait)||0,e):n,v="trailing"in r?!!r.trailing:v);function b(Ae){var ye=o,ae=a;return o=a=void 0,h=Ae,u=t.apply(ae,ye),u}function C(Ae){return h=Ae,A=setTimeout(U,e),E?b(Ae):u}function T(Ae){var ye=Ae-p,ae=Ae-h,we=e-ye;return I?Crt(we,n-ae):we}function L(Ae){var ye=Ae-p,ae=Ae-h;return p===void 0||ye>=e||ye<0||I&&ae>=n}function U(){var Ae=cO();if(L(Ae))return J(Ae);A=setTimeout(U,T(Ae))}function J(Ae){return A=void 0,v&&o?b(Ae):(o=a=void 0,u)}function te(){A!==void 0&&clearTimeout(A),h=0,o=p=a=A=void 0}function le(){return A===void 0?u:J(cO())}function pe(){var Ae=cO(),ye=L(Ae);if(o=arguments,a=this,p=Ae,ye){if(A===void 0)return C(p);if(I)return clearTimeout(A),A=setTimeout(U,e),b(p)}return A===void 0&&(A=setTimeout(U,e)),u}return pe.cancel=te,pe.flush=le,pe}kse.exports=wrt});var uO=_((WNt,Fse)=>{var Irt=Qse(),Brt=il(),vrt="Expected a function";function Drt(t,e,r){var o=!0,a=!0;if(typeof t!="function")throw new TypeError(vrt);return Brt(r)&&(o="leading"in r?!!r.leading:o,a="trailing"in r?!!r.trailing:a),Irt(t,e,{leading:o,maxWait:e,trailing:a})}Fse.exports=Drt});function Srt(t){return typeof t.reportCode<"u"}var Tse,Rse,Nse,Prt,zt,Xs,Yl=Et(()=>{Tse=$e(uO()),Rse=Be("stream"),Nse=Be("string_decoder"),Prt=15,zt=class extends Error{constructor(r,o,a){super(o);this.reportExtra=a;this.reportCode=r}};Xs=class{constructor(){this.cacheHits=new Set;this.cacheMisses=new Set;this.reportedInfos=new Set;this.reportedWarnings=new Set;this.reportedErrors=new Set}getRecommendedLength(){return 180}reportCacheHit(e){this.cacheHits.add(e.locatorHash)}reportCacheMiss(e,r){this.cacheMisses.add(e.locatorHash)}static progressViaCounter(e){let r=0,o,a=new Promise(p=>{o=p}),n=p=>{let h=o;a=new Promise(E=>{o=E}),r=p,h()},u=(p=0)=>{n(r+1)},A=async function*(){for(;r{r=u}),a=(0,Tse.default)(u=>{let A=r;o=new Promise(p=>{r=p}),e=u,A()},1e3/Prt),n=async function*(){for(;;)await o,yield{title:e}}();return{[Symbol.asyncIterator](){return n},hasProgress:!1,hasTitle:!0,setTitle:a}}async startProgressPromise(e,r){let o=this.reportProgress(e);try{return await r(e)}finally{o.stop()}}startProgressSync(e,r){let o=this.reportProgress(e);try{return r(e)}finally{o.stop()}}reportInfoOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedInfos.has(a)||(this.reportedInfos.add(a),this.reportInfo(e,r),o?.reportExtra?.(this))}reportWarningOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedWarnings.has(a)||(this.reportedWarnings.add(a),this.reportWarning(e,r),o?.reportExtra?.(this))}reportErrorOnce(e,r,o){let a=o&&o.key?o.key:r;this.reportedErrors.has(a)||(this.reportedErrors.add(a),this.reportError(e,r),o?.reportExtra?.(this))}reportExceptionOnce(e){Srt(e)?this.reportErrorOnce(e.reportCode,e.message,{key:e,reportExtra:e.reportExtra}):this.reportErrorOnce(1,e.stack||e.message,{key:e})}createStreamReporter(e=null){let r=new Rse.PassThrough,o=new Nse.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` +`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",e!==null?this.reportInfo(null,`${e} ${p}`):this.reportInfo(null,p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&(e!==null?this.reportInfo(null,`${e} ${n}`):this.reportInfo(null,n))}),r}}});var pE,AO=Et(()=>{Yl();xo();pE=class{constructor(e){this.fetchers=e}supports(e,r){return!!this.tryFetcher(e,r)}getLocalPath(e,r){return this.getFetcher(e,r).getLocalPath(e,r)}async fetch(e,r){return await this.getFetcher(e,r).fetch(e,r)}tryFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));return o||null}getFetcher(e,r){let o=this.fetchers.find(a=>a.supports(e,r));if(!o)throw new zt(11,`${jr(r.project.configuration,e)} isn't supported by any available fetcher`);return o}}});var vd,fO=Et(()=>{xo();vd=class{constructor(e){this.resolvers=e.filter(r=>r)}supportsDescriptor(e,r){return!!this.tryResolverByDescriptor(e,r)}supportsLocator(e,r){return!!this.tryResolverByLocator(e,r)}shouldPersistResolution(e,r){return this.getResolverByLocator(e,r).shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.getResolverByDescriptor(e,o).bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.getResolverByDescriptor(e,r).getResolutionDependencies(e,r)}async getCandidates(e,r,o){return await this.getResolverByDescriptor(e,o).getCandidates(e,r,o)}async getSatisfying(e,r,o,a){return this.getResolverByDescriptor(e,a).getSatisfying(e,r,o,a)}async resolve(e,r){return await this.getResolverByLocator(e,r).resolve(e,r)}tryResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));return o||null}getResolverByDescriptor(e,r){let o=this.resolvers.find(a=>a.supportsDescriptor(e,r));if(!o)throw new Error(`${qn(r.project.configuration,e)} isn't supported by any available resolver`);return o}tryResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));return o||null}getResolverByLocator(e,r){let o=this.resolvers.find(a=>a.supportsLocator(e,r));if(!o)throw new Error(`${jr(r.project.configuration,e)} isn't supported by any available resolver`);return o}}});var hE,pO=Et(()=>{Pt();xo();hE=class{supports(e){return!!e.reference.startsWith("virtual:")}getLocalPath(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Qs(e,a);return r.fetcher.getLocalPath(n,r)}async fetch(e,r){let o=e.reference.indexOf("#");if(o===-1)throw new Error("Invalid virtual package reference");let a=e.reference.slice(o+1),n=Qs(e,a),u=await r.fetcher.fetch(n,r);return await this.ensureVirtualLink(e,u,r)}getLocatorFilename(e){return aE(e)}async ensureVirtualLink(e,r,o){let a=r.packageFs.getRealPath(),n=o.project.configuration.get("virtualFolder"),u=this.getLocatorFilename(e),A=mi.makeVirtualPath(n,u,a),p=new Uu(A,{baseFs:r.packageFs,pathUtils:K});return{...r,packageFs:p}}}});var gE,l1,Lse=Et(()=>{gE=class{static isVirtualDescriptor(e){return!!e.range.startsWith(gE.protocol)}static isVirtualLocator(e){return!!e.reference.startsWith(gE.protocol)}supportsDescriptor(e,r){return gE.isVirtualDescriptor(e)}supportsLocator(e,r){return gE.isVirtualLocator(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){throw new Error('Assertion failed: calling "bindDescriptor" on a virtual descriptor is unsupported')}getResolutionDependencies(e,r){throw new Error('Assertion failed: calling "getResolutionDependencies" on a virtual descriptor is unsupported')}async getCandidates(e,r,o){throw new Error('Assertion failed: calling "getCandidates" on a virtual descriptor is unsupported')}async getSatisfying(e,r,o,a){throw new Error('Assertion failed: calling "getSatisfying" on a virtual descriptor is unsupported')}async resolve(e,r){throw new Error('Assertion failed: calling "resolve" on a virtual locator is unsupported')}},l1=gE;l1.protocol="virtual:"});var dE,hO=Et(()=>{Pt();Bd();dE=class{supports(e){return!!e.reference.startsWith(Xn.protocol)}getLocalPath(e,r){return this.getWorkspace(e,r).cwd}async fetch(e,r){let o=this.getWorkspace(e,r).cwd;return{packageFs:new gn(o),prefixPath:Bt.dot,localPath:o}}getWorkspace(e,r){return r.project.getWorkspaceByCwd(e.reference.slice(Xn.protocol.length))}}});function c1(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Mse(t){return typeof t>"u"?3:c1(t)?0:Array.isArray(t)?1:2}function mO(t,e){return Object.hasOwn(t,e)}function brt(t){return c1(t)&&mO(t,"onConflict")&&typeof t.onConflict=="string"}function krt(t){if(typeof t>"u")return{onConflict:"default",value:t};if(!brt(t))return{onConflict:"default",value:t};if(mO(t,"value"))return t;let{onConflict:e,...r}=t;return{onConflict:e,value:r}}function Ose(t,e){let r=c1(t)&&mO(t,e)?t[e]:void 0;return krt(r)}function mE(t,e){return[t,e,Use]}function yO(t){return Array.isArray(t)?t[2]===Use:!1}function gO(t,e){if(c1(t)){let r={};for(let o of Object.keys(t))r[o]=gO(t[o],e);return mE(e,r)}return Array.isArray(t)?mE(e,t.map(r=>gO(r,e))):mE(e,t)}function dO(t,e,r,o,a){let n,u=[],A=a,p=0;for(let E=a-1;E>=o;--E){let[I,v]=t[E],{onConflict:b,value:C}=Ose(v,r),T=Mse(C);if(T!==3){if(n??=T,T!==n||b==="hardReset"){p=A;break}if(T===2)return mE(I,C);if(u.unshift([I,C]),b==="reset"){p=E;break}b==="extend"&&E===o&&(o=0),A=E}}if(typeof n>"u")return null;let h=u.map(([E])=>E).join(", ");switch(n){case 1:return mE(h,new Array().concat(...u.map(([E,I])=>I.map(v=>gO(v,E)))));case 0:{let E=Object.assign({},...u.map(([,T])=>T)),I=Object.keys(E),v={},b=t.map(([T,L])=>[T,Ose(L,r).value]),C=xrt(b,([T,L])=>{let U=Mse(L);return U!==0&&U!==3});if(C!==-1){let T=b.slice(C+1);for(let L of I)v[L]=dO(T,e,L,0,T.length)}else for(let T of I)v[T]=dO(b,e,T,p,b.length);return mE(h,v)}default:throw new Error("Assertion failed: Non-extendable value type")}}function _se(t){return dO(t.map(([e,r])=>[e,{["."]:r}]),[],".",0,t.length)}function u1(t){return yO(t)?t[1]:t}function YS(t){let e=yO(t)?t[1]:t;if(Array.isArray(e))return e.map(r=>YS(r));if(c1(e)){let r={};for(let[o,a]of Object.entries(e))r[o]=YS(a);return r}return e}function EO(t){return yO(t)?t[0]:null}var xrt,Use,Hse=Et(()=>{xrt=(t,e,r)=>{let o=[...t];return o.reverse(),o.findIndex(e,r)};Use=Symbol()});var WS={};Kt(WS,{getDefaultGlobalFolder:()=>wO,getHomeFolder:()=>yE,isFolderInside:()=>IO});function wO(){if(process.platform==="win32"){let t=ue.toPortablePath(process.env.LOCALAPPDATA||ue.join((0,CO.homedir)(),"AppData","Local"));return K.resolve(t,"Yarn/Berry")}if(process.env.XDG_DATA_HOME){let t=ue.toPortablePath(process.env.XDG_DATA_HOME);return K.resolve(t,"yarn/berry")}return K.resolve(yE(),".yarn/berry")}function yE(){return ue.toPortablePath((0,CO.homedir)()||"/usr/local/share")}function IO(t,e){let r=K.relative(e,t);return r&&!r.startsWith("..")&&!K.isAbsolute(r)}var CO,VS=Et(()=>{Pt();CO=Be("os")});var Yse=_(EE=>{"use strict";var sLt=Be("net"),Frt=Be("tls"),BO=Be("http"),jse=Be("https"),Trt=Be("events"),oLt=Be("assert"),Rrt=Be("util");EE.httpOverHttp=Nrt;EE.httpsOverHttp=Lrt;EE.httpOverHttps=Mrt;EE.httpsOverHttps=Ort;function Nrt(t){var e=new Qf(t);return e.request=BO.request,e}function Lrt(t){var e=new Qf(t);return e.request=BO.request,e.createSocket=qse,e.defaultPort=443,e}function Mrt(t){var e=new Qf(t);return e.request=jse.request,e}function Ort(t){var e=new Qf(t);return e.request=jse.request,e.createSocket=qse,e.defaultPort=443,e}function Qf(t){var e=this;e.options=t||{},e.proxyOptions=e.options.proxy||{},e.maxSockets=e.options.maxSockets||BO.Agent.defaultMaxSockets,e.requests=[],e.sockets=[],e.on("free",function(o,a,n,u){for(var A=Gse(a,n,u),p=0,h=e.requests.length;p=this.maxSockets){n.requests.push(u);return}n.createSocket(u,function(A){A.on("free",p),A.on("close",h),A.on("agentRemove",h),e.onSocket(A);function p(){n.emit("free",A,u)}function h(E){n.removeSocket(A),A.removeListener("free",p),A.removeListener("close",h),A.removeListener("agentRemove",h)}})};Qf.prototype.createSocket=function(e,r){var o=this,a={};o.sockets.push(a);var n=vO({},o.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:!1,headers:{host:e.host+":"+e.port}});e.localAddress&&(n.localAddress=e.localAddress),n.proxyAuth&&(n.headers=n.headers||{},n.headers["Proxy-Authorization"]="Basic "+new Buffer(n.proxyAuth).toString("base64")),sh("making CONNECT request");var u=o.request(n);u.useChunkedEncodingByDefault=!1,u.once("response",A),u.once("upgrade",p),u.once("connect",h),u.once("error",E),u.end();function A(I){I.upgrade=!0}function p(I,v,b){process.nextTick(function(){h(I,v,b)})}function h(I,v,b){if(u.removeAllListeners(),v.removeAllListeners(),I.statusCode!==200){sh("tunneling socket could not be established, statusCode=%d",I.statusCode),v.destroy();var C=new Error("tunneling socket could not be established, statusCode="+I.statusCode);C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}if(b.length>0){sh("got illegal response body from proxy"),v.destroy();var C=new Error("got illegal response body from proxy");C.code="ECONNRESET",e.request.emit("error",C),o.removeSocket(a);return}return sh("tunneling connection has established"),o.sockets[o.sockets.indexOf(a)]=v,r(v)}function E(I){u.removeAllListeners(),sh(`tunneling socket could not be established, cause=%s +`,I.message,I.stack);var v=new Error("tunneling socket could not be established, cause="+I.message);v.code="ECONNRESET",e.request.emit("error",v),o.removeSocket(a)}};Qf.prototype.removeSocket=function(e){var r=this.sockets.indexOf(e);if(r!==-1){this.sockets.splice(r,1);var o=this.requests.shift();o&&this.createSocket(o,function(a){o.request.onSocket(a)})}};function qse(t,e){var r=this;Qf.prototype.createSocket.call(r,t,function(o){var a=t.request.getHeader("host"),n=vO({},r.options,{socket:o,servername:a?a.replace(/:.*$/,""):t.host}),u=Frt.connect(0,n);r.sockets[r.sockets.indexOf(o)]=u,e(u)})}function Gse(t,e,r){return typeof t=="string"?{host:t,port:e,localAddress:r}:t}function vO(t){for(var e=1,r=arguments.length;e{Wse.exports=Yse()});var Tf=_((Ff,KS)=>{"use strict";Object.defineProperty(Ff,"__esModule",{value:!0});var Kse=["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function Urt(t){return Kse.includes(t)}var _rt=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","FormData","URLSearchParams","HTMLElement",...Kse];function Hrt(t){return _rt.includes(t)}var jrt=["null","undefined","string","number","bigint","boolean","symbol"];function qrt(t){return jrt.includes(t)}function CE(t){return e=>typeof e===t}var{toString:Jse}=Object.prototype,A1=t=>{let e=Jse.call(t).slice(8,-1);if(/HTML\w+Element/.test(e)&&xe.domElement(t))return"HTMLElement";if(Hrt(e))return e},ei=t=>e=>A1(e)===t;function xe(t){if(t===null)return"null";switch(typeof t){case"undefined":return"undefined";case"string":return"string";case"number":return"number";case"boolean":return"boolean";case"function":return"Function";case"bigint":return"bigint";case"symbol":return"symbol";default:}if(xe.observable(t))return"Observable";if(xe.array(t))return"Array";if(xe.buffer(t))return"Buffer";let e=A1(t);if(e)return e;if(t instanceof String||t instanceof Boolean||t instanceof Number)throw new TypeError("Please don't use object wrappers for primitive types");return"Object"}xe.undefined=CE("undefined");xe.string=CE("string");var Grt=CE("number");xe.number=t=>Grt(t)&&!xe.nan(t);xe.bigint=CE("bigint");xe.function_=CE("function");xe.null_=t=>t===null;xe.class_=t=>xe.function_(t)&&t.toString().startsWith("class ");xe.boolean=t=>t===!0||t===!1;xe.symbol=CE("symbol");xe.numericString=t=>xe.string(t)&&!xe.emptyStringOrWhitespace(t)&&!Number.isNaN(Number(t));xe.array=(t,e)=>Array.isArray(t)?xe.function_(e)?t.every(e):!0:!1;xe.buffer=t=>{var e,r,o,a;return(a=(o=(r=(e=t)===null||e===void 0?void 0:e.constructor)===null||r===void 0?void 0:r.isBuffer)===null||o===void 0?void 0:o.call(r,t))!==null&&a!==void 0?a:!1};xe.nullOrUndefined=t=>xe.null_(t)||xe.undefined(t);xe.object=t=>!xe.null_(t)&&(typeof t=="object"||xe.function_(t));xe.iterable=t=>{var e;return xe.function_((e=t)===null||e===void 0?void 0:e[Symbol.iterator])};xe.asyncIterable=t=>{var e;return xe.function_((e=t)===null||e===void 0?void 0:e[Symbol.asyncIterator])};xe.generator=t=>xe.iterable(t)&&xe.function_(t.next)&&xe.function_(t.throw);xe.asyncGenerator=t=>xe.asyncIterable(t)&&xe.function_(t.next)&&xe.function_(t.throw);xe.nativePromise=t=>ei("Promise")(t);var Yrt=t=>{var e,r;return xe.function_((e=t)===null||e===void 0?void 0:e.then)&&xe.function_((r=t)===null||r===void 0?void 0:r.catch)};xe.promise=t=>xe.nativePromise(t)||Yrt(t);xe.generatorFunction=ei("GeneratorFunction");xe.asyncGeneratorFunction=t=>A1(t)==="AsyncGeneratorFunction";xe.asyncFunction=t=>A1(t)==="AsyncFunction";xe.boundFunction=t=>xe.function_(t)&&!t.hasOwnProperty("prototype");xe.regExp=ei("RegExp");xe.date=ei("Date");xe.error=ei("Error");xe.map=t=>ei("Map")(t);xe.set=t=>ei("Set")(t);xe.weakMap=t=>ei("WeakMap")(t);xe.weakSet=t=>ei("WeakSet")(t);xe.int8Array=ei("Int8Array");xe.uint8Array=ei("Uint8Array");xe.uint8ClampedArray=ei("Uint8ClampedArray");xe.int16Array=ei("Int16Array");xe.uint16Array=ei("Uint16Array");xe.int32Array=ei("Int32Array");xe.uint32Array=ei("Uint32Array");xe.float32Array=ei("Float32Array");xe.float64Array=ei("Float64Array");xe.bigInt64Array=ei("BigInt64Array");xe.bigUint64Array=ei("BigUint64Array");xe.arrayBuffer=ei("ArrayBuffer");xe.sharedArrayBuffer=ei("SharedArrayBuffer");xe.dataView=ei("DataView");xe.directInstanceOf=(t,e)=>Object.getPrototypeOf(t)===e.prototype;xe.urlInstance=t=>ei("URL")(t);xe.urlString=t=>{if(!xe.string(t))return!1;try{return new URL(t),!0}catch{return!1}};xe.truthy=t=>Boolean(t);xe.falsy=t=>!t;xe.nan=t=>Number.isNaN(t);xe.primitive=t=>xe.null_(t)||qrt(typeof t);xe.integer=t=>Number.isInteger(t);xe.safeInteger=t=>Number.isSafeInteger(t);xe.plainObject=t=>{if(Jse.call(t)!=="[object Object]")return!1;let e=Object.getPrototypeOf(t);return e===null||e===Object.getPrototypeOf({})};xe.typedArray=t=>Urt(A1(t));var Wrt=t=>xe.safeInteger(t)&&t>=0;xe.arrayLike=t=>!xe.nullOrUndefined(t)&&!xe.function_(t)&&Wrt(t.length);xe.inRange=(t,e)=>{if(xe.number(e))return t>=Math.min(0,e)&&t<=Math.max(e,0);if(xe.array(e)&&e.length===2)return t>=Math.min(...e)&&t<=Math.max(...e);throw new TypeError(`Invalid range: ${JSON.stringify(e)}`)};var Vrt=1,Krt=["innerHTML","ownerDocument","style","attributes","nodeValue"];xe.domElement=t=>xe.object(t)&&t.nodeType===Vrt&&xe.string(t.nodeName)&&!xe.plainObject(t)&&Krt.every(e=>e in t);xe.observable=t=>{var e,r,o,a;return t?t===((r=(e=t)[Symbol.observable])===null||r===void 0?void 0:r.call(e))||t===((a=(o=t)["@@observable"])===null||a===void 0?void 0:a.call(o)):!1};xe.nodeStream=t=>xe.object(t)&&xe.function_(t.pipe)&&!xe.observable(t);xe.infinite=t=>t===1/0||t===-1/0;var zse=t=>e=>xe.integer(e)&&Math.abs(e%2)===t;xe.evenInteger=zse(0);xe.oddInteger=zse(1);xe.emptyArray=t=>xe.array(t)&&t.length===0;xe.nonEmptyArray=t=>xe.array(t)&&t.length>0;xe.emptyString=t=>xe.string(t)&&t.length===0;xe.nonEmptyString=t=>xe.string(t)&&t.length>0;var Jrt=t=>xe.string(t)&&!/\S/.test(t);xe.emptyStringOrWhitespace=t=>xe.emptyString(t)||Jrt(t);xe.emptyObject=t=>xe.object(t)&&!xe.map(t)&&!xe.set(t)&&Object.keys(t).length===0;xe.nonEmptyObject=t=>xe.object(t)&&!xe.map(t)&&!xe.set(t)&&Object.keys(t).length>0;xe.emptySet=t=>xe.set(t)&&t.size===0;xe.nonEmptySet=t=>xe.set(t)&&t.size>0;xe.emptyMap=t=>xe.map(t)&&t.size===0;xe.nonEmptyMap=t=>xe.map(t)&&t.size>0;xe.propertyKey=t=>xe.any([xe.string,xe.number,xe.symbol],t);xe.formData=t=>ei("FormData")(t);xe.urlSearchParams=t=>ei("URLSearchParams")(t);var Xse=(t,e,r)=>{if(!xe.function_(e))throw new TypeError(`Invalid predicate: ${JSON.stringify(e)}`);if(r.length===0)throw new TypeError("Invalid number of values");return t.call(r,e)};xe.any=(t,...e)=>(xe.array(t)?t:[t]).some(o=>Xse(Array.prototype.some,o,e));xe.all=(t,...e)=>Xse(Array.prototype.every,t,e);var Ht=(t,e,r,o={})=>{if(!t){let{multipleValues:a}=o,n=a?`received values of types ${[...new Set(r.map(u=>`\`${xe(u)}\``))].join(", ")}`:`received value of type \`${xe(r)}\``;throw new TypeError(`Expected value which is \`${e}\`, ${n}.`)}};Ff.assert={undefined:t=>Ht(xe.undefined(t),"undefined",t),string:t=>Ht(xe.string(t),"string",t),number:t=>Ht(xe.number(t),"number",t),bigint:t=>Ht(xe.bigint(t),"bigint",t),function_:t=>Ht(xe.function_(t),"Function",t),null_:t=>Ht(xe.null_(t),"null",t),class_:t=>Ht(xe.class_(t),"Class",t),boolean:t=>Ht(xe.boolean(t),"boolean",t),symbol:t=>Ht(xe.symbol(t),"symbol",t),numericString:t=>Ht(xe.numericString(t),"string with a number",t),array:(t,e)=>{Ht(xe.array(t),"Array",t),e&&t.forEach(e)},buffer:t=>Ht(xe.buffer(t),"Buffer",t),nullOrUndefined:t=>Ht(xe.nullOrUndefined(t),"null or undefined",t),object:t=>Ht(xe.object(t),"Object",t),iterable:t=>Ht(xe.iterable(t),"Iterable",t),asyncIterable:t=>Ht(xe.asyncIterable(t),"AsyncIterable",t),generator:t=>Ht(xe.generator(t),"Generator",t),asyncGenerator:t=>Ht(xe.asyncGenerator(t),"AsyncGenerator",t),nativePromise:t=>Ht(xe.nativePromise(t),"native Promise",t),promise:t=>Ht(xe.promise(t),"Promise",t),generatorFunction:t=>Ht(xe.generatorFunction(t),"GeneratorFunction",t),asyncGeneratorFunction:t=>Ht(xe.asyncGeneratorFunction(t),"AsyncGeneratorFunction",t),asyncFunction:t=>Ht(xe.asyncFunction(t),"AsyncFunction",t),boundFunction:t=>Ht(xe.boundFunction(t),"Function",t),regExp:t=>Ht(xe.regExp(t),"RegExp",t),date:t=>Ht(xe.date(t),"Date",t),error:t=>Ht(xe.error(t),"Error",t),map:t=>Ht(xe.map(t),"Map",t),set:t=>Ht(xe.set(t),"Set",t),weakMap:t=>Ht(xe.weakMap(t),"WeakMap",t),weakSet:t=>Ht(xe.weakSet(t),"WeakSet",t),int8Array:t=>Ht(xe.int8Array(t),"Int8Array",t),uint8Array:t=>Ht(xe.uint8Array(t),"Uint8Array",t),uint8ClampedArray:t=>Ht(xe.uint8ClampedArray(t),"Uint8ClampedArray",t),int16Array:t=>Ht(xe.int16Array(t),"Int16Array",t),uint16Array:t=>Ht(xe.uint16Array(t),"Uint16Array",t),int32Array:t=>Ht(xe.int32Array(t),"Int32Array",t),uint32Array:t=>Ht(xe.uint32Array(t),"Uint32Array",t),float32Array:t=>Ht(xe.float32Array(t),"Float32Array",t),float64Array:t=>Ht(xe.float64Array(t),"Float64Array",t),bigInt64Array:t=>Ht(xe.bigInt64Array(t),"BigInt64Array",t),bigUint64Array:t=>Ht(xe.bigUint64Array(t),"BigUint64Array",t),arrayBuffer:t=>Ht(xe.arrayBuffer(t),"ArrayBuffer",t),sharedArrayBuffer:t=>Ht(xe.sharedArrayBuffer(t),"SharedArrayBuffer",t),dataView:t=>Ht(xe.dataView(t),"DataView",t),urlInstance:t=>Ht(xe.urlInstance(t),"URL",t),urlString:t=>Ht(xe.urlString(t),"string with a URL",t),truthy:t=>Ht(xe.truthy(t),"truthy",t),falsy:t=>Ht(xe.falsy(t),"falsy",t),nan:t=>Ht(xe.nan(t),"NaN",t),primitive:t=>Ht(xe.primitive(t),"primitive",t),integer:t=>Ht(xe.integer(t),"integer",t),safeInteger:t=>Ht(xe.safeInteger(t),"integer",t),plainObject:t=>Ht(xe.plainObject(t),"plain object",t),typedArray:t=>Ht(xe.typedArray(t),"TypedArray",t),arrayLike:t=>Ht(xe.arrayLike(t),"array-like",t),domElement:t=>Ht(xe.domElement(t),"HTMLElement",t),observable:t=>Ht(xe.observable(t),"Observable",t),nodeStream:t=>Ht(xe.nodeStream(t),"Node.js Stream",t),infinite:t=>Ht(xe.infinite(t),"infinite number",t),emptyArray:t=>Ht(xe.emptyArray(t),"empty array",t),nonEmptyArray:t=>Ht(xe.nonEmptyArray(t),"non-empty array",t),emptyString:t=>Ht(xe.emptyString(t),"empty string",t),nonEmptyString:t=>Ht(xe.nonEmptyString(t),"non-empty string",t),emptyStringOrWhitespace:t=>Ht(xe.emptyStringOrWhitespace(t),"empty string or whitespace",t),emptyObject:t=>Ht(xe.emptyObject(t),"empty object",t),nonEmptyObject:t=>Ht(xe.nonEmptyObject(t),"non-empty object",t),emptySet:t=>Ht(xe.emptySet(t),"empty set",t),nonEmptySet:t=>Ht(xe.nonEmptySet(t),"non-empty set",t),emptyMap:t=>Ht(xe.emptyMap(t),"empty map",t),nonEmptyMap:t=>Ht(xe.nonEmptyMap(t),"non-empty map",t),propertyKey:t=>Ht(xe.propertyKey(t),"PropertyKey",t),formData:t=>Ht(xe.formData(t),"FormData",t),urlSearchParams:t=>Ht(xe.urlSearchParams(t),"URLSearchParams",t),evenInteger:t=>Ht(xe.evenInteger(t),"even integer",t),oddInteger:t=>Ht(xe.oddInteger(t),"odd integer",t),directInstanceOf:(t,e)=>Ht(xe.directInstanceOf(t,e),"T",t),inRange:(t,e)=>Ht(xe.inRange(t,e),"in range",t),any:(t,...e)=>Ht(xe.any(t,...e),"predicate returns truthy for any value",e,{multipleValues:!0}),all:(t,...e)=>Ht(xe.all(t,...e),"predicate returns truthy for all values",e,{multipleValues:!0})};Object.defineProperties(xe,{class:{value:xe.class_},function:{value:xe.function_},null:{value:xe.null_}});Object.defineProperties(Ff.assert,{class:{value:Ff.assert.class_},function:{value:Ff.assert.function_},null:{value:Ff.assert.null_}});Ff.default=xe;KS.exports=xe;KS.exports.default=xe;KS.exports.assert=Ff.assert});var Zse=_((cLt,DO)=>{"use strict";var JS=class extends Error{constructor(e){super(e||"Promise was canceled"),this.name="CancelError"}get isCanceled(){return!0}},wE=class{static fn(e){return(...r)=>new wE((o,a,n)=>{r.push(n),e(...r).then(o,a)})}constructor(e){this._cancelHandlers=[],this._isPending=!0,this._isCanceled=!1,this._rejectOnCancel=!0,this._promise=new Promise((r,o)=>{this._reject=o;let a=A=>{this._isPending=!1,r(A)},n=A=>{this._isPending=!1,o(A)},u=A=>{if(!this._isPending)throw new Error("The `onCancel` handler was attached after the promise settled.");this._cancelHandlers.push(A)};return Object.defineProperties(u,{shouldReject:{get:()=>this._rejectOnCancel,set:A=>{this._rejectOnCancel=A}}}),e(a,n,u)})}then(e,r){return this._promise.then(e,r)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(e){if(!(!this._isPending||this._isCanceled)){if(this._cancelHandlers.length>0)try{for(let r of this._cancelHandlers)r()}catch(r){this._reject(r)}this._isCanceled=!0,this._rejectOnCancel&&this._reject(new JS(e))}}get isCanceled(){return this._isCanceled}};Object.setPrototypeOf(wE.prototype,Promise.prototype);DO.exports=wE;DO.exports.CancelError=JS});var $se=_((SO,xO)=>{"use strict";Object.defineProperty(SO,"__esModule",{value:!0});var zrt=Be("tls"),PO=(t,e)=>{let r;typeof e=="function"?r={connect:e}:r=e;let o=typeof r.connect=="function",a=typeof r.secureConnect=="function",n=typeof r.close=="function",u=()=>{o&&r.connect(),t instanceof zrt.TLSSocket&&a&&(t.authorized?r.secureConnect():t.authorizationError||t.once("secureConnect",r.secureConnect)),n&&t.once("close",r.close)};t.writable&&!t.connecting?u():t.connecting?t.once("connect",u):t.destroyed&&n&&r.close(t._hadError)};SO.default=PO;xO.exports=PO;xO.exports.default=PO});var eoe=_((kO,QO)=>{"use strict";Object.defineProperty(kO,"__esModule",{value:!0});var Xrt=$se(),Zrt=Number(process.versions.node.split(".")[0]),bO=t=>{let e={start:Date.now(),socket:void 0,lookup:void 0,connect:void 0,secureConnect:void 0,upload:void 0,response:void 0,end:void 0,error:void 0,abort:void 0,phases:{wait:void 0,dns:void 0,tcp:void 0,tls:void 0,request:void 0,firstByte:void 0,download:void 0,total:void 0}};t.timings=e;let r=u=>{let A=u.emit.bind(u);u.emit=(p,...h)=>(p==="error"&&(e.error=Date.now(),e.phases.total=e.error-e.start,u.emit=A),A(p,...h))};r(t),t.prependOnceListener("abort",()=>{e.abort=Date.now(),(!e.response||Zrt>=13)&&(e.phases.total=Date.now()-e.start)});let o=u=>{e.socket=Date.now(),e.phases.wait=e.socket-e.start;let A=()=>{e.lookup=Date.now(),e.phases.dns=e.lookup-e.socket};u.prependOnceListener("lookup",A),Xrt.default(u,{connect:()=>{e.connect=Date.now(),e.lookup===void 0&&(u.removeListener("lookup",A),e.lookup=e.connect,e.phases.dns=e.lookup-e.socket),e.phases.tcp=e.connect-e.lookup},secureConnect:()=>{e.secureConnect=Date.now(),e.phases.tls=e.secureConnect-e.connect}})};t.socket?o(t.socket):t.prependOnceListener("socket",o);let a=()=>{var u;e.upload=Date.now(),e.phases.request=e.upload-(u=e.secureConnect,u??e.connect)};return(()=>typeof t.writableFinished=="boolean"?t.writableFinished:t.finished&&t.outputSize===0&&(!t.socket||t.socket.writableLength===0))()?a():t.prependOnceListener("finish",a),t.prependOnceListener("response",u=>{e.response=Date.now(),e.phases.firstByte=e.response-e.upload,u.timings=e,r(u),u.prependOnceListener("end",()=>{e.end=Date.now(),e.phases.download=e.end-e.response,e.phases.total=e.end-e.start})}),e};kO.default=bO;QO.exports=bO;QO.exports.default=bO});var aoe=_((uLt,RO)=>{"use strict";var{V4MAPPED:$rt,ADDRCONFIG:ent,ALL:ooe,promises:{Resolver:toe},lookup:tnt}=Be("dns"),{promisify:FO}=Be("util"),rnt=Be("os"),IE=Symbol("cacheableLookupCreateConnection"),TO=Symbol("cacheableLookupInstance"),roe=Symbol("expires"),nnt=typeof ooe=="number",noe=t=>{if(!(t&&typeof t.createConnection=="function"))throw new Error("Expected an Agent instance as the first argument")},int=t=>{for(let e of t)e.family!==6&&(e.address=`::ffff:${e.address}`,e.family=6)},ioe=()=>{let t=!1,e=!1;for(let r of Object.values(rnt.networkInterfaces()))for(let o of r)if(!o.internal&&(o.family==="IPv6"?e=!0:t=!0,t&&e))return{has4:t,has6:e};return{has4:t,has6:e}},snt=t=>Symbol.iterator in t,soe={ttl:!0},ont={all:!0},zS=class{constructor({cache:e=new Map,maxTtl:r=1/0,fallbackDuration:o=3600,errorTtl:a=.15,resolver:n=new toe,lookup:u=tnt}={}){if(this.maxTtl=r,this.errorTtl=a,this._cache=e,this._resolver=n,this._dnsLookup=FO(u),this._resolver instanceof toe?(this._resolve4=this._resolver.resolve4.bind(this._resolver),this._resolve6=this._resolver.resolve6.bind(this._resolver)):(this._resolve4=FO(this._resolver.resolve4.bind(this._resolver)),this._resolve6=FO(this._resolver.resolve6.bind(this._resolver))),this._iface=ioe(),this._pending={},this._nextRemovalTime=!1,this._hostnamesToFallback=new Set,o<1)this._fallback=!1;else{this._fallback=!0;let A=setInterval(()=>{this._hostnamesToFallback.clear()},o*1e3);A.unref&&A.unref()}this.lookup=this.lookup.bind(this),this.lookupAsync=this.lookupAsync.bind(this)}set servers(e){this.clear(),this._resolver.setServers(e)}get servers(){return this._resolver.getServers()}lookup(e,r,o){if(typeof r=="function"?(o=r,r={}):typeof r=="number"&&(r={family:r}),!o)throw new Error("Callback must be a function.");this.lookupAsync(e,r).then(a=>{r.all?o(null,a):o(null,a.address,a.family,a.expires,a.ttl)},o)}async lookupAsync(e,r={}){typeof r=="number"&&(r={family:r});let o=await this.query(e);if(r.family===6){let a=o.filter(n=>n.family===6);r.hints&$rt&&(nnt&&r.hints&ooe||a.length===0)?int(o):o=a}else r.family===4&&(o=o.filter(a=>a.family===4));if(r.hints&ent){let{_iface:a}=this;o=o.filter(n=>n.family===6?a.has6:a.has4)}if(o.length===0){let a=new Error(`cacheableLookup ENOTFOUND ${e}`);throw a.code="ENOTFOUND",a.hostname=e,a}return r.all?o:o[0]}async query(e){let r=await this._cache.get(e);if(!r){let o=this._pending[e];if(o)r=await o;else{let a=this.queryAndCache(e);this._pending[e]=a,r=await a}}return r=r.map(o=>({...o})),r}async _resolve(e){let r=async h=>{try{return await h}catch(E){if(E.code==="ENODATA"||E.code==="ENOTFOUND")return[];throw E}},[o,a]=await Promise.all([this._resolve4(e,soe),this._resolve6(e,soe)].map(h=>r(h))),n=0,u=0,A=0,p=Date.now();for(let h of o)h.family=4,h.expires=p+h.ttl*1e3,n=Math.max(n,h.ttl);for(let h of a)h.family=6,h.expires=p+h.ttl*1e3,u=Math.max(u,h.ttl);return o.length>0?a.length>0?A=Math.min(n,u):A=n:A=u,{entries:[...o,...a],cacheTtl:A}}async _lookup(e){try{return{entries:await this._dnsLookup(e,{all:!0}),cacheTtl:0}}catch{return{entries:[],cacheTtl:0}}}async _set(e,r,o){if(this.maxTtl>0&&o>0){o=Math.min(o,this.maxTtl)*1e3,r[roe]=Date.now()+o;try{await this._cache.set(e,r,o)}catch(a){this.lookupAsync=async()=>{let n=new Error("Cache Error. Please recreate the CacheableLookup instance.");throw n.cause=a,n}}snt(this._cache)&&this._tick(o)}}async queryAndCache(e){if(this._hostnamesToFallback.has(e))return this._dnsLookup(e,ont);try{let r=await this._resolve(e);r.entries.length===0&&this._fallback&&(r=await this._lookup(e),r.entries.length!==0&&this._hostnamesToFallback.add(e));let o=r.entries.length===0?this.errorTtl:r.cacheTtl;return await this._set(e,r.entries,o),delete this._pending[e],r.entries}catch(r){throw delete this._pending[e],r}}_tick(e){let r=this._nextRemovalTime;(!r||e{this._nextRemovalTime=!1;let o=1/0,a=Date.now();for(let[n,u]of this._cache){let A=u[roe];a>=A?this._cache.delete(n):A("lookup"in r||(r.lookup=this.lookup),e[IE](r,o))}uninstall(e){if(noe(e),e[IE]){if(e[TO]!==this)throw new Error("The agent is not owned by this CacheableLookup instance");e.createConnection=e[IE],delete e[IE],delete e[TO]}}updateInterfaceInfo(){let{_iface:e}=this;this._iface=ioe(),(e.has4&&!this._iface.has4||e.has6&&!this._iface.has6)&&this._cache.clear()}clear(e){if(e){this._cache.delete(e);return}this._cache.clear()}};RO.exports=zS;RO.exports.default=zS});var uoe=_((ALt,NO)=>{"use strict";var ant=typeof URL>"u"?Be("url").URL:URL,lnt="text/plain",cnt="us-ascii",loe=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),unt=(t,{stripHash:e})=>{let r=t.match(/^data:([^,]*?),([^#]*?)(?:#(.*))?$/);if(!r)throw new Error(`Invalid URL: ${t}`);let o=r[1].split(";"),a=r[2],n=e?"":r[3],u=!1;o[o.length-1]==="base64"&&(o.pop(),u=!0);let A=(o.shift()||"").toLowerCase(),h=[...o.map(E=>{let[I,v=""]=E.split("=").map(b=>b.trim());return I==="charset"&&(v=v.toLowerCase(),v===cnt)?"":`${I}${v?`=${v}`:""}`}).filter(Boolean)];return u&&h.push("base64"),(h.length!==0||A&&A!==lnt)&&h.unshift(A),`data:${h.join(";")},${u?a.trim():a}${n?`#${n}`:""}`},coe=(t,e)=>{if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},Reflect.has(e,"normalizeHttps"))throw new Error("options.normalizeHttps is renamed to options.forceHttp");if(Reflect.has(e,"normalizeHttp"))throw new Error("options.normalizeHttp is renamed to options.forceHttps");if(Reflect.has(e,"stripFragment"))throw new Error("options.stripFragment is renamed to options.stripHash");if(t=t.trim(),/^data:/i.test(t))return unt(t,e);let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new ant(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash&&(a.hash=""),a.pathname&&(a.pathname=a.pathname.replace(/((?!:).|^)\/{2,}/g,(n,u)=>/^(?!\/)/g.test(u)?`${u}/`:"/")),a.pathname&&(a.pathname=decodeURI(a.pathname)),e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let n=a.pathname.split("/"),u=n[n.length-1];loe(u,e.removeDirectoryIndex)&&(n=n.slice(0,n.length-1),a.pathname=n.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.([a-z\-\d]{2,63})\.([a-z.]{2,5})$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let n of[...a.searchParams.keys()])loe(n,e.removeQueryParameters)&&a.searchParams.delete(n);return e.sortQueryParameters&&a.searchParams.sort(),e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,"")),t=a.toString(),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t};NO.exports=coe;NO.exports.default=coe});var poe=_((fLt,foe)=>{foe.exports=Aoe;function Aoe(t,e){if(t&&e)return Aoe(t)(e);if(typeof t!="function")throw new TypeError("need wrapper function");return Object.keys(t).forEach(function(o){r[o]=t[o]}),r;function r(){for(var o=new Array(arguments.length),a=0;a{var hoe=poe();LO.exports=hoe(XS);LO.exports.strict=hoe(goe);XS.proto=XS(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return XS(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return goe(this)},configurable:!0})});function XS(t){var e=function(){return e.called?e.value:(e.called=!0,e.value=t.apply(this,arguments))};return e.called=!1,e}function goe(t){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=t.apply(this,arguments)},r=t.name||"Function wrapped with `once`";return e.onceError=r+" shouldn't be called more than once",e.called=!1,e}});var OO=_((hLt,moe)=>{var Ant=MO(),fnt=function(){},pnt=function(t){return t.setHeader&&typeof t.abort=="function"},hnt=function(t){return t.stdio&&Array.isArray(t.stdio)&&t.stdio.length===3},doe=function(t,e,r){if(typeof e=="function")return doe(t,null,e);e||(e={}),r=Ant(r||fnt);var o=t._writableState,a=t._readableState,n=e.readable||e.readable!==!1&&t.readable,u=e.writable||e.writable!==!1&&t.writable,A=function(){t.writable||p()},p=function(){u=!1,n||r.call(t)},h=function(){n=!1,u||r.call(t)},E=function(C){r.call(t,C?new Error("exited with error code: "+C):null)},I=function(C){r.call(t,C)},v=function(){if(n&&!(a&&a.ended))return r.call(t,new Error("premature close"));if(u&&!(o&&o.ended))return r.call(t,new Error("premature close"))},b=function(){t.req.on("finish",p)};return pnt(t)?(t.on("complete",p),t.on("abort",v),t.req?b():t.on("request",b)):u&&!o&&(t.on("end",A),t.on("close",A)),hnt(t)&&t.on("exit",E),t.on("end",h),t.on("finish",p),e.error!==!1&&t.on("error",I),t.on("close",v),function(){t.removeListener("complete",p),t.removeListener("abort",v),t.removeListener("request",b),t.req&&t.req.removeListener("finish",p),t.removeListener("end",A),t.removeListener("close",A),t.removeListener("finish",p),t.removeListener("exit",E),t.removeListener("end",h),t.removeListener("error",I),t.removeListener("close",v)}};moe.exports=doe});var Coe=_((gLt,Eoe)=>{var gnt=MO(),dnt=OO(),UO=Be("fs"),f1=function(){},mnt=/^v?\.0/.test(process.version),ZS=function(t){return typeof t=="function"},ynt=function(t){return!mnt||!UO?!1:(t instanceof(UO.ReadStream||f1)||t instanceof(UO.WriteStream||f1))&&ZS(t.close)},Ent=function(t){return t.setHeader&&ZS(t.abort)},Cnt=function(t,e,r,o){o=gnt(o);var a=!1;t.on("close",function(){a=!0}),dnt(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,ynt(t))return t.close(f1);if(Ent(t))return t.abort();if(ZS(t.destroy))return t.destroy();o(u||new Error("stream was destroyed"))}}},yoe=function(t){t()},wnt=function(t,e){return t.pipe(e)},Int=function(){var t=Array.prototype.slice.call(arguments),e=ZS(t[t.length-1]||f1)&&t.pop()||f1;if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new Error("pump requires two streams per minimum");var r,o=t.map(function(a,n){var u=n0;return Cnt(a,u,A,function(p){r||(r=p),p&&o.forEach(yoe),!u&&(o.forEach(yoe),e(r))})});return t.reduce(wnt)};Eoe.exports=Int});var Ioe=_((dLt,woe)=>{"use strict";var{PassThrough:Bnt}=Be("stream");woe.exports=t=>{t={...t};let{array:e}=t,{encoding:r}=t,o=r==="buffer",a=!1;e?a=!(r||o):r=r||"utf8",o&&(r=null);let n=new Bnt({objectMode:a});r&&n.setEncoding(r);let u=0,A=[];return n.on("data",p=>{A.push(p),a?u=A.length:u+=p.length}),n.getBufferedValue=()=>e?A:o?Buffer.concat(A,u):A.join(""),n.getBufferedLength=()=>u,n}});var Boe=_((mLt,BE)=>{"use strict";var vnt=Coe(),Dnt=Ioe(),$S=class extends Error{constructor(){super("maxBuffer exceeded"),this.name="MaxBufferError"}};async function ex(t,e){if(!t)return Promise.reject(new Error("Expected a stream"));e={maxBuffer:1/0,...e};let{maxBuffer:r}=e,o;return await new Promise((a,n)=>{let u=A=>{A&&(A.bufferedData=o.getBufferedValue()),n(A)};o=vnt(t,Dnt(e),A=>{if(A){u(A);return}a()}),o.on("data",()=>{o.getBufferedLength()>r&&u(new $S)})}),o.getBufferedValue()}BE.exports=ex;BE.exports.default=ex;BE.exports.buffer=(t,e)=>ex(t,{...e,encoding:"buffer"});BE.exports.array=(t,e)=>ex(t,{...e,array:!0});BE.exports.MaxBufferError=$S});var Doe=_((ELt,voe)=>{"use strict";var Pnt=new Set([200,203,204,206,300,301,404,405,410,414,501]),Snt=new Set([200,203,204,300,301,302,303,307,308,404,405,410,414,501]),xnt=new Set([500,502,503,504]),bnt={date:!0,connection:!0,"keep-alive":!0,"proxy-authenticate":!0,"proxy-authorization":!0,te:!0,trailer:!0,"transfer-encoding":!0,upgrade:!0},knt={"content-length":!0,"content-encoding":!0,"transfer-encoding":!0,"content-range":!0};function Dd(t){let e=parseInt(t,10);return isFinite(e)?e:0}function Qnt(t){return t?xnt.has(t.status):!0}function _O(t){let e={};if(!t)return e;let r=t.trim().split(/\s*,\s*/);for(let o of r){let[a,n]=o.split(/\s*=\s*/,2);e[a]=n===void 0?!0:n.replace(/^"|"$/g,"")}return e}function Fnt(t){let e=[];for(let r in t){let o=t[r];e.push(o===!0?r:r+"="+o)}if(!!e.length)return e.join(", ")}voe.exports=class{constructor(e,r,{shared:o,cacheHeuristic:a,immutableMinTimeToLive:n,ignoreCargoCult:u,_fromObject:A}={}){if(A){this._fromObject(A);return}if(!r||!r.headers)throw Error("Response headers missing");this._assertRequestHasHeaders(e),this._responseTime=this.now(),this._isShared=o!==!1,this._cacheHeuristic=a!==void 0?a:.1,this._immutableMinTtl=n!==void 0?n:24*3600*1e3,this._status="status"in r?r.status:200,this._resHeaders=r.headers,this._rescc=_O(r.headers["cache-control"]),this._method="method"in e?e.method:"GET",this._url=e.url,this._host=e.headers.host,this._noAuthorization=!e.headers.authorization,this._reqHeaders=r.headers.vary?e.headers:null,this._reqcc=_O(e.headers["cache-control"]),u&&"pre-check"in this._rescc&&"post-check"in this._rescc&&(delete this._rescc["pre-check"],delete this._rescc["post-check"],delete this._rescc["no-cache"],delete this._rescc["no-store"],delete this._rescc["must-revalidate"],this._resHeaders=Object.assign({},this._resHeaders,{"cache-control":Fnt(this._rescc)}),delete this._resHeaders.expires,delete this._resHeaders.pragma),r.headers["cache-control"]==null&&/no-cache/.test(r.headers.pragma)&&(this._rescc["no-cache"]=!0)}now(){return Date.now()}storable(){return!!(!this._reqcc["no-store"]&&(this._method==="GET"||this._method==="HEAD"||this._method==="POST"&&this._hasExplicitExpiration())&&Snt.has(this._status)&&!this._rescc["no-store"]&&(!this._isShared||!this._rescc.private)&&(!this._isShared||this._noAuthorization||this._allowsStoringAuthenticated())&&(this._resHeaders.expires||this._rescc["max-age"]||this._isShared&&this._rescc["s-maxage"]||this._rescc.public||Pnt.has(this._status)))}_hasExplicitExpiration(){return this._isShared&&this._rescc["s-maxage"]||this._rescc["max-age"]||this._resHeaders.expires}_assertRequestHasHeaders(e){if(!e||!e.headers)throw Error("Request headers missing")}satisfiesWithoutRevalidation(e){this._assertRequestHasHeaders(e);let r=_O(e.headers["cache-control"]);return r["no-cache"]||/no-cache/.test(e.headers.pragma)||r["max-age"]&&this.age()>r["max-age"]||r["min-fresh"]&&this.timeToLive()<1e3*r["min-fresh"]||this.stale()&&!(r["max-stale"]&&!this._rescc["must-revalidate"]&&(r["max-stale"]===!0||r["max-stale"]>this.age()-this.maxAge()))?!1:this._requestMatches(e,!1)}_requestMatches(e,r){return(!this._url||this._url===e.url)&&this._host===e.headers.host&&(!e.method||this._method===e.method||r&&e.method==="HEAD")&&this._varyMatches(e)}_allowsStoringAuthenticated(){return this._rescc["must-revalidate"]||this._rescc.public||this._rescc["s-maxage"]}_varyMatches(e){if(!this._resHeaders.vary)return!0;if(this._resHeaders.vary==="*")return!1;let r=this._resHeaders.vary.trim().toLowerCase().split(/\s*,\s*/);for(let o of r)if(e.headers[o]!==this._reqHeaders[o])return!1;return!0}_copyWithoutHopByHopHeaders(e){let r={};for(let o in e)bnt[o]||(r[o]=e[o]);if(e.connection){let o=e.connection.trim().split(/\s*,\s*/);for(let a of o)delete r[a]}if(r.warning){let o=r.warning.split(/,/).filter(a=>!/^\s*1[0-9][0-9]/.test(a));o.length?r.warning=o.join(",").trim():delete r.warning}return r}responseHeaders(){let e=this._copyWithoutHopByHopHeaders(this._resHeaders),r=this.age();return r>3600*24&&!this._hasExplicitExpiration()&&this.maxAge()>3600*24&&(e.warning=(e.warning?`${e.warning}, `:"")+'113 - "rfc7234 5.5.4"'),e.age=`${Math.round(r)}`,e.date=new Date(this.now()).toUTCString(),e}date(){let e=Date.parse(this._resHeaders.date);return isFinite(e)?e:this._responseTime}age(){let e=this._ageValue(),r=(this.now()-this._responseTime)/1e3;return e+r}_ageValue(){return Dd(this._resHeaders.age)}maxAge(){if(!this.storable()||this._rescc["no-cache"]||this._isShared&&this._resHeaders["set-cookie"]&&!this._rescc.public&&!this._rescc.immutable||this._resHeaders.vary==="*")return 0;if(this._isShared){if(this._rescc["proxy-revalidate"])return 0;if(this._rescc["s-maxage"])return Dd(this._rescc["s-maxage"])}if(this._rescc["max-age"])return Dd(this._rescc["max-age"]);let e=this._rescc.immutable?this._immutableMinTtl:0,r=this.date();if(this._resHeaders.expires){let o=Date.parse(this._resHeaders.expires);return Number.isNaN(o)||oo)return Math.max(e,(r-o)/1e3*this._cacheHeuristic)}return e}timeToLive(){let e=this.maxAge()-this.age(),r=e+Dd(this._rescc["stale-if-error"]),o=e+Dd(this._rescc["stale-while-revalidate"]);return Math.max(0,e,r,o)*1e3}stale(){return this.maxAge()<=this.age()}_useStaleIfError(){return this.maxAge()+Dd(this._rescc["stale-if-error"])>this.age()}useStaleWhileRevalidate(){return this.maxAge()+Dd(this._rescc["stale-while-revalidate"])>this.age()}static fromObject(e){return new this(void 0,void 0,{_fromObject:e})}_fromObject(e){if(this._responseTime)throw Error("Reinitialized");if(!e||e.v!==1)throw Error("Invalid serialization");this._responseTime=e.t,this._isShared=e.sh,this._cacheHeuristic=e.ch,this._immutableMinTtl=e.imm!==void 0?e.imm:24*3600*1e3,this._status=e.st,this._resHeaders=e.resh,this._rescc=e.rescc,this._method=e.m,this._url=e.u,this._host=e.h,this._noAuthorization=e.a,this._reqHeaders=e.reqh,this._reqcc=e.reqcc}toObject(){return{v:1,t:this._responseTime,sh:this._isShared,ch:this._cacheHeuristic,imm:this._immutableMinTtl,st:this._status,resh:this._resHeaders,rescc:this._rescc,m:this._method,u:this._url,h:this._host,a:this._noAuthorization,reqh:this._reqHeaders,reqcc:this._reqcc}}revalidationHeaders(e){this._assertRequestHasHeaders(e);let r=this._copyWithoutHopByHopHeaders(e.headers);if(delete r["if-range"],!this._requestMatches(e,!0)||!this.storable())return delete r["if-none-match"],delete r["if-modified-since"],r;if(this._resHeaders.etag&&(r["if-none-match"]=r["if-none-match"]?`${r["if-none-match"]}, ${this._resHeaders.etag}`:this._resHeaders.etag),r["accept-ranges"]||r["if-match"]||r["if-unmodified-since"]||this._method&&this._method!="GET"){if(delete r["if-modified-since"],r["if-none-match"]){let a=r["if-none-match"].split(/,/).filter(n=>!/^\s*W\//.test(n));a.length?r["if-none-match"]=a.join(",").trim():delete r["if-none-match"]}}else this._resHeaders["last-modified"]&&!r["if-modified-since"]&&(r["if-modified-since"]=this._resHeaders["last-modified"]);return r}revalidatedPolicy(e,r){if(this._assertRequestHasHeaders(e),this._useStaleIfError()&&Qnt(r))return{modified:!1,matches:!1,policy:this};if(!r||!r.headers)throw Error("Response headers missing");let o=!1;if(r.status!==void 0&&r.status!=304?o=!1:r.headers.etag&&!/^\s*W\//.test(r.headers.etag)?o=this._resHeaders.etag&&this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag:this._resHeaders.etag&&r.headers.etag?o=this._resHeaders.etag.replace(/^\s*W\//,"")===r.headers.etag.replace(/^\s*W\//,""):this._resHeaders["last-modified"]?o=this._resHeaders["last-modified"]===r.headers["last-modified"]:!this._resHeaders.etag&&!this._resHeaders["last-modified"]&&!r.headers.etag&&!r.headers["last-modified"]&&(o=!0),!o)return{policy:new this.constructor(e,r),modified:r.status!=304,matches:!1};let a={};for(let u in this._resHeaders)a[u]=u in r.headers&&!knt[u]?r.headers[u]:this._resHeaders[u];let n=Object.assign({},r,{status:this._status,method:this._method,headers:a});return{policy:new this.constructor(e,n,{shared:this._isShared,cacheHeuristic:this._cacheHeuristic,immutableMinTimeToLive:this._immutableMinTtl}),modified:!1,matches:!0}}}});var tx=_((CLt,Poe)=>{"use strict";Poe.exports=t=>{let e={};for(let[r,o]of Object.entries(t))e[r.toLowerCase()]=o;return e}});var xoe=_((wLt,Soe)=>{"use strict";var Tnt=Be("stream").Readable,Rnt=tx(),HO=class extends Tnt{constructor(e,r,o,a){if(typeof e!="number")throw new TypeError("Argument `statusCode` should be a number");if(typeof r!="object")throw new TypeError("Argument `headers` should be an object");if(!(o instanceof Buffer))throw new TypeError("Argument `body` should be a buffer");if(typeof a!="string")throw new TypeError("Argument `url` should be a string");super(),this.statusCode=e,this.headers=Rnt(r),this.body=o,this.url=a}_read(){this.push(this.body),this.push(null)}};Soe.exports=HO});var koe=_((ILt,boe)=>{"use strict";var Nnt=["destroy","setTimeout","socket","headers","trailers","rawHeaders","statusCode","httpVersion","httpVersionMinor","httpVersionMajor","rawTrailers","statusMessage"];boe.exports=(t,e)=>{let r=new Set(Object.keys(t).concat(Nnt));for(let o of r)o in e||(e[o]=typeof t[o]=="function"?t[o].bind(t):t[o])}});var Foe=_((BLt,Qoe)=>{"use strict";var Lnt=Be("stream").PassThrough,Mnt=koe(),Ont=t=>{if(!(t&&t.pipe))throw new TypeError("Parameter `response` must be a response stream.");let e=new Lnt;return Mnt(t,e),t.pipe(e)};Qoe.exports=Ont});var Toe=_(jO=>{jO.stringify=function t(e){if(typeof e>"u")return e;if(e&&Buffer.isBuffer(e))return JSON.stringify(":base64:"+e.toString("base64"));if(e&&e.toJSON&&(e=e.toJSON()),e&&typeof e=="object"){var r="",o=Array.isArray(e);r=o?"[":"{";var a=!0;for(var n in e){var u=typeof e[n]=="function"||!o&&typeof e[n]>"u";Object.hasOwnProperty.call(e,n)&&!u&&(a||(r+=","),a=!1,o?e[n]==null?r+="null":r+=t(e[n]):e[n]!==void 0&&(r+=t(n)+":"+t(e[n])))}return r+=o?"]":"}",r}else return typeof e=="string"?JSON.stringify(/^:/.test(e)?":"+e:e):typeof e>"u"?"null":JSON.stringify(e)};jO.parse=function(t){return JSON.parse(t,function(e,r){return typeof r=="string"?/^:base64:/.test(r)?Buffer.from(r.substring(8),"base64"):/^:/.test(r)?r.substring(1):r:r})}});var Loe=_((DLt,Noe)=>{"use strict";var Unt=Be("events"),Roe=Toe(),_nt=t=>{let e={redis:"@keyv/redis",mongodb:"@keyv/mongo",mongo:"@keyv/mongo",sqlite:"@keyv/sqlite",postgresql:"@keyv/postgres",postgres:"@keyv/postgres",mysql:"@keyv/mysql"};if(t.adapter||t.uri){let r=t.adapter||/^[^:]*/.exec(t.uri)[0];return new(Be(e[r]))(t)}return new Map},qO=class extends Unt{constructor(e,r){if(super(),this.opts=Object.assign({namespace:"keyv",serialize:Roe.stringify,deserialize:Roe.parse},typeof e=="string"?{uri:e}:e,r),!this.opts.store){let o=Object.assign({},this.opts);this.opts.store=_nt(o)}typeof this.opts.store.on=="function"&&this.opts.store.on("error",o=>this.emit("error",o)),this.opts.store.namespace=this.opts.namespace}_getKeyPrefix(e){return`${this.opts.namespace}:${e}`}get(e,r){e=this._getKeyPrefix(e);let{store:o}=this.opts;return Promise.resolve().then(()=>o.get(e)).then(a=>typeof a=="string"?this.opts.deserialize(a):a).then(a=>{if(a!==void 0){if(typeof a.expires=="number"&&Date.now()>a.expires){this.delete(e);return}return r&&r.raw?a:a.value}})}set(e,r,o){e=this._getKeyPrefix(e),typeof o>"u"&&(o=this.opts.ttl),o===0&&(o=void 0);let{store:a}=this.opts;return Promise.resolve().then(()=>{let n=typeof o=="number"?Date.now()+o:null;return r={value:r,expires:n},this.opts.serialize(r)}).then(n=>a.set(e,n,o)).then(()=>!0)}delete(e){e=this._getKeyPrefix(e);let{store:r}=this.opts;return Promise.resolve().then(()=>r.delete(e))}clear(){let{store:e}=this.opts;return Promise.resolve().then(()=>e.clear())}};Noe.exports=qO});var Uoe=_((SLt,Ooe)=>{"use strict";var Hnt=Be("events"),rx=Be("url"),jnt=uoe(),qnt=Boe(),GO=Doe(),Moe=xoe(),Gnt=tx(),Ynt=Foe(),Wnt=Loe(),jc=class{constructor(e,r){if(typeof e!="function")throw new TypeError("Parameter `request` must be a function");return this.cache=new Wnt({uri:typeof r=="string"&&r,store:typeof r!="string"&&r,namespace:"cacheable-request"}),this.createCacheableRequest(e)}createCacheableRequest(e){return(r,o)=>{let a;if(typeof r=="string")a=YO(rx.parse(r)),r={};else if(r instanceof rx.URL)a=YO(rx.parse(r.toString())),r={};else{let[I,...v]=(r.path||"").split("?"),b=v.length>0?`?${v.join("?")}`:"";a=YO({...r,pathname:I,search:b})}r={headers:{},method:"GET",cache:!0,strictTtl:!1,automaticFailover:!1,...r,...Vnt(a)},r.headers=Gnt(r.headers);let n=new Hnt,u=jnt(rx.format(a),{stripWWW:!1,removeTrailingSlash:!1,stripAuthentication:!1}),A=`${r.method}:${u}`,p=!1,h=!1,E=I=>{h=!0;let v=!1,b,C=new Promise(L=>{b=()=>{v||(v=!0,L())}}),T=L=>{if(p&&!I.forceRefresh){L.status=L.statusCode;let J=GO.fromObject(p.cachePolicy).revalidatedPolicy(I,L);if(!J.modified){let te=J.policy.responseHeaders();L=new Moe(p.statusCode,te,p.body,p.url),L.cachePolicy=J.policy,L.fromCache=!0}}L.fromCache||(L.cachePolicy=new GO(I,L,I),L.fromCache=!1);let U;I.cache&&L.cachePolicy.storable()?(U=Ynt(L),(async()=>{try{let J=qnt.buffer(L);if(await Promise.race([C,new Promise(Ae=>L.once("end",Ae))]),v)return;let te=await J,le={cachePolicy:L.cachePolicy.toObject(),url:L.url,statusCode:L.fromCache?p.statusCode:L.statusCode,body:te},pe=I.strictTtl?L.cachePolicy.timeToLive():void 0;I.maxTtl&&(pe=pe?Math.min(pe,I.maxTtl):I.maxTtl),await this.cache.set(A,le,pe)}catch(J){n.emit("error",new jc.CacheError(J))}})()):I.cache&&p&&(async()=>{try{await this.cache.delete(A)}catch(J){n.emit("error",new jc.CacheError(J))}})(),n.emit("response",U||L),typeof o=="function"&&o(U||L)};try{let L=e(I,T);L.once("error",b),L.once("abort",b),n.emit("request",L)}catch(L){n.emit("error",new jc.RequestError(L))}};return(async()=>{let I=async b=>{await Promise.resolve();let C=b.cache?await this.cache.get(A):void 0;if(typeof C>"u")return E(b);let T=GO.fromObject(C.cachePolicy);if(T.satisfiesWithoutRevalidation(b)&&!b.forceRefresh){let L=T.responseHeaders(),U=new Moe(C.statusCode,L,C.body,C.url);U.cachePolicy=T,U.fromCache=!0,n.emit("response",U),typeof o=="function"&&o(U)}else p=C,b.headers=T.revalidationHeaders(b),E(b)},v=b=>n.emit("error",new jc.CacheError(b));this.cache.once("error",v),n.on("response",()=>this.cache.removeListener("error",v));try{await I(r)}catch(b){r.automaticFailover&&!h&&E(r),n.emit("error",new jc.CacheError(b))}})(),n}}};function Vnt(t){let e={...t};return e.path=`${t.pathname||"/"}${t.search||""}`,delete e.pathname,delete e.search,e}function YO(t){return{protocol:t.protocol,auth:t.auth,hostname:t.hostname||t.host||"localhost",port:t.port,pathname:t.pathname,search:t.search}}jc.RequestError=class extends Error{constructor(t){super(t.message),this.name="RequestError",Object.assign(this,t)}};jc.CacheError=class extends Error{constructor(t){super(t.message),this.name="CacheError",Object.assign(this,t)}};Ooe.exports=jc});var Hoe=_((kLt,_oe)=>{"use strict";var Knt=["aborted","complete","headers","httpVersion","httpVersionMinor","httpVersionMajor","method","rawHeaders","rawTrailers","setTimeout","socket","statusCode","statusMessage","trailers","url"];_oe.exports=(t,e)=>{if(e._readableState.autoDestroy)throw new Error("The second stream must have the `autoDestroy` option set to `false`");let r=new Set(Object.keys(t).concat(Knt)),o={};for(let a of r)a in e||(o[a]={get(){let n=t[a];return typeof n=="function"?n.bind(t):n},set(n){t[a]=n},enumerable:!0,configurable:!1});return Object.defineProperties(e,o),t.once("aborted",()=>{e.destroy(),e.emit("aborted")}),t.once("close",()=>{t.complete&&e.readable?e.once("end",()=>{e.emit("close")}):e.emit("close")}),e}});var qoe=_((QLt,joe)=>{"use strict";var{Transform:Jnt,PassThrough:znt}=Be("stream"),WO=Be("zlib"),Xnt=Hoe();joe.exports=t=>{let e=(t.headers["content-encoding"]||"").toLowerCase();if(!["gzip","deflate","br"].includes(e))return t;let r=e==="br";if(r&&typeof WO.createBrotliDecompress!="function")return t.destroy(new Error("Brotli is not supported on Node.js < 12")),t;let o=!0,a=new Jnt({transform(A,p,h){o=!1,h(null,A)},flush(A){A()}}),n=new znt({autoDestroy:!1,destroy(A,p){t.destroy(),p(A)}}),u=r?WO.createBrotliDecompress():WO.createUnzip();return u.once("error",A=>{if(o&&!t.readable){n.end();return}n.destroy(A)}),Xnt(t,n),t.pipe(a).pipe(u).pipe(n),n}});var KO=_((FLt,Goe)=>{"use strict";var VO=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError("`maxSize` must be a number greater than 0");this.maxSize=e.maxSize,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_set(e,r){if(this.cache.set(e,r),this._size++,this._size>=this.maxSize){if(this._size=0,typeof this.onEviction=="function")for(let[o,a]of this.oldCache.entries())this.onEviction(o,a);this.oldCache=this.cache,this.cache=new Map}}get(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e)){let r=this.oldCache.get(e);return this.oldCache.delete(e),this._set(e,r),r}}set(e,r){return this.cache.has(e)?this.cache.set(e,r):this._set(e,r),this}has(e){return this.cache.has(e)||this.oldCache.has(e)}peek(e){if(this.cache.has(e))return this.cache.get(e);if(this.oldCache.has(e))return this.oldCache.get(e)}delete(e){let r=this.cache.delete(e);return r&&this._size--,this.oldCache.delete(e)||r}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache)yield e;for(let e of this.oldCache){let[r]=e;this.cache.has(r)||(yield e)}}get size(){let e=0;for(let r of this.oldCache.keys())this.cache.has(r)||e++;return Math.min(this._size+e,this.maxSize)}};Goe.exports=VO});var zO=_((TLt,Koe)=>{"use strict";var Znt=Be("events"),$nt=Be("tls"),eit=Be("http2"),tit=KO(),ea=Symbol("currentStreamsCount"),Yoe=Symbol("request"),Wl=Symbol("cachedOriginSet"),vE=Symbol("gracefullyClosing"),rit=["maxDeflateDynamicTableSize","maxSessionMemory","maxHeaderListPairs","maxOutstandingPings","maxReservedRemoteStreams","maxSendHeaderBlockLength","paddingStrategy","localAddress","path","rejectUnauthorized","minDHSize","ca","cert","clientCertEngine","ciphers","key","pfx","servername","minVersion","maxVersion","secureProtocol","crl","honorCipherOrder","ecdhCurve","dhparam","secureOptions","sessionIdContext"],nit=(t,e,r)=>{let o=0,a=t.length;for(;o>>1;r(t[n],e)?o=n+1:a=n}return o},iit=(t,e)=>t.remoteSettings.maxConcurrentStreams>e.remoteSettings.maxConcurrentStreams,JO=(t,e)=>{for(let r of t)r[Wl].lengthe[Wl].includes(o))&&r[ea]+e[ea]<=e.remoteSettings.maxConcurrentStreams&&Voe(r)},sit=(t,e)=>{for(let r of t)e[Wl].lengthr[Wl].includes(o))&&e[ea]+r[ea]<=r.remoteSettings.maxConcurrentStreams&&Voe(e)},Woe=({agent:t,isFree:e})=>{let r={};for(let o in t.sessions){let n=t.sessions[o].filter(u=>{let A=u[tA.kCurrentStreamsCount]{t[vE]=!0,t[ea]===0&&t.close()},tA=class extends Znt{constructor({timeout:e=6e4,maxSessions:r=1/0,maxFreeSessions:o=10,maxCachedTlsSessions:a=100}={}){super(),this.sessions={},this.queue={},this.timeout=e,this.maxSessions=r,this.maxFreeSessions=o,this._freeSessionsCount=0,this._sessionsCount=0,this.settings={enablePush:!1},this.tlsSessionCache=new tit({maxSize:a})}static normalizeOrigin(e,r){return typeof e=="string"&&(e=new URL(e)),r&&e.hostname!==r&&(e.hostname=r),e.origin}normalizeOptions(e){let r="";if(e)for(let o of rit)e[o]&&(r+=`:${e[o]}`);return r}_tryToCreateNewSession(e,r){if(!(e in this.queue)||!(r in this.queue[e]))return;let o=this.queue[e][r];this._sessionsCount{Array.isArray(o)?(o=[...o],a()):o=[{resolve:a,reject:n}];let u=this.normalizeOptions(r),A=tA.normalizeOrigin(e,r&&r.servername);if(A===void 0){for(let{reject:E}of o)E(new TypeError("The `origin` argument needs to be a string or an URL object"));return}if(u in this.sessions){let E=this.sessions[u],I=-1,v=-1,b;for(let C of E){let T=C.remoteSettings.maxConcurrentStreams;if(T=T||C[vE]||C.destroyed)continue;b||(I=T),L>v&&(b=C,v=L)}}if(b){if(o.length!==1){for(let{reject:C}of o){let T=new Error(`Expected the length of listeners to be 1, got ${o.length}. +Please report this to https://github.com/szmarczak/http2-wrapper/`);C(T)}return}o[0].resolve(b);return}}if(u in this.queue){if(A in this.queue[u]){this.queue[u][A].listeners.push(...o),this._tryToCreateNewSession(u,A);return}}else this.queue[u]={};let p=()=>{u in this.queue&&this.queue[u][A]===h&&(delete this.queue[u][A],Object.keys(this.queue[u]).length===0&&delete this.queue[u])},h=()=>{let E=`${A}:${u}`,I=!1;try{let v=eit.connect(e,{createConnection:this.createConnection,settings:this.settings,session:this.tlsSessionCache.get(E),...r});v[ea]=0,v[vE]=!1;let b=()=>v[ea]{this.tlsSessionCache.set(E,L)}),v.once("error",L=>{for(let{reject:U}of o)U(L);this.tlsSessionCache.delete(E)}),v.setTimeout(this.timeout,()=>{v.destroy()}),v.once("close",()=>{if(I){C&&this._freeSessionsCount--,this._sessionsCount--;let L=this.sessions[u];L.splice(L.indexOf(v),1),L.length===0&&delete this.sessions[u]}else{let L=new Error("Session closed without receiving a SETTINGS frame");L.code="HTTP2WRAPPER_NOSETTINGS";for(let{reject:U}of o)U(L);p()}this._tryToCreateNewSession(u,A)});let T=()=>{if(!(!(u in this.queue)||!b())){for(let L of v[Wl])if(L in this.queue[u]){let{listeners:U}=this.queue[u][L];for(;U.length!==0&&b();)U.shift().resolve(v);let J=this.queue[u];if(J[L].listeners.length===0&&(delete J[L],Object.keys(J).length===0)){delete this.queue[u];break}if(!b())break}}};v.on("origin",()=>{v[Wl]=v.originSet,b()&&(T(),JO(this.sessions[u],v))}),v.once("remoteSettings",()=>{if(v.ref(),v.unref(),this._sessionsCount++,h.destroyed){let L=new Error("Agent has been destroyed");for(let U of o)U.reject(L);v.destroy();return}v[Wl]=v.originSet;{let L=this.sessions;if(u in L){let U=L[u];U.splice(nit(U,v,iit),0,v)}else L[u]=[v]}this._freeSessionsCount+=1,I=!0,this.emit("session",v),T(),p(),v[ea]===0&&this._freeSessionsCount>this.maxFreeSessions&&v.close(),o.length!==0&&(this.getSession(A,r,o),o.length=0),v.on("remoteSettings",()=>{T(),JO(this.sessions[u],v)})}),v[Yoe]=v.request,v.request=(L,U)=>{if(v[vE])throw new Error("The session is gracefully closing. No new streams are allowed.");let J=v[Yoe](L,U);return v.ref(),++v[ea],v[ea]===v.remoteSettings.maxConcurrentStreams&&this._freeSessionsCount--,J.once("close",()=>{if(C=b(),--v[ea],!v.destroyed&&!v.closed&&(sit(this.sessions[u],v),b()&&!v.closed)){C||(this._freeSessionsCount++,C=!0);let te=v[ea]===0;te&&v.unref(),te&&(this._freeSessionsCount>this.maxFreeSessions||v[vE])?v.close():(JO(this.sessions[u],v),T())}}),J}}catch(v){for(let b of o)b.reject(v);p()}};h.listeners=o,h.completed=!1,h.destroyed=!1,this.queue[u][A]=h,this._tryToCreateNewSession(u,A)})}request(e,r,o,a){return new Promise((n,u)=>{this.getSession(e,r,[{reject:u,resolve:A=>{try{n(A.request(o,a))}catch(p){u(p)}}}])})}createConnection(e,r){return tA.connect(e,r)}static connect(e,r){r.ALPNProtocols=["h2"];let o=e.port||443,a=e.hostname||e.host;return typeof r.servername>"u"&&(r.servername=a),$nt.connect(o,a,r)}closeFreeSessions(){for(let e of Object.values(this.sessions))for(let r of e)r[ea]===0&&r.close()}destroy(e){for(let r of Object.values(this.sessions))for(let o of r)o.destroy(e);for(let r of Object.values(this.queue))for(let o of Object.values(r))o.destroyed=!0;this.queue={}}get freeSessions(){return Woe({agent:this,isFree:!0})}get busySessions(){return Woe({agent:this,isFree:!1})}};tA.kCurrentStreamsCount=ea;tA.kGracefullyClosing=vE;Koe.exports={Agent:tA,globalAgent:new tA}});var ZO=_((RLt,Joe)=>{"use strict";var{Readable:oit}=Be("stream"),XO=class extends oit{constructor(e,r){super({highWaterMark:r,autoDestroy:!1}),this.statusCode=null,this.statusMessage="",this.httpVersion="2.0",this.httpVersionMajor=2,this.httpVersionMinor=0,this.headers={},this.trailers={},this.req=null,this.aborted=!1,this.complete=!1,this.upgrade=null,this.rawHeaders=[],this.rawTrailers=[],this.socket=e,this.connection=e,this._dumped=!1}_destroy(e){this.req._request.destroy(e)}setTimeout(e,r){return this.req.setTimeout(e,r),this}_dump(){this._dumped||(this._dumped=!0,this.removeAllListeners("data"),this.resume())}_read(){this.req&&this.req._request.resume()}};Joe.exports=XO});var $O=_((NLt,zoe)=>{"use strict";zoe.exports=t=>{let e={protocol:t.protocol,hostname:typeof t.hostname=="string"&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return typeof t.port=="string"&&t.port.length!==0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var Zoe=_((LLt,Xoe)=>{"use strict";Xoe.exports=(t,e,r)=>{for(let o of r)t.on(o,(...a)=>e.emit(o,...a))}});var eae=_((MLt,$oe)=>{"use strict";$oe.exports=t=>{switch(t){case":method":case":scheme":case":authority":case":path":return!0;default:return!1}}});var rae=_((ULt,tae)=>{"use strict";var DE=(t,e,r)=>{tae.exports[e]=class extends t{constructor(...a){super(typeof r=="string"?r:r(a)),this.name=`${super.name} [${e}]`,this.code=e}}};DE(TypeError,"ERR_INVALID_ARG_TYPE",t=>{let e=t[0].includes(".")?"property":"argument",r=t[1],o=Array.isArray(r);return o&&(r=`${r.slice(0,-1).join(", ")} or ${r.slice(-1)}`),`The "${t[0]}" ${e} must be ${o?"one of":"of"} type ${r}. Received ${typeof t[2]}`});DE(TypeError,"ERR_INVALID_PROTOCOL",t=>`Protocol "${t[0]}" not supported. Expected "${t[1]}"`);DE(Error,"ERR_HTTP_HEADERS_SENT",t=>`Cannot ${t[0]} headers after they are sent to the client`);DE(TypeError,"ERR_INVALID_HTTP_TOKEN",t=>`${t[0]} must be a valid HTTP token [${t[1]}]`);DE(TypeError,"ERR_HTTP_INVALID_HEADER_VALUE",t=>`Invalid value "${t[0]} for header "${t[1]}"`);DE(TypeError,"ERR_INVALID_CHAR",t=>`Invalid character in ${t[0]} [${t[1]}]`)});var i4=_((_Lt,cae)=>{"use strict";var ait=Be("http2"),{Writable:lit}=Be("stream"),{Agent:nae,globalAgent:cit}=zO(),uit=ZO(),Ait=$O(),fit=Zoe(),pit=eae(),{ERR_INVALID_ARG_TYPE:e4,ERR_INVALID_PROTOCOL:hit,ERR_HTTP_HEADERS_SENT:iae,ERR_INVALID_HTTP_TOKEN:git,ERR_HTTP_INVALID_HEADER_VALUE:dit,ERR_INVALID_CHAR:mit}=rae(),{HTTP2_HEADER_STATUS:sae,HTTP2_HEADER_METHOD:oae,HTTP2_HEADER_PATH:aae,HTTP2_METHOD_CONNECT:yit}=ait.constants,Qo=Symbol("headers"),t4=Symbol("origin"),r4=Symbol("session"),lae=Symbol("options"),nx=Symbol("flushedHeaders"),p1=Symbol("jobs"),Eit=/^[\^`\-\w!#$%&*+.|~]+$/,Cit=/[^\t\u0020-\u007E\u0080-\u00FF]/,n4=class extends lit{constructor(e,r,o){super({autoDestroy:!1});let a=typeof e=="string"||e instanceof URL;if(a&&(e=Ait(e instanceof URL?e:new URL(e))),typeof r=="function"||r===void 0?(o=r,r=a?e:{...e}):r={...e,...r},r.h2session)this[r4]=r.h2session;else if(r.agent===!1)this.agent=new nae({maxFreeSessions:0});else if(typeof r.agent>"u"||r.agent===null)typeof r.createConnection=="function"?(this.agent=new nae({maxFreeSessions:0}),this.agent.createConnection=r.createConnection):this.agent=cit;else if(typeof r.agent.request=="function")this.agent=r.agent;else throw new e4("options.agent",["Agent-like Object","undefined","false"],r.agent);if(r.protocol&&r.protocol!=="https:")throw new hit(r.protocol,"https:");let n=r.port||r.defaultPort||this.agent&&this.agent.defaultPort||443,u=r.hostname||r.host||"localhost";delete r.hostname,delete r.host,delete r.port;let{timeout:A}=r;if(r.timeout=void 0,this[Qo]=Object.create(null),this[p1]=[],this.socket=null,this.connection=null,this.method=r.method||"GET",this.path=r.path,this.res=null,this.aborted=!1,this.reusedSocket=!1,r.headers)for(let[p,h]of Object.entries(r.headers))this.setHeader(p,h);r.auth&&!("authorization"in this[Qo])&&(this[Qo].authorization="Basic "+Buffer.from(r.auth).toString("base64")),r.session=r.tlsSession,r.path=r.socketPath,this[lae]=r,n===443?(this[t4]=`https://${u}`,":authority"in this[Qo]||(this[Qo][":authority"]=u)):(this[t4]=`https://${u}:${n}`,":authority"in this[Qo]||(this[Qo][":authority"]=`${u}:${n}`)),A&&this.setTimeout(A),o&&this.once("response",o),this[nx]=!1}get method(){return this[Qo][oae]}set method(e){e&&(this[Qo][oae]=e.toUpperCase())}get path(){return this[Qo][aae]}set path(e){e&&(this[Qo][aae]=e)}get _mustNotHaveABody(){return this.method==="GET"||this.method==="HEAD"||this.method==="DELETE"}_write(e,r,o){if(this._mustNotHaveABody){o(new Error("The GET, HEAD and DELETE methods must NOT have a body"));return}this.flushHeaders();let a=()=>this._request.write(e,r,o);this._request?a():this[p1].push(a)}_final(e){if(this.destroyed)return;this.flushHeaders();let r=()=>{if(this._mustNotHaveABody){e();return}this._request.end(e)};this._request?r():this[p1].push(r)}abort(){this.res&&this.res.complete||(this.aborted||process.nextTick(()=>this.emit("abort")),this.aborted=!0,this.destroy())}_destroy(e,r){this.res&&this.res._dump(),this._request&&this._request.destroy(),r(e)}async flushHeaders(){if(this[nx]||this.destroyed)return;this[nx]=!0;let e=this.method===yit,r=o=>{if(this._request=o,this.destroyed){o.destroy();return}e||fit(o,this,["timeout","continue","close","error"]);let a=u=>(...A)=>{!this.writable&&!this.destroyed?u(...A):this.once("finish",()=>{u(...A)})};o.once("response",a((u,A,p)=>{let h=new uit(this.socket,o.readableHighWaterMark);this.res=h,h.req=this,h.statusCode=u[sae],h.headers=u,h.rawHeaders=p,h.once("end",()=>{this.aborted?(h.aborted=!0,h.emit("aborted")):(h.complete=!0,h.socket=null,h.connection=null)}),e?(h.upgrade=!0,this.emit("connect",h,o,Buffer.alloc(0))?this.emit("close"):o.destroy()):(o.on("data",E=>{!h._dumped&&!h.push(E)&&o.pause()}),o.once("end",()=>{h.push(null)}),this.emit("response",h)||h._dump())})),o.once("headers",a(u=>this.emit("information",{statusCode:u[sae]}))),o.once("trailers",a((u,A,p)=>{let{res:h}=this;h.trailers=u,h.rawTrailers=p}));let{socket:n}=o.session;this.socket=n,this.connection=n;for(let u of this[p1])u();this.emit("socket",this.socket)};if(this[r4])try{r(this[r4].request(this[Qo]))}catch(o){this.emit("error",o)}else{this.reusedSocket=!0;try{r(await this.agent.request(this[t4],this[lae],this[Qo]))}catch(o){this.emit("error",o)}}}getHeader(e){if(typeof e!="string")throw new e4("name","string",e);return this[Qo][e.toLowerCase()]}get headersSent(){return this[nx]}removeHeader(e){if(typeof e!="string")throw new e4("name","string",e);if(this.headersSent)throw new iae("remove");delete this[Qo][e.toLowerCase()]}setHeader(e,r){if(this.headersSent)throw new iae("set");if(typeof e!="string"||!Eit.test(e)&&!pit(e))throw new git("Header name",e);if(typeof r>"u")throw new dit(r,e);if(Cit.test(r))throw new mit("header content",e);this[Qo][e.toLowerCase()]=r}setNoDelay(){}setSocketKeepAlive(){}setTimeout(e,r){let o=()=>this._request.setTimeout(e,r);return this._request?o():this[p1].push(o),this}get maxHeadersCount(){if(!this.destroyed&&this._request)return this._request.session.localSettings.maxHeaderListSize}set maxHeadersCount(e){}};cae.exports=n4});var Aae=_((HLt,uae)=>{"use strict";var wit=Be("tls");uae.exports=(t={})=>new Promise((e,r)=>{let o=wit.connect(t,()=>{t.resolveSocket?(o.off("error",r),e({alpnProtocol:o.alpnProtocol,socket:o})):(o.destroy(),e({alpnProtocol:o.alpnProtocol}))});o.on("error",r)})});var pae=_((jLt,fae)=>{"use strict";var Iit=Be("net");fae.exports=t=>{let e=t.host,r=t.headers&&t.headers.host;return r&&(r.startsWith("[")?r.indexOf("]")===-1?e=r:e=r.slice(1,-1):e=r.split(":",1)[0]),Iit.isIP(e)?"":e}});var dae=_((qLt,o4)=>{"use strict";var hae=Be("http"),s4=Be("https"),Bit=Aae(),vit=KO(),Dit=i4(),Pit=pae(),Sit=$O(),ix=new vit({maxSize:100}),h1=new Map,gae=(t,e,r)=>{e._httpMessage={shouldKeepAlive:!0};let o=()=>{t.emit("free",e,r)};e.on("free",o);let a=()=>{t.removeSocket(e,r)};e.on("close",a);let n=()=>{t.removeSocket(e,r),e.off("close",a),e.off("free",o),e.off("agentRemove",n)};e.on("agentRemove",n),t.emit("free",e,r)},xit=async t=>{let e=`${t.host}:${t.port}:${t.ALPNProtocols.sort()}`;if(!ix.has(e)){if(h1.has(e))return(await h1.get(e)).alpnProtocol;let{path:r,agent:o}=t;t.path=t.socketPath;let a=Bit(t);h1.set(e,a);try{let{socket:n,alpnProtocol:u}=await a;if(ix.set(e,u),t.path=r,u==="h2")n.destroy();else{let{globalAgent:A}=s4,p=s4.Agent.prototype.createConnection;o?o.createConnection===p?gae(o,n,t):n.destroy():A.createConnection===p?gae(A,n,t):n.destroy()}return h1.delete(e),u}catch(n){throw h1.delete(e),n}}return ix.get(e)};o4.exports=async(t,e,r)=>{if((typeof t=="string"||t instanceof URL)&&(t=Sit(new URL(t))),typeof e=="function"&&(r=e,e=void 0),e={ALPNProtocols:["h2","http/1.1"],...t,...e,resolveSocket:!0},!Array.isArray(e.ALPNProtocols)||e.ALPNProtocols.length===0)throw new Error("The `ALPNProtocols` option must be an Array with at least one entry");e.protocol=e.protocol||"https:";let o=e.protocol==="https:";e.host=e.hostname||e.host||"localhost",e.session=e.tlsSession,e.servername=e.servername||Pit(e),e.port=e.port||(o?443:80),e._defaultAgent=o?s4.globalAgent:hae.globalAgent;let a=e.agent;if(a){if(a.addRequest)throw new Error("The `options.agent` object can contain only `http`, `https` or `http2` properties");e.agent=a[o?"https":"http"]}return o&&await xit(e)==="h2"?(a&&(e.agent=a.http2),new Dit(e,r)):hae.request(e,r)};o4.exports.protocolCache=ix});var yae=_((GLt,mae)=>{"use strict";var bit=Be("http2"),kit=zO(),a4=i4(),Qit=ZO(),Fit=dae(),Tit=(t,e,r)=>new a4(t,e,r),Rit=(t,e,r)=>{let o=new a4(t,e,r);return o.end(),o};mae.exports={...bit,ClientRequest:a4,IncomingMessage:Qit,...kit,request:Tit,get:Rit,auto:Fit}});var c4=_(l4=>{"use strict";Object.defineProperty(l4,"__esModule",{value:!0});var Eae=Tf();l4.default=t=>Eae.default.nodeStream(t)&&Eae.default.function_(t.getBoundary)});var Bae=_(u4=>{"use strict";Object.defineProperty(u4,"__esModule",{value:!0});var wae=Be("fs"),Iae=Be("util"),Cae=Tf(),Nit=c4(),Lit=Iae.promisify(wae.stat);u4.default=async(t,e)=>{if(e&&"content-length"in e)return Number(e["content-length"]);if(!t)return 0;if(Cae.default.string(t))return Buffer.byteLength(t);if(Cae.default.buffer(t))return t.length;if(Nit.default(t))return Iae.promisify(t.getLength.bind(t))();if(t instanceof wae.ReadStream){let{size:r}=await Lit(t.path);return r===0?void 0:r}}});var f4=_(A4=>{"use strict";Object.defineProperty(A4,"__esModule",{value:!0});function Mit(t,e,r){let o={};for(let a of r)o[a]=(...n)=>{e.emit(a,...n)},t.on(a,o[a]);return()=>{for(let a of r)t.off(a,o[a])}}A4.default=Mit});var vae=_(p4=>{"use strict";Object.defineProperty(p4,"__esModule",{value:!0});p4.default=()=>{let t=[];return{once(e,r,o){e.once(r,o),t.push({origin:e,event:r,fn:o})},unhandleAll(){for(let e of t){let{origin:r,event:o,fn:a}=e;r.removeListener(o,a)}t.length=0}}}});var Pae=_(g1=>{"use strict";Object.defineProperty(g1,"__esModule",{value:!0});g1.TimeoutError=void 0;var Oit=Be("net"),Uit=vae(),Dae=Symbol("reentry"),_it=()=>{},sx=class extends Error{constructor(e,r){super(`Timeout awaiting '${r}' for ${e}ms`),this.event=r,this.name="TimeoutError",this.code="ETIMEDOUT"}};g1.TimeoutError=sx;g1.default=(t,e,r)=>{if(Dae in t)return _it;t[Dae]=!0;let o=[],{once:a,unhandleAll:n}=Uit.default(),u=(I,v,b)=>{var C;let T=setTimeout(v,I,I,b);(C=T.unref)===null||C===void 0||C.call(T);let L=()=>{clearTimeout(T)};return o.push(L),L},{host:A,hostname:p}=r,h=(I,v)=>{t.destroy(new sx(I,v))},E=()=>{for(let I of o)I();n()};if(t.once("error",I=>{if(E(),t.listenerCount("error")===0)throw I}),t.once("close",E),a(t,"response",I=>{a(I,"end",E)}),typeof e.request<"u"&&u(e.request,h,"request"),typeof e.socket<"u"){let I=()=>{h(e.socket,"socket")};t.setTimeout(e.socket,I),o.push(()=>{t.removeListener("timeout",I)})}return a(t,"socket",I=>{var v;let{socketPath:b}=t;if(I.connecting){let C=Boolean(b??Oit.isIP((v=p??A)!==null&&v!==void 0?v:"")!==0);if(typeof e.lookup<"u"&&!C&&typeof I.address().address>"u"){let T=u(e.lookup,h,"lookup");a(I,"lookup",T)}if(typeof e.connect<"u"){let T=()=>u(e.connect,h,"connect");C?a(I,"connect",T()):a(I,"lookup",L=>{L===null&&a(I,"connect",T())})}typeof e.secureConnect<"u"&&r.protocol==="https:"&&a(I,"connect",()=>{let T=u(e.secureConnect,h,"secureConnect");a(I,"secureConnect",T)})}if(typeof e.send<"u"){let C=()=>u(e.send,h,"send");I.connecting?a(I,"connect",()=>{a(t,"upload-complete",C())}):a(t,"upload-complete",C())}}),typeof e.response<"u"&&a(t,"upload-complete",()=>{let I=u(e.response,h,"response");a(t,"response",I)}),E}});var xae=_(h4=>{"use strict";Object.defineProperty(h4,"__esModule",{value:!0});var Sae=Tf();h4.default=t=>{t=t;let e={protocol:t.protocol,hostname:Sae.default.string(t.hostname)&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,host:t.host,hash:t.hash,search:t.search,pathname:t.pathname,href:t.href,path:`${t.pathname||""}${t.search||""}`};return Sae.default.string(t.port)&&t.port.length>0&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=`${t.username||""}:${t.password||""}`),e}});var bae=_(g4=>{"use strict";Object.defineProperty(g4,"__esModule",{value:!0});var Hit=Be("url"),jit=["protocol","host","hostname","port","pathname","search"];g4.default=(t,e)=>{var r,o;if(e.path){if(e.pathname)throw new TypeError("Parameters `path` and `pathname` are mutually exclusive.");if(e.search)throw new TypeError("Parameters `path` and `search` are mutually exclusive.");if(e.searchParams)throw new TypeError("Parameters `path` and `searchParams` are mutually exclusive.")}if(e.search&&e.searchParams)throw new TypeError("Parameters `search` and `searchParams` are mutually exclusive.");if(!t){if(!e.protocol)throw new TypeError("No URL protocol specified");t=`${e.protocol}//${(o=(r=e.hostname)!==null&&r!==void 0?r:e.host)!==null&&o!==void 0?o:""}`}let a=new Hit.URL(t);if(e.path){let n=e.path.indexOf("?");n===-1?e.pathname=e.path:(e.pathname=e.path.slice(0,n),e.search=e.path.slice(n+1)),delete e.path}for(let n of jit)e[n]&&(a[n]=e[n].toString());return a}});var kae=_(m4=>{"use strict";Object.defineProperty(m4,"__esModule",{value:!0});var d4=class{constructor(){this.weakMap=new WeakMap,this.map=new Map}set(e,r){typeof e=="object"?this.weakMap.set(e,r):this.map.set(e,r)}get(e){return typeof e=="object"?this.weakMap.get(e):this.map.get(e)}has(e){return typeof e=="object"?this.weakMap.has(e):this.map.has(e)}};m4.default=d4});var E4=_(y4=>{"use strict";Object.defineProperty(y4,"__esModule",{value:!0});var qit=async t=>{let e=[],r=0;for await(let o of t)e.push(o),r+=Buffer.byteLength(o);return Buffer.isBuffer(e[0])?Buffer.concat(e,r):Buffer.from(e.join(""))};y4.default=qit});var Fae=_(Pd=>{"use strict";Object.defineProperty(Pd,"__esModule",{value:!0});Pd.dnsLookupIpVersionToFamily=Pd.isDnsLookupIpVersion=void 0;var Qae={auto:0,ipv4:4,ipv6:6};Pd.isDnsLookupIpVersion=t=>t in Qae;Pd.dnsLookupIpVersionToFamily=t=>{if(Pd.isDnsLookupIpVersion(t))return Qae[t];throw new Error("Invalid DNS lookup IP version")}});var C4=_(ox=>{"use strict";Object.defineProperty(ox,"__esModule",{value:!0});ox.isResponseOk=void 0;ox.isResponseOk=t=>{let{statusCode:e}=t,r=t.request.options.followRedirect?299:399;return e>=200&&e<=r||e===304}});var Rae=_(w4=>{"use strict";Object.defineProperty(w4,"__esModule",{value:!0});var Tae=new Set;w4.default=t=>{Tae.has(t)||(Tae.add(t),process.emitWarning(`Got: ${t}`,{type:"DeprecationWarning"}))}});var Nae=_(I4=>{"use strict";Object.defineProperty(I4,"__esModule",{value:!0});var Ai=Tf(),Git=(t,e)=>{if(Ai.default.null_(t.encoding))throw new TypeError("To get a Buffer, set `options.responseType` to `buffer` instead");Ai.assert.any([Ai.default.string,Ai.default.undefined],t.encoding),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.resolveBodyOnly),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.methodRewriting),Ai.assert.any([Ai.default.boolean,Ai.default.undefined],t.isStream),Ai.assert.any([Ai.default.string,Ai.default.undefined],t.responseType),t.responseType===void 0&&(t.responseType="text");let{retry:r}=t;if(e?t.retry={...e.retry}:t.retry={calculateDelay:o=>o.computedValue,limit:0,methods:[],statusCodes:[],errorCodes:[],maxRetryAfter:void 0},Ai.default.object(r)?(t.retry={...t.retry,...r},t.retry.methods=[...new Set(t.retry.methods.map(o=>o.toUpperCase()))],t.retry.statusCodes=[...new Set(t.retry.statusCodes)],t.retry.errorCodes=[...new Set(t.retry.errorCodes)]):Ai.default.number(r)&&(t.retry.limit=r),Ai.default.undefined(t.retry.maxRetryAfter)&&(t.retry.maxRetryAfter=Math.min(...[t.timeout.request,t.timeout.connect].filter(Ai.default.number))),Ai.default.object(t.pagination)){e&&(t.pagination={...e.pagination,...t.pagination});let{pagination:o}=t;if(!Ai.default.function_(o.transform))throw new Error("`options.pagination.transform` must be implemented");if(!Ai.default.function_(o.shouldContinue))throw new Error("`options.pagination.shouldContinue` must be implemented");if(!Ai.default.function_(o.filter))throw new TypeError("`options.pagination.filter` must be implemented");if(!Ai.default.function_(o.paginate))throw new Error("`options.pagination.paginate` must be implemented")}return t.responseType==="json"&&t.headers.accept===void 0&&(t.headers.accept="application/json"),t};I4.default=Git});var Lae=_(d1=>{"use strict";Object.defineProperty(d1,"__esModule",{value:!0});d1.retryAfterStatusCodes=void 0;d1.retryAfterStatusCodes=new Set([413,429,503]);var Yit=({attemptCount:t,retryOptions:e,error:r,retryAfter:o})=>{if(t>e.limit)return 0;let a=e.methods.includes(r.options.method),n=e.errorCodes.includes(r.code),u=r.response&&e.statusCodes.includes(r.response.statusCode);if(!a||!n&&!u)return 0;if(r.response){if(o)return e.maxRetryAfter===void 0||o>e.maxRetryAfter?0:o;if(r.response.statusCode===413)return 0}let A=Math.random()*100;return 2**(t-1)*1e3+A};d1.default=Yit});var E1=_(Bn=>{"use strict";Object.defineProperty(Bn,"__esModule",{value:!0});Bn.UnsupportedProtocolError=Bn.ReadError=Bn.TimeoutError=Bn.UploadError=Bn.CacheError=Bn.HTTPError=Bn.MaxRedirectsError=Bn.RequestError=Bn.setNonEnumerableProperties=Bn.knownHookEvents=Bn.withoutBody=Bn.kIsNormalizedAlready=void 0;var Mae=Be("util"),Oae=Be("stream"),Wit=Be("fs"),oh=Be("url"),Uae=Be("http"),B4=Be("http"),Vit=Be("https"),Kit=eoe(),Jit=aoe(),_ae=Uoe(),zit=qoe(),Xit=yae(),Zit=tx(),st=Tf(),$it=Bae(),Hae=c4(),est=f4(),jae=Pae(),tst=xae(),qae=bae(),rst=kae(),nst=E4(),Gae=Fae(),ist=C4(),ah=Rae(),sst=Nae(),ost=Lae(),v4,Zs=Symbol("request"),cx=Symbol("response"),PE=Symbol("responseSize"),SE=Symbol("downloadedSize"),xE=Symbol("bodySize"),bE=Symbol("uploadedSize"),ax=Symbol("serverResponsesPiped"),Yae=Symbol("unproxyEvents"),Wae=Symbol("isFromCache"),D4=Symbol("cancelTimeouts"),Vae=Symbol("startedReading"),kE=Symbol("stopReading"),lx=Symbol("triggerRead"),lh=Symbol("body"),m1=Symbol("jobs"),Kae=Symbol("originalResponse"),Jae=Symbol("retryTimeout");Bn.kIsNormalizedAlready=Symbol("isNormalizedAlready");var ast=st.default.string(process.versions.brotli);Bn.withoutBody=new Set(["GET","HEAD"]);Bn.knownHookEvents=["init","beforeRequest","beforeRedirect","beforeError","beforeRetry","afterResponse"];function lst(t){for(let e in t){let r=t[e];if(!st.default.string(r)&&!st.default.number(r)&&!st.default.boolean(r)&&!st.default.null_(r)&&!st.default.undefined(r))throw new TypeError(`The \`searchParams\` value '${String(r)}' must be a string, number, boolean or null`)}}function cst(t){return st.default.object(t)&&!("statusCode"in t)}var P4=new rst.default,ust=async t=>new Promise((e,r)=>{let o=a=>{r(a)};t.pending||e(),t.once("error",o),t.once("ready",()=>{t.off("error",o),e()})}),Ast=new Set([300,301,302,303,304,307,308]),fst=["context","body","json","form"];Bn.setNonEnumerableProperties=(t,e)=>{let r={};for(let o of t)if(!!o)for(let a of fst)a in o&&(r[a]={writable:!0,configurable:!0,enumerable:!1,value:o[a]});Object.defineProperties(e,r)};var Ki=class extends Error{constructor(e,r,o){var a;if(super(e),Error.captureStackTrace(this,this.constructor),this.name="RequestError",this.code=r.code,o instanceof dx?(Object.defineProperty(this,"request",{enumerable:!1,value:o}),Object.defineProperty(this,"response",{enumerable:!1,value:o[cx]}),Object.defineProperty(this,"options",{enumerable:!1,value:o.options})):Object.defineProperty(this,"options",{enumerable:!1,value:o}),this.timings=(a=this.request)===null||a===void 0?void 0:a.timings,st.default.string(r.stack)&&st.default.string(this.stack)){let n=this.stack.indexOf(this.message)+this.message.length,u=this.stack.slice(n).split(` +`).reverse(),A=r.stack.slice(r.stack.indexOf(r.message)+r.message.length).split(` +`).reverse();for(;A.length!==0&&A[0]===u[0];)u.shift();this.stack=`${this.stack.slice(0,n)}${u.reverse().join(` +`)}${A.reverse().join(` +`)}`}}};Bn.RequestError=Ki;var ux=class extends Ki{constructor(e){super(`Redirected ${e.options.maxRedirects} times. Aborting.`,{},e),this.name="MaxRedirectsError"}};Bn.MaxRedirectsError=ux;var Ax=class extends Ki{constructor(e){super(`Response code ${e.statusCode} (${e.statusMessage})`,{},e.request),this.name="HTTPError"}};Bn.HTTPError=Ax;var fx=class extends Ki{constructor(e,r){super(e.message,e,r),this.name="CacheError"}};Bn.CacheError=fx;var px=class extends Ki{constructor(e,r){super(e.message,e,r),this.name="UploadError"}};Bn.UploadError=px;var hx=class extends Ki{constructor(e,r,o){super(e.message,e,o),this.name="TimeoutError",this.event=e.event,this.timings=r}};Bn.TimeoutError=hx;var y1=class extends Ki{constructor(e,r){super(e.message,e,r),this.name="ReadError"}};Bn.ReadError=y1;var gx=class extends Ki{constructor(e){super(`Unsupported protocol "${e.url.protocol}"`,{},e),this.name="UnsupportedProtocolError"}};Bn.UnsupportedProtocolError=gx;var pst=["socket","connect","continue","information","upgrade","timeout"],dx=class extends Oae.Duplex{constructor(e,r={},o){super({autoDestroy:!1,highWaterMark:0}),this[SE]=0,this[bE]=0,this.requestInitialized=!1,this[ax]=new Set,this.redirects=[],this[kE]=!1,this[lx]=!1,this[m1]=[],this.retryCount=0,this._progressCallbacks=[];let a=()=>this._unlockWrite(),n=()=>this._lockWrite();this.on("pipe",h=>{h.prependListener("data",a),h.on("data",n),h.prependListener("end",a),h.on("end",n)}),this.on("unpipe",h=>{h.off("data",a),h.off("data",n),h.off("end",a),h.off("end",n)}),this.on("pipe",h=>{h instanceof B4.IncomingMessage&&(this.options.headers={...h.headers,...this.options.headers})});let{json:u,body:A,form:p}=r;if((u||A||p)&&this._lockWrite(),Bn.kIsNormalizedAlready in r)this.options=r;else try{this.options=this.constructor.normalizeArguments(e,r,o)}catch(h){st.default.nodeStream(r.body)&&r.body.destroy(),this.destroy(h);return}(async()=>{var h;try{this.options.body instanceof Wit.ReadStream&&await ust(this.options.body);let{url:E}=this.options;if(!E)throw new TypeError("Missing `url` property");if(this.requestUrl=E.toString(),decodeURI(this.requestUrl),await this._finalizeBody(),await this._makeRequest(),this.destroyed){(h=this[Zs])===null||h===void 0||h.destroy();return}for(let I of this[m1])I();this[m1].length=0,this.requestInitialized=!0}catch(E){if(E instanceof Ki){this._beforeError(E);return}this.destroyed||this.destroy(E)}})()}static normalizeArguments(e,r,o){var a,n,u,A,p;let h=r;if(st.default.object(e)&&!st.default.urlInstance(e))r={...o,...e,...r};else{if(e&&r&&r.url!==void 0)throw new TypeError("The `url` option is mutually exclusive with the `input` argument");r={...o,...r},e!==void 0&&(r.url=e),st.default.urlInstance(r.url)&&(r.url=new oh.URL(r.url.toString()))}if(r.cache===!1&&(r.cache=void 0),r.dnsCache===!1&&(r.dnsCache=void 0),st.assert.any([st.default.string,st.default.undefined],r.method),st.assert.any([st.default.object,st.default.undefined],r.headers),st.assert.any([st.default.string,st.default.urlInstance,st.default.undefined],r.prefixUrl),st.assert.any([st.default.object,st.default.undefined],r.cookieJar),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.searchParams),st.assert.any([st.default.object,st.default.string,st.default.undefined],r.cache),st.assert.any([st.default.object,st.default.number,st.default.undefined],r.timeout),st.assert.any([st.default.object,st.default.undefined],r.context),st.assert.any([st.default.object,st.default.undefined],r.hooks),st.assert.any([st.default.boolean,st.default.undefined],r.decompress),st.assert.any([st.default.boolean,st.default.undefined],r.ignoreInvalidCookies),st.assert.any([st.default.boolean,st.default.undefined],r.followRedirect),st.assert.any([st.default.number,st.default.undefined],r.maxRedirects),st.assert.any([st.default.boolean,st.default.undefined],r.throwHttpErrors),st.assert.any([st.default.boolean,st.default.undefined],r.http2),st.assert.any([st.default.boolean,st.default.undefined],r.allowGetBody),st.assert.any([st.default.string,st.default.undefined],r.localAddress),st.assert.any([Gae.isDnsLookupIpVersion,st.default.undefined],r.dnsLookupIpVersion),st.assert.any([st.default.object,st.default.undefined],r.https),st.assert.any([st.default.boolean,st.default.undefined],r.rejectUnauthorized),r.https&&(st.assert.any([st.default.boolean,st.default.undefined],r.https.rejectUnauthorized),st.assert.any([st.default.function_,st.default.undefined],r.https.checkServerIdentity),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificateAuthority),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.key),st.assert.any([st.default.string,st.default.object,st.default.array,st.default.undefined],r.https.certificate),st.assert.any([st.default.string,st.default.undefined],r.https.passphrase),st.assert.any([st.default.string,st.default.buffer,st.default.array,st.default.undefined],r.https.pfx)),st.assert.any([st.default.object,st.default.undefined],r.cacheOptions),st.default.string(r.method)?r.method=r.method.toUpperCase():r.method="GET",r.headers===o?.headers?r.headers={...r.headers}:r.headers=Zit({...o?.headers,...r.headers}),"slashes"in r)throw new TypeError("The legacy `url.Url` has been deprecated. Use `URL` instead.");if("auth"in r)throw new TypeError("Parameter `auth` is deprecated. Use `username` / `password` instead.");if("searchParams"in r&&r.searchParams&&r.searchParams!==o?.searchParams){let b;if(st.default.string(r.searchParams)||r.searchParams instanceof oh.URLSearchParams)b=new oh.URLSearchParams(r.searchParams);else{lst(r.searchParams),b=new oh.URLSearchParams;for(let C in r.searchParams){let T=r.searchParams[C];T===null?b.append(C,""):T!==void 0&&b.append(C,T)}}(a=o?.searchParams)===null||a===void 0||a.forEach((C,T)=>{b.has(T)||b.append(T,C)}),r.searchParams=b}if(r.username=(n=r.username)!==null&&n!==void 0?n:"",r.password=(u=r.password)!==null&&u!==void 0?u:"",st.default.undefined(r.prefixUrl)?r.prefixUrl=(A=o?.prefixUrl)!==null&&A!==void 0?A:"":(r.prefixUrl=r.prefixUrl.toString(),r.prefixUrl!==""&&!r.prefixUrl.endsWith("/")&&(r.prefixUrl+="/")),st.default.string(r.url)){if(r.url.startsWith("/"))throw new Error("`input` must not start with a slash when using `prefixUrl`");r.url=qae.default(r.prefixUrl+r.url,r)}else(st.default.undefined(r.url)&&r.prefixUrl!==""||r.protocol)&&(r.url=qae.default(r.prefixUrl,r));if(r.url){"port"in r&&delete r.port;let{prefixUrl:b}=r;Object.defineProperty(r,"prefixUrl",{set:T=>{let L=r.url;if(!L.href.startsWith(T))throw new Error(`Cannot change \`prefixUrl\` from ${b} to ${T}: ${L.href}`);r.url=new oh.URL(T+L.href.slice(b.length)),b=T},get:()=>b});let{protocol:C}=r.url;if(C==="unix:"&&(C="http:",r.url=new oh.URL(`http://unix${r.url.pathname}${r.url.search}`)),r.searchParams&&(r.url.search=r.searchParams.toString()),C!=="http:"&&C!=="https:")throw new gx(r);r.username===""?r.username=r.url.username:r.url.username=r.username,r.password===""?r.password=r.url.password:r.url.password=r.password}let{cookieJar:E}=r;if(E){let{setCookie:b,getCookieString:C}=E;st.assert.function_(b),st.assert.function_(C),b.length===4&&C.length===0&&(b=Mae.promisify(b.bind(r.cookieJar)),C=Mae.promisify(C.bind(r.cookieJar)),r.cookieJar={setCookie:b,getCookieString:C})}let{cache:I}=r;if(I&&(P4.has(I)||P4.set(I,new _ae((b,C)=>{let T=b[Zs](b,C);return st.default.promise(T)&&(T.once=(L,U)=>{if(L==="error")T.catch(U);else if(L==="abort")(async()=>{try{(await T).once("abort",U)}catch{}})();else throw new Error(`Unknown HTTP2 promise event: ${L}`);return T}),T},I))),r.cacheOptions={...r.cacheOptions},r.dnsCache===!0)v4||(v4=new Jit.default),r.dnsCache=v4;else if(!st.default.undefined(r.dnsCache)&&!r.dnsCache.lookup)throw new TypeError(`Parameter \`dnsCache\` must be a CacheableLookup instance or a boolean, got ${st.default(r.dnsCache)}`);st.default.number(r.timeout)?r.timeout={request:r.timeout}:o&&r.timeout!==o.timeout?r.timeout={...o.timeout,...r.timeout}:r.timeout={...r.timeout},r.context||(r.context={});let v=r.hooks===o?.hooks;r.hooks={...r.hooks};for(let b of Bn.knownHookEvents)if(b in r.hooks)if(st.default.array(r.hooks[b]))r.hooks[b]=[...r.hooks[b]];else throw new TypeError(`Parameter \`${b}\` must be an Array, got ${st.default(r.hooks[b])}`);else r.hooks[b]=[];if(o&&!v)for(let b of Bn.knownHookEvents)o.hooks[b].length>0&&(r.hooks[b]=[...o.hooks[b],...r.hooks[b]]);if("family"in r&&ah.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"'),o?.https&&(r.https={...o.https,...r.https}),"rejectUnauthorized"in r&&ah.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"'),"checkServerIdentity"in r&&ah.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"'),"ca"in r&&ah.default('"options.ca" was never documented, please use "options.https.certificateAuthority"'),"key"in r&&ah.default('"options.key" was never documented, please use "options.https.key"'),"cert"in r&&ah.default('"options.cert" was never documented, please use "options.https.certificate"'),"passphrase"in r&&ah.default('"options.passphrase" was never documented, please use "options.https.passphrase"'),"pfx"in r&&ah.default('"options.pfx" was never documented, please use "options.https.pfx"'),"followRedirects"in r)throw new TypeError("The `followRedirects` option does not exist. Use `followRedirect` instead.");if(r.agent){for(let b in r.agent)if(b!=="http"&&b!=="https"&&b!=="http2")throw new TypeError(`Expected the \`options.agent\` properties to be \`http\`, \`https\` or \`http2\`, got \`${b}\``)}return r.maxRedirects=(p=r.maxRedirects)!==null&&p!==void 0?p:0,Bn.setNonEnumerableProperties([o,h],r),sst.default(r,o)}_lockWrite(){let e=()=>{throw new TypeError("The payload has been already provided")};this.write=e,this.end=e}_unlockWrite(){this.write=super.write,this.end=super.end}async _finalizeBody(){let{options:e}=this,{headers:r}=e,o=!st.default.undefined(e.form),a=!st.default.undefined(e.json),n=!st.default.undefined(e.body),u=o||a||n,A=Bn.withoutBody.has(e.method)&&!(e.method==="GET"&&e.allowGetBody);if(this._cannotHaveBody=A,u){if(A)throw new TypeError(`The \`${e.method}\` method cannot be used with a body`);if([n,o,a].filter(p=>p).length>1)throw new TypeError("The `body`, `json` and `form` options are mutually exclusive");if(n&&!(e.body instanceof Oae.Readable)&&!st.default.string(e.body)&&!st.default.buffer(e.body)&&!Hae.default(e.body))throw new TypeError("The `body` option must be a stream.Readable, string or Buffer");if(o&&!st.default.object(e.form))throw new TypeError("The `form` option must be an Object");{let p=!st.default.string(r["content-type"]);n?(Hae.default(e.body)&&p&&(r["content-type"]=`multipart/form-data; boundary=${e.body.getBoundary()}`),this[lh]=e.body):o?(p&&(r["content-type"]="application/x-www-form-urlencoded"),this[lh]=new oh.URLSearchParams(e.form).toString()):(p&&(r["content-type"]="application/json"),this[lh]=e.stringifyJson(e.json));let h=await $it.default(this[lh],e.headers);st.default.undefined(r["content-length"])&&st.default.undefined(r["transfer-encoding"])&&!A&&!st.default.undefined(h)&&(r["content-length"]=String(h))}}else A?this._lockWrite():this._unlockWrite();this[xE]=Number(r["content-length"])||void 0}async _onResponseBase(e){let{options:r}=this,{url:o}=r;this[Kae]=e,r.decompress&&(e=zit(e));let a=e.statusCode,n=e;n.statusMessage=n.statusMessage?n.statusMessage:Uae.STATUS_CODES[a],n.url=r.url.toString(),n.requestUrl=this.requestUrl,n.redirectUrls=this.redirects,n.request=this,n.isFromCache=e.fromCache||!1,n.ip=this.ip,n.retryCount=this.retryCount,this[Wae]=n.isFromCache,this[PE]=Number(e.headers["content-length"])||void 0,this[cx]=e,e.once("end",()=>{this[PE]=this[SE],this.emit("downloadProgress",this.downloadProgress)}),e.once("error",A=>{e.destroy(),this._beforeError(new y1(A,this))}),e.once("aborted",()=>{this._beforeError(new y1({name:"Error",message:"The server aborted pending request",code:"ECONNRESET"},this))}),this.emit("downloadProgress",this.downloadProgress);let u=e.headers["set-cookie"];if(st.default.object(r.cookieJar)&&u){let A=u.map(async p=>r.cookieJar.setCookie(p,o.toString()));r.ignoreInvalidCookies&&(A=A.map(async p=>p.catch(()=>{})));try{await Promise.all(A)}catch(p){this._beforeError(p);return}}if(r.followRedirect&&e.headers.location&&Ast.has(a)){if(e.resume(),this[Zs]&&(this[D4](),delete this[Zs],this[Yae]()),(a===303&&r.method!=="GET"&&r.method!=="HEAD"||!r.methodRewriting)&&(r.method="GET","body"in r&&delete r.body,"json"in r&&delete r.json,"form"in r&&delete r.form,this[lh]=void 0,delete r.headers["content-length"]),this.redirects.length>=r.maxRedirects){this._beforeError(new ux(this));return}try{let p=Buffer.from(e.headers.location,"binary").toString(),h=new oh.URL(p,o),E=h.toString();decodeURI(E),h.hostname!==o.hostname||h.port!==o.port?("host"in r.headers&&delete r.headers.host,"cookie"in r.headers&&delete r.headers.cookie,"authorization"in r.headers&&delete r.headers.authorization,(r.username||r.password)&&(r.username="",r.password="")):(h.username=r.username,h.password=r.password),this.redirects.push(E),r.url=h;for(let I of r.hooks.beforeRedirect)await I(r,n);this.emit("redirect",n,r),await this._makeRequest()}catch(p){this._beforeError(p);return}return}if(r.isStream&&r.throwHttpErrors&&!ist.isResponseOk(n)){this._beforeError(new Ax(n));return}e.on("readable",()=>{this[lx]&&this._read()}),this.on("resume",()=>{e.resume()}),this.on("pause",()=>{e.pause()}),e.once("end",()=>{this.push(null)}),this.emit("response",e);for(let A of this[ax])if(!A.headersSent){for(let p in e.headers){let h=r.decompress?p!=="content-encoding":!0,E=e.headers[p];h&&A.setHeader(p,E)}A.statusCode=a}}async _onResponse(e){try{await this._onResponseBase(e)}catch(r){this._beforeError(r)}}_onRequest(e){let{options:r}=this,{timeout:o,url:a}=r;Kit.default(e),this[D4]=jae.default(e,o,a);let n=r.cache?"cacheableResponse":"response";e.once(n,p=>{this._onResponse(p)}),e.once("error",p=>{var h;e.destroy(),(h=e.res)===null||h===void 0||h.removeAllListeners("end"),p=p instanceof jae.TimeoutError?new hx(p,this.timings,this):new Ki(p.message,p,this),this._beforeError(p)}),this[Yae]=est.default(e,this,pst),this[Zs]=e,this.emit("uploadProgress",this.uploadProgress);let u=this[lh],A=this.redirects.length===0?this:e;st.default.nodeStream(u)?(u.pipe(A),u.once("error",p=>{this._beforeError(new px(p,this))})):(this._unlockWrite(),st.default.undefined(u)?(this._cannotHaveBody||this._noPipe)&&(A.end(),this._lockWrite()):(this._writeRequest(u,void 0,()=>{}),A.end(),this._lockWrite())),this.emit("request",e)}async _createCacheableRequest(e,r){return new Promise((o,a)=>{Object.assign(r,tst.default(e)),delete r.url;let n,u=P4.get(r.cache)(r,async A=>{A._readableState.autoDestroy=!1,n&&(await n).emit("cacheableResponse",A),o(A)});r.url=e,u.once("error",a),u.once("request",async A=>{n=A,o(n)})})}async _makeRequest(){var e,r,o,a,n;let{options:u}=this,{headers:A}=u;for(let U in A)if(st.default.undefined(A[U]))delete A[U];else if(st.default.null_(A[U]))throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${U}\` header`);if(u.decompress&&st.default.undefined(A["accept-encoding"])&&(A["accept-encoding"]=ast?"gzip, deflate, br":"gzip, deflate"),u.cookieJar){let U=await u.cookieJar.getCookieString(u.url.toString());st.default.nonEmptyString(U)&&(u.headers.cookie=U)}for(let U of u.hooks.beforeRequest){let J=await U(u);if(!st.default.undefined(J)){u.request=()=>J;break}}u.body&&this[lh]!==u.body&&(this[lh]=u.body);let{agent:p,request:h,timeout:E,url:I}=u;if(u.dnsCache&&!("lookup"in u)&&(u.lookup=u.dnsCache.lookup),I.hostname==="unix"){let U=/(?.+?):(?.+)/.exec(`${I.pathname}${I.search}`);if(U?.groups){let{socketPath:J,path:te}=U.groups;Object.assign(u,{socketPath:J,path:te,host:""})}}let v=I.protocol==="https:",b;u.http2?b=Xit.auto:b=v?Vit.request:Uae.request;let C=(e=u.request)!==null&&e!==void 0?e:b,T=u.cache?this._createCacheableRequest:C;p&&!u.http2&&(u.agent=p[v?"https":"http"]),u[Zs]=C,delete u.request,delete u.timeout;let L=u;if(L.shared=(r=u.cacheOptions)===null||r===void 0?void 0:r.shared,L.cacheHeuristic=(o=u.cacheOptions)===null||o===void 0?void 0:o.cacheHeuristic,L.immutableMinTimeToLive=(a=u.cacheOptions)===null||a===void 0?void 0:a.immutableMinTimeToLive,L.ignoreCargoCult=(n=u.cacheOptions)===null||n===void 0?void 0:n.ignoreCargoCult,u.dnsLookupIpVersion!==void 0)try{L.family=Gae.dnsLookupIpVersionToFamily(u.dnsLookupIpVersion)}catch{throw new Error("Invalid `dnsLookupIpVersion` option value")}u.https&&("rejectUnauthorized"in u.https&&(L.rejectUnauthorized=u.https.rejectUnauthorized),u.https.checkServerIdentity&&(L.checkServerIdentity=u.https.checkServerIdentity),u.https.certificateAuthority&&(L.ca=u.https.certificateAuthority),u.https.certificate&&(L.cert=u.https.certificate),u.https.key&&(L.key=u.https.key),u.https.passphrase&&(L.passphrase=u.https.passphrase),u.https.pfx&&(L.pfx=u.https.pfx));try{let U=await T(I,L);st.default.undefined(U)&&(U=b(I,L)),u.request=h,u.timeout=E,u.agent=p,u.https&&("rejectUnauthorized"in u.https&&delete L.rejectUnauthorized,u.https.checkServerIdentity&&delete L.checkServerIdentity,u.https.certificateAuthority&&delete L.ca,u.https.certificate&&delete L.cert,u.https.key&&delete L.key,u.https.passphrase&&delete L.passphrase,u.https.pfx&&delete L.pfx),cst(U)?this._onRequest(U):this.writable?(this.once("finish",()=>{this._onResponse(U)}),this._unlockWrite(),this.end(),this._lockWrite()):this._onResponse(U)}catch(U){throw U instanceof _ae.CacheError?new fx(U,this):new Ki(U.message,U,this)}}async _error(e){try{for(let r of this.options.hooks.beforeError)e=await r(e)}catch(r){e=new Ki(r.message,r,this)}this.destroy(e)}_beforeError(e){if(this[kE])return;let{options:r}=this,o=this.retryCount+1;this[kE]=!0,e instanceof Ki||(e=new Ki(e.message,e,this));let a=e,{response:n}=a;(async()=>{if(n&&!n.body){n.setEncoding(this._readableState.encoding);try{n.rawBody=await nst.default(n),n.body=n.rawBody.toString()}catch{}}if(this.listenerCount("retry")!==0){let u;try{let A;n&&"retry-after"in n.headers&&(A=Number(n.headers["retry-after"]),Number.isNaN(A)?(A=Date.parse(n.headers["retry-after"])-Date.now(),A<=0&&(A=1)):A*=1e3),u=await r.retry.calculateDelay({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:ost.default({attemptCount:o,retryOptions:r.retry,error:a,retryAfter:A,computedValue:0})})}catch(A){this._error(new Ki(A.message,A,this));return}if(u){let A=async()=>{try{for(let p of this.options.hooks.beforeRetry)await p(this.options,a,o)}catch(p){this._error(new Ki(p.message,e,this));return}this.destroyed||(this.destroy(),this.emit("retry",o,e))};this[Jae]=setTimeout(A,u);return}}this._error(a)})()}_read(){this[lx]=!0;let e=this[cx];if(e&&!this[kE]){e.readableLength&&(this[lx]=!1);let r;for(;(r=e.read())!==null;){this[SE]+=r.length,this[Vae]=!0;let o=this.downloadProgress;o.percent<1&&this.emit("downloadProgress",o),this.push(r)}}}_write(e,r,o){let a=()=>{this._writeRequest(e,r,o)};this.requestInitialized?a():this[m1].push(a)}_writeRequest(e,r,o){this[Zs].destroyed||(this._progressCallbacks.push(()=>{this[bE]+=Buffer.byteLength(e,r);let a=this.uploadProgress;a.percent<1&&this.emit("uploadProgress",a)}),this[Zs].write(e,r,a=>{!a&&this._progressCallbacks.length>0&&this._progressCallbacks.shift()(),o(a)}))}_final(e){let r=()=>{for(;this._progressCallbacks.length!==0;)this._progressCallbacks.shift()();if(!(Zs in this)){e();return}if(this[Zs].destroyed){e();return}this[Zs].end(o=>{o||(this[xE]=this[bE],this.emit("uploadProgress",this.uploadProgress),this[Zs].emit("upload-complete")),e(o)})};this.requestInitialized?r():this[m1].push(r)}_destroy(e,r){var o;this[kE]=!0,clearTimeout(this[Jae]),Zs in this&&(this[D4](),!((o=this[cx])===null||o===void 0)&&o.complete||this[Zs].destroy()),e!==null&&!st.default.undefined(e)&&!(e instanceof Ki)&&(e=new Ki(e.message,e,this)),r(e)}get _isAboutToError(){return this[kE]}get ip(){var e;return(e=this.socket)===null||e===void 0?void 0:e.remoteAddress}get aborted(){var e,r,o;return((r=(e=this[Zs])===null||e===void 0?void 0:e.destroyed)!==null&&r!==void 0?r:this.destroyed)&&!(!((o=this[Kae])===null||o===void 0)&&o.complete)}get socket(){var e,r;return(r=(e=this[Zs])===null||e===void 0?void 0:e.socket)!==null&&r!==void 0?r:void 0}get downloadProgress(){let e;return this[PE]?e=this[SE]/this[PE]:this[PE]===this[SE]?e=1:e=0,{percent:e,transferred:this[SE],total:this[PE]}}get uploadProgress(){let e;return this[xE]?e=this[bE]/this[xE]:this[xE]===this[bE]?e=1:e=0,{percent:e,transferred:this[bE],total:this[xE]}}get timings(){var e;return(e=this[Zs])===null||e===void 0?void 0:e.timings}get isFromCache(){return this[Wae]}pipe(e,r){if(this[Vae])throw new Error("Failed to pipe. The response has been emitted already.");return e instanceof B4.ServerResponse&&this[ax].add(e),super.pipe(e,r)}unpipe(e){return e instanceof B4.ServerResponse&&this[ax].delete(e),super.unpipe(e),this}};Bn.default=dx});var C1=_(qc=>{"use strict";var hst=qc&&qc.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),gst=qc&&qc.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&hst(e,t,r)};Object.defineProperty(qc,"__esModule",{value:!0});qc.CancelError=qc.ParseError=void 0;var zae=E1(),S4=class extends zae.RequestError{constructor(e,r){let{options:o}=r.request;super(`${e.message} in "${o.url.toString()}"`,e,r.request),this.name="ParseError"}};qc.ParseError=S4;var x4=class extends zae.RequestError{constructor(e){super("Promise was canceled",{},e),this.name="CancelError"}get isCanceled(){return!0}};qc.CancelError=x4;gst(E1(),qc)});var Zae=_(b4=>{"use strict";Object.defineProperty(b4,"__esModule",{value:!0});var Xae=C1(),dst=(t,e,r,o)=>{let{rawBody:a}=t;try{if(e==="text")return a.toString(o);if(e==="json")return a.length===0?"":r(a.toString());if(e==="buffer")return a;throw new Xae.ParseError({message:`Unknown body type '${e}'`,name:"Error"},t)}catch(n){throw new Xae.ParseError(n,t)}};b4.default=dst});var k4=_(ch=>{"use strict";var mst=ch&&ch.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),yst=ch&&ch.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&mst(e,t,r)};Object.defineProperty(ch,"__esModule",{value:!0});var Est=Be("events"),Cst=Tf(),wst=Zse(),mx=C1(),$ae=Zae(),ele=E1(),Ist=f4(),Bst=E4(),tle=C4(),vst=["request","response","redirect","uploadProgress","downloadProgress"];function rle(t){let e,r,o=new Est.EventEmitter,a=new wst((u,A,p)=>{let h=E=>{let I=new ele.default(void 0,t);I.retryCount=E,I._noPipe=!0,p(()=>I.destroy()),p.shouldReject=!1,p(()=>A(new mx.CancelError(I))),e=I,I.once("response",async C=>{var T;if(C.retryCount=E,C.request.aborted)return;let L;try{L=await Bst.default(I),C.rawBody=L}catch{return}if(I._isAboutToError)return;let U=((T=C.headers["content-encoding"])!==null&&T!==void 0?T:"").toLowerCase(),J=["gzip","deflate","br"].includes(U),{options:te}=I;if(J&&!te.decompress)C.body=L;else try{C.body=$ae.default(C,te.responseType,te.parseJson,te.encoding)}catch(le){if(C.body=L.toString(),tle.isResponseOk(C)){I._beforeError(le);return}}try{for(let[le,pe]of te.hooks.afterResponse.entries())C=await pe(C,async Ae=>{let ye=ele.default.normalizeArguments(void 0,{...Ae,retry:{calculateDelay:()=>0},throwHttpErrors:!1,resolveBodyOnly:!1},te);ye.hooks.afterResponse=ye.hooks.afterResponse.slice(0,le);for(let we of ye.hooks.beforeRetry)await we(ye);let ae=rle(ye);return p(()=>{ae.catch(()=>{}),ae.cancel()}),ae})}catch(le){I._beforeError(new mx.RequestError(le.message,le,I));return}if(!tle.isResponseOk(C)){I._beforeError(new mx.HTTPError(C));return}r=C,u(I.options.resolveBodyOnly?C.body:C)});let v=C=>{if(a.isCanceled)return;let{options:T}=I;if(C instanceof mx.HTTPError&&!T.throwHttpErrors){let{response:L}=C;u(I.options.resolveBodyOnly?L.body:L);return}A(C)};I.once("error",v);let b=I.options.body;I.once("retry",(C,T)=>{var L,U;if(b===((L=T.request)===null||L===void 0?void 0:L.options.body)&&Cst.default.nodeStream((U=T.request)===null||U===void 0?void 0:U.options.body)){v(T);return}h(C)}),Ist.default(I,o,vst)};h(0)});a.on=(u,A)=>(o.on(u,A),a);let n=u=>{let A=(async()=>{await a;let{options:p}=r.request;return $ae.default(r,u,p.parseJson,p.encoding)})();return Object.defineProperties(A,Object.getOwnPropertyDescriptors(a)),A};return a.json=()=>{let{headers:u}=e.options;return!e.writableFinished&&u.accept===void 0&&(u.accept="application/json"),n("json")},a.buffer=()=>n("buffer"),a.text=()=>n("text"),a}ch.default=rle;yst(C1(),ch)});var nle=_(Q4=>{"use strict";Object.defineProperty(Q4,"__esModule",{value:!0});var Dst=C1();function Pst(t,...e){let r=(async()=>{if(t instanceof Dst.RequestError)try{for(let a of e)if(a)for(let n of a)t=await n(t)}catch(a){t=a}throw t})(),o=()=>r;return r.json=o,r.text=o,r.buffer=o,r.on=o,r}Q4.default=Pst});var ole=_(F4=>{"use strict";Object.defineProperty(F4,"__esModule",{value:!0});var ile=Tf();function sle(t){for(let e of Object.values(t))(ile.default.plainObject(e)||ile.default.array(e))&&sle(e);return Object.freeze(t)}F4.default=sle});var lle=_(ale=>{"use strict";Object.defineProperty(ale,"__esModule",{value:!0})});var T4=_(Kl=>{"use strict";var Sst=Kl&&Kl.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),xst=Kl&&Kl.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Sst(e,t,r)};Object.defineProperty(Kl,"__esModule",{value:!0});Kl.defaultHandler=void 0;var cle=Tf(),Vl=k4(),bst=nle(),Ex=E1(),kst=ole(),Qst={RequestError:Vl.RequestError,CacheError:Vl.CacheError,ReadError:Vl.ReadError,HTTPError:Vl.HTTPError,MaxRedirectsError:Vl.MaxRedirectsError,TimeoutError:Vl.TimeoutError,ParseError:Vl.ParseError,CancelError:Vl.CancelError,UnsupportedProtocolError:Vl.UnsupportedProtocolError,UploadError:Vl.UploadError},Fst=async t=>new Promise(e=>{setTimeout(e,t)}),{normalizeArguments:yx}=Ex.default,ule=(...t)=>{let e;for(let r of t)e=yx(void 0,r,e);return e},Tst=t=>t.isStream?new Ex.default(void 0,t):Vl.default(t),Rst=t=>"defaults"in t&&"options"in t.defaults,Nst=["get","post","put","patch","head","delete"];Kl.defaultHandler=(t,e)=>e(t);var Ale=(t,e)=>{if(t)for(let r of t)r(e)},fle=t=>{t._rawHandlers=t.handlers,t.handlers=t.handlers.map(o=>(a,n)=>{let u,A=o(a,p=>(u=n(p),u));if(A!==u&&!a.isStream&&u){let p=A,{then:h,catch:E,finally:I}=p;Object.setPrototypeOf(p,Object.getPrototypeOf(u)),Object.defineProperties(p,Object.getOwnPropertyDescriptors(u)),p.then=h,p.catch=E,p.finally=I}return A});let e=(o,a={},n)=>{var u,A;let p=0,h=E=>t.handlers[p++](E,p===t.handlers.length?Tst:h);if(cle.default.plainObject(o)){let E={...o,...a};Ex.setNonEnumerableProperties([o,a],E),a=E,o=void 0}try{let E;try{Ale(t.options.hooks.init,a),Ale((u=a.hooks)===null||u===void 0?void 0:u.init,a)}catch(v){E=v}let I=yx(o,a,n??t.options);if(I[Ex.kIsNormalizedAlready]=!0,E)throw new Vl.RequestError(E.message,E,I);return h(I)}catch(E){if(a.isStream)throw E;return bst.default(E,t.options.hooks.beforeError,(A=a.hooks)===null||A===void 0?void 0:A.beforeError)}};e.extend=(...o)=>{let a=[t.options],n=[...t._rawHandlers],u;for(let A of o)Rst(A)?(a.push(A.defaults.options),n.push(...A.defaults._rawHandlers),u=A.defaults.mutableDefaults):(a.push(A),"handlers"in A&&n.push(...A.handlers),u=A.mutableDefaults);return n=n.filter(A=>A!==Kl.defaultHandler),n.length===0&&n.push(Kl.defaultHandler),fle({options:ule(...a),handlers:n,mutableDefaults:Boolean(u)})};let r=async function*(o,a){let n=yx(o,a,t.options);n.resolveBodyOnly=!1;let u=n.pagination;if(!cle.default.object(u))throw new TypeError("`options.pagination` must be implemented");let A=[],{countLimit:p}=u,h=0;for(;h{let n=[];for await(let u of r(o,a))n.push(u);return n},e.paginate.each=r,e.stream=(o,a)=>e(o,{...a,isStream:!0});for(let o of Nst)e[o]=(a,n)=>e(a,{...n,method:o}),e.stream[o]=(a,n)=>e(a,{...n,method:o,isStream:!0});return Object.assign(e,Qst),Object.defineProperty(e,"defaults",{value:t.mutableDefaults?t:kst.default(t),writable:t.mutableDefaults,configurable:t.mutableDefaults,enumerable:!0}),e.mergeOptions=ule,e};Kl.default=fle;xst(lle(),Kl)});var gle=_((Rf,Cx)=>{"use strict";var Lst=Rf&&Rf.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),ple=Rf&&Rf.__exportStar||function(t,e){for(var r in t)r!=="default"&&!Object.prototype.hasOwnProperty.call(e,r)&&Lst(e,t,r)};Object.defineProperty(Rf,"__esModule",{value:!0});var Mst=Be("url"),hle=T4(),Ost={options:{method:"GET",retry:{limit:2,methods:["GET","PUT","HEAD","DELETE","OPTIONS","TRACE"],statusCodes:[408,413,429,500,502,503,504,521,522,524],errorCodes:["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"],maxRetryAfter:void 0,calculateDelay:({computedValue:t})=>t},timeout:{},headers:{"user-agent":"got (https://github.com/sindresorhus/got)"},hooks:{init:[],beforeRequest:[],beforeRedirect:[],beforeRetry:[],beforeError:[],afterResponse:[]},cache:void 0,dnsCache:void 0,decompress:!0,throwHttpErrors:!0,followRedirect:!0,isStream:!1,responseType:"text",resolveBodyOnly:!1,maxRedirects:10,prefixUrl:"",methodRewriting:!0,ignoreInvalidCookies:!1,context:{},http2:!1,allowGetBody:!1,https:void 0,pagination:{transform:t=>t.request.options.responseType==="json"?t.body:JSON.parse(t.body),paginate:t=>{if(!Reflect.has(t.headers,"link"))return!1;let e=t.headers.link.split(","),r;for(let o of e){let a=o.split(";");if(a[1].includes("next")){r=a[0].trimStart().trim(),r=r.slice(1,-1);break}}return r?{url:new Mst.URL(r)}:!1},filter:()=>!0,shouldContinue:()=>!0,countLimit:1/0,backoff:0,requestLimit:1e4,stackAllItems:!0},parseJson:t=>JSON.parse(t),stringifyJson:t=>JSON.stringify(t),cacheOptions:{}},handlers:[hle.defaultHandler],mutableDefaults:!1},R4=hle.default(Ost);Rf.default=R4;Cx.exports=R4;Cx.exports.default=R4;Cx.exports.__esModule=!0;ple(T4(),Rf);ple(k4(),Rf)});var rn={};Kt(rn,{Method:()=>Ile,del:()=>qst,get:()=>O4,getNetworkSettings:()=>wle,post:()=>U4,put:()=>jst,request:()=>w1});function yle(t){let e=new wx.URL(t),r={host:e.hostname,headers:{}};return e.port&&(r.port=Number(e.port)),e.username&&e.password&&(r.proxyAuth=`${e.username}:${e.password}`),{proxy:r}}async function N4(t){return ol(mle,t,()=>oe.readFilePromise(t).then(e=>(mle.set(t,e),e)))}function Hst({statusCode:t,statusMessage:e},r){let o=Ot(r,t,yt.NUMBER),a=`https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/${t}`;return Xy(r,`${o}${e?` (${e})`:""}`,a)}async function Ix(t,{configuration:e,customErrorMessage:r}){try{return await t}catch(o){if(o.name!=="HTTPError")throw o;let a=r?.(o,e)??o.response.body?.error;a==null&&(o.message.startsWith("Response code")?a="The remote server failed to provide the requested resource":a=o.message),o.code==="ETIMEDOUT"&&o.event==="socket"&&(a+=`(can be increased via ${Ot(e,"httpTimeout",yt.SETTING)})`);let n=new zt(35,a,u=>{o.response&&u.reportError(35,` ${zu(e,{label:"Response Code",value:_c(yt.NO_HINT,Hst(o.response,e))})}`),o.request&&(u.reportError(35,` ${zu(e,{label:"Request Method",value:_c(yt.NO_HINT,o.request.options.method)})}`),u.reportError(35,` ${zu(e,{label:"Request URL",value:_c(yt.URL,o.request.requestUrl)})}`)),o.request.redirects.length>0&&u.reportError(35,` ${zu(e,{label:"Request Redirects",value:_c(yt.NO_HINT,bL(e,o.request.redirects,yt.URL))})}`),o.request.retryCount===o.request.options.retry.limit&&u.reportError(35,` ${zu(e,{label:"Request Retry Count",value:_c(yt.NO_HINT,`${Ot(e,o.request.retryCount,yt.NUMBER)} (can be increased via ${Ot(e,"httpRetry",yt.SETTING)})`)})}`)});throw n.originalError=o,n}}function wle(t,e){let r=[...e.configuration.get("networkSettings")].sort(([u],[A])=>A.length-u.length),o={enableNetwork:void 0,httpsCaFilePath:void 0,httpProxy:void 0,httpsProxy:void 0,httpsKeyFilePath:void 0,httpsCertFilePath:void 0},a=Object.keys(o),n=typeof t=="string"?new wx.URL(t):t;for(let[u,A]of r)if(M4.default.isMatch(n.hostname,u))for(let p of a){let h=A.get(p);h!==null&&typeof o[p]>"u"&&(o[p]=h)}for(let u of a)typeof o[u]>"u"&&(o[u]=e.configuration.get(u));return o}async function w1(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET",wrapNetworkRequest:A}){let p={target:t,body:e,configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u},h=async()=>await Gst(t,e,p),E=typeof A<"u"?await A(h,p):h;return await(await r.reduceHook(v=>v.wrapNetworkRequest,E,p))()}async function O4(t,{configuration:e,jsonResponse:r,customErrorMessage:o,wrapNetworkRequest:a,...n}){let u=()=>Ix(w1(t,null,{configuration:e,wrapNetworkRequest:a,...n}),{configuration:e,customErrorMessage:o}).then(p=>p.body),A=await(typeof a<"u"?u():ol(dle,t,()=>u().then(p=>(dle.set(t,p),p))));return r?JSON.parse(A.toString()):A}async function jst(t,e,{customErrorMessage:r,...o}){return(await Ix(w1(t,e,{...o,method:"PUT"}),{customErrorMessage:r,configuration:o.configuration})).body}async function U4(t,e,{customErrorMessage:r,...o}){return(await Ix(w1(t,e,{...o,method:"POST"}),{customErrorMessage:r,configuration:o.configuration})).body}async function qst(t,{customErrorMessage:e,...r}){return(await Ix(w1(t,null,{...r,method:"DELETE"}),{customErrorMessage:e,configuration:r.configuration})).body}async function Gst(t,e,{configuration:r,headers:o,jsonRequest:a,jsonResponse:n,method:u="GET"}){let A=typeof t=="string"?new wx.URL(t):t,p=wle(A,{configuration:r});if(p.enableNetwork===!1)throw new zt(80,`Request to '${A.href}' has been blocked because of your configuration settings`);if(A.protocol==="http:"&&!M4.default.isMatch(A.hostname,r.get("unsafeHttpWhitelist")))throw new zt(81,`Unsafe http requests must be explicitly whitelisted in your configuration (${A.hostname})`);let E={agent:{http:p.httpProxy?L4.default.httpOverHttp(yle(p.httpProxy)):Ust,https:p.httpsProxy?L4.default.httpsOverHttp(yle(p.httpsProxy)):_st},headers:o,method:u};E.responseType=n?"json":"buffer",e!==null&&(Buffer.isBuffer(e)||!a&&typeof e=="string"?E.body=e:E.json=e);let I=r.get("httpTimeout"),v=r.get("httpRetry"),b=r.get("enableStrictSsl"),C=p.httpsCaFilePath,T=p.httpsCertFilePath,L=p.httpsKeyFilePath,{default:U}=await Promise.resolve().then(()=>$e(gle())),J=C?await N4(C):void 0,te=T?await N4(T):void 0,le=L?await N4(L):void 0,pe=U.extend({timeout:{socket:I},retry:v,https:{rejectUnauthorized:b,certificateAuthority:J,certificate:te,key:le},...E});return r.getLimit("networkConcurrency")(()=>pe(A))}var Ele,Cle,M4,L4,wx,dle,mle,Ust,_st,Ile,Bx=Et(()=>{Pt();Ele=Be("https"),Cle=Be("http"),M4=$e(Zo()),L4=$e(Vse()),wx=Be("url");Yl();ql();jl();dle=new Map,mle=new Map,Ust=new Cle.Agent({keepAlive:!0}),_st=new Ele.Agent({keepAlive:!0});Ile=(a=>(a.GET="GET",a.PUT="PUT",a.POST="POST",a.DELETE="DELETE",a))(Ile||{})});var Ji={};Kt(Ji,{availableParallelism:()=>H4,getArchitecture:()=>I1,getArchitectureName:()=>Jst,getArchitectureSet:()=>_4,getCaller:()=>$st,major:()=>Yst,openUrl:()=>Wst});function Kst(){if(process.platform==="darwin"||process.platform==="win32")return null;let t;try{t=oe.readFileSync(Vst)}catch{}if(typeof t<"u"){if(t&&t.includes("GLIBC"))return"glibc";if(t&&t.includes("musl"))return"musl"}let r=(process.report?.getReport()??{}).sharedObjects??[],o=/\/(?:(ld-linux-|[^/]+-linux-gnu\/)|(libc.musl-|ld-musl-))/;return WI(r,a=>{let n=a.match(o);if(!n)return WI.skip;if(n[1])return"glibc";if(n[2])return"musl";throw new Error("Assertion failed: Expected the libc variant to have been detected")})??null}function I1(){return vle=vle??{os:process.platform,cpu:process.arch,libc:Kst()}}function Jst(t=I1()){return t.libc?`${t.os}-${t.cpu}-${t.libc}`:`${t.os}-${t.cpu}`}function _4(){let t=I1();return Dle=Dle??{os:[t.os],cpu:[t.cpu],libc:t.libc?[t.libc]:[]}}function Zst(t){let e=zst.exec(t);if(!e)return null;let r=e[2]&&e[2].indexOf("native")===0,o=e[2]&&e[2].indexOf("eval")===0,a=Xst.exec(e[2]);return o&&a!=null&&(e[2]=a[1],e[3]=a[2],e[4]=a[3]),{file:r?null:e[2],methodName:e[1]||"",arguments:r?[e[2]]:[],line:e[3]?+e[3]:null,column:e[4]?+e[4]:null}}function $st(){let e=new Error().stack.split(` +`)[3];return Zst(e)}function H4(){return typeof vx.default.availableParallelism<"u"?vx.default.availableParallelism():Math.max(1,vx.default.cpus().length)}var vx,Yst,Ble,Wst,Vst,vle,Dle,zst,Xst,Dx=Et(()=>{Pt();vx=$e(Be("os"));Px();jl();Yst=Number(process.versions.node.split(".")[0]),Ble=new Map([["darwin","open"],["linux","xdg-open"],["win32","explorer.exe"]]).get(process.platform),Wst=typeof Ble<"u"?async t=>{try{return await j4(Ble,[t],{cwd:K.cwd()}),!0}catch{return!1}}:void 0,Vst="/usr/bin/ldd";zst=/^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|webpack||\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Xst=/\((\S*)(?::(\d+))(?::(\d+))\)/});function V4(t,e,r,o,a){let n=u1(r);if(o.isArray||o.type==="ANY"&&Array.isArray(n))return Array.isArray(n)?n.map((u,A)=>q4(t,`${e}[${A}]`,u,o,a)):String(n).split(/,/).map(u=>q4(t,e,u,o,a));if(Array.isArray(n))throw new Error(`Non-array configuration settings "${e}" cannot be an array`);return q4(t,e,r,o,a)}function q4(t,e,r,o,a){let n=u1(r);switch(o.type){case"ANY":return YS(n);case"SHAPE":return not(t,e,r,o,a);case"MAP":return iot(t,e,r,o,a)}if(n===null&&!o.isNullable&&o.default!==null)throw new Error(`Non-nullable configuration settings "${e}" cannot be set to null`);if(o.values?.includes(n))return n;let A=(()=>{if(o.type==="BOOLEAN"&&typeof n!="string")return VI(n);if(typeof n!="string")throw new Error(`Expected configuration setting "${e}" to be a string, got ${typeof n}`);let p=sS(n,{env:t.env});switch(o.type){case"ABSOLUTE_PATH":{let h=a,E=EO(r);return E&&E[0]!=="<"&&(h=K.dirname(E)),K.resolve(h,ue.toPortablePath(p))}case"LOCATOR_LOOSE":return xf(p,!1);case"NUMBER":return parseInt(p);case"LOCATOR":return xf(p);case"BOOLEAN":return VI(p);default:return p}})();if(o.values&&!o.values.includes(A))throw new Error(`Invalid value, expected one of ${o.values.join(", ")}`);return A}function not(t,e,r,o,a){let n=u1(r);if(typeof n!="object"||Array.isArray(n))throw new it(`Object configuration settings "${e}" must be an object`);let u=K4(t,o,{ignoreArrays:!0});if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=`${e}.${A}`;if(!o.properties[A])throw new it(`Unrecognized configuration settings found: ${e}.${A} - run "yarn config -v" to see the list of settings supported in Yarn`);u.set(A,V4(t,h,p,o.properties[A],a))}return u}function iot(t,e,r,o,a){let n=u1(r),u=new Map;if(typeof n!="object"||Array.isArray(n))throw new it(`Map configuration settings "${e}" must be an object`);if(n===null)return u;for(let[A,p]of Object.entries(n)){let h=o.normalizeKeys?o.normalizeKeys(A):A,E=`${e}['${h}']`,I=o.valueDefinition;u.set(h,V4(t,E,p,I,a))}return u}function K4(t,e,{ignoreArrays:r=!1}={}){switch(e.type){case"SHAPE":{if(e.isArray&&!r)return[];let o=new Map;for(let[a,n]of Object.entries(e.properties))o.set(a,K4(t,n));return o}case"MAP":return e.isArray&&!r?[]:new Map;case"ABSOLUTE_PATH":return e.default===null?null:t.projectCwd===null?Array.isArray(e.default)?e.default.map(o=>K.normalize(o)):K.isAbsolute(e.default)?K.normalize(e.default):e.isNullable?null:void 0:Array.isArray(e.default)?e.default.map(o=>K.resolve(t.projectCwd,o)):K.resolve(t.projectCwd,e.default);default:return e.default}}function xx(t,e,r){if(e.type==="SECRET"&&typeof t=="string"&&r.hideSecrets)return rot;if(e.type==="ABSOLUTE_PATH"&&typeof t=="string"&&r.getNativePaths)return ue.fromPortablePath(t);if(e.isArray&&Array.isArray(t)){let o=[];for(let a of t)o.push(xx(a,e,r));return o}if(e.type==="MAP"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=xx(n,e.valueDefinition,r);typeof u<"u"&&o.set(a,u)}return o}if(e.type==="SHAPE"&&t instanceof Map){if(t.size===0)return;let o=new Map;for(let[a,n]of t.entries()){let u=e.properties[a],A=xx(n,u,r);typeof A<"u"&&o.set(a,A)}return o}return t}function sot(){let t={};for(let[e,r]of Object.entries(process.env))e=e.toLowerCase(),e.startsWith(bx)&&(e=(0,Sle.default)(e.slice(bx.length)),t[e]=r);return t}function Y4(){let t=`${bx}rc_filename`;for(let[e,r]of Object.entries(process.env))if(e.toLowerCase()===t&&typeof r=="string")return r;return W4}async function Ple(t){try{return await oe.readFilePromise(t)}catch{return Buffer.of()}}async function oot(t,e){return Buffer.compare(...await Promise.all([Ple(t),Ple(e)]))===0}async function aot(t,e){let[r,o]=await Promise.all([oe.statPromise(t),oe.statPromise(e)]);return r.dev===o.dev&&r.ino===o.ino}async function cot({configuration:t,selfPath:e}){let r=t.get("yarnPath");return t.get("ignorePath")||r===null||r===e||await lot(r,e)?null:r}var Sle,Nf,xle,ble,kle,G4,eot,B1,tot,QE,bx,W4,rot,v1,Qle,kx,Sx,lot,rA,Ve,D1=Et(()=>{Pt();Nl();Sle=$e(aK()),Nf=$e(ed());qt();xle=$e(eJ()),ble=Be("module"),kle=$e(nd()),G4=Be("stream");lse();AE();AO();fO();pO();Lse();hO();Bd();Hse();VS();ql();rh();Bx();jl();Dx();kf();xo();eot=function(){if(!Nf.GITHUB_ACTIONS||!process.env.GITHUB_EVENT_PATH)return!1;let t=ue.toPortablePath(process.env.GITHUB_EVENT_PATH),e;try{e=oe.readJsonSync(t)}catch{return!1}return!(!("repository"in e)||!e.repository||(e.repository.private??!0))}(),B1=new Set(["@yarnpkg/plugin-constraints","@yarnpkg/plugin-exec","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]),tot=new Set(["isTestEnv","injectNpmUser","injectNpmPassword","injectNpm2FaToken","cacheCheckpointOverride","cacheVersionOverride","lockfileVersionOverride","binFolder","version","flags","profile","gpg","ignoreNode","wrapOutput","home","confDir","registry","ignoreCwd"]),QE=/^(?!v)[a-z0-9._-]+$/i,bx="yarn_",W4=".yarnrc.yml",rot="********",v1=(E=>(E.ANY="ANY",E.BOOLEAN="BOOLEAN",E.ABSOLUTE_PATH="ABSOLUTE_PATH",E.LOCATOR="LOCATOR",E.LOCATOR_LOOSE="LOCATOR_LOOSE",E.NUMBER="NUMBER",E.STRING="STRING",E.SECRET="SECRET",E.SHAPE="SHAPE",E.MAP="MAP",E))(v1||{}),Qle=yt,kx=(r=>(r.JUNCTIONS="junctions",r.SYMLINKS="symlinks",r))(kx||{}),Sx={lastUpdateCheck:{description:"Last timestamp we checked whether new Yarn versions were available",type:"STRING",default:null},yarnPath:{description:"Path to the local executable that must be used over the global one",type:"ABSOLUTE_PATH",default:null},ignorePath:{description:"If true, the local executable will be ignored when using the global one",type:"BOOLEAN",default:!1},globalFolder:{description:"Folder where all system-global files are stored",type:"ABSOLUTE_PATH",default:wO()},cacheFolder:{description:"Folder where the cache files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/cache"},compressionLevel:{description:"Zip files compression level, from 0 to 9 or mixed (a variant of 9, which stores some files uncompressed, when compression doesn't yield good results)",type:"NUMBER",values:["mixed",0,1,2,3,4,5,6,7,8,9],default:0},virtualFolder:{description:"Folder where the virtual packages (cf doc) will be mapped on the disk (must be named __virtual__)",type:"ABSOLUTE_PATH",default:"./.yarn/__virtual__"},installStatePath:{description:"Path of the file where the install state will be persisted",type:"ABSOLUTE_PATH",default:"./.yarn/install-state.gz"},immutablePatterns:{description:"Array of glob patterns; files matching them won't be allowed to change during immutable installs",type:"STRING",default:[],isArray:!0},rcFilename:{description:"Name of the files where the configuration can be found",type:"STRING",default:Y4()},enableGlobalCache:{description:"If true, the system-wide cache folder will be used regardless of `cache-folder`",type:"BOOLEAN",default:!0},cacheMigrationMode:{description:"Defines the conditions under which Yarn upgrades should cause the cache archives to be regenerated.",type:"STRING",values:["always","match-spec","required-only"],default:"always"},enableColors:{description:"If true, the CLI is allowed to use colors in its output",type:"BOOLEAN",default:lS,defaultText:""},enableHyperlinks:{description:"If true, the CLI is allowed to use hyperlinks in its output",type:"BOOLEAN",default:xL,defaultText:""},enableInlineBuilds:{description:"If true, the CLI will print the build output on the command line",type:"BOOLEAN",default:Nf.isCI,defaultText:""},enableMessageNames:{description:"If true, the CLI will prefix most messages with codes suitable for search engines",type:"BOOLEAN",default:!0},enableProgressBars:{description:"If true, the CLI is allowed to show a progress bar for long-running events",type:"BOOLEAN",default:!Nf.isCI,defaultText:""},enableTimers:{description:"If true, the CLI is allowed to print the time spent executing commands",type:"BOOLEAN",default:!0},enableTips:{description:"If true, installs will print a helpful message every day of the week",type:"BOOLEAN",default:!Nf.isCI,defaultText:""},preferInteractive:{description:"If true, the CLI will automatically use the interactive mode when called from a TTY",type:"BOOLEAN",default:!1},preferTruncatedLines:{description:"If true, the CLI will truncate lines that would go beyond the size of the terminal",type:"BOOLEAN",default:!1},progressBarStyle:{description:"Which style of progress bar should be used (only when progress bars are enabled)",type:"STRING",default:void 0,defaultText:""},defaultLanguageName:{description:"Default language mode that should be used when a package doesn't offer any insight",type:"STRING",default:"node"},defaultProtocol:{description:"Default resolution protocol used when resolving pure semver and tag ranges",type:"STRING",default:"npm:"},enableTransparentWorkspaces:{description:"If false, Yarn won't automatically resolve workspace dependencies unless they use the `workspace:` protocol",type:"BOOLEAN",default:!0},supportedArchitectures:{description:"Architectures that Yarn will fetch and inject into the resolver",type:"SHAPE",properties:{os:{description:"Array of supported process.platform strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},cpu:{description:"Array of supported process.arch strings, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]},libc:{description:"Array of supported libc libraries, or null to target them all",type:"STRING",isArray:!0,isNullable:!0,default:["current"]}}},enableMirror:{description:"If true, the downloaded packages will be retrieved and stored in both the local and global folders",type:"BOOLEAN",default:!0},enableNetwork:{description:"If false, Yarn will refuse to use the network if required to",type:"BOOLEAN",default:!0},enableOfflineMode:{description:"If true, Yarn will attempt to retrieve files and metadata from the global cache rather than the network",type:"BOOLEAN",default:!1},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},unsafeHttpWhitelist:{description:"List of the hostnames for which http queries are allowed (glob patterns are supported)",type:"STRING",default:[],isArray:!0},httpTimeout:{description:"Timeout of each http request in milliseconds",type:"NUMBER",default:6e4},httpRetry:{description:"Retry times on http failure",type:"NUMBER",default:3},networkConcurrency:{description:"Maximal number of concurrent requests",type:"NUMBER",default:50},taskPoolConcurrency:{description:"Maximal amount of concurrent heavy task processing",type:"NUMBER",default:H4()},taskPoolMode:{description:"Execution strategy for heavy tasks",type:"STRING",values:["async","workers"],default:"workers"},networkSettings:{description:"Network settings per hostname (glob patterns are supported)",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{httpsCaFilePath:{description:"Path to file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},enableNetwork:{description:"If false, the package manager will refuse to use the network if required to",type:"BOOLEAN",default:null},httpProxy:{description:"URL of the http proxy that must be used for outgoing http requests",type:"STRING",default:null},httpsProxy:{description:"URL of the http proxy that must be used for outgoing https requests",type:"STRING",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null}}}},httpsCaFilePath:{description:"A path to a file containing one or multiple Certificate Authority signing certificates",type:"ABSOLUTE_PATH",default:null},httpsKeyFilePath:{description:"Path to file containing private key in PEM format",type:"ABSOLUTE_PATH",default:null},httpsCertFilePath:{description:"Path to file containing certificate chain in PEM format",type:"ABSOLUTE_PATH",default:null},enableStrictSsl:{description:"If false, SSL certificate errors will be ignored",type:"BOOLEAN",default:!0},logFilters:{description:"Overrides for log levels",type:"SHAPE",isArray:!0,concatenateValues:!0,properties:{code:{description:"Code of the messages covered by this override",type:"STRING",default:void 0},text:{description:"Code of the texts covered by this override",type:"STRING",default:void 0},pattern:{description:"Code of the patterns covered by this override",type:"STRING",default:void 0},level:{description:"Log level override, set to null to remove override",type:"STRING",values:Object.values(uS),isNullable:!0,default:void 0}}},enableTelemetry:{description:"If true, telemetry will be periodically sent, following the rules in https://yarnpkg.com/advanced/telemetry",type:"BOOLEAN",default:!0},telemetryInterval:{description:"Minimal amount of time between two telemetry uploads, in days",type:"NUMBER",default:7},telemetryUserId:{description:"If you desire to tell us which project you are, you can set this field. Completely optional and opt-in.",type:"STRING",default:null},enableHardenedMode:{description:"If true, automatically enable --check-resolutions --refresh-lockfile on installs",type:"BOOLEAN",default:Nf.isPR&&eot,defaultText:""},enableScripts:{description:"If true, packages are allowed to have install scripts by default",type:"BOOLEAN",default:!0},enableStrictSettings:{description:"If true, unknown settings will cause Yarn to abort",type:"BOOLEAN",default:!0},enableImmutableCache:{description:"If true, the cache is reputed immutable and actions that would modify it will throw",type:"BOOLEAN",default:!1},checksumBehavior:{description:"Enumeration defining what to do when a checksum doesn't match expectations",type:"STRING",default:"throw"},injectEnvironmentFiles:{description:"List of all the environment files that Yarn should inject inside the process when it starts",type:"ABSOLUTE_PATH",default:[".env.yarn?"],isArray:!0},packageExtensions:{description:"Map of package corrections to apply on the dependency tree",type:"MAP",valueDefinition:{description:"The extension that will be applied to any package whose version matches the specified range",type:"SHAPE",properties:{dependencies:{description:"The set of dependencies that must be made available to the current package in order for it to work properly",type:"MAP",valueDefinition:{description:"A range",type:"STRING"}},peerDependencies:{description:"Inherited dependencies - the consumer of the package will be tasked to provide them",type:"MAP",valueDefinition:{description:"A semver range",type:"STRING"}},peerDependenciesMeta:{description:"Extra information related to the dependencies listed in the peerDependencies field",type:"MAP",valueDefinition:{description:"The peerDependency meta",type:"SHAPE",properties:{optional:{description:"If true, the selected peer dependency will be marked as optional by the package manager and the consumer omitting it won't be reported as an error",type:"BOOLEAN",default:!1}}}}}}}};lot=process.platform==="win32"?oot:aot;rA=class{constructor(e){this.isCI=Nf.isCI;this.projectCwd=null;this.plugins=new Map;this.settings=new Map;this.values=new Map;this.sources=new Map;this.invalid=new Map;this.env={};this.limits=new Map;this.packageExtensions=null;this.startingCwd=e}static create(e,r,o){let a=new rA(e);typeof r<"u"&&!(r instanceof Map)&&(a.projectCwd=r),a.importSettings(Sx);let n=typeof o<"u"?o:r instanceof Map?r:new Map;for(let[u,A]of n)a.activatePlugin(u,A);return a}static async find(e,r,{strict:o=!0,usePathCheck:a=null,useRc:n=!0}={}){let u=sot();delete u.rcFilename;let A=new rA(e),p=await rA.findRcFiles(e),h=await rA.findFolderRcFile(yE());h&&(p.find(ye=>ye.path===h.path)||p.unshift(h));let E=_se(p.map(Ae=>[Ae.path,Ae.data])),I=Bt.dot,v=new Set(Object.keys(Sx)),b=({yarnPath:Ae,ignorePath:ye,injectEnvironmentFiles:ae})=>({yarnPath:Ae,ignorePath:ye,injectEnvironmentFiles:ae}),C=({yarnPath:Ae,ignorePath:ye,injectEnvironmentFiles:ae,...we})=>{let Pe={};for(let[g,Ee]of Object.entries(we))v.has(g)&&(Pe[g]=Ee);return Pe},T=({yarnPath:Ae,ignorePath:ye,...ae})=>{let we={};for(let[Pe,g]of Object.entries(ae))v.has(Pe)||(we[Pe]=g);return we};if(A.importSettings(b(Sx)),A.useWithSource("",b(u),e,{strict:!1}),E){let[Ae,ye]=E;A.useWithSource(Ae,b(ye),I,{strict:!1})}if(a){if(await cot({configuration:A,selfPath:a})!==null)return A;A.useWithSource("",{ignorePath:!0},e,{strict:!1,overwrite:!0})}let L=await rA.findProjectCwd(e);A.startingCwd=e,A.projectCwd=L;let U=Object.assign(Object.create(null),process.env);A.env=U;let J=await Promise.all(A.get("injectEnvironmentFiles").map(async Ae=>{let ye=Ae.endsWith("?")?await oe.readFilePromise(Ae.slice(0,-1),"utf8").catch(()=>""):await oe.readFilePromise(Ae,"utf8");return(0,xle.parse)(ye)}));for(let Ae of J)for(let[ye,ae]of Object.entries(Ae))A.env[ye]=sS(ae,{env:U});if(A.importSettings(C(Sx)),A.useWithSource("",C(u),e,{strict:o}),E){let[Ae,ye]=E;A.useWithSource(Ae,C(ye),I,{strict:o})}let te=Ae=>"default"in Ae?Ae.default:Ae,le=new Map([["@@core",ase]]);if(r!==null)for(let Ae of r.plugins.keys())le.set(Ae,te(r.modules.get(Ae)));for(let[Ae,ye]of le)A.activatePlugin(Ae,ye);let pe=new Map([]);if(r!==null){let Ae=new Map;for(let we of ble.builtinModules)Ae.set(we,()=>vf(we));for(let[we,Pe]of r.modules)Ae.set(we,()=>Pe);let ye=new Set,ae=async(we,Pe)=>{let{factory:g,name:Ee}=vf(we);if(!g||ye.has(Ee))return;let De=new Map(Ae),ce=ee=>{if(De.has(ee))return De.get(ee)();throw new it(`This plugin cannot access the package referenced via ${ee} which is neither a builtin, nor an exposed entry`)},ne=await Wy(async()=>te(await g(ce)),ee=>`${ee} (when initializing ${Ee}, defined in ${Pe})`);Ae.set(Ee,()=>ne),ye.add(Ee),pe.set(Ee,ne)};if(u.plugins)for(let we of u.plugins.split(";")){let Pe=K.resolve(e,ue.toPortablePath(we));await ae(Pe,"")}for(let{path:we,cwd:Pe,data:g}of p)if(!!n&&!!Array.isArray(g.plugins))for(let Ee of g.plugins){let De=typeof Ee!="string"?Ee.path:Ee,ce=Ee?.spec??"",ne=Ee?.checksum??"";if(B1.has(ce))continue;let ee=K.resolve(Pe,ue.toPortablePath(De));if(!await oe.existsPromise(ee)){if(!ce){let ht=Ot(A,K.basename(ee,".cjs"),yt.NAME),H=Ot(A,".gitignore",yt.NAME),lt=Ot(A,A.values.get("rcFilename"),yt.NAME),Re=Ot(A,"https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored",yt.URL);throw new it(`Missing source for the ${ht} plugin - please try to remove the plugin from ${lt} then reinstall it manually. This error usually occurs because ${H} is incorrect, check ${Re} to make sure your plugin folder isn't gitignored.`)}if(!ce.match(/^https?:/)){let ht=Ot(A,K.basename(ee,".cjs"),yt.NAME),H=Ot(A,A.values.get("rcFilename"),yt.NAME);throw new it(`Failed to recognize the source for the ${ht} plugin - please try to delete the plugin from ${H} then reinstall it manually.`)}let Ie=await O4(ce,{configuration:A}),ke=zs(Ie);if(ne&&ne!==ke){let ht=Ot(A,K.basename(ee,".cjs"),yt.NAME),H=Ot(A,A.values.get("rcFilename"),yt.NAME),lt=Ot(A,`yarn plugin import ${ce}`,yt.CODE);throw new it(`Failed to fetch the ${ht} plugin from its remote location: its checksum seems to have changed. If this is expected, please remove the plugin from ${H} then run ${lt} to reimport it.`)}await oe.mkdirPromise(K.dirname(ee),{recursive:!0}),await oe.writeFilePromise(ee,Ie)}await ae(ee,we)}}for(let[Ae,ye]of pe)A.activatePlugin(Ae,ye);if(A.useWithSource("",T(u),e,{strict:o}),E){let[Ae,ye]=E;A.useWithSource(Ae,T(ye),I,{strict:o})}return A.get("enableGlobalCache")&&(A.values.set("cacheFolder",`${A.get("globalFolder")}/cache`),A.sources.set("cacheFolder","")),A}static async findRcFiles(e){let r=Y4(),o=[],a=e,n=null;for(;a!==n;){n=a;let u=K.join(n,r);if(oe.existsSync(u)){let A=await oe.readFilePromise(u,"utf8"),p;try{p=Vi(A)}catch{let E="";throw A.match(/^\s+(?!-)[^:]+\s+\S+/m)&&(E=" (in particular, make sure you list the colons after each key name)"),new it(`Parse error when loading ${u}; please check it's proper Yaml${E}`)}o.unshift({path:u,cwd:n,data:p})}a=K.dirname(n)}return o}static async findFolderRcFile(e){let r=K.join(e,dr.rc),o;try{o=await oe.readFilePromise(r,"utf8")}catch(n){if(n.code==="ENOENT")return null;throw n}let a=Vi(o);return{path:r,cwd:e,data:a}}static async findProjectCwd(e){let r=null,o=e,a=null;for(;o!==a;){if(a=o,oe.existsSync(K.join(a,dr.lockfile)))return a;oe.existsSync(K.join(a,dr.manifest))&&(r=a),o=K.dirname(a)}return r}static async updateConfiguration(e,r,o={}){let a=Y4(),n=K.join(e,a),u=oe.existsSync(n)?Vi(await oe.readFilePromise(n,"utf8")):{},A=!1,p;if(typeof r=="function"){try{p=r(u)}catch{p=r({})}if(p===u)return!1}else{p=u;for(let h of Object.keys(r)){let E=u[h],I=r[h],v;if(typeof I=="function")try{v=I(E)}catch{v=I(void 0)}else v=I;E!==v&&(v===rA.deleteProperty?delete p[h]:p[h]=v,A=!0)}if(!A)return!1}return await oe.changeFilePromise(n,Ba(p),{automaticNewlines:!0}),!0}static async addPlugin(e,r){r.length!==0&&await rA.updateConfiguration(e,o=>{let a=o.plugins??[];if(a.length===0)return{...o,plugins:r};let n=[],u=[...r];for(let A of a){let p=typeof A!="string"?A.path:A,h=u.find(E=>E.path===p);h?(n.push(h),u=u.filter(E=>E!==h)):n.push(A)}return n.push(...u),{...o,plugins:n}})}static async updateHomeConfiguration(e){let r=yE();return await rA.updateConfiguration(r,e)}activatePlugin(e,r){this.plugins.set(e,r),typeof r.configuration<"u"&&this.importSettings(r.configuration)}importSettings(e){for(let[r,o]of Object.entries(e))if(o!=null){if(this.settings.has(r))throw new Error(`Cannot redefine settings "${r}"`);this.settings.set(r,o),this.values.set(r,K4(this,o))}}useWithSource(e,r,o,a){try{this.use(e,r,o,a)}catch(n){throw n.message+=` (in ${Ot(this,e,yt.PATH)})`,n}}use(e,r,o,{strict:a=!0,overwrite:n=!1}={}){a=a&&this.get("enableStrictSettings");for(let u of["enableStrictSettings",...Object.keys(r)]){let A=r[u],p=EO(A);if(p&&(e=p),typeof A>"u"||u==="plugins"||e===""&&tot.has(u))continue;if(u==="rcFilename")throw new it(`The rcFilename settings can only be set via ${`${bx}RC_FILENAME`.toUpperCase()}, not via a rc file`);let h=this.settings.get(u);if(!h){let I=yE(),v=e[0]!=="<"?K.dirname(e):null;if(a&&!(v!==null?I===v:!1))throw new it(`Unrecognized or legacy configuration settings found: ${u} - run "yarn config -v" to see the list of settings supported in Yarn`);this.invalid.set(u,e);continue}if(this.sources.has(u)&&!(n||h.type==="MAP"||h.isArray&&h.concatenateValues))continue;let E;try{E=V4(this,u,A,h,o)}catch(I){throw I.message+=` in ${Ot(this,e,yt.PATH)}`,I}if(u==="enableStrictSettings"&&e!==""){a=E;continue}if(h.type==="MAP"){let I=this.values.get(u);this.values.set(u,new Map(n?[...I,...E]:[...E,...I])),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else if(h.isArray&&h.concatenateValues){let I=this.values.get(u);this.values.set(u,n?[...I,...E]:[...E,...I]),this.sources.set(u,`${this.sources.get(u)}, ${e}`)}else this.values.set(u,E),this.sources.set(u,e)}}get(e){if(!this.values.has(e))throw new Error(`Invalid configuration key "${e}"`);return this.values.get(e)}getSpecial(e,{hideSecrets:r=!1,getNativePaths:o=!1}){let a=this.get(e),n=this.settings.get(e);if(typeof n>"u")throw new it(`Couldn't find a configuration settings named "${e}"`);return xx(a,n,{hideSecrets:r,getNativePaths:o})}getSubprocessStreams(e,{header:r,prefix:o,report:a}){let n,u,A=oe.createWriteStream(e);if(this.get("enableInlineBuilds")){let p=a.createStreamReporter(`${o} ${Ot(this,"STDOUT","green")}`),h=a.createStreamReporter(`${o} ${Ot(this,"STDERR","red")}`);n=new G4.PassThrough,n.pipe(p),n.pipe(A),u=new G4.PassThrough,u.pipe(h),u.pipe(A)}else n=A,u=A,typeof r<"u"&&n.write(`${r} +`);return{stdout:n,stderr:u}}makeResolver(){let e=[];for(let r of this.plugins.values())for(let o of r.resolvers||[])e.push(new o);return new vd([new l1,new Xn,...e])}makeFetcher(){let e=[];for(let r of this.plugins.values())for(let o of r.fetchers||[])e.push(new o);return new pE([new hE,new dE,...e])}getLinkers(){let e=[];for(let r of this.plugins.values())for(let o of r.linkers||[])e.push(new o);return e}getSupportedArchitectures(){let e=I1(),r=this.get("supportedArchitectures"),o=r.get("os");o!==null&&(o=o.map(u=>u==="current"?e.os:u));let a=r.get("cpu");a!==null&&(a=a.map(u=>u==="current"?e.cpu:u));let n=r.get("libc");return n!==null&&(n=sl(n,u=>u==="current"?e.libc??sl.skip:u)),{os:o,cpu:a,libc:n}}async getPackageExtensions(){if(this.packageExtensions!==null)return this.packageExtensions;this.packageExtensions=new Map;let e=this.packageExtensions,r=(o,a,{userProvided:n=!1}={})=>{if(!ba(o.range))throw new Error("Only semver ranges are allowed as keys for the packageExtensions setting");let u=new Mt;u.load(a,{yamlCompatibilityMode:!0});let A=Gy(e,o.identHash),p=[];A.push([o.range,p]);let h={status:"inactive",userProvided:n,parentDescriptor:o};for(let E of u.dependencies.values())p.push({...h,type:"Dependency",descriptor:E});for(let E of u.peerDependencies.values())p.push({...h,type:"PeerDependency",descriptor:E});for(let[E,I]of u.peerDependenciesMeta)for(let[v,b]of Object.entries(I))p.push({...h,type:"PeerDependencyMeta",selector:E,key:v,value:b})};await this.triggerHook(o=>o.registerPackageExtensions,this,r);for(let[o,a]of this.get("packageExtensions"))r(nh(o,!0),iS(a),{userProvided:!0});return e}normalizeLocator(e){return ba(e.reference)?Qs(e,`${this.get("defaultProtocol")}${e.reference}`):QE.test(e.reference)?Qs(e,`${this.get("defaultProtocol")}${e.reference}`):e}normalizeDependency(e){return ba(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):QE.test(e.range)?In(e,`${this.get("defaultProtocol")}${e.range}`):e}normalizeDependencyMap(e){return new Map([...e].map(([r,o])=>[r,this.normalizeDependency(o)]))}normalizePackage(e,{packageExtensions:r}){let o=$I(e),a=r.get(e.identHash);if(typeof a<"u"){let u=e.version;if(u!==null){for(let[A,p]of a)if(!!bf(u,A))for(let h of p)switch(h.status==="inactive"&&(h.status="redundant"),h.type){case"Dependency":typeof o.dependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.dependencies.set(h.descriptor.identHash,this.normalizeDependency(h.descriptor)));break;case"PeerDependency":typeof o.peerDependencies.get(h.descriptor.identHash)>"u"&&(h.status="active",o.peerDependencies.set(h.descriptor.identHash,h.descriptor));break;case"PeerDependencyMeta":{let E=o.peerDependenciesMeta.get(h.selector);(typeof E>"u"||!Object.hasOwn(E,h.key)||E[h.key]!==h.value)&&(h.status="active",ol(o.peerDependenciesMeta,h.selector,()=>({}))[h.key]=h.value)}break;default:CL(h)}}}let n=u=>u.scope?`${u.scope}__${u.name}`:`${u.name}`;for(let u of o.peerDependenciesMeta.keys()){let A=Js(u);o.peerDependencies.has(A.identHash)||o.peerDependencies.set(A.identHash,In(A,"*"))}for(let u of o.peerDependencies.values()){if(u.scope==="types")continue;let A=n(u),p=eA("types",A),h=fn(p);o.peerDependencies.has(p.identHash)||o.peerDependenciesMeta.has(h)||(o.peerDependencies.set(p.identHash,In(p,"*")),o.peerDependenciesMeta.set(h,{optional:!0}))}return o.dependencies=new Map(ks(o.dependencies,([,u])=>Sa(u))),o.peerDependencies=new Map(ks(o.peerDependencies,([,u])=>Sa(u))),o}getLimit(e){return ol(this.limits,e,()=>(0,kle.default)(this.get(e)))}async triggerHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);!n||await n(...r)}}async triggerMultipleHooks(e,r){for(let o of r)await this.triggerHook(e,...o)}async reduceHook(e,r,...o){let a=r;for(let n of this.plugins.values()){let u=n.hooks;if(!u)continue;let A=e(u);!A||(a=await A(a,...o))}return a}async firstHook(e,...r){for(let o of this.plugins.values()){let a=o.hooks;if(!a)continue;let n=e(a);if(!n)continue;let u=await n(...r);if(typeof u<"u")return u}return null}},Ve=rA;Ve.deleteProperty=Symbol(),Ve.telemetry=null});var Ur={};Kt(Ur,{EndStrategy:()=>Z4,ExecError:()=>Qx,PipeError:()=>P1,execvp:()=>j4,pipevp:()=>Gc});function Sd(t){return t!==null&&typeof t.fd=="number"}function J4(){}function z4(){for(let t of xd)t.kill()}async function Gc(t,e,{cwd:r,env:o=process.env,strict:a=!1,stdin:n=null,stdout:u,stderr:A,end:p=2}){let h=["pipe","pipe","pipe"];n===null?h[0]="ignore":Sd(n)&&(h[0]=n),Sd(u)&&(h[1]=u),Sd(A)&&(h[2]=A);let E=(0,X4.default)(t,e,{cwd:ue.fromPortablePath(r),env:{...o,PWD:ue.fromPortablePath(r)},stdio:h});xd.add(E),xd.size===1&&(process.on("SIGINT",J4),process.on("SIGTERM",z4)),!Sd(n)&&n!==null&&n.pipe(E.stdin),Sd(u)||E.stdout.pipe(u,{end:!1}),Sd(A)||E.stderr.pipe(A,{end:!1});let I=()=>{for(let v of new Set([u,A]))Sd(v)||v.end()};return new Promise((v,b)=>{E.on("error",C=>{xd.delete(E),xd.size===0&&(process.off("SIGINT",J4),process.off("SIGTERM",z4)),(p===2||p===1)&&I(),b(C)}),E.on("close",(C,T)=>{xd.delete(E),xd.size===0&&(process.off("SIGINT",J4),process.off("SIGTERM",z4)),(p===2||p===1&&C!==0)&&I(),C===0||!a?v({code:$4(C,T)}):b(new P1({fileName:t,code:C,signal:T}))})})}async function j4(t,e,{cwd:r,env:o=process.env,encoding:a="utf8",strict:n=!1}){let u=["ignore","pipe","pipe"],A=[],p=[],h=ue.fromPortablePath(r);typeof o.PWD<"u"&&(o={...o,PWD:h});let E=(0,X4.default)(t,e,{cwd:h,env:o,stdio:u});return E.stdout.on("data",I=>{A.push(I)}),E.stderr.on("data",I=>{p.push(I)}),await new Promise((I,v)=>{E.on("error",b=>{let C=Ve.create(r),T=Ot(C,t,yt.PATH);v(new zt(1,`Process ${T} failed to spawn`,L=>{L.reportError(1,` ${zu(C,{label:"Thrown Error",value:_c(yt.NO_HINT,b.message)})}`)}))}),E.on("close",(b,C)=>{let T=a==="buffer"?Buffer.concat(A):Buffer.concat(A).toString(a),L=a==="buffer"?Buffer.concat(p):Buffer.concat(p).toString(a);b===0||!n?I({code:$4(b,C),stdout:T,stderr:L}):v(new Qx({fileName:t,code:b,signal:C,stdout:T,stderr:L}))})})}function $4(t,e){let r=uot.get(e);return typeof r<"u"?128+r:t??1}function Aot(t,e,{configuration:r,report:o}){o.reportError(1,` ${zu(r,t!==null?{label:"Exit Code",value:_c(yt.NUMBER,t)}:{label:"Exit Signal",value:_c(yt.CODE,e)})}`)}var X4,Z4,P1,Qx,xd,uot,Px=Et(()=>{Pt();X4=$e(aR());D1();Yl();ql();Z4=(o=>(o[o.Never=0]="Never",o[o.ErrorCode=1]="ErrorCode",o[o.Always=2]="Always",o))(Z4||{}),P1=class extends zt{constructor({fileName:r,code:o,signal:a}){let n=Ve.create(K.cwd()),u=Ot(n,r,yt.PATH);super(1,`Child ${u} reported an error`,A=>{Aot(o,a,{configuration:n,report:A})});this.code=$4(o,a)}},Qx=class extends P1{constructor({fileName:r,code:o,signal:a,stdout:n,stderr:u}){super({fileName:r,code:o,signal:a});this.stdout=n,this.stderr=u}};xd=new Set;uot=new Map([["SIGINT",2],["SIGQUIT",3],["SIGKILL",9],["SIGTERM",15]])});function Tle(t){Fle=t}function S1(){return typeof eU>"u"&&(eU=Fle()),eU}var eU,Fle,tU=Et(()=>{Fle=()=>{throw new Error("Assertion failed: No libzip instance is available, and no factory was configured")}});var Rle=_((Fx,nU)=>{var fot=Object.assign({},Be("fs")),rU=function(){var t=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<"u"&&(t=t||__filename),function(e){e=e||{};var r=typeof e<"u"?e:{},o,a;r.ready=new Promise(function(We,tt){o=We,a=tt});var n={},u;for(u in r)r.hasOwnProperty(u)&&(n[u]=r[u]);var A=[],p="./this.program",h=function(We,tt){throw tt},E=!1,I=!0,v="";function b(We){return r.locateFile?r.locateFile(We,v):v+We}var C,T,L,U;I&&(E?v=Be("path").dirname(v)+"/":v=__dirname+"/",C=function(tt,It){var nr=ii(tt);return nr?It?nr:nr.toString():(L||(L=fot),U||(U=Be("path")),tt=U.normalize(tt),L.readFileSync(tt,It?null:"utf8"))},T=function(tt){var It=C(tt,!0);return It.buffer||(It=new Uint8Array(It)),Ee(It.buffer),It},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),A=process.argv.slice(2),h=function(We){process.exit(We)},r.inspect=function(){return"[Emscripten Module object]"});var J=r.print||console.log.bind(console),te=r.printErr||console.warn.bind(console);for(u in n)n.hasOwnProperty(u)&&(r[u]=n[u]);n=null,r.arguments&&(A=r.arguments),r.thisProgram&&(p=r.thisProgram),r.quit&&(h=r.quit);var le=0,pe=function(We){le=We},Ae;r.wasmBinary&&(Ae=r.wasmBinary);var ye=r.noExitRuntime||!0;typeof WebAssembly!="object"&&Ri("no native wasm support detected");function ae(We,tt,It){switch(tt=tt||"i8",tt.charAt(tt.length-1)==="*"&&(tt="i32"),tt){case"i1":return _e[We>>0];case"i8":return _e[We>>0];case"i16":return lp((We>>1)*2);case"i32":return Ms((We>>2)*4);case"i64":return Ms((We>>2)*4);case"float":return cu((We>>2)*4);case"double":return ap((We>>3)*8);default:Ri("invalid type for getValue: "+tt)}return null}var we,Pe=!1,g;function Ee(We,tt){We||Ri("Assertion failed: "+tt)}function De(We){var tt=r["_"+We];return Ee(tt,"Cannot call unknown function "+We+", make sure it is exported"),tt}function ce(We,tt,It,nr,$){var me={string:function(es){var xi=0;if(es!=null&&es!==0){var jo=(es.length<<2)+1;xi=Un(jo),ht(es,xi,jo)}return xi},array:function(es){var xi=Un(es.length);return Re(es,xi),xi}};function Le(es){return tt==="string"?Ie(es):tt==="boolean"?Boolean(es):es}var ft=De(We),pt=[],Rt=0;if(nr)for(var er=0;er=It)&&Te[nr];)++nr;return ee.decode(Te.subarray(We,nr))}function ke(We,tt,It,nr){if(!(nr>0))return 0;for(var $=It,me=It+nr-1,Le=0;Le=55296&&ft<=57343){var pt=We.charCodeAt(++Le);ft=65536+((ft&1023)<<10)|pt&1023}if(ft<=127){if(It>=me)break;tt[It++]=ft}else if(ft<=2047){if(It+1>=me)break;tt[It++]=192|ft>>6,tt[It++]=128|ft&63}else if(ft<=65535){if(It+2>=me)break;tt[It++]=224|ft>>12,tt[It++]=128|ft>>6&63,tt[It++]=128|ft&63}else{if(It+3>=me)break;tt[It++]=240|ft>>18,tt[It++]=128|ft>>12&63,tt[It++]=128|ft>>6&63,tt[It++]=128|ft&63}}return tt[It]=0,It-$}function ht(We,tt,It){return ke(We,Te,tt,It)}function H(We){for(var tt=0,It=0;It=55296&&nr<=57343&&(nr=65536+((nr&1023)<<10)|We.charCodeAt(++It)&1023),nr<=127?++tt:nr<=2047?tt+=2:nr<=65535?tt+=3:tt+=4}return tt}function lt(We){var tt=H(We)+1,It=Li(tt);return It&&ke(We,_e,It,tt),It}function Re(We,tt){_e.set(We,tt)}function Qe(We,tt){return We%tt>0&&(We+=tt-We%tt),We}var be,_e,Te,Je,He,x,w,S,y,F;function z(We){be=We,r.HEAP_DATA_VIEW=F=new DataView(We),r.HEAP8=_e=new Int8Array(We),r.HEAP16=Je=new Int16Array(We),r.HEAP32=x=new Int32Array(We),r.HEAPU8=Te=new Uint8Array(We),r.HEAPU16=He=new Uint16Array(We),r.HEAPU32=w=new Uint32Array(We),r.HEAPF32=S=new Float32Array(We),r.HEAPF64=y=new Float64Array(We)}var X=r.INITIAL_MEMORY||16777216,Z,ie=[],Se=[],Ne=[],ot=!1;function dt(){if(r.preRun)for(typeof r.preRun=="function"&&(r.preRun=[r.preRun]);r.preRun.length;)xt(r.preRun.shift());oo(ie)}function jt(){ot=!0,oo(Se)}function $t(){if(r.postRun)for(typeof r.postRun=="function"&&(r.postRun=[r.postRun]);r.postRun.length;)Qr(r.postRun.shift());oo(Ne)}function xt(We){ie.unshift(We)}function an(We){Se.unshift(We)}function Qr(We){Ne.unshift(We)}var mr=0,xr=null,Wr=null;function Vn(We){mr++,r.monitorRunDependencies&&r.monitorRunDependencies(mr)}function Ns(We){if(mr--,r.monitorRunDependencies&&r.monitorRunDependencies(mr),mr==0&&(xr!==null&&(clearInterval(xr),xr=null),Wr)){var tt=Wr;Wr=null,tt()}}r.preloadedImages={},r.preloadedAudios={};function Ri(We){r.onAbort&&r.onAbort(We),We+="",te(We),Pe=!0,g=1,We="abort("+We+"). Build with -s ASSERTIONS=1 for more info.";var tt=new WebAssembly.RuntimeError(We);throw a(tt),tt}var ps="data:application/octet-stream;base64,";function io(We){return We.startsWith(ps)}var Si="data:application/octet-stream;base64,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QCAAKAJIIgEgASADaiADEAcaAkAgAyAAKAJsIgFNBEAgACABIANrNgJsDAELIABCADcCbAsgACAAKAJoIANrIgE2AmggACAAKAJYIANrNgJYIAEgACgChC5JBEAgACABNgKELgsgAEH8gAEoAgARAwAgAiADaiECCwJAIAAoAgAiASgCBCIERQ0AIAAoAjwhBSAAIAIgBCACIARJGyICBH8gACgCSCAAKAJoaiAFaiEFIAEgBCACazYCBAJAAkACQAJAIAEoAhwiBCgCFEEBaw4CAQACCyAEQaABaiAFIAEoAgAgAkHcgAEoAgARCAAMAgsgASABKAIwIAUgASgCACACQcSAASgCABEEADYCMAwBCyAFIAEoAgAgAhAHGgsgASABKAIAIAJqNgIAIAEgASgCCCACajYCCCAAKAI8BSAFCyACaiICNgI8AkAgACgChC4iASACakEDSQ0AIAAoAmggAWshAQJAIAAoAnRBgQhPBEAgACAAIAAoAkggAWoiAi0AACACLQABIAAoAnwRAAA2AlQMAQsgAUUNACAAIAFBAWsgACgChAERAgAaCyAAKAKELiAAKAI8IgJBAUZrIgRFDQAgACABIAQgACgCgAERBQAgACAAKAKELiAEazYChC4gACgCPCECCyACQYUCSw0AIAAoAgAoAgRFDQAgACgCMCEBDAELCwJAIAAoAkQiAiAAKAJAIgNNDQAgAAJ/IAAoAjwgACgCaGoiASADSwRAIAAoAkggAWpBACACIAFrIgNBggIgA0GCAkkbIgMQGSABIANqDAELIAFBggJqIgEgA00NASAAKAJIIANqQQAgAiADayICIAEgA2siAyACIANJGyIDEBkgACgCQCADags2AkALC50CAQF/AkAgAAJ/IAAoAqAuIgFBwABGBEAgACgCBCAAKAIQaiAAKQOYLjcAACAAQgA3A5guIAAgACgCEEEIajYCEEEADAELIAFBIE4EQCAAKAIEIAAoAhBqIAApA5guPgAAIAAgAEGcLmo1AgA3A5guIAAgACgCEEEEajYCECAAIAAoAqAuQSBrIgE2AqAuCyABQRBOBEAgACgCBCAAKAIQaiAAKQOYLj0AACAAIAAoAhBBAmo2AhAgACAAKQOYLkIQiDcDmC4gACAAKAKgLkEQayIBNgKgLgsgAUEISA0BIAAgACgCECIBQQFqNgIQ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KAJUIgEEfyABQQAgARAiEBkgACgCVAVBAAsQBiAAQQA2AlQLC9wMAgl/AX4jAEFAaiIGJAACQAJAAkACQAJAIAEoAjBBABAjIgVBAkZBACABKAI4QQAQIyIEQQFGGw0AIAVBAUZBACAEQQJGGw0AIAVBAkciAw0BIARBAkcNAQsgASABLwEMQYAQcjsBDEEAIQMMAQsgASABLwEMQf/vA3E7AQxBACEFIANFBEBB9eABIAEoAjAgAEEIahBpIgVFDQILIAJBgAJxBEAgBSEDDAELIARBAkcEQCAFIQMMAQtB9cYBIAEoAjggAEEIahBpIgNFBEAgBRAcDAILIAMgBTYCAAsgASABLwEMQf7/A3EgAS8BUiIFQQBHcjsBDAJAAkACQAJAAn8CQAJAIAEpAyhC/v///w9WDQAgASkDIEL+////D1YNACACQYAEcUUNASABKQNIQv////8PVA0BCyAFQYECa0H//wNxQQNJIQdBAQwBCyAFQYECa0H//wNxIQQgAkGACnFBgApHDQEgBEEDSSEHQQALIQkgBkIcEBciBEUEQCAAQQhqIgAEQCAAQQA2AgQgAEEONgIACyADEBwMBQsgAkGACHEhBQJAAkAgAkGAAnEEQAJAIAUNACABKQMgQv////8PVg0AIAEpAyhCgICAgBBUDQMLIAQgASkDKBAYIAEpAyAhDAwBCwJAAkACQCAFDQAgASkDIEL/////D1YNACABKQMoIgxC/////w9WDQEgASkDSEKAgICAEFQNBAsgASkDKCIMQv////8PVA0BCyAEIAwQGAsgASkDICIMQv////8PWgRAIAQgDBAYCyABKQNIIgxC/////w9UDQELIAQgDBAYCyAELQAARQRAIABBCGoiAARAIABBADYCBCAAQRQ2AgALIAQQCCADEBwMBQtBASEKQQEgBC0AAAR+IAQpAxAFQgALp0H//wNxIAYQRyEFIAQQCCAFIAM2AgAgBw0BDAILIAMhBSAEQQJLDQELIAZCBxAXIgRFBEAgAEEIaiIABEAgAEEANgIEIABBDjYCAAsgBRAcDAMLIARBAhANIARBhxJBAhAsIAQgAS0AUhBwIAQgAS8BEBANIAQtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAsgBBAIDAILQYGyAkEHIAYQRyEDIAQQCCADIAU2AgBBASEL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NgIEIABB7A42AhggGiEdDAMLIARB/wFxIgJBwABxRQRAIAggDSADLwECQQJ0aiAdp0F/IAJ0QX9zcUECdGoiAy0AASICayEIIB0gAq2IIR0gAy0AACIERQ0HDAELCyAEQSBxBEAgB0G//gA2AgQgASECDAgLIAdB0f4ANgIEIABB0A42AhggASECDAcLIB1BfyAGdEF/c62DIBt8IhunIQUgCCAEQQ9xIgNrIQggGiAErUIPg4ghHSABIBdrIgYgAjMBAiAaQX8gA3RBf3Otg3ynIgRPDQIgBCAGayIGIBlNDQEgBygCjEdFDQEgB0HR/gA2AgQgAEG5DDYCGAsgASECIAshBQwFCwJAIA5FBEAgDCARIAZraiEDDAELIAYgDk0EQCAMIA4gBmtqIQMMAQsgDCARIAYgDmsiBmtqIQMgBSAGTQ0AIAUgBmshBQJAAkAgASADTSABIA8gAWusIhogBq0iGyAaIBtUGyIapyIGaiICIANLcQ0AIAMgBmogAUsgASADT3ENACABIAMgBhAHGiACIQEMAQsgASADIAMgAWsiASABQR91IgFqIAFzIgIQByACaiEBIBogAq0iHn0iHFANACACIANqIQIDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgASACKQAANwAAIAEgAikAGDcAGCABIAIpABA3ABAgASACKQAINwAIIBpCIH0hGiACQSBqIQIgAUEgaiEBIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAEgAikAADcAACABIAIpABg3ABggASACKQAQNwAQIAEgAikACDcACCABIAIpADg3ADggASACKQAwNwAwIAEgAikAKDcAKCABIAIpACA3ACAgASACKQBYNwBYIAEgAikAUDcAUCABIAIpAEg3AEggASACKQBANwBAIAEgAikAYDcAYCABIAIpAGg3AGggASACKQBwNwBwIAEgAikAeDcAeCACQYABaiECIAFBgAFqIQEgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAEgAikAADcAACABIAIpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCABIAIpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCABIAIoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCABIAIvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCABIAItAAA6AAAgAkEBaiECIAFBAWohAQsgHEIAUg0ACwsgDiEGIAwhAwsgBSAGSwRAAkACQCABIANNIAEgDyABa6wiGiAGrSIbIBogG1QbIhqnIglqIgIgA0txDQAgAyAJaiABSyABIANPcQ0AIAEgAyAJEAcaDAELIAEgAyADIAFrIgEgAUEfdSIBaiABcyIBEAcgAWohAiAaIAGtIh59IhxQDQAgASADaiEBA0ACQCAcIB4gHCAeVBsiG0IgVARAIBshGgwBCyAbIhpCIH0iIEIFiEIBfEIDgyIfUEUEQANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCAaQiB9IRogAUEgaiEBIAJBIGohAiAfQgF9Ih9CAFINAAsLICBC4ABUDQADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggAiABKQA4NwA4IAIgASkAMDcAMCACIAEpACg3ACggAiABKQAgNwAgIAIgASkAWDcAWCACIAEpAFA3AFAgAiABKQBINwBIIAIgASkAQDcAQCACIAEpAGA3AGAgAiABKQBoNwBoIAIgASkAcDcAcCACIAEpAHg3AHggAUGAAWohASACQYABaiECIBpCgAF9IhpCH1YNAAsLIBpCEFoEQCACIAEpAAA3AAAgAiABKQAINwAIIBpCEH0hGiACQRBqIQIgAUEQaiEBCyAaQghaBEAgAiABKQAANwAAIBpCCH0hGiACQQhqIQIgAUEIaiEBCyAaQgRaBEAgAiABKAAANgAAIBpCBH0hGiACQQRqIQIgAUEEaiEBCyAaQgJaBEAgAiABLwAAOwAAIBpCAn0hGiACQQJqIQIgAUECaiEBCyAcIBt9IRwgGlBFBEAgAiABLQAAOgAAIAJBAWohAiABQQFqIQELIBxCAFINAAsLIAUgBmshAUEAIARrIQUCQCAEQQdLBEAgBCEDDAELIAEgBE0EQCAEIQMMAQsgAiAEayEFA0ACQCACIAUpAAA3AAAgBEEBdCEDIAEgBGshASACIARqIQIgBEEDSw0AIAMhBCABIANLDQELC0EAIANrIQULIAIgBWohBAJAIAUgDyACa6wiGiABrSIbIBogG1QbIhqnIgFIIAVBf0pxDQAgBUEBSCABIARqIAJLcQ0AIAIgBCABEAcgAWohAgwDCyACIAQgAyADQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANAiABIARqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAILAkAgASADTSABIA8gAWusIhogBa0iGyAaIBtUGyIapyIEaiICIANLcQ0AIAMgBGogAUsgASADT3ENACABIAMgBBAHGgwCCyABIAMgAyABayIBIAFBH3UiAWogAXMiARAHIAFqIQIgGiABrSIefSIcUA0BIAEgA2ohAQNAAkAgHCAeIBwgHlQbIhtCIFQEQCAbIRoMAQsgGyIaQiB9IiBCBYhCAXxCA4MiH1BFBEADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggGkIgfSEaIAFBIGohASACQSBqIQIgH0IBfSIfQgBSDQALCyAgQuAAVA0AA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIAIgASkAODcAOCACIAEpADA3ADAgAiABKQAoNwAoIAIgASkAIDcAICACIAEpAFg3AFggAiABKQBQNwBQIAIgASkASDcASCACIAEpAEA3AEAgAiABKQBgNwBgIAIgASkAaDcAaCACIAEpAHA3AHAgAiABKQB4NwB4IAFBgAFqIQEgAkGAAWohAiAaQoABfSIaQh9WDQALCyAaQhBaBEAgAiABKQAANwAAIAIgASkACDcACCAaQhB9IRogAkEQaiECIAFBEGohAQsgGkIIWgRAIAIgASkAADcAACAaQgh9IRogAkEIaiECIAFBCGohAQsgGkIEWgRAIAIgASgAADYAACAaQgR9IRogAkEEaiECIAFBBGohAQsgGkICWgRAIAIgAS8AADsAACAaQgJ9IRogAkECaiECIAFBAmohAQsgHCAbfSEcIBpQRQRAIAIgAS0AADoAACACQQFqIQIgAUEBaiEBCyAcUEUNAAsMAQsCQAJAIBYEQAJAIAQgBUkEQCAHKAKYRyAESw0BCyABIARrIQMCQEEAIARrIgVBf0ogDyABa6wiGiAbIBogG1QbIhqnIgIgBUpxDQAgBUEBSCACIANqIAFLcQ0AIAEgAyACEAcgAmohAgwFCyABIAMgBCAEQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANBCABIANqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAQLIBAgAWsiCUEBaiIGIAUgBSAGSxshAyABIARrIQIgAUEHcUUNAiADRQ0CIAEgAi0AADoAACACQQFqIQIgAUEBaiIGQQdxQQAgA0EBayIFGw0BIAYhASAFIQMgCSEGDAILAkAgBCAFSQRAIAcoAphHIARLDQELIAEgASAEayIGKQAANwAAIAEgBUEBa0EHcUEBaiIDaiECIAUgA2siBEUNAyADIAZqIQEDQCACIAEpAAA3AAAgAUEIaiEBIAJBCGohAiAEQQhrIgQNAAsMAwsgASAEIAUQPyECDAILIAEgAi0AADoAASAJQQFrIQYgA0ECayEFIAJBAWohAgJAIAFBAmoiCkEHcUUNACAFRQ0AIAEgAi0AADoAAiAJQQJrIQYgA0EDayEFIAJBAWohAgJAIAFBA2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAAyAJQQNrIQYgA0EEayEFIAJBAWohAgJAIAFBBGoiCkEHcUUNACAFRQ0AIAEgAi0AADoABCAJQQRrIQYgA0EFayEFIAJBAWohAgJAIAFBBWoiCkEHcUUNACAFRQ0AIAEgAi0AADoABSAJQQVrIQYgA0EGayEFIAJBAWohAgJAIAFBBmoiCkEHcUUNACAFRQ0AIAEgAi0AADoABiAJQQZrIQYgA0EHayEFIAJBAWohAgJAIAFBB2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAByAJQQdrIQYgA0EIayEDIAFBCGohASACQQFqIQIMBgsgCiEBIAUhAwwFCyAKIQEgBSEDDAQLIAohASAFIQMMAwsgCiEBIAUhAwwCCyAKIQEgBSEDDAELIAohASAFIQMLAkACQCAGQRdNBEAgA0UNASADQQFrIQUgA0EHcSIEBEADQCABIAItAAA6AAAgA0EBayEDIAFBAWohASACQQFqIQIgBEEBayIEDQALCyAFQQdJDQEDQCABIAItAAA6AAAgASACLQABOgABIAEgAi0AAjoAAiABIAItAAM6AAMgASACLQAEOgAEIAEgAi0ABToABSABIAItAAY6AAYgASACLQAHOgAHIAFBCGohASACQQhqIQIgA0EIayIDDQALDAELIAMNAQsgASECDAELIAEgBCADED8hAgsgCyEFDAELIAEgAy0AAjoAACABQQFqIQILIAUgFE8NACACIBNJDQELCyAAIAI2AgwgACAFIAhBA3ZrIgE2AgAgACATIAJrQYMCajYCECAAIBQgAWtBDmo2AgQgByAIQQdxIgA2AogBIAcgHUJ/IACthkJ/hYM+AoQBC+cFAQR/IAMgAiACIANLGyEEIAAgAWshAgJAIABBB3FFDQAgBEUNACAAIAItAAA6AAAgA0EBayEGIAJBAWohAiAAQQFqIgdBB3FBACAEQQFrIgUbRQRAIAchACAFIQQgBiEDDAELIAAgAi0AADoAASADQQJrIQYgBEECayEFIAJBAWohAgJAIABBAmoiB0EHcUUNACAFRQ0AIAAgAi0AADoAAiADQQNrIQYgBEEDayEFIAJBAWohAgJAIABBA2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAAyADQQRrIQYgBEEEayEFIAJBAWohAgJAIABBBGoiB0EHcUUNACAFRQ0AIAAgAi0AADoABCADQQVrIQYgBEEFayEFIAJBAWohAgJAIABBBWoiB0EHcUUNACAFRQ0AIAAgAi0AADoABSADQQZrIQYgBEEGayEFIAJBAWohAgJAIABBBmoiB0EHcUUNACAFRQ0AIAAgAi0AADoABiADQQdrIQYgBEEHayEFIAJBAWohAgJAIABBB2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAByADQQhrIQMgBEEIayEEIABBCGohACACQQFqIQIMBgsgByEAIAUhBCAGIQMMBQsgByEAIAUhBCAGIQMMBAsgByEAIAUhBCAGIQMMAwsgByEAIAUhBCAGIQMMAgsgByEAIAUhBCAGIQMMAQsgByEAIAUhBCAGIQMLAkAgA0EXTQRAIARFDQEgBEEBayEBIARBB3EiAwRAA0AgACACLQAAOgAAIARBAWshBCAAQQFqIQAgAkEBaiECIANBAWsi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CyAAIAMtAAAEfiADKQMQBUIAC6dB//8DcSADKAIEEEcLIQUgAxAICyAEQRBqJAAgBQvgAQICfwF+QTAQCSICRQRAIAEEQCABQQA2AgQgAUEONgIAC0EADwsgAkIANwMIIAJBADYCACACQgA3AxAgAkIANwMYIAJCADcDICACQgA3ACUgAFAEQCACDwsCQCAAQv////8AVg0AIACnQQR0EAkiA0UNACACIAM2AgBBACEBQgEhBANAIAMgAUEEdGoiAUIANwIAIAFCADcABSAAIARSBEAgBKchASAEQgF8IQQMAQsLIAIgADcDCCACIAA3AxAgAg8LIAEEQCABQQA2AgQgAUEONgIAC0EAEBAgAhAGQQAL7gECA38BfiMAQRBrIgQkAAJAIARBDGpCBBAXIgNFBEBBfyECDAELAkAgAQRAIAJBgAZxIQUDQAJAIAUgASgCBHFFDQACQCADKQMIQgBUBEAgA0EAOgAADAELIANCADcDECADQQE6AAALIAMgAS8BCBANIAMgAS8BChANIAMtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAtBfyECDAQLQX8hAiAAIARBDGpCBBAbQQBIDQMgATMBCiIGUA0AIAAgASgCDCAGEBtBAEgNAwsgASgCACIBDQALC0EAIQILIAMQCAsgBEEQaiQAIAILPAEBfyAABEAgAUGABnEhAQNAIAEgACgCBHEEQCACIAAvAQpqQQRqIQILIAAoAgAiAA0ACwsgAkH//wNxC5wBAQN/IABFBEBBAA8LIAAhAwNAAn8CQAJAIAAvAQgiAUH04AFNBEAgAUEBRg0BIAFB9cYBRg0BDAILIAFBgbICRg0AIAFB9eABRw0BCyAAKAIAIQEgAEEANgIAIAAoAgwQBiAAEAYgASADIAAgA0YbIQMCQCACRQRAQQAhAgwBCyACIAE2AgALIAEMAQsgACICKAIACyIADQALIAMLsgQCBX8BfgJAAkACQCAAIAGtEBciAQRAIAEtAAANAUEAIQAMAgsgBARAIARBADYCBCAEQQ42AgALQQAPC0EAIQADQCABLQAABH4gASkDCCABKQMQfQVCAAtCBFQNASABEAwhByABIAEQDCIGrRATIghFBEBBACECIAQEQCAEQQA2AgQgBEEVNgIACyABEAggAEUNAwNAIAAoAgAhASAAKAIMEAYg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DCAAQRg2AggLDAMLIAAgBiAFLwFqQQAgBCABEQYAIQEgBhALIAFFDQILAkAgDUUEQCABIQMMAQsgACABIAUvAWgQgQEhAyABEAsgA0UNAQsCQCAJRSAMckUEQCADIQEMAQsgACADQQEQgAEhASADEAsgAUUNAQsgASEDDAELQQAhAwsgBUHwAGokACADC4UBAQF/IAFFBEAgAEEIaiIABEAgAEEANgIEIABBEjYCAAtBAA8LQTgQCSIDRQRAIABBCGoiAARAIABBADYCBCAAQQ42AgALQQAPCyADQQA2AhAgA0IANwIIIANCADcDKCADQQA2AgQgAyACNgIAIANCADcDGCADQQA2AjAgACABQTsgAxBCCw8AIAAgASACQQBBABCCAQusAgECfyABRQRAIABBCGoiAARAIABBADYCBCAAQRI2AgALQQAPCwJAIAJBfUsNACACQf//A3FBCEYNACAAQQhqIgAEQCAAQQA2AgQgAEEQNgIAC0EADwsCQEGwwAAQCSIFBEAgBUEANgIIIAVCADcCACAFQYiBAUGogQEgAxs2AqhAIAUgAjYCFCAFIAM6ABAgBUEAOgAPIAVBADsBDCAFIAMgAkF9SyIGcToADiAFQQggAiAGG0H//wNxIAQgBUGIgQFBqIEBIAMbKAIAEQAAIgI2AqxAIAINASAFEDEgBRAGCyAAQQhqIgAEQCAAQQA2AgQgAEEONgIAC0EADwsgACABQTogBRBCIgAEfyAABSAFKAKsQCAFKAKoQCgCBBEDACAFEDEgBRAGQQALC6ABAQF/IAIgACgCBCIDIAIgA0kbIgIEQCAAIAMgAms2AgQCQAJAAkACQCAAKAIcIgMoAhRBAWsOAgEAAgsgA0GgAWogASAAKAIAIAJB3IABKAIAEQgADAILIAAgACgCMCABIAAoAgAgAkHEgAEoAgARBAA2AjAMAQsgASAAKAIAIAIQBxoLIAAgACgCACACajYCACAAIAAoAgggAmo2AggLC7cCAQR/QX4hAgJAIABFDQAgACgCIEUNACAAKAIkIgRFDQAgACgCHCIBRQ0AIAEoAgAgAEcNAAJAAkAgASgCICIDQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyADQZoFRg0AIANBKkcN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DCABajYCDCAGIAYoAgggAWo2AgggBSAFKAIUIAFqNgIUIAUgBSgCECABazYCECAGIAYoAhAgAWsiATYCECABDQAgBiAGKAIENgIIC0EAIQRBACEJIAMoAhBFDQAMCgsgAygCHCgCJCEGIAMgAygCGCIBQQFqNgIYIAEgBmotAAAhASADIARBAWo2AhAgAygCBCAEaiABOgAAIAEEQCADKAIQIQQMAQsLIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0HnADYCIAsCQCADKAIcKAIsBEAgAygCDCADKAIQIgFBAmpJBH8gBRAKIAMoAhANAkEABSABCyADKAIEaiAFKAIwOwAAIAMgAygCEEECajYCECADQaABakHkgAEoAgARAQAaCyADQfEANgIgIAUQCiADKAIQRQ0BDAcLDAYLIAUoAgQNAQsgAygCPA0AIApFDQEgAygCIEGaBUYNAQsCfyADKAKIASIBRQRAIAMgChCFAQwBCwJAAkACQCADKAKMAUECaw4CAAECCwJ/AkADQAJAAkAgAygCPA0AIAMQLyADKAI8DQAgCg0BQQAMBAsgAygCSCADKAJoai0AACEEIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qQQA6AAAgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtaiAEOgAAIAMgBEECdGoiASABLwHkAUEBajsB5AEgAyADKAI8QQFrNgI8IAMgAygCaEEBaiIBNgJoIAMoAvAtIAMoAvQtRw0BQQAhBCADIAMoAlgiBkEATgR/IAMoAkggBmoFQQALIAEgBmtBABAPIAMgAygCaDYCWCADKAIAEAogAygCACgCEA0BDAILCyADQQA2AoQuIApBBEYEQCADIAMoAlgiAUEATgR/IAMoAkggAWoFQQALIAMoAmggAWtBARAPIAMgAygCaDYCWCADKAIAEApBA0ECIAMoAgAoAhAbDAILIAMoAvAtBEBBACEEIAMgAygCWCIBQQBOBH8gAygCSCABagVBAAsgAygCaCABa0EAEA8gAyADKAJoNgJYIAMoAgAQCiADKAIAKAIQRQ0BC0EBIQQLIAQL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bGl0ZXJhbC9sZW5ndGhzIHNldABpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQAdW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0AGludmFsaWQgZGlzdGFuY2VzIHNldABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AEZpbGUgYWxyZWFkeSBleGlzdHMAdG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMAaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocwAlcyVzJXMAYnVmZmVyIGVycm9yAE5vIGVycm9yAHN0cmVhbSBlcnJvcgBUZWxsIGVycm9yAEludGVybmFsIGVycm9yAFNlZWsgZXJyb3IAV3JpdGUgZXJyb3IAZmlsZSBlcnJvcgBSZWFkIGVycm9yAFpsaWIgZXJyb3IAZGF0YSBlcnJvcgBDUkMgZXJyb3IAaW5jb21wYXRpYmxlIHZlcnNpb24AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoADEuMi4xMy56bGliLW5nAGludmFsaWQgd2luZG93IHNpemUAUmVhZC1vbmx5IGFyY2hpdmUATm90IGEgemlwIGFyY2hpdmUAUmVzb3VyY2Ugc3RpbGwgaW4gdXNlAE1hbGxvYyBmYWlsdXJlAGludmFsaWQgYmxvY2sgdHlwZQBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZQBDYW4ndCBvcGVuIGZpbGUATm8gc3VjaCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgZmlsZQBDYW4ndCByZW1vdmUgZmlsZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAHN0cmVhbSBlbmQAQ29tcHJlc3NlZCBkYXRhIGludmFsaWQATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRl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UgAIANIACAAyAAgAsgAIAHIACADyAAgACgAIAIoACABKAAgAygAIACoACACqAAgAagAIAOoACAAaAAgAmgAIAFoACADaAAgAOgAIALoACAB6AAgA+gAIAAYACACGAAgARgAIAMYACAAmAAgApgAIAGYACADmAAgAFgAIAJYACABWAAgA1gAIADYACAC2AAgAdgAIAPYACAAOAAgAjgAIAE4ACADOAAgALgAIAK4ACABuAAgA7gAIAB4ACACeAAgAXgAIAN4ACAA+AAgAvgAIAH4ACAD+AAgAAQAIAIEACABBAAgAwQAIACEACAChAAgAYQAIAOEACAARAAgAkQAIAFEACADRAAgAMQAIALEACABxAAgA8QAIAAkACACJAAgASQAIAMkACAApAAgAqQAIAGkACADpAAgAGQAIAJkACABZAAgA2QAIADkACAC5AAgAeQAIAPkACAAFAAgAhQAIAEUACADFAAgAJQAIAKUACABlAAgA5QAIABUACACVAAgAVQAIANUACAA1AAgAtQAIAHUACAD1AAgADQAIAI0ACABNAAgAzQAIAC0ACACtAAgAbQAIAO0ACAAdAAgAnQAIAF0ACADdAAgAPQAIAL0ACAB9AAgA/QAIABMACQATAQkAkwAJAJMBCQBTAAkAUwEJANMACQDTAQkAMwAJADMBCQCzAAkAswEJAHMACQBzAQkA8wAJAPMBCQALAAkACwEJAIsACQCLAQkASwAJAEsBCQDLAAkAywEJACsACQArAQkAqwAJAKsBCQBrAAkAawEJAOsACQDrAQkAGwAJABsBCQCbAAkAmwEJAFsACQBbAQkA2wAJANsBCQA7AAkAOwEJALsACQC7AQkAewAJAHsBCQD7AAkA+wEJAAcACQAHAQkAhwAJAIcBCQBHAAkARwEJAMcACQDHAQkAJwAJACcBCQCnAAkApwEJAGcACQBnAQkA5wAJAOcBCQAXAAkAFwEJAJcACQCXAQkAVwAJAFcBCQDXAAkA1wEJADcACQA3AQkAtwAJALcBCQB3AAkAdwEJAPcACQD3AQkADwAJAA8BCQCPAAkAjwEJAE8ACQBPAQkAzwAJAM8BCQAvAAkALwEJAK8ACQCvAQkAbwAJAG8BCQDvAAkA7wEJAB8ACQAfAQkAnwAJAJ8BCQBfAAkAXwEJAN8ACQDfAQkAPwAJAD8BCQC/AAkA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SXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AQcCAAQuFARMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAgERQADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAQfSCAQsCXEQAQbCDAQsQ/////////////////////w==";io(Si)||(Si=b(Si));function Ls(We){try{if(We==Si&&Ae)return new Uint8Array(Ae);var tt=ii(We);if(tt)return tt;if(T)return T(We);throw"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"}catch(It){Ri(It)}}function so(We,tt){var It,nr,$;try{$=Ls(We),nr=new WebAssembly.Module($),It=new WebAssembly.Instance(nr,tt)}catch(Le){var me=Le.toString();throw te("failed to compile wasm module: "+me),(me.includes("imported Memory")||me.includes("memory import"))&&te("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."),Le}return[It,nr]}function cc(){var We={a:Oa};function tt($,me){var Le=$.exports;r.asm=Le,we=r.asm.g,z(we.buffer),Z=r.asm.W,an(r.asm.h),Ns("wasm-instantiate")}if(Vn("wasm-instantiate"),r.instantiateWasm)try{var It=r.instantiateWasm(We,tt);return It}catch($){return te("Module.instantiateWasm callback failed with error: "+$),!1}var nr=so(Si,We);return tt(nr[0]),r.asm}function cu(We){return F.getFloat32(We,!0)}function ap(We){return F.getFloat64(We,!0)}function lp(We){return F.getInt16(We,!0)}function Ms(We){return F.getInt32(We,!0)}function Dn(We,tt){F.setInt32(We,tt,!0)}function oo(We){for(;We.length>0;){var tt=We.shift();if(typeof tt=="function"){tt(r);continue}var It=tt.func;typeof It=="number"?tt.arg===void 0?Z.get(It)():Z.get(It)(tt.arg):It(tt.arg===void 0?null:tt.arg)}}function Os(We,tt){var It=new Date(Ms((We>>2)*4)*1e3);Dn((tt>>2)*4,It.getUTCSeconds()),Dn((tt+4>>2)*4,It.getUTCMinutes()),Dn((tt+8>>2)*4,It.getUTCHours()),Dn((tt+12>>2)*4,It.getUTCDate()),Dn((tt+16>>2)*4,It.getUTCMonth()),Dn((tt+20>>2)*4,It.getUTCFullYear()-1900),Dn((tt+24>>2)*4,It.getUTCDay()),Dn((tt+36>>2)*4,0),Dn((tt+32>>2)*4,0);var nr=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-nr)/(1e3*60*60*24)|0;return Dn((tt+28>>2)*4,$),Os.GMTString||(Os.GMTString=lt("GMT")),Dn((tt+40>>2)*4,Os.GMTString),tt}function ml(We,tt){return Os(We,tt)}function yl(We,tt,It){Te.copyWithin(We,tt,tt+It)}function ao(We){try{return we.grow(We-be.byteLength+65535>>>16),z(we.buffer),1}catch{}}function Kn(We){var tt=Te.length;We=We>>>0;var It=2147483648;if(We>It)return!1;for(var nr=1;nr<=4;nr*=2){var $=tt*(1+.2/nr);$=Math.min($,We+100663296);var me=Math.min(It,Qe(Math.max(We,$),65536)),Le=ao(me);if(Le)return!0}return!1}function Mn(We){pe(We)}function Ni(We){var tt=Date.now()/1e3|0;return We&&Dn((We>>2)*4,tt),tt}function On(){if(On.called)return;On.called=!0;var We=new Date().getFullYear(),tt=new Date(We,0,1),It=new Date(We,6,1),nr=tt.getTimezoneOffset(),$=It.getTimezoneOffset(),me=Math.max(nr,$);Dn((ds()>>2)*4,me*60),Dn((gs()>>2)*4,Number(nr!=$));function Le(Zr){var qi=Zr.toTimeString().match(/\(([A-Za-z ]+)\)$/);return qi?qi[1]:"GMT"}var ft=Le(tt),pt=Le(It),Rt=lt(ft),er=lt(pt);$>2)*4,Rt),Dn((wi()+4>>2)*4,er)):(Dn((wi()>>2)*4,er),Dn((wi()+4>>2)*4,Rt))}function _i(We){On();var tt=Date.UTC(Ms((We+20>>2)*4)+1900,Ms((We+16>>2)*4),Ms((We+12>>2)*4),Ms((We+8>>2)*4),Ms((We+4>>2)*4),Ms((We>>2)*4),0),It=new Date(tt);Dn((We+24>>2)*4,It.getUTCDay());var nr=Date.UTC(It.getUTCFullYear(),0,1,0,0,0,0),$=(It.getTime()-nr)/(1e3*60*60*24)|0;return Dn((We+28>>2)*4,$),It.getTime()/1e3|0}var tr=typeof atob=="function"?atob:function(We){var tt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",It="",nr,$,me,Le,ft,pt,Rt,er=0;We=We.replace(/[^A-Za-z0-9\+\/\=]/g,"");do Le=tt.indexOf(We.charAt(er++)),ft=tt.indexOf(We.charAt(er++)),pt=tt.indexOf(We.charAt(er++)),Rt=tt.indexOf(We.charAt(er++)),nr=Le<<2|ft>>4,$=(ft&15)<<4|pt>>2,me=(pt&3)<<6|Rt,It=It+String.fromCharCode(nr),pt!==64&&(It=It+String.fromCharCode($)),Rt!==64&&(It=It+String.fromCharCode(me));while(er0||(dt(),mr>0))return;function tt(){Pn||(Pn=!0,r.calledRun=!0,!Pe&&(jt(),o(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),$t()))}r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),tt()},1)):tt()}if(r.run=ys,r.preInit)for(typeof r.preInit=="function"&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return ys(),e}}();typeof Fx=="object"&&typeof nU=="object"?nU.exports=rU:typeof define=="function"&&define.amd?define([],function(){return rU}):typeof Fx=="object"&&(Fx.createModule=rU)});var Lf,Nle,Lle,Mle=Et(()=>{Lf=["number","number"],Nle=(ee=>(ee[ee.ZIP_ER_OK=0]="ZIP_ER_OK",ee[ee.ZIP_ER_MULTIDISK=1]="ZIP_ER_MULTIDISK",ee[ee.ZIP_ER_RENAME=2]="ZIP_ER_RENAME",ee[ee.ZIP_ER_CLOSE=3]="ZIP_ER_CLOSE",ee[ee.ZIP_ER_SEEK=4]="ZIP_ER_SEEK",ee[ee.ZIP_ER_READ=5]="ZIP_ER_READ",ee[ee.ZIP_ER_WRITE=6]="ZIP_ER_WRITE",ee[ee.ZIP_ER_CRC=7]="ZIP_ER_CRC",ee[ee.ZIP_ER_ZIPCLOSED=8]="ZIP_ER_ZIPCLOSED",ee[ee.ZIP_ER_NOENT=9]="ZIP_ER_NOENT",ee[ee.ZIP_ER_EXISTS=10]="ZIP_ER_EXISTS",ee[ee.ZIP_ER_OPEN=11]="ZIP_ER_OPEN",ee[ee.ZIP_ER_TMPOPEN=12]="ZIP_ER_TMPOPEN",ee[ee.ZIP_ER_ZLIB=13]="ZIP_ER_ZLIB",ee[ee.ZIP_ER_MEMORY=14]="ZIP_ER_MEMORY",ee[ee.ZIP_ER_CHANGED=15]="ZIP_ER_CHANGED",ee[ee.ZIP_ER_COMPNOTSUPP=16]="ZIP_ER_COMPNOTSUPP",ee[ee.ZIP_ER_EOF=17]="ZIP_ER_EOF",ee[ee.ZIP_ER_INVAL=18]="ZIP_ER_INVAL",ee[ee.ZIP_ER_NOZIP=19]="ZIP_ER_NOZIP",ee[ee.ZIP_ER_INTERNAL=20]="ZIP_ER_INTERNAL",ee[ee.ZIP_ER_INCONS=21]="ZIP_ER_INCONS",ee[ee.ZIP_ER_REMOVE=22]="ZIP_ER_REMOVE",ee[ee.ZIP_ER_DELETED=23]="ZIP_ER_DELETED",ee[ee.ZIP_ER_ENCRNOTSUPP=24]="ZIP_ER_ENCRNOTSUPP",ee[ee.ZIP_ER_RDONLY=25]="ZIP_ER_RDONLY",ee[ee.ZIP_ER_NOPASSWD=26]="ZIP_ER_NOPASSWD",ee[ee.ZIP_ER_WRONGPASSWD=27]="ZIP_ER_WRONGPASSWD",ee[ee.ZIP_ER_OPNOTSUPP=28]="ZIP_ER_OPNOTSUPP",ee[ee.ZIP_ER_INUSE=29]="ZIP_ER_INUSE",ee[ee.ZIP_ER_TELL=30]="ZIP_ER_TELL",ee[ee.ZIP_ER_COMPRESSED_DATA=31]="ZIP_ER_COMPRESSED_DATA",ee))(Nle||{}),Lle=t=>({get HEAPU8(){return t.HEAPU8},errors:Nle,SEEK_SET:0,SEEK_CUR:1,SEEK_END:2,ZIP_CHECKCONS:4,ZIP_EXCL:2,ZIP_RDONLY:16,ZIP_FL_OVERWRITE:8192,ZIP_FL_COMPRESSED:4,ZIP_OPSYS_DOS:0,ZIP_OPSYS_AMIGA:1,ZIP_OPSYS_OPENVMS:2,ZIP_OPSYS_UNIX:3,ZIP_OPSYS_VM_CMS:4,ZIP_OPSYS_ATARI_ST:5,ZIP_OPSYS_OS_2:6,ZIP_OPSYS_MACINTOSH:7,ZIP_OPSYS_Z_SYSTEM:8,ZIP_OPSYS_CPM:9,ZIP_OPSYS_WINDOWS_NTFS:10,ZIP_OPSYS_MVS:11,ZIP_OPSYS_VSE:12,ZIP_OPSYS_ACORN_RISC:13,ZIP_OPSYS_VFAT:14,ZIP_OPSYS_ALTERNATE_MVS:15,ZIP_OPSYS_BEOS:16,ZIP_OPSYS_TANDEM:17,ZIP_OPSYS_OS_400:18,ZIP_OPSYS_OS_X:19,ZIP_CM_DEFAULT:-1,ZIP_CM_STORE:0,ZIP_CM_DEFLATE:8,uint08S:t._malloc(1),uint32S:t._malloc(4),malloc:t._malloc,free:t._free,getValue:t.getValue,openFromSource:t.cwrap("zip_open_from_source","number",["number","number","number"]),close:t.cwrap("zip_close","number",["number"]),discard:t.cwrap("zip_discard",null,["number"]),getError:t.cwrap("zip_get_error","number",["number"]),getName:t.cwrap("zip_get_name","string",["number","number","number"]),getNumEntries:t.cwrap("zip_get_num_entries","number",["number","number"]),delete:t.cwrap("zip_delete","number",["number","number"]),statIndex:t.cwrap("zip_stat_index","number",["number",...Lf,"number","number"]),fopenIndex:t.cwrap("zip_fopen_index","number",["number",...Lf,"number"]),fread:t.cwrap("zip_fread","number",["number","number","number","number"]),fclose:t.cwrap("zip_fclose","number",["number"]),dir:{add:t.cwrap("zip_dir_add","number",["number","string"])},file:{add:t.cwrap("zip_file_add","number",["number","string","number","number"]),getError:t.cwrap("zip_file_get_error","number",["number"]),getExternalAttributes:t.cwrap("zip_file_get_external_attributes","number",["number",...Lf,"number","number","number"]),setExternalAttributes:t.cwrap("zip_file_set_external_attributes","number",["number",...Lf,"number","number","number"]),setMtime:t.cwrap("zip_file_set_mtime","number",["number",...Lf,"number","number"]),setCompression:t.cwrap("zip_set_file_compression","number",["number",...Lf,"number","number"])},ext:{countSymlinks:t.cwrap("zip_ext_count_symlinks","number",["number"])},error:{initWithCode:t.cwrap("zip_error_init_with_code",null,["number","number"]),strerror:t.cwrap("zip_error_strerror","string",["number"])},name:{locate:t.cwrap("zip_name_locate","number",["number","string","number"])},source:{fromUnattachedBuffer:t.cwrap("zip_source_buffer_create","number",["number",...Lf,"number","number"]),fromBuffer:t.cwrap("zip_source_buffer","number",["number","number",...Lf,"number"]),free:t.cwrap("zip_source_free",null,["number"]),keep:t.cwrap("zip_source_keep",null,["number"]),open:t.cwrap("zip_source_open","number",["number"]),close:t.cwrap("zip_source_close","number",["number"]),seek:t.cwrap("zip_source_seek","number",["number",...Lf,"number"]),tell:t.cwrap("zip_source_tell","number",["number"]),read:t.cwrap("zip_source_read","number",["number","number","number"]),error:t.cwrap("zip_source_error","number",["number"])},struct:{statS:t.cwrap("zipstruct_statS","number",[]),statSize:t.cwrap("zipstruct_stat_size","number",["number"]),statCompSize:t.cwrap("zipstruct_stat_comp_size","number",["number"]),statCompMethod:t.cwrap("zipstruct_stat_comp_method","number",["number"]),statMtime:t.cwrap("zipstruct_stat_mtime","number",["number"]),statCrc:t.cwrap("zipstruct_stat_crc","number",["number"]),errorS:t.cwrap("zipstruct_errorS","number",[]),errorCodeZip:t.cwrap("zipstruct_error_code_zip","number",["number"])}})});function iU(t,e){let r=t.indexOf(e);if(r<=0)return null;let o=r;for(;r>=0&&(o=r+e.length,t[o]!==K.sep);){if(t[r-1]===K.sep)return null;r=t.indexOf(e,o)}return t.length>o&&t[o]!==K.sep?null:t.slice(0,o)}var Jl,Ole=Et(()=>{Pt();Pt();nA();Jl=class extends _p{static async openPromise(e,r){let o=new Jl(r);try{return await e(o)}finally{o.saveAndClose()}}constructor(e={}){let r=e.fileExtensions,o=e.readOnlyArchives,a=typeof r>"u"?A=>iU(A,".zip"):A=>{for(let p of r){let h=iU(A,p);if(h)return h}return null},n=(A,p)=>new zi(p,{baseFs:A,readOnly:o,stats:A.statSync(p)}),u=async(A,p)=>{let h={baseFs:A,readOnly:o,stats:await A.statPromise(p)};return()=>new zi(p,h)};super({...e,factorySync:n,factoryPromise:u,getMountPoint:a})}}});function pot(t){if(typeof t=="string"&&String(+t)===t)return+t;if(typeof t=="number"&&Number.isFinite(t))return t<0?Date.now()/1e3:t;if(Ule.types.isDate(t))return t.getTime()/1e3;throw new Error("Invalid time")}function Tx(){return Buffer.from([80,75,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])}var ta,sU,Ule,oU,_le,Rx,zi,aU=Et(()=>{Pt();Pt();Pt();Pt();Pt();Pt();ta=Be("fs"),sU=Be("stream"),Ule=Be("util"),oU=$e(Be("zlib"));tU();_le="mixed";Rx=class extends Error{constructor(r,o){super(r);this.name="Libzip Error",this.code=o}},zi=class extends Ou{constructor(r,o={}){super();this.listings=new Map;this.entries=new Map;this.fileSources=new Map;this.fds=new Map;this.nextFd=0;this.ready=!1;this.readOnly=!1;let a=o;if(this.level=typeof a.level<"u"?a.level:_le,r??=Tx(),typeof r=="string"){let{baseFs:A=new Rn}=a;this.baseFs=A,this.path=r}else this.path=null,this.baseFs=null;if(o.stats)this.stats=o.stats;else if(typeof r=="string")try{this.stats=this.baseFs.statSync(r)}catch(A){if(A.code==="ENOENT"&&a.create)this.stats=Ea.makeDefaultStats();else throw A}else this.stats=Ea.makeDefaultStats();this.libzip=S1();let n=this.libzip.malloc(4);try{let A=0;o.readOnly&&(A|=this.libzip.ZIP_RDONLY,this.readOnly=!0),typeof r=="string"&&(r=a.create?Tx():this.baseFs.readFileSync(r));let p=this.allocateUnattachedSource(r);try{this.zip=this.libzip.openFromSource(p,A,n),this.lzSource=p}catch(h){throw this.libzip.source.free(p),h}if(this.zip===0){let h=this.libzip.struct.errorS();throw this.libzip.error.initWithCode(h,this.libzip.getValue(n,"i32")),this.makeLibzipError(h)}}finally{this.libzip.free(n)}this.listings.set(Bt.root,new Set);let u=this.libzip.getNumEntries(this.zip,0);for(let A=0;Ar)throw new Error("Overread");let n=this.libzip.HEAPU8.subarray(o,o+r);return Buffer.from(n)}finally{this.libzip.free(o)}}finally{this.libzip.source.close(this.lzSource),this.libzip.source.free(this.lzSource),this.ready=!1}}discardAndClose(){this.prepareClose(),this.libzip.discard(this.zip),this.ready=!1}saveAndClose(){if(!this.path||!this.baseFs)throw new Error("ZipFS cannot be saved and must be discarded when loaded from a buffer");if(this.readOnly){this.discardAndClose();return}let r=this.baseFs.existsSync(this.path)||this.stats.mode===Ea.DEFAULT_MODE?void 0:this.stats.mode;this.baseFs.writeFileSync(this.path,this.getBufferAndClose(),{mode:r}),this.ready=!1}resolve(r){return K.resolve(Bt.root,r)}async openPromise(r,o,a){return this.openSync(r,o,a)}openSync(r,o,a){let n=this.nextFd++;return this.fds.set(n,{cursor:0,p:r}),n}hasOpenFileHandles(){return!!this.fds.size}async opendirPromise(r,o){return this.opendirSync(r,o)}opendirSync(r,o={}){let a=this.resolveFilename(`opendir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`opendir '${r}'`);let n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`opendir '${r}'`);let u=[...n],A=this.openSync(a,"r");return SD(this,a,u,{onClose:()=>{this.closeSync(A)}})}async readPromise(r,o,a,n,u){return this.readSync(r,o,a,n,u)}readSync(r,o,a=0,n=o.byteLength,u=-1){let A=this.fds.get(r);if(typeof A>"u")throw ar.EBADF("read");let p=u===-1||u===null?A.cursor:u,h=this.readFileSync(A.p);h.copy(o,a,p,p+n);let E=Math.max(0,Math.min(h.length-p,n));return(u===-1||u===null)&&(A.cursor+=E),E}async writePromise(r,o,a,n,u){return typeof o=="string"?this.writeSync(r,o,u):this.writeSync(r,o,a,n,u)}writeSync(r,o,a,n,u){throw typeof this.fds.get(r)>"u"?ar.EBADF("read"):new Error("Unimplemented")}async closePromise(r){return this.closeSync(r)}closeSync(r){if(typeof this.fds.get(r)>"u")throw ar.EBADF("read");this.fds.delete(r)}createReadStream(r,{encoding:o}={}){if(r===null)throw new Error("Unimplemented");let a=this.openSync(r,"r"),n=Object.assign(new sU.PassThrough({emitClose:!0,autoDestroy:!0,destroy:(A,p)=>{clearImmediate(u),this.closeSync(a),p(A)}}),{close(){n.destroy()},bytesRead:0,path:r,pending:!1}),u=setImmediate(async()=>{try{let A=await this.readFilePromise(r,o);n.bytesRead=A.length,n.end(A)}catch(A){n.destroy(A)}});return n}createWriteStream(r,{encoding:o}={}){if(this.readOnly)throw ar.EROFS(`open '${r}'`);if(r===null)throw new Error("Unimplemented");let a=[],n=this.openSync(r,"w"),u=Object.assign(new sU.PassThrough({autoDestroy:!0,emitClose:!0,destroy:(A,p)=>{try{A?p(A):(this.writeFileSync(r,Buffer.concat(a),o),p(null))}catch(h){p(h)}finally{this.closeSync(n)}}}),{close(){u.destroy()},bytesWritten:0,path:r,pending:!1});return u.on("data",A=>{let p=Buffer.from(A);u.bytesWritten+=p.length,a.push(p)}),u}async realpathPromise(r){return this.realpathSync(r)}realpathSync(r){let o=this.resolveFilename(`lstat '${r}'`,r);if(!this.entries.has(o)&&!this.listings.has(o))throw ar.ENOENT(`lstat '${r}'`);return o}async existsPromise(r){return this.existsSync(r)}existsSync(r){if(!this.ready)throw ar.EBUSY(`archive closed, existsSync '${r}'`);if(this.symlinkCount===0){let a=K.resolve(Bt.root,r);return this.entries.has(a)||this.listings.has(a)}let o;try{o=this.resolveFilename(`stat '${r}'`,r,void 0,!1)}catch{return!1}return o===void 0?!1:this.entries.has(o)||this.listings.has(o)}async accessPromise(r,o){return this.accessSync(r,o)}accessSync(r,o=ta.constants.F_OK){let a=this.resolveFilename(`access '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`access '${r}'`);if(this.readOnly&&o&ta.constants.W_OK)throw ar.EROFS(`access '${r}'`)}async statPromise(r,o={bigint:!1}){return o.bigint?this.statSync(r,{bigint:!0}):this.statSync(r)}statSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`stat '${r}'`,r,void 0,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw ar.ENOENT(`stat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`stat '${r}'`);return this.statImpl(`stat '${r}'`,a,o)}}async fstatPromise(r,o){return this.fstatSync(r,o)}fstatSync(r,o){let a=this.fds.get(r);if(typeof a>"u")throw ar.EBADF("fstatSync");let{p:n}=a,u=this.resolveFilename(`stat '${n}'`,n);if(!this.entries.has(u)&&!this.listings.has(u))throw ar.ENOENT(`stat '${n}'`);if(n[n.length-1]==="/"&&!this.listings.has(u))throw ar.ENOTDIR(`stat '${n}'`);return this.statImpl(`fstat '${n}'`,u,o)}async lstatPromise(r,o={bigint:!1}){return o.bigint?this.lstatSync(r,{bigint:!0}):this.lstatSync(r)}lstatSync(r,o={bigint:!1,throwIfNoEntry:!0}){let a=this.resolveFilename(`lstat '${r}'`,r,!1,o.throwIfNoEntry);if(a!==void 0){if(!this.entries.has(a)&&!this.listings.has(a)){if(o.throwIfNoEntry===!1)return;throw ar.ENOENT(`lstat '${r}'`)}if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`lstat '${r}'`);return this.statImpl(`lstat '${r}'`,a,o)}}statImpl(r,o,a={}){let n=this.entries.get(o);if(typeof n<"u"){let u=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,n,0,0,u)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let p=this.stats.uid,h=this.stats.gid,E=this.libzip.struct.statSize(u)>>>0,I=512,v=Math.ceil(E/I),b=(this.libzip.struct.statMtime(u)>>>0)*1e3,C=b,T=b,L=b,U=new Date(C),J=new Date(T),te=new Date(L),le=new Date(b),pe=this.listings.has(o)?ta.constants.S_IFDIR:this.isSymbolicLink(n)?ta.constants.S_IFLNK:ta.constants.S_IFREG,Ae=pe===ta.constants.S_IFDIR?493:420,ye=pe|this.getUnixMode(n,Ae)&511,ae=this.libzip.struct.statCrc(u),we=Object.assign(new Ea.StatEntry,{uid:p,gid:h,size:E,blksize:I,blocks:v,atime:U,birthtime:J,ctime:te,mtime:le,atimeMs:C,birthtimeMs:T,ctimeMs:L,mtimeMs:b,mode:ye,crc:ae});return a.bigint===!0?Ea.convertToBigIntStats(we):we}if(this.listings.has(o)){let u=this.stats.uid,A=this.stats.gid,p=0,h=512,E=0,I=this.stats.mtimeMs,v=this.stats.mtimeMs,b=this.stats.mtimeMs,C=this.stats.mtimeMs,T=new Date(I),L=new Date(v),U=new Date(b),J=new Date(C),te=ta.constants.S_IFDIR|493,le=0,pe=Object.assign(new Ea.StatEntry,{uid:u,gid:A,size:p,blksize:h,blocks:E,atime:T,birthtime:L,ctime:U,mtime:J,atimeMs:I,birthtimeMs:v,ctimeMs:b,mtimeMs:C,mode:te,crc:le});return a.bigint===!0?Ea.convertToBigIntStats(pe):pe}throw new Error("Unreachable")}getUnixMode(r,o){if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?o:this.libzip.getValue(this.libzip.uint32S,"i32")>>>16}registerListing(r){let o=this.listings.get(r);if(o)return o;this.registerListing(K.dirname(r)).add(K.basename(r));let n=new Set;return this.listings.set(r,n),n}registerEntry(r,o){this.registerListing(K.dirname(r)).add(K.basename(r)),this.entries.set(r,o)}unregisterListing(r){this.listings.delete(r),this.listings.get(K.dirname(r))?.delete(K.basename(r))}unregisterEntry(r){this.unregisterListing(r);let o=this.entries.get(r);this.entries.delete(r),!(typeof o>"u")&&(this.fileSources.delete(o),this.isSymbolicLink(o)&&this.symlinkCount--)}deleteEntry(r,o){if(this.unregisterEntry(r),this.libzip.delete(this.zip,o)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}resolveFilename(r,o,a=!0,n=!0){if(!this.ready)throw ar.EBUSY(`archive closed, ${r}`);let u=K.resolve(Bt.root,o);if(u==="/")return Bt.root;let A=this.entries.get(u);if(a&&A!==void 0)if(this.symlinkCount!==0&&this.isSymbolicLink(A)){let p=this.getFileSource(A).toString();return this.resolveFilename(r,K.resolve(K.dirname(u),p),!0,n)}else return u;for(;;){let p=this.resolveFilename(r,K.dirname(u),!0,n);if(p===void 0)return p;let h=this.listings.has(p),E=this.entries.has(p);if(!h&&!E){if(n===!1)return;throw ar.ENOENT(r)}if(!h)throw ar.ENOTDIR(r);if(u=K.resolve(p,K.basename(u)),!a||this.symlinkCount===0)break;let I=this.libzip.name.locate(this.zip,u.slice(1),0);if(I===-1)break;if(this.isSymbolicLink(I)){let v=this.getFileSource(I).toString();u=K.resolve(K.dirname(u),v)}else break}return u}allocateBuffer(r){Buffer.isBuffer(r)||(r=Buffer.from(r));let o=this.libzip.malloc(r.byteLength);if(!o)throw new Error("Couldn't allocate enough memory");return new Uint8Array(this.libzip.HEAPU8.buffer,o,r.byteLength).set(r),{buffer:o,byteLength:r.byteLength}}allocateUnattachedSource(r){let o=this.libzip.struct.errorS(),{buffer:a,byteLength:n}=this.allocateBuffer(r),u=this.libzip.source.fromUnattachedBuffer(a,n,0,1,o);if(u===0)throw this.libzip.free(o),this.makeLibzipError(o);return u}allocateSource(r){let{buffer:o,byteLength:a}=this.allocateBuffer(r),n=this.libzip.source.fromBuffer(this.zip,o,a,0,1);if(n===0)throw this.libzip.free(o),this.makeLibzipError(this.libzip.getError(this.zip));return n}setFileSource(r,o){let a=Buffer.isBuffer(o)?o:Buffer.from(o),n=K.relative(Bt.root,r),u=this.allocateSource(o);try{let A=this.libzip.file.add(this.zip,n,u,this.libzip.ZIP_FL_OVERWRITE);if(A===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));if(this.level!=="mixed"){let p=this.level===0?this.libzip.ZIP_CM_STORE:this.libzip.ZIP_CM_DEFLATE;if(this.libzip.file.setCompression(this.zip,A,0,p,this.level)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}return this.fileSources.set(A,a),A}catch(A){throw this.libzip.source.free(u),A}}isSymbolicLink(r){if(this.symlinkCount===0)return!1;if(this.libzip.file.getExternalAttributes(this.zip,r,0,0,this.libzip.uint08S,this.libzip.uint32S)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.libzip.getValue(this.libzip.uint08S,"i8")>>>0!==this.libzip.ZIP_OPSYS_UNIX?!1:(this.libzip.getValue(this.libzip.uint32S,"i32")>>>16&ta.constants.S_IFMT)===ta.constants.S_IFLNK}getFileSource(r,o={asyncDecompress:!1}){let a=this.fileSources.get(r);if(typeof a<"u")return a;let n=this.libzip.struct.statS();if(this.libzip.statIndex(this.zip,r,0,0,n)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));let A=this.libzip.struct.statCompSize(n),p=this.libzip.struct.statCompMethod(n),h=this.libzip.malloc(A);try{let E=this.libzip.fopenIndex(this.zip,r,0,this.libzip.ZIP_FL_COMPRESSED);if(E===0)throw this.makeLibzipError(this.libzip.getError(this.zip));try{let I=this.libzip.fread(E,h,A,0);if(I===-1)throw this.makeLibzipError(this.libzip.file.getError(E));if(IA)throw new Error("Overread");let v=this.libzip.HEAPU8.subarray(h,h+A),b=Buffer.from(v);if(p===0)return this.fileSources.set(r,b),b;if(o.asyncDecompress)return new Promise((C,T)=>{oU.default.inflateRaw(b,(L,U)=>{L?T(L):(this.fileSources.set(r,U),C(U))})});{let C=oU.default.inflateRawSync(b);return this.fileSources.set(r,C),C}}finally{this.libzip.fclose(E)}}finally{this.libzip.free(h)}}async fchmodPromise(r,o){return this.chmodPromise(this.fdToPath(r,"fchmod"),o)}fchmodSync(r,o){return this.chmodSync(this.fdToPath(r,"fchmodSync"),o)}async chmodPromise(r,o){return this.chmodSync(r,o)}chmodSync(r,o){if(this.readOnly)throw ar.EROFS(`chmod '${r}'`);o&=493;let a=this.resolveFilename(`chmod '${r}'`,r,!1),n=this.entries.get(a);if(typeof n>"u")throw new Error(`Assertion failed: The entry should have been registered (${a})`);let A=this.getUnixMode(n,ta.constants.S_IFREG|0)&-512|o;if(this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,A<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async fchownPromise(r,o,a){return this.chownPromise(this.fdToPath(r,"fchown"),o,a)}fchownSync(r,o,a){return this.chownSync(this.fdToPath(r,"fchownSync"),o,a)}async chownPromise(r,o,a){return this.chownSync(r,o,a)}chownSync(r,o,a){throw new Error("Unimplemented")}async renamePromise(r,o){return this.renameSync(r,o)}renameSync(r,o){throw new Error("Unimplemented")}async copyFilePromise(r,o,a){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=await this.getFileSource(n,{asyncDecompress:!0}),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}copyFileSync(r,o,a=0){let{indexSource:n,indexDest:u,resolvedDestP:A}=this.prepareCopyFile(r,o,a),p=this.getFileSource(n),h=this.setFileSource(A,p);h!==u&&this.registerEntry(A,h)}prepareCopyFile(r,o,a=0){if(this.readOnly)throw ar.EROFS(`copyfile '${r} -> '${o}'`);if((a&ta.constants.COPYFILE_FICLONE_FORCE)!==0)throw ar.ENOSYS("unsupported clone operation",`copyfile '${r}' -> ${o}'`);let n=this.resolveFilename(`copyfile '${r} -> ${o}'`,r),u=this.entries.get(n);if(typeof u>"u")throw ar.EINVAL(`copyfile '${r}' -> '${o}'`);let A=this.resolveFilename(`copyfile '${r}' -> ${o}'`,o),p=this.entries.get(A);if((a&(ta.constants.COPYFILE_EXCL|ta.constants.COPYFILE_FICLONE_FORCE))!==0&&typeof p<"u")throw ar.EEXIST(`copyfile '${r}' -> '${o}'`);return{indexSource:u,resolvedDestP:A,indexDest:p}}async appendFilePromise(r,o,a){if(this.readOnly)throw ar.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFilePromise(r,o,a)}appendFileSync(r,o,a={}){if(this.readOnly)throw ar.EROFS(`open '${r}'`);return typeof a>"u"?a={flag:"a"}:typeof a=="string"?a={flag:"a",encoding:a}:typeof a.flag>"u"&&(a={flag:"a",...a}),this.writeFileSync(r,o,a)}fdToPath(r,o){let a=this.fds.get(r)?.p;if(typeof a>"u")throw ar.EBADF(o);return a}async writeFilePromise(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([await this.getFileSource(A,{asyncDecompress:!0}),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&await this.chmodPromise(p,u)}writeFileSync(r,o,a){let{encoding:n,mode:u,index:A,resolvedP:p}=this.prepareWriteFile(r,a);A!==void 0&&typeof a=="object"&&a.flag&&a.flag.includes("a")&&(o=Buffer.concat([this.getFileSource(A),Buffer.from(o)])),n!==null&&(o=o.toString(n));let h=this.setFileSource(p,o);h!==A&&this.registerEntry(p,h),u!==null&&this.chmodSync(p,u)}prepareWriteFile(r,o){if(typeof r=="number"&&(r=this.fdToPath(r,"read")),this.readOnly)throw ar.EROFS(`open '${r}'`);let a=this.resolveFilename(`open '${r}'`,r);if(this.listings.has(a))throw ar.EISDIR(`open '${r}'`);let n=null,u=null;typeof o=="string"?n=o:typeof o=="object"&&({encoding:n=null,mode:u=null}=o);let A=this.entries.get(a);return{encoding:n,mode:u,resolvedP:a,index:A}}async unlinkPromise(r){return this.unlinkSync(r)}unlinkSync(r){if(this.readOnly)throw ar.EROFS(`unlink '${r}'`);let o=this.resolveFilename(`unlink '${r}'`,r);if(this.listings.has(o))throw ar.EISDIR(`unlink '${r}'`);let a=this.entries.get(o);if(typeof a>"u")throw ar.EINVAL(`unlink '${r}'`);this.deleteEntry(o,a)}async utimesPromise(r,o,a){return this.utimesSync(r,o,a)}utimesSync(r,o,a){if(this.readOnly)throw ar.EROFS(`utimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r);this.utimesImpl(n,a)}async lutimesPromise(r,o,a){return this.lutimesSync(r,o,a)}lutimesSync(r,o,a){if(this.readOnly)throw ar.EROFS(`lutimes '${r}'`);let n=this.resolveFilename(`utimes '${r}'`,r,!1);this.utimesImpl(n,a)}utimesImpl(r,o){this.listings.has(r)&&(this.entries.has(r)||this.hydrateDirectory(r));let a=this.entries.get(r);if(a===void 0)throw new Error("Unreachable");if(this.libzip.file.setMtime(this.zip,a,0,pot(o),0)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip))}async mkdirPromise(r,o){return this.mkdirSync(r,o)}mkdirSync(r,{mode:o=493,recursive:a=!1}={}){if(a)return this.mkdirpSync(r,{chmod:o});if(this.readOnly)throw ar.EROFS(`mkdir '${r}'`);let n=this.resolveFilename(`mkdir '${r}'`,r);if(this.entries.has(n)||this.listings.has(n))throw ar.EEXIST(`mkdir '${r}'`);this.hydrateDirectory(n),this.chmodSync(n,o)}async rmdirPromise(r,o){return this.rmdirSync(r,o)}rmdirSync(r,{recursive:o=!1}={}){if(this.readOnly)throw ar.EROFS(`rmdir '${r}'`);if(o){this.removeSync(r);return}let a=this.resolveFilename(`rmdir '${r}'`,r),n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`rmdir '${r}'`);if(n.size>0)throw ar.ENOTEMPTY(`rmdir '${r}'`);let u=this.entries.get(a);if(typeof u>"u")throw ar.EINVAL(`rmdir '${r}'`);this.deleteEntry(r,u)}hydrateDirectory(r){let o=this.libzip.dir.add(this.zip,K.relative(Bt.root,r));if(o===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));return this.registerListing(r),this.registerEntry(r,o),o}async linkPromise(r,o){return this.linkSync(r,o)}linkSync(r,o){throw ar.EOPNOTSUPP(`link '${r}' -> '${o}'`)}async symlinkPromise(r,o){return this.symlinkSync(r,o)}symlinkSync(r,o){if(this.readOnly)throw ar.EROFS(`symlink '${r}' -> '${o}'`);let a=this.resolveFilename(`symlink '${r}' -> '${o}'`,o);if(this.listings.has(a))throw ar.EISDIR(`symlink '${r}' -> '${o}'`);if(this.entries.has(a))throw ar.EEXIST(`symlink '${r}' -> '${o}'`);let n=this.setFileSource(a,r);if(this.registerEntry(a,n),this.libzip.file.setExternalAttributes(this.zip,n,0,0,this.libzip.ZIP_OPSYS_UNIX,(ta.constants.S_IFLNK|511)<<16)===-1)throw this.makeLibzipError(this.libzip.getError(this.zip));this.symlinkCount+=1}async readFilePromise(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=await this.readFileBuffer(r,{asyncDecompress:!0});return o?a.toString(o):a}readFileSync(r,o){typeof o=="object"&&(o=o?o.encoding:void 0);let a=this.readFileBuffer(r);return o?a.toString(o):a}readFileBuffer(r,o={asyncDecompress:!1}){typeof r=="number"&&(r=this.fdToPath(r,"read"));let a=this.resolveFilename(`open '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`open '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(a))throw ar.ENOTDIR(`open '${r}'`);if(this.listings.has(a))throw ar.EISDIR("read");let n=this.entries.get(a);if(n===void 0)throw new Error("Unreachable");return this.getFileSource(n,o)}async readdirPromise(r,o){return this.readdirSync(r,o)}readdirSync(r,o){let a=this.resolveFilename(`scandir '${r}'`,r);if(!this.entries.has(a)&&!this.listings.has(a))throw ar.ENOENT(`scandir '${r}'`);let n=this.listings.get(a);if(!n)throw ar.ENOTDIR(`scandir '${r}'`);if(o?.recursive)if(o?.withFileTypes){let u=Array.from(n,A=>Object.assign(this.statImpl("lstat",K.join(r,A)),{name:A,path:Bt.dot}));for(let A of u){if(!A.isDirectory())continue;let p=K.join(A.path,A.name),h=this.listings.get(K.join(a,p));for(let E of h)u.push(Object.assign(this.statImpl("lstat",K.join(r,p,E)),{name:E,path:p}))}return u}else{let u=[...n];for(let A of u){let p=this.listings.get(K.join(a,A));if(!(typeof p>"u"))for(let h of p)u.push(K.join(A,h))}return u}else return o?.withFileTypes?Array.from(n,u=>Object.assign(this.statImpl("lstat",K.join(r,u)),{name:u,path:void 0})):[...n]}async readlinkPromise(r){let o=this.prepareReadlink(r);return(await this.getFileSource(o,{asyncDecompress:!0})).toString()}readlinkSync(r){let o=this.prepareReadlink(r);return this.getFileSource(o).toString()}prepareReadlink(r){let o=this.resolveFilename(`readlink '${r}'`,r,!1);if(!this.entries.has(o)&&!this.listings.has(o))throw ar.ENOENT(`readlink '${r}'`);if(r[r.length-1]==="/"&&!this.listings.has(o))throw ar.ENOTDIR(`open '${r}'`);if(this.listings.has(o))throw ar.EINVAL(`readlink '${r}'`);let a=this.entries.get(o);if(a===void 0)throw new Error("Unreachable");if(!this.isSymbolicLink(a))throw ar.EINVAL(`readlink '${r}'`);return a}async truncatePromise(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw ar.EINVAL(`open '${r}'`);let u=await this.getFileSource(n,{asyncDecompress:!0}),A=Buffer.alloc(o,0);return u.copy(A),await this.writeFilePromise(r,A)}truncateSync(r,o=0){let a=this.resolveFilename(`open '${r}'`,r),n=this.entries.get(a);if(typeof n>"u")throw ar.EINVAL(`open '${r}'`);let u=this.getFileSource(n),A=Buffer.alloc(o,0);return u.copy(A),this.writeFileSync(r,A)}async ftruncatePromise(r,o){return this.truncatePromise(this.fdToPath(r,"ftruncate"),o)}ftruncateSync(r,o){return this.truncateSync(this.fdToPath(r,"ftruncateSync"),o)}watch(r,o,a){let n;switch(typeof o){case"function":case"string":case"undefined":n=!0;break;default:({persistent:n=!0}=o);break}if(!n)return{on:()=>{},close:()=>{}};let u=setInterval(()=>{},24*60*60*1e3);return{on:()=>{},close:()=>{clearInterval(u)}}}watchFile(r,o,a){let n=K.resolve(Bt.root,r);return ry(this,n,o,a)}unwatchFile(r,o){let a=K.resolve(Bt.root,r);return Mg(this,a,o)}}});function jle(t,e,r=Buffer.alloc(0),o){let a=new zi(r),n=I=>I===e||I.startsWith(`${e}/`)?I.slice(0,e.length):null,u=async(I,v)=>()=>a,A=(I,v)=>a,p={...t},h=new Rn(p),E=new _p({baseFs:h,getMountPoint:n,factoryPromise:u,factorySync:A,magicByte:21,maxAge:1/0,typeCheck:o?.typeCheck});return Ww(Hle.default,new Hp(E)),a}var Hle,qle=Et(()=>{Pt();Hle=$e(Be("fs"));aU()});var Gle=Et(()=>{Ole();aU();qle()});var x1={};Kt(x1,{DEFAULT_COMPRESSION_LEVEL:()=>_le,LibzipError:()=>Rx,ZipFS:()=>zi,ZipOpenFS:()=>Jl,getArchivePart:()=>iU,getLibzipPromise:()=>got,getLibzipSync:()=>hot,makeEmptyArchive:()=>Tx,mountMemoryDrive:()=>jle});function hot(){return S1()}async function got(){return S1()}var Yle,nA=Et(()=>{tU();Yle=$e(Rle());Mle();Gle();Tle(()=>{let t=(0,Yle.default)();return Lle(t)})});var FE,Wle=Et(()=>{Pt();qt();b1();FE=class extends nt{constructor(){super(...arguments);this.cwd=ge.String("--cwd",process.cwd(),{description:"The directory to run the command in"});this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=this.args.length>0?`${this.commandName} ${this.args.join(" ")}`:this.commandName;return await TE(r,[],{cwd:ue.toPortablePath(this.cwd),stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}};FE.usage={description:"run a command using yarn's portable shell",details:` + This command will run a command using Yarn's portable shell. + + Make sure to escape glob patterns, redirections, and other features that might be expanded by your own shell. + + Note: To escape something from Yarn's shell, you might have to escape it twice, the first time from your own shell. + + Note: Don't use this command in Yarn scripts, as Yarn's shell is automatically used. + + For a list of features, visit: https://github.com/yarnpkg/berry/blob/master/packages/yarnpkg-shell/README.md. + `,examples:[["Run a simple command","$0 echo Hello"],["Run a command with a glob pattern","$0 echo '*.js'"],["Run a command with a redirection","$0 echo Hello World '>' hello.txt"],["Run a command with an escaped glob pattern (The double escape is needed in Unix shells)",`$0 echo '"*.js"'`],["Run a command with a variable (Double quotes are needed in Unix shells, to prevent them from expanding the variable)",'$0 "GREETING=Hello echo $GREETING World"']]}});var al,Vle=Et(()=>{al=class extends Error{constructor(e){super(e),this.name="ShellError"}}});var Mx={};Kt(Mx,{fastGlobOptions:()=>zle,isBraceExpansion:()=>lU,isGlobPattern:()=>dot,match:()=>mot,micromatchOptions:()=>Lx});function dot(t){if(!Nx.default.scan(t,Lx).isGlob)return!1;try{Nx.default.parse(t,Lx)}catch{return!1}return!0}function mot(t,{cwd:e,baseFs:r}){return(0,Kle.default)(t,{...zle,cwd:ue.fromPortablePath(e),fs:TD(Jle.default,new Hp(r))})}function lU(t){return Nx.default.scan(t,Lx).isBrace}var Kle,Jle,Nx,Lx,zle,Xle=Et(()=>{Pt();Kle=$e(RS()),Jle=$e(Be("fs")),Nx=$e(Zo()),Lx={strictBrackets:!0},zle={onlyDirectories:!1,onlyFiles:!1}});function cU(){}function uU(){for(let t of bd)t.kill()}function tce(t,e,r,o){return a=>{let n=a[0]instanceof iA.Transform?"pipe":a[0],u=a[1]instanceof iA.Transform?"pipe":a[1],A=a[2]instanceof iA.Transform?"pipe":a[2],p=(0,$le.default)(t,e,{...o,stdio:[n,u,A]});return bd.add(p),bd.size===1&&(process.on("SIGINT",cU),process.on("SIGTERM",uU)),a[0]instanceof iA.Transform&&a[0].pipe(p.stdin),a[1]instanceof iA.Transform&&p.stdout.pipe(a[1],{end:!1}),a[2]instanceof iA.Transform&&p.stderr.pipe(a[2],{end:!1}),{stdin:p.stdin,promise:new Promise(h=>{p.on("error",E=>{switch(bd.delete(p),bd.size===0&&(process.off("SIGINT",cU),process.off("SIGTERM",uU)),E.code){case"ENOENT":a[2].write(`command not found: ${t} +`),h(127);break;case"EACCES":a[2].write(`permission denied: ${t} +`),h(128);break;default:a[2].write(`uncaught error: ${E.message} +`),h(1);break}}),p.on("close",E=>{bd.delete(p),bd.size===0&&(process.off("SIGINT",cU),process.off("SIGTERM",uU)),h(E!==null?E:129)})})}}}function rce(t){return e=>{let r=e[0]==="pipe"?new iA.PassThrough:e[0];return{stdin:r,promise:Promise.resolve().then(()=>t({stdin:r,stdout:e[1],stderr:e[2]}))}}}function Ox(t,e){return RE.start(t,e)}function Zle(t,e=null){let r=new iA.PassThrough,o=new ece.StringDecoder,a="";return r.on("data",n=>{let u=o.write(n),A;do if(A=u.indexOf(` +`),A!==-1){let p=a+u.substring(0,A);u=u.substring(A+1),a="",t(e!==null?`${e} ${p}`:p)}while(A!==-1);a+=u}),r.on("end",()=>{let n=o.end();n!==""&&t(e!==null?`${e} ${n}`:n)}),r}function nce(t,{prefix:e}){return{stdout:Zle(r=>t.stdout.write(`${r} +`),t.stdout.isTTY?e:null),stderr:Zle(r=>t.stderr.write(`${r} +`),t.stderr.isTTY?e:null)}}var $le,iA,ece,bd,zl,AU,RE,fU=Et(()=>{$le=$e(aR()),iA=Be("stream"),ece=Be("string_decoder"),bd=new Set;zl=class{constructor(e){this.stream=e}close(){}get(){return this.stream}},AU=class{constructor(){this.stream=null}close(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");this.stream.end()}attach(e){this.stream=e}get(){if(this.stream===null)throw new Error("Assertion failed: No stream attached");return this.stream}},RE=class{constructor(e,r){this.stdin=null;this.stdout=null;this.stderr=null;this.pipe=null;this.ancestor=e,this.implementation=r}static start(e,{stdin:r,stdout:o,stderr:a}){let n=new RE(null,e);return n.stdin=r,n.stdout=o,n.stderr=a,n}pipeTo(e,r=1){let o=new RE(this,e),a=new AU;return o.pipe=a,o.stdout=this.stdout,o.stderr=this.stderr,(r&1)===1?this.stdout=a:this.ancestor!==null&&(this.stderr=this.ancestor.stdout),(r&2)===2?this.stderr=a:this.ancestor!==null&&(this.stderr=this.ancestor.stderr),o}async exec(){let e=["ignore","ignore","ignore"];if(this.pipe)e[0]="pipe";else{if(this.stdin===null)throw new Error("Assertion failed: No input stream registered");e[0]=this.stdin.get()}let r;if(this.stdout===null)throw new Error("Assertion failed: No output stream registered");r=this.stdout,e[1]=r.get();let o;if(this.stderr===null)throw new Error("Assertion failed: No error stream registered");o=this.stderr,e[2]=o.get();let a=this.implementation(e);return this.pipe&&this.pipe.attach(a.stdin),await a.promise.then(n=>(r.close(),o.close(),n))}async run(){let e=[];for(let o=this;o;o=o.ancestor)e.push(o.exec());return(await Promise.all(e))[0]}}});var T1={};Kt(T1,{EntryCommand:()=>FE,ShellError:()=>al,execute:()=>TE,globUtils:()=>Mx});function ice(t,e,r){let o=new ll.PassThrough({autoDestroy:!0});switch(t){case 0:(e&1)===1&&r.stdin.pipe(o,{end:!1}),(e&2)===2&&r.stdin instanceof ll.Writable&&o.pipe(r.stdin,{end:!1});break;case 1:(e&1)===1&&r.stdout.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stdout,{end:!1});break;case 2:(e&1)===1&&r.stderr.pipe(o,{end:!1}),(e&2)===2&&o.pipe(r.stderr,{end:!1});break;default:throw new al(`Bad file descriptor: "${t}"`)}return o}function _x(t,e={}){let r={...t,...e};return r.environment={...t.environment,...e.environment},r.variables={...t.variables,...e.variables},r}async function Eot(t,e,r){let o=[],a=new ll.PassThrough;return a.on("data",n=>o.push(n)),await Hx(t,e,_x(r,{stdout:a})),Buffer.concat(o).toString().replace(/[\r\n]+$/,"")}async function sce(t,e,r){let o=t.map(async n=>{let u=await kd(n.args,e,r);return{name:n.name,value:u.join(" ")}});return(await Promise.all(o)).reduce((n,u)=>(n[u.name]=u.value,n),{})}function Ux(t){return t.match(/[^ \r\n\t]+/g)||[]}async function Ace(t,e,r,o,a=o){switch(t.name){case"$":o(String(process.pid));break;case"#":o(String(e.args.length));break;case"@":if(t.quoted)for(let n of e.args)a(n);else for(let n of e.args){let u=Ux(n);for(let A=0;A=0&&n"u"&&(t.defaultValue?u=(await kd(t.defaultValue,e,r)).join(" "):t.alternativeValue&&(u="")),typeof u>"u")throw A?new al(`Unbound argument #${n}`):new al(`Unbound variable "${t.name}"`);if(t.quoted)o(u);else{let p=Ux(u);for(let E=0;Eo.push(n));let a=Number(o.join(" "));return Number.isNaN(a)?k1({type:"variable",name:o.join(" ")},e,r):k1({type:"number",value:a},e,r)}else return Cot[t.type](await k1(t.left,e,r),await k1(t.right,e,r))}async function kd(t,e,r){let o=new Map,a=[],n=[],u=E=>{n.push(E)},A=()=>{n.length>0&&a.push(n.join("")),n=[]},p=E=>{u(E),A()},h=(E,I,v)=>{let b=JSON.stringify({type:E,fd:I}),C=o.get(b);typeof C>"u"&&o.set(b,C=[]),C.push(v)};for(let E of t){let I=!1;switch(E.type){case"redirection":{let v=await kd(E.args,e,r);for(let b of v)h(E.subtype,E.fd,b)}break;case"argument":for(let v of E.segments)switch(v.type){case"text":u(v.text);break;case"glob":u(v.pattern),I=!0;break;case"shell":{let b=await Eot(v.shell,e,r);if(v.quoted)u(b);else{let C=Ux(b);for(let T=0;T"u")throw new Error("Assertion failed: Expected a glob pattern to have been set");let b=await e.glob.match(v,{cwd:r.cwd,baseFs:e.baseFs});if(b.length===0){let C=lU(v)?". Note: Brace expansion of arbitrary strings isn't currently supported. For more details, please read this issue: https://github.com/yarnpkg/berry/issues/22":"";throw new al(`No matches found: "${v}"${C}`)}for(let C of b.sort())p(C)}}if(o.size>0){let E=[];for(let[I,v]of o.entries())E.splice(E.length,0,I,String(v.length),...v);a.splice(0,0,"__ysh_set_redirects",...E,"--")}return a}function Q1(t,e,r){e.builtins.has(t[0])||(t=["command",...t]);let o=ue.fromPortablePath(r.cwd),a=r.environment;typeof a.PWD<"u"&&(a={...a,PWD:o});let[n,...u]=t;if(n==="command")return tce(u[0],u.slice(1),e,{cwd:o,env:a});let A=e.builtins.get(n);if(typeof A>"u")throw new Error(`Assertion failed: A builtin should exist for "${n}"`);return rce(async({stdin:p,stdout:h,stderr:E})=>{let{stdin:I,stdout:v,stderr:b}=r;r.stdin=p,r.stdout=h,r.stderr=E;try{return await A(u,e,r)}finally{r.stdin=I,r.stdout=v,r.stderr=b}})}function wot(t,e,r){return o=>{let a=new ll.PassThrough,n=Hx(t,e,_x(r,{stdin:a}));return{stdin:a,promise:n}}}function Iot(t,e,r){return o=>{let a=new ll.PassThrough,n=Hx(t,e,r);return{stdin:a,promise:n}}}function oce(t,e,r,o){if(e.length===0)return t;{let a;do a=String(Math.random());while(Object.hasOwn(o.procedures,a));return o.procedures={...o.procedures},o.procedures[a]=t,Q1([...e,"__ysh_run_procedure",a],r,o)}}async function ace(t,e,r){let o=t,a=null,n=null;for(;o;){let u=o.then?{...r}:r,A;switch(o.type){case"command":{let p=await kd(o.args,e,r),h=await sce(o.envs,e,r);A=o.envs.length?Q1(p,e,_x(u,{environment:h})):Q1(p,e,u)}break;case"subshell":{let p=await kd(o.args,e,r),h=wot(o.subshell,e,u);A=oce(h,p,e,u)}break;case"group":{let p=await kd(o.args,e,r),h=Iot(o.group,e,u);A=oce(h,p,e,u)}break;case"envs":{let p=await sce(o.envs,e,r);u.environment={...u.environment,...p},A=Q1(["true"],e,u)}break}if(typeof A>"u")throw new Error("Assertion failed: An action should have been generated");if(a===null)n=Ox(A,{stdin:new zl(u.stdin),stdout:new zl(u.stdout),stderr:new zl(u.stderr)});else{if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");switch(a){case"|":n=n.pipeTo(A,1);break;case"|&":n=n.pipeTo(A,3);break}}o.then?(a=o.then.type,o=o.then.chain):o=null}if(n===null)throw new Error("Assertion failed: The execution pipeline should have been setup");return await n.run()}async function Bot(t,e,r,{background:o=!1}={}){function a(n){let u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[n%u.length];return lce.default.hex(A)}if(o){let n=r.nextBackgroundJobIndex++,u=a(n),A=`[${n}]`,p=u(A),{stdout:h,stderr:E}=nce(r,{prefix:p});return r.backgroundJobs.push(ace(t,e,_x(r,{stdout:h,stderr:E})).catch(I=>E.write(`${I.message} +`)).finally(()=>{r.stdout.isTTY&&r.stdout.write(`Job ${p}, '${u(cy(t))}' has ended +`)})),0}return await ace(t,e,r)}async function vot(t,e,r,{background:o=!1}={}){let a,n=A=>{a=A,r.variables["?"]=String(A)},u=async A=>{try{return await Bot(A.chain,e,r,{background:o&&typeof A.then>"u"})}catch(p){if(!(p instanceof al))throw p;return r.stderr.write(`${p.message} +`),1}};for(n(await u(t));t.then;){if(r.exitCode!==null)return r.exitCode;switch(t.then.type){case"&&":a===0&&n(await u(t.then.line));break;case"||":a!==0&&n(await u(t.then.line));break;default:throw new Error(`Assertion failed: Unsupported command type: "${t.then.type}"`)}t=t.then.line}return a}async function Hx(t,e,r){let o=r.backgroundJobs;r.backgroundJobs=[];let a=0;for(let{command:n,type:u}of t){if(a=await vot(n,e,r,{background:u==="&"}),r.exitCode!==null)return r.exitCode;r.variables["?"]=String(a)}return await Promise.all(r.backgroundJobs),r.backgroundJobs=o,a}function fce(t){switch(t.type){case"variable":return t.name==="@"||t.name==="#"||t.name==="*"||Number.isFinite(parseInt(t.name,10))||"defaultValue"in t&&!!t.defaultValue&&t.defaultValue.some(e=>F1(e))||"alternativeValue"in t&&!!t.alternativeValue&&t.alternativeValue.some(e=>F1(e));case"arithmetic":return pU(t.arithmetic);case"shell":return hU(t.shell);default:return!1}}function F1(t){switch(t.type){case"redirection":return t.args.some(e=>F1(e));case"argument":return t.segments.some(e=>fce(e));default:throw new Error(`Assertion failed: Unsupported argument type: "${t.type}"`)}}function pU(t){switch(t.type){case"variable":return fce(t);case"number":return!1;default:return pU(t.left)||pU(t.right)}}function hU(t){return t.some(({command:e})=>{for(;e;){let r=e.chain;for(;r;){let o;switch(r.type){case"subshell":o=hU(r.subshell);break;case"command":o=r.envs.some(a=>a.args.some(n=>F1(n)))||r.args.some(a=>F1(a));break}if(o)return!0;if(!r.then)break;r=r.then.chain}if(!e.then)break;e=e.then.line}return!1})}async function TE(t,e=[],{baseFs:r=new Rn,builtins:o={},cwd:a=ue.toPortablePath(process.cwd()),env:n=process.env,stdin:u=process.stdin,stdout:A=process.stdout,stderr:p=process.stderr,variables:h={},glob:E=Mx}={}){let I={};for(let[C,T]of Object.entries(n))typeof T<"u"&&(I[C]=T);let v=new Map(yot);for(let[C,T]of Object.entries(o))v.set(C,T);u===null&&(u=new ll.PassThrough,u.end());let b=LD(t,E);if(!hU(b)&&b.length>0&&e.length>0){let{command:C}=b[b.length-1];for(;C.then;)C=C.then.line;let T=C.chain;for(;T.then;)T=T.then.chain;T.type==="command"&&(T.args=T.args.concat(e.map(L=>({type:"argument",segments:[{type:"text",text:L}]}))))}return await Hx(b,{args:e,baseFs:r,builtins:v,initialStdin:u,initialStdout:A,initialStderr:p,glob:E},{cwd:a,environment:I,exitCode:null,procedures:{},stdin:u,stdout:A,stderr:p,variables:Object.assign({},h,{["?"]:0}),nextBackgroundJobIndex:1,backgroundJobs:[]})}var lce,cce,ll,uce,yot,Cot,b1=Et(()=>{Pt();Nl();lce=$e(vN()),cce=Be("os"),ll=Be("stream"),uce=Be("timers/promises");Wle();Vle();Xle();fU();fU();yot=new Map([["cd",async([t=(0,cce.homedir)(),...e],r,o)=>{let a=K.resolve(o.cwd,ue.toPortablePath(t));if(!(await r.baseFs.statPromise(a).catch(u=>{throw u.code==="ENOENT"?new al(`cd: no such file or directory: ${t}`):u})).isDirectory())throw new al(`cd: not a directory: ${t}`);return o.cwd=a,0}],["pwd",async(t,e,r)=>(r.stdout.write(`${ue.fromPortablePath(r.cwd)} +`),0)],[":",async(t,e,r)=>0],["true",async(t,e,r)=>0],["false",async(t,e,r)=>1],["exit",async([t,...e],r,o)=>o.exitCode=parseInt(t??o.variables["?"],10)],["echo",async(t,e,r)=>(r.stdout.write(`${t.join(" ")} +`),0)],["sleep",async([t],e,r)=>{if(typeof t>"u")throw new al("sleep: missing operand");let o=Number(t);if(Number.isNaN(o))throw new al(`sleep: invalid time interval '${t}'`);return await(0,uce.setTimeout)(1e3*o,0)}],["__ysh_run_procedure",async(t,e,r)=>{let o=r.procedures[t[0]];return await Ox(o,{stdin:new zl(r.stdin),stdout:new zl(r.stdout),stderr:new zl(r.stderr)}).run()}],["__ysh_set_redirects",async(t,e,r)=>{let o=r.stdin,a=r.stdout,n=r.stderr,u=[],A=[],p=[],h=0;for(;t[h]!=="--";){let I=t[h++],{type:v,fd:b}=JSON.parse(I),C=J=>{switch(b){case null:case 0:u.push(J);break;default:throw new Error(`Unsupported file descriptor: "${b}"`)}},T=J=>{switch(b){case null:case 1:A.push(J);break;case 2:p.push(J);break;default:throw new Error(`Unsupported file descriptor: "${b}"`)}},L=Number(t[h++]),U=h+L;for(let J=h;Je.baseFs.createReadStream(K.resolve(r.cwd,ue.toPortablePath(t[J]))));break;case"<<<":C(()=>{let te=new ll.PassThrough;return process.nextTick(()=>{te.write(`${t[J]} +`),te.end()}),te});break;case"<&":C(()=>ice(Number(t[J]),1,r));break;case">":case">>":{let te=K.resolve(r.cwd,ue.toPortablePath(t[J]));T(te==="/dev/null"?new ll.Writable({autoDestroy:!0,emitClose:!0,write(le,pe,Ae){setImmediate(Ae)}}):e.baseFs.createWriteStream(te,v===">>"?{flags:"a"}:void 0))}break;case">&":T(ice(Number(t[J]),2,r));break;default:throw new Error(`Assertion failed: Unsupported redirection type: "${v}"`)}}if(u.length>0){let I=new ll.PassThrough;o=I;let v=b=>{if(b===u.length)I.end();else{let C=u[b]();C.pipe(I,{end:!1}),C.on("end",()=>{v(b+1)})}};v(0)}if(A.length>0){let I=new ll.PassThrough;a=I;for(let v of A)I.pipe(v)}if(p.length>0){let I=new ll.PassThrough;n=I;for(let v of p)I.pipe(v)}let E=await Ox(Q1(t.slice(h+1),e,r),{stdin:new zl(o),stdout:new zl(a),stderr:new zl(n)}).run();return await Promise.all(A.map(I=>new Promise((v,b)=>{I.on("error",C=>{b(C)}),I.on("close",()=>{v()}),I.end()}))),await Promise.all(p.map(I=>new Promise((v,b)=>{I.on("error",C=>{b(C)}),I.on("close",()=>{v()}),I.end()}))),E}]]);Cot={addition:(t,e)=>t+e,subtraction:(t,e)=>t-e,multiplication:(t,e)=>t*e,division:(t,e)=>Math.trunc(t/e)}});var jx=_((n4t,pce)=>{function Dot(t,e){for(var r=-1,o=t==null?0:t.length,a=Array(o);++r{var hce=fd(),Pot=jx(),Sot=Hl(),xot=fE(),bot=1/0,gce=hce?hce.prototype:void 0,dce=gce?gce.toString:void 0;function mce(t){if(typeof t=="string")return t;if(Sot(t))return Pot(t,mce)+"";if(xot(t))return dce?dce.call(t):"";var e=t+"";return e=="0"&&1/t==-bot?"-0":e}yce.exports=mce});var R1=_((s4t,Cce)=>{var kot=Ece();function Qot(t){return t==null?"":kot(t)}Cce.exports=Qot});var gU=_((o4t,wce)=>{function Fot(t,e,r){var o=-1,a=t.length;e<0&&(e=-e>a?0:a+e),r=r>a?a:r,r<0&&(r+=a),a=e>r?0:r-e>>>0,e>>>=0;for(var n=Array(a);++o{var Tot=gU();function Rot(t,e,r){var o=t.length;return r=r===void 0?o:r,!e&&r>=o?t:Tot(t,e,r)}Ice.exports=Rot});var dU=_((l4t,vce)=>{var Not="\\ud800-\\udfff",Lot="\\u0300-\\u036f",Mot="\\ufe20-\\ufe2f",Oot="\\u20d0-\\u20ff",Uot=Lot+Mot+Oot,_ot="\\ufe0e\\ufe0f",Hot="\\u200d",jot=RegExp("["+Hot+Not+Uot+_ot+"]");function qot(t){return jot.test(t)}vce.exports=qot});var Pce=_((c4t,Dce)=>{function Got(t){return t.split("")}Dce.exports=Got});var Rce=_((u4t,Tce)=>{var Sce="\\ud800-\\udfff",Yot="\\u0300-\\u036f",Wot="\\ufe20-\\ufe2f",Vot="\\u20d0-\\u20ff",Kot=Yot+Wot+Vot,Jot="\\ufe0e\\ufe0f",zot="["+Sce+"]",mU="["+Kot+"]",yU="\\ud83c[\\udffb-\\udfff]",Xot="(?:"+mU+"|"+yU+")",xce="[^"+Sce+"]",bce="(?:\\ud83c[\\udde6-\\uddff]){2}",kce="[\\ud800-\\udbff][\\udc00-\\udfff]",Zot="\\u200d",Qce=Xot+"?",Fce="["+Jot+"]?",$ot="(?:"+Zot+"(?:"+[xce,bce,kce].join("|")+")"+Fce+Qce+")*",eat=Fce+Qce+$ot,tat="(?:"+[xce+mU+"?",mU,bce,kce,zot].join("|")+")",rat=RegExp(yU+"(?="+yU+")|"+tat+eat,"g");function nat(t){return t.match(rat)||[]}Tce.exports=nat});var Lce=_((A4t,Nce)=>{var iat=Pce(),sat=dU(),oat=Rce();function aat(t){return sat(t)?oat(t):iat(t)}Nce.exports=aat});var Oce=_((f4t,Mce)=>{var lat=Bce(),cat=dU(),uat=Lce(),Aat=R1();function fat(t){return function(e){e=Aat(e);var r=cat(e)?uat(e):void 0,o=r?r[0]:e.charAt(0),a=r?lat(r,1).join(""):e.slice(1);return o[t]()+a}}Mce.exports=fat});var _ce=_((p4t,Uce)=>{var pat=Oce(),hat=pat("toUpperCase");Uce.exports=hat});var EU=_((h4t,Hce)=>{var gat=R1(),dat=_ce();function mat(t){return dat(gat(t).toLowerCase())}Hce.exports=mat});var jce=_((g4t,qx)=>{function yat(){var t=0,e=1,r=2,o=3,a=4,n=5,u=6,A=7,p=8,h=9,E=10,I=11,v=12,b=13,C=14,T=15,L=16,U=17,J=0,te=1,le=2,pe=3,Ae=4;function ye(g,Ee){return 55296<=g.charCodeAt(Ee)&&g.charCodeAt(Ee)<=56319&&56320<=g.charCodeAt(Ee+1)&&g.charCodeAt(Ee+1)<=57343}function ae(g,Ee){Ee===void 0&&(Ee=0);var De=g.charCodeAt(Ee);if(55296<=De&&De<=56319&&Ee=1){var ce=g.charCodeAt(Ee-1),ne=De;return 55296<=ce&&ce<=56319?(ce-55296)*1024+(ne-56320)+65536:ne}return De}function we(g,Ee,De){var ce=[g].concat(Ee).concat([De]),ne=ce[ce.length-2],ee=De,Ie=ce.lastIndexOf(C);if(Ie>1&&ce.slice(1,Ie).every(function(H){return H==o})&&[o,b,U].indexOf(g)==-1)return le;var ke=ce.lastIndexOf(a);if(ke>0&&ce.slice(1,ke).every(function(H){return H==a})&&[v,a].indexOf(ne)==-1)return ce.filter(function(H){return H==a}).length%2==1?pe:Ae;if(ne==t&&ee==e)return J;if(ne==r||ne==t||ne==e)return ee==C&&Ee.every(function(H){return H==o})?le:te;if(ee==r||ee==t||ee==e)return te;if(ne==u&&(ee==u||ee==A||ee==h||ee==E))return J;if((ne==h||ne==A)&&(ee==A||ee==p))return J;if((ne==E||ne==p)&&ee==p)return J;if(ee==o||ee==T)return J;if(ee==n)return J;if(ne==v)return J;var ht=ce.indexOf(o)!=-1?ce.lastIndexOf(o)-1:ce.length-2;return[b,U].indexOf(ce[ht])!=-1&&ce.slice(ht+1,-1).every(function(H){return H==o})&&ee==C||ne==T&&[L,U].indexOf(ee)!=-1?J:Ee.indexOf(a)!=-1?le:ne==a&&ee==a?J:te}this.nextBreak=function(g,Ee){if(Ee===void 0&&(Ee=0),Ee<0)return 0;if(Ee>=g.length-1)return g.length;for(var De=Pe(ae(g,Ee)),ce=[],ne=Ee+1;ne{var Eat=/^(.*?)(\x1b\[[^m]+m|\x1b\]8;;.*?(\x1b\\|\u0007))/,Gx;function Cat(){if(Gx)return Gx;if(typeof Intl.Segmenter<"u"){let t=new Intl.Segmenter("en",{granularity:"grapheme"});return Gx=e=>Array.from(t.segment(e),({segment:r})=>r)}else{let t=jce(),e=new t;return Gx=r=>e.splitGraphemes(r)}}qce.exports=(t,e=0,r=t.length)=>{if(e<0||r<0)throw new RangeError("Negative indices aren't supported by this implementation");let o=r-e,a="",n=0,u=0;for(;t.length>0;){let A=t.match(Eat)||[t,t,void 0],p=Cat()(A[1]),h=Math.min(e-n,p.length);p=p.slice(h);let E=Math.min(o-u,p.length);a+=p.slice(0,E).join(""),n+=h,u+=E,typeof A[2]<"u"&&(a+=A[2]),t=t.slice(A[0].length)}return a}});var tn,N1=Et(()=>{tn=process.env.YARN_IS_TEST_ENV?"0.0.0":"4.0.2"});function zce(t,{configuration:e,json:r}){if(!e.get("enableMessageNames"))return"";let a=Wu(t===null?0:t);return!r&&t===null?Ot(e,a,"grey"):a}function CU(t,{configuration:e,json:r}){let o=zce(t,{configuration:e,json:r});if(!o||t===null||t===0)return o;let a=wr[t],n=`https://yarnpkg.com/advanced/error-codes#${o}---${a}`.toLowerCase();return Xy(e,o,n)}async function NE({configuration:t,stdout:e,forceError:r},o){let a=await Nt.start({configuration:t,stdout:e,includeFooter:!1},async n=>{let u=!1,A=!1;for(let p of o)typeof p.option<"u"&&(p.error||r?(A=!0,n.reportError(50,p.message)):(u=!0,n.reportWarning(50,p.message)),p.callback?.());u&&!A&&n.reportSeparator()});return a.hasErrors()?a.exitCode():null}var Kce,Yx,wat,Yce,Wce,uh,Jce,Vce,Iat,Bat,Wx,vat,Nt,L1=Et(()=>{Kce=$e(Gce()),Yx=$e(ed());pP();Yl();N1();ql();wat="\xB7",Yce=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],Wce=80,uh=Yx.default.GITHUB_ACTIONS?{start:t=>`::group::${t} +`,end:t=>`::endgroup:: +`}:Yx.default.TRAVIS?{start:t=>`travis_fold:start:${t} +`,end:t=>`travis_fold:end:${t} +`}:Yx.default.GITLAB?{start:t=>`section_start:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}[collapsed=true]\r\x1B[0K${t} +`,end:t=>`section_end:${Math.floor(Date.now()/1e3)}:${t.toLowerCase().replace(/\W+/g,"_")}\r\x1B[0K`}:null,Jce=uh!==null,Vce=new Date,Iat=["iTerm.app","Apple_Terminal","WarpTerminal","vscode"].includes(process.env.TERM_PROGRAM)||!!process.env.WT_SESSION,Bat=t=>t,Wx=Bat({patrick:{date:[17,3],chars:["\u{1F340}","\u{1F331}"],size:40},simba:{date:[19,7],chars:["\u{1F981}","\u{1F334}"],size:40},jack:{date:[31,10],chars:["\u{1F383}","\u{1F987}"],size:40},hogsfather:{date:[31,12],chars:["\u{1F389}","\u{1F384}"],size:40},default:{chars:["=","-"],size:80}}),vat=Iat&&Object.keys(Wx).find(t=>{let e=Wx[t];return!(e.date&&(e.date[0]!==Vce.getDate()||e.date[1]!==Vce.getMonth()+1))})||"default";Nt=class extends Xs{constructor({configuration:r,stdout:o,json:a=!1,forceSectionAlignment:n=!1,includeNames:u=!0,includePrefix:A=!0,includeFooter:p=!0,includeLogs:h=!a,includeInfos:E=h,includeWarnings:I=h}){super();this.uncommitted=new Set;this.warningCount=0;this.errorCount=0;this.timerFooter=[];this.startTime=Date.now();this.indent=0;this.level=0;this.progress=new Map;this.progressTime=0;this.progressFrame=0;this.progressTimeout=null;this.progressStyle=null;this.progressMaxScaledSize=null;if(zI(this,{configuration:r}),this.configuration=r,this.forceSectionAlignment=n,this.includeNames=u,this.includePrefix=A,this.includeFooter=p,this.includeInfos=E,this.includeWarnings=I,this.json=a,this.stdout=o,r.get("enableProgressBars")&&!a&&o.isTTY&&o.columns>22){let v=r.get("progressBarStyle")||vat;if(!Object.hasOwn(Wx,v))throw new Error("Assertion failed: Invalid progress bar style");this.progressStyle=Wx[v];let b=Math.min(this.getRecommendedLength(),80);this.progressMaxScaledSize=Math.floor(this.progressStyle.size*b/80)}}static async start(r,o){let a=new this(r),n=process.emitWarning;process.emitWarning=(u,A)=>{if(typeof u!="string"){let h=u;u=h.message,A=A??h.name}let p=typeof A<"u"?`${A}: ${u}`:u;a.reportWarning(0,p)},r.includeVersion&&a.reportInfo(0,md(r.configuration,`Yarn ${tn}`,2));try{await o(a)}catch(u){a.reportExceptionOnce(u)}finally{await a.finalize(),process.emitWarning=n}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}getRecommendedLength(){let o=this.progressStyle!==null?this.stdout.columns-1:super.getRecommendedLength();return Math.max(40,o-12-this.indent*2)}startSectionSync({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}async startSectionPromise({reportHeader:r,reportFooter:o,skipIfEmpty:a},n){let u={committed:!1,action:()=>{r?.()}};a?this.uncommitted.add(u):(u.action(),u.committed=!0);let A=Date.now();try{return await n()}catch(p){throw this.reportExceptionOnce(p),p}finally{let p=Date.now();this.uncommitted.delete(u),u.committed&&o?.(p-A)}}startTimerImpl(r,o,a){return{cb:typeof o=="function"?o:a,reportHeader:()=>{this.level+=1,this.reportInfo(null,`\u250C ${r}`),this.indent+=1,uh!==null&&!this.json&&this.includeInfos&&this.stdout.write(uh.start(r))},reportFooter:A=>{if(this.indent-=1,uh!==null&&!this.json&&this.includeInfos){this.stdout.write(uh.end(r));for(let p of this.timerFooter)p()}this.configuration.get("enableTimers")&&A>200?this.reportInfo(null,`\u2514 Completed in ${Ot(this.configuration,A,yt.DURATION)}`):this.reportInfo(null,"\u2514 Completed"),this.level-=1},skipIfEmpty:(typeof o=="function"?{}:o).skipIfEmpty}}startTimerSync(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionSync(u,n)}async startTimerPromise(r,o,a){let{cb:n,...u}=this.startTimerImpl(r,o,a);return this.startSectionPromise(u,n)}reportSeparator(){this.indent===0?this.writeLine(""):this.reportInfo(null,"")}reportInfo(r,o){if(!this.includeInfos)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"",u=`${this.formatPrefix(n,"blueBright")}${o}`;this.json?this.reportJson({type:"info",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(u)}reportWarning(r,o){if(this.warningCount+=1,!this.includeWarnings)return;this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"warning",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"yellowBright")}${o}`)}reportError(r,o){this.errorCount+=1,this.timerFooter.push(()=>this.reportErrorImpl(r,o)),this.reportErrorImpl(r,o)}reportErrorImpl(r,o){this.commit();let a=this.formatNameWithHyperlink(r),n=a?`${a}: `:"";this.json?this.reportJson({type:"error",name:r,displayName:this.formatName(r),indent:this.formatIndent(),data:o}):this.writeLine(`${this.formatPrefix(n,"redBright")}${o}`,{truncate:!1})}reportFold(r,o){if(!uh)return;let a=`${uh.start(r)}${o}${uh.end(r)}`;this.timerFooter.push(()=>this.stdout.write(a))}reportProgress(r){if(this.progressStyle===null)return{...Promise.resolve(),stop:()=>{}};if(r.hasProgress&&r.hasTitle)throw new Error("Unimplemented: Progress bars can't have both progress and titles.");let o=!1,a=Promise.resolve().then(async()=>{let u={progress:r.hasProgress?0:void 0,title:r.hasTitle?"":void 0};this.progress.set(r,{definition:u,lastScaledSize:r.hasProgress?-1:void 0,lastTitle:void 0}),this.refreshProgress({delta:-1});for await(let{progress:A,title:p}of r)o||u.progress===A&&u.title===p||(u.progress=A,u.title=p,this.refreshProgress());n()}),n=()=>{o||(o=!0,this.progress.delete(r),this.refreshProgress({delta:1}))};return{...a,stop:n}}reportJson(r){this.json&&this.writeLine(`${JSON.stringify(r)}`)}async finalize(){if(!this.includeFooter)return;let r="";this.errorCount>0?r="Failed with errors":this.warningCount>0?r="Done with warnings":r="Done";let o=Ot(this.configuration,Date.now()-this.startTime,yt.DURATION),a=this.configuration.get("enableTimers")?`${r} in ${o}`:r;this.errorCount>0?this.reportError(0,a):this.warningCount>0?this.reportWarning(0,a):this.reportInfo(0,a)}writeLine(r,{truncate:o}={}){this.clearProgress({clear:!0}),this.stdout.write(`${this.truncate(r,{truncate:o})} +`),this.writeProgress()}writeLines(r,{truncate:o}={}){this.clearProgress({delta:r.length});for(let a of r)this.stdout.write(`${this.truncate(a,{truncate:o})} +`);this.writeProgress()}commit(){let r=this.uncommitted;this.uncommitted=new Set;for(let o of r)o.committed=!0,o.action()}clearProgress({delta:r=0,clear:o=!1}){this.progressStyle!==null&&this.progress.size+r>0&&(this.stdout.write(`\x1B[${this.progress.size+r}A`),(r>0||o)&&this.stdout.write("\x1B[0J"))}writeProgress(){if(this.progressStyle===null||(this.progressTimeout!==null&&clearTimeout(this.progressTimeout),this.progressTimeout=null,this.progress.size===0))return;let r=Date.now();r-this.progressTime>Wce&&(this.progressFrame=(this.progressFrame+1)%Yce.length,this.progressTime=r);let o=Yce[this.progressFrame];for(let a of this.progress.values()){let n="";if(typeof a.lastScaledSize<"u"){let h=this.progressStyle.chars[0].repeat(a.lastScaledSize),E=this.progressStyle.chars[1].repeat(this.progressMaxScaledSize-a.lastScaledSize);n=` ${h}${E}`}let u=this.formatName(null),A=u?`${u}: `:"",p=a.definition.title?` ${a.definition.title}`:"";this.stdout.write(`${Ot(this.configuration,"\u27A4","blueBright")} ${A}${o}${n}${p} +`)}this.progressTimeout=setTimeout(()=>{this.refreshProgress({force:!0})},Wce)}refreshProgress({delta:r=0,force:o=!1}={}){let a=!1,n=!1;if(o||this.progress.size===0)a=!0;else for(let u of this.progress.values()){let A=typeof u.definition.progress<"u"?Math.trunc(this.progressMaxScaledSize*u.definition.progress):void 0,p=u.lastScaledSize;u.lastScaledSize=A;let h=u.lastTitle;if(u.lastTitle=u.definition.title,A!==p||(n=h!==u.definition.title)){a=!0;break}}a&&(this.clearProgress({delta:r,clear:n}),this.writeProgress())}truncate(r,{truncate:o}={}){return this.progressStyle===null&&(o=!1),typeof o>"u"&&(o=this.configuration.get("preferTruncatedLines")),o&&(r=(0,Kce.default)(r,0,this.stdout.columns-1)),r}formatName(r){return this.includeNames?zce(r,{configuration:this.configuration,json:this.json}):""}formatPrefix(r,o){return this.includePrefix?`${Ot(this.configuration,"\u27A4",o)} ${r}${this.formatIndent()}`:""}formatNameWithHyperlink(r){return this.includeNames?CU(r,{configuration:this.configuration,json:this.json}):""}formatIndent(){return this.level>0||!this.forceSectionAlignment?"\u2502 ".repeat(this.indent):`${wat} `}}});var un={};Kt(un,{PackageManager:()=>$ce,detectPackageManager:()=>eue,executePackageAccessibleBinary:()=>sue,executePackageScript:()=>Vx,executePackageShellcode:()=>wU,executeWorkspaceAccessibleBinary:()=>Qat,executeWorkspaceLifecycleScript:()=>nue,executeWorkspaceScript:()=>rue,getPackageAccessibleBinaries:()=>Kx,getWorkspaceAccessibleBinaries:()=>iue,hasPackageScript:()=>xat,hasWorkspaceScript:()=>IU,isNodeScript:()=>BU,makeScriptEnv:()=>M1,maybeExecuteWorkspaceLifecycleScript:()=>kat,prepareExternalProject:()=>Sat});async function Ah(t,e,r,o=[]){if(process.platform==="win32"){let a=`@goto #_undefined_# 2>NUL || @title %COMSPEC% & @setlocal & @"${r}" ${o.map(n=>`"${n.replace('"','""')}"`).join(" ")} %*`;await oe.writeFilePromise(K.format({dir:t,name:e,ext:".cmd"}),a)}await oe.writeFilePromise(K.join(t,e),`#!/bin/sh +exec "${r}" ${o.map(a=>`'${a.replace(/'/g,`'"'"'`)}'`).join(" ")} "$@" +`,{mode:493})}async function eue(t){let e=await Mt.tryFind(t);if(e?.packageManager){let o=_S(e.packageManager);if(o?.name){let a=`found ${JSON.stringify({packageManager:e.packageManager})} in manifest`,[n]=o.reference.split(".");switch(o.name){case"yarn":return{packageManagerField:!0,packageManager:Number(n)===1?"Yarn Classic":"Yarn",reason:a};case"npm":return{packageManagerField:!0,packageManager:"npm",reason:a};case"pnpm":return{packageManagerField:!0,packageManager:"pnpm",reason:a}}}}let r;try{r=await oe.readFilePromise(K.join(t,dr.lockfile),"utf8")}catch{}return r!==void 0?r.match(/^__metadata:$/m)?{packageManager:"Yarn",reason:'"__metadata" key found in yarn.lock'}:{packageManager:"Yarn Classic",reason:'"__metadata" key not found in yarn.lock, must be a Yarn classic lockfile'}:oe.existsSync(K.join(t,"package-lock.json"))?{packageManager:"npm",reason:`found npm's "package-lock.json" lockfile`}:oe.existsSync(K.join(t,"pnpm-lock.yaml"))?{packageManager:"pnpm",reason:`found pnpm's "pnpm-lock.yaml" lockfile`}:null}async function M1({project:t,locator:e,binFolder:r,ignoreCorepack:o,lifecycleScript:a,baseEnv:n=t?.configuration.env??process.env}){let u={};for(let[E,I]of Object.entries(n))typeof I<"u"&&(u[E.toLowerCase()!=="path"?E:"PATH"]=I);let A=ue.fromPortablePath(r);u.BERRY_BIN_FOLDER=ue.fromPortablePath(A);let p=process.env.COREPACK_ROOT&&!o?ue.join(process.env.COREPACK_ROOT,"dist/yarn.js"):process.argv[1];if(await Promise.all([Ah(r,"node",process.execPath),...tn!==null?[Ah(r,"run",process.execPath,[p,"run"]),Ah(r,"yarn",process.execPath,[p]),Ah(r,"yarnpkg",process.execPath,[p]),Ah(r,"node-gyp",process.execPath,[p,"run","--top-level","node-gyp"])]:[]]),t&&(u.INIT_CWD=ue.fromPortablePath(t.configuration.startingCwd),u.PROJECT_CWD=ue.fromPortablePath(t.cwd)),u.PATH=u.PATH?`${A}${ue.delimiter}${u.PATH}`:`${A}`,u.npm_execpath=`${A}${ue.sep}yarn`,u.npm_node_execpath=`${A}${ue.sep}node`,e){if(!t)throw new Error("Assertion failed: Missing project");let E=t.tryWorkspaceByLocator(e),I=E?E.manifest.version??"":t.storedPackages.get(e.locatorHash).version??"";u.npm_package_name=fn(e),u.npm_package_version=I;let v;if(E)v=E.cwd;else{let b=t.storedPackages.get(e.locatorHash);if(!b)throw new Error(`Package for ${jr(t.configuration,e)} not found in the project`);let C=t.configuration.getLinkers(),T={project:t,report:new Nt({stdout:new fh.PassThrough,configuration:t.configuration})},L=C.find(U=>U.supportsPackage(b,T));if(!L)throw new Error(`The package ${jr(t.configuration,b)} isn't supported by any of the available linkers`);v=await L.findPackageLocation(b,T)}u.npm_package_json=ue.fromPortablePath(K.join(v,dr.manifest))}let h=tn!==null?`yarn/${tn}`:`yarn/${vf("@yarnpkg/core").version}-core`;return u.npm_config_user_agent=`${h} npm/? node/${process.version} ${process.platform} ${process.arch}`,a&&(u.npm_lifecycle_event=a),t&&await t.configuration.triggerHook(E=>E.setupScriptEnvironment,t,u,async(E,I,v)=>await Ah(r,E,I,v)),u}async function Sat(t,e,{configuration:r,report:o,workspace:a=null,locator:n=null}){await Pat(async()=>{await oe.mktempPromise(async u=>{let A=K.join(u,"pack.log"),p=null,{stdout:h,stderr:E}=r.getSubprocessStreams(A,{prefix:ue.fromPortablePath(t),report:o}),I=n&&Hc(n)?t1(n):n,v=I?xa(I):"an external project";h.write(`Packing ${v} from sources +`);let b=await eue(t),C;b!==null?(h.write(`Using ${b.packageManager} for bootstrap. Reason: ${b.reason} + +`),C=b.packageManager):(h.write(`No package manager configuration detected; defaulting to Yarn + +`),C="Yarn");let T=C==="Yarn"&&!b?.packageManagerField;await oe.mktempPromise(async L=>{let U=await M1({binFolder:L,ignoreCorepack:T}),te=new Map([["Yarn Classic",async()=>{let pe=a!==null?["workspace",a]:[],Ae=K.join(t,dr.manifest),ye=await oe.readFilePromise(Ae),ae=await Gc(process.execPath,[process.argv[1],"set","version","classic","--only-if-needed","--yarn-path"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(ae.code!==0)return ae.code;await oe.writeFilePromise(Ae,ye),await oe.appendFilePromise(K.join(t,".npmignore"),`/.yarn +`),h.write(` +`),delete U.NODE_ENV;let we=await Gc("yarn",["install"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(we.code!==0)return we.code;h.write(` +`);let Pe=await Gc("yarn",[...pe,"pack","--filename",ue.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return Pe.code!==0?Pe.code:0}],["Yarn",async()=>{let pe=a!==null?["workspace",a]:[];U.YARN_ENABLE_INLINE_BUILDS="1";let Ae=K.join(t,dr.lockfile);await oe.existsPromise(Ae)||await oe.writeFilePromise(Ae,"");let ye=await Gc("yarn",[...pe,"pack","--install-if-needed","--filename",ue.fromPortablePath(e)],{cwd:t,env:U,stdin:p,stdout:h,stderr:E});return ye.code!==0?ye.code:0}],["npm",async()=>{if(a!==null){let Ee=new fh.PassThrough,De=Vy(Ee);Ee.pipe(h,{end:!1});let ce=await Gc("npm",["--version"],{cwd:t,env:U,stdin:p,stdout:Ee,stderr:E,end:0});if(Ee.end(),ce.code!==0)return h.end(),E.end(),ce.code;let ne=(await De).toString().trim();if(!bf(ne,">=7.x")){let ee=eA(null,"npm"),Ie=In(ee,ne),ke=In(ee,">=7.x");throw new Error(`Workspaces aren't supported by ${qn(r,Ie)}; please upgrade to ${qn(r,ke)} (npm has been detected as the primary package manager for ${Ot(r,t,yt.PATH)})`)}}let pe=a!==null?["--workspace",a]:[];delete U.npm_config_user_agent,delete U.npm_config_production,delete U.NPM_CONFIG_PRODUCTION,delete U.NODE_ENV;let Ae=await Gc("npm",["install","--legacy-peer-deps"],{cwd:t,env:U,stdin:p,stdout:h,stderr:E,end:1});if(Ae.code!==0)return Ae.code;let ye=new fh.PassThrough,ae=Vy(ye);ye.pipe(h);let we=await Gc("npm",["pack","--silent",...pe],{cwd:t,env:U,stdin:p,stdout:ye,stderr:E});if(we.code!==0)return we.code;let Pe=(await ae).toString().trim().replace(/^.*\n/s,""),g=K.resolve(t,ue.toPortablePath(Pe));return await oe.renamePromise(g,e),0}]]).get(C);if(typeof te>"u")throw new Error("Assertion failed: Unsupported workflow");let le=await te();if(!(le===0||typeof le>"u"))throw oe.detachTemp(u),new zt(58,`Packing the package failed (exit code ${le}, logs can be found here: ${Ot(r,A,yt.PATH)})`)})})})}async function xat(t,e,{project:r}){let o=r.tryWorkspaceByLocator(t);if(o!==null)return IU(o,e);let a=r.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${jr(r.configuration,t)} not found in the project`);return await Jl.openPromise(async n=>{let u=r.configuration,A=r.configuration.getLinkers(),p={project:r,report:new Nt({stdout:new fh.PassThrough,configuration:u})},h=A.find(b=>b.supportsPackage(a,p));if(!h)throw new Error(`The package ${jr(r.configuration,a)} isn't supported by any of the available linkers`);let E=await h.findPackageLocation(a,p),I=new gn(E,{baseFs:n});return(await Mt.find(Bt.dot,{baseFs:I})).scripts.has(e)})}async function Vx(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{manifest:h,env:E,cwd:I}=await tue(t,{project:a,binFolder:p,cwd:o,lifecycleScript:e}),v=h.scripts.get(e);if(typeof v>"u")return 1;let b=async()=>await TE(v,r,{cwd:I,env:E,stdin:n,stdout:u,stderr:A});return await(await a.configuration.reduceHook(T=>T.wrapScriptExecution,b,a,t,e,{script:v,args:r,cwd:I,env:E,stdin:n,stdout:u,stderr:A}))()})}async function wU(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A}){return await oe.mktempPromise(async p=>{let{env:h,cwd:E}=await tue(t,{project:a,binFolder:p,cwd:o});return await TE(e,r,{cwd:E,env:h,stdin:n,stdout:u,stderr:A})})}async function bat(t,{binFolder:e,cwd:r,lifecycleScript:o}){let a=await M1({project:t.project,locator:t.anchoredLocator,binFolder:e,lifecycleScript:o});return await vU(e,await iue(t)),typeof r>"u"&&(r=K.dirname(await oe.realpathPromise(K.join(t.cwd,"package.json")))),{manifest:t.manifest,binFolder:e,env:a,cwd:r}}async function tue(t,{project:e,binFolder:r,cwd:o,lifecycleScript:a}){let n=e.tryWorkspaceByLocator(t);if(n!==null)return bat(n,{binFolder:r,cwd:o,lifecycleScript:a});let u=e.storedPackages.get(t.locatorHash);if(!u)throw new Error(`Package for ${jr(e.configuration,t)} not found in the project`);return await Jl.openPromise(async A=>{let p=e.configuration,h=e.configuration.getLinkers(),E={project:e,report:new Nt({stdout:new fh.PassThrough,configuration:p})},I=h.find(L=>L.supportsPackage(u,E));if(!I)throw new Error(`The package ${jr(e.configuration,u)} isn't supported by any of the available linkers`);let v=await M1({project:e,locator:t,binFolder:r,lifecycleScript:a});await vU(r,await Kx(t,{project:e}));let b=await I.findPackageLocation(u,E),C=new gn(b,{baseFs:A}),T=await Mt.find(Bt.dot,{baseFs:C});return typeof o>"u"&&(o=b),{manifest:T,binFolder:r,env:v,cwd:o}})}async function rue(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u}){return await Vx(t.anchoredLocator,e,r,{cwd:o,project:t.project,stdin:a,stdout:n,stderr:u})}function IU(t,e){return t.manifest.scripts.has(e)}async function nue(t,e,{cwd:r,report:o}){let{configuration:a}=t.project,n=null;await oe.mktempPromise(async u=>{let A=K.join(u,`${e}.log`),p=`# This file contains the result of Yarn calling the "${e}" lifecycle script inside a workspace ("${ue.fromPortablePath(t.cwd)}") +`,{stdout:h,stderr:E}=a.getSubprocessStreams(A,{report:o,prefix:jr(a,t.anchoredLocator),header:p});o.reportInfo(36,`Calling the "${e}" lifecycle script`);let I=await rue(t,e,[],{cwd:r,stdin:n,stdout:h,stderr:E});if(h.end(),E.end(),I!==0)throw oe.detachTemp(u),new zt(36,`${(0,Xce.default)(e)} script failed (exit code ${Ot(a,I,yt.NUMBER)}, logs can be found here: ${Ot(a,A,yt.PATH)}); run ${Ot(a,`yarn ${e}`,yt.CODE)} to investigate`)})}async function kat(t,e,r){IU(t,e)&&await nue(t,e,r)}function BU(t){let e=K.extname(t);if(e.match(/\.[cm]?[jt]sx?$/))return!0;if(e===".exe"||e===".bin")return!1;let r=Buffer.alloc(4),o;try{o=oe.openSync(t,"r")}catch{return!0}try{oe.readSync(o,r,0,r.length,0)}finally{oe.closeSync(o)}let a=r.readUint32BE();return!(a===3405691582||a===3489328638||a===2135247942||(a&4294901760)===1297743872)}async function Kx(t,{project:e}){let r=e.configuration,o=new Map,a=e.storedPackages.get(t.locatorHash);if(!a)throw new Error(`Package for ${jr(r,t)} not found in the project`);let n=new fh.Writable,u=r.getLinkers(),A={project:e,report:new Nt({configuration:r,stdout:n})},p=new Set([t.locatorHash]);for(let E of a.dependencies.values()){let I=e.storedResolutions.get(E.descriptorHash);if(!I)throw new Error(`Assertion failed: The resolution (${qn(r,E)}) should have been registered`);p.add(I)}let h=await Promise.all(Array.from(p,async E=>{let I=e.storedPackages.get(E);if(!I)throw new Error(`Assertion failed: The package (${E}) should have been registered`);if(I.bin.size===0)return sl.skip;let v=u.find(C=>C.supportsPackage(I,A));if(!v)return sl.skip;let b=null;try{b=await v.findPackageLocation(I,A)}catch(C){if(C.code==="LOCATOR_NOT_INSTALLED")return sl.skip;throw C}return{dependency:I,packageLocation:b}}));for(let E of h){if(E===sl.skip)continue;let{dependency:I,packageLocation:v}=E;for(let[b,C]of I.bin){let T=K.resolve(v,C);o.set(b,[I,ue.fromPortablePath(T),BU(T)])}}return o}async function iue(t){return await Kx(t.anchoredLocator,{project:t.project})}async function vU(t,e){await Promise.all(Array.from(e,([r,[,o,a]])=>a?Ah(t,r,process.execPath,[o]):Ah(t,r,o,[])))}async function sue(t,e,r,{cwd:o,project:a,stdin:n,stdout:u,stderr:A,nodeArgs:p=[],packageAccessibleBinaries:h}){h??=await Kx(t,{project:a});let E=h.get(e);if(!E)throw new Error(`Binary not found (${e}) for ${jr(a.configuration,t)}`);return await oe.mktempPromise(async I=>{let[,v]=E,b=await M1({project:a,locator:t,binFolder:I});await vU(b.BERRY_BIN_FOLDER,h);let C=BU(ue.toPortablePath(v))?Gc(process.execPath,[...p,v,...r],{cwd:o,env:b,stdin:n,stdout:u,stderr:A}):Gc(v,r,{cwd:o,env:b,stdin:n,stdout:u,stderr:A}),T;try{T=await C}finally{await oe.removePromise(b.BERRY_BIN_FOLDER)}return T.code})}async function Qat(t,e,r,{cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A}){return await sue(t.anchoredLocator,e,r,{project:t.project,cwd:o,stdin:a,stdout:n,stderr:u,packageAccessibleBinaries:A})}var Xce,Zce,fh,$ce,Dat,Pat,DU=Et(()=>{Pt();Pt();nA();b1();Xce=$e(EU()),Zce=$e(nd()),fh=Be("stream");AE();Yl();L1();N1();Px();ql();jl();kf();xo();$ce=(a=>(a.Yarn1="Yarn Classic",a.Yarn2="Yarn",a.Npm="npm",a.Pnpm="pnpm",a))($ce||{});Dat=2,Pat=(0,Zce.default)(Dat)});var LE=_((M4t,aue)=>{"use strict";var oue=new Map([["C","cwd"],["f","file"],["z","gzip"],["P","preservePaths"],["U","unlink"],["strip-components","strip"],["stripComponents","strip"],["keep-newer","newer"],["keepNewer","newer"],["keep-newer-files","newer"],["keepNewerFiles","newer"],["k","keep"],["keep-existing","keep"],["keepExisting","keep"],["m","noMtime"],["no-mtime","noMtime"],["p","preserveOwner"],["L","follow"],["h","follow"]]);aue.exports=t=>t?Object.keys(t).map(e=>[oue.has(e)?oue.get(e):e,t[e]]).reduce((e,r)=>(e[r[0]]=r[1],e),Object.create(null)):{}});var OE=_((O4t,due)=>{"use strict";var lue=typeof process=="object"&&process?process:{stdout:null,stderr:null},Fat=Be("events"),cue=Be("stream"),uue=Be("string_decoder").StringDecoder,Mf=Symbol("EOF"),Of=Symbol("maybeEmitEnd"),ph=Symbol("emittedEnd"),Jx=Symbol("emittingEnd"),O1=Symbol("emittedError"),zx=Symbol("closed"),Aue=Symbol("read"),Xx=Symbol("flush"),fue=Symbol("flushChunk"),ka=Symbol("encoding"),Uf=Symbol("decoder"),Zx=Symbol("flowing"),U1=Symbol("paused"),ME=Symbol("resume"),Fs=Symbol("bufferLength"),PU=Symbol("bufferPush"),SU=Symbol("bufferShift"),Fo=Symbol("objectMode"),To=Symbol("destroyed"),xU=Symbol("emitData"),pue=Symbol("emitEnd"),bU=Symbol("emitEnd2"),_f=Symbol("async"),_1=t=>Promise.resolve().then(t),hue=global._MP_NO_ITERATOR_SYMBOLS_!=="1",Tat=hue&&Symbol.asyncIterator||Symbol("asyncIterator not implemented"),Rat=hue&&Symbol.iterator||Symbol("iterator not implemented"),Nat=t=>t==="end"||t==="finish"||t==="prefinish",Lat=t=>t instanceof ArrayBuffer||typeof t=="object"&&t.constructor&&t.constructor.name==="ArrayBuffer"&&t.byteLength>=0,Mat=t=>!Buffer.isBuffer(t)&&ArrayBuffer.isView(t),$x=class{constructor(e,r,o){this.src=e,this.dest=r,this.opts=o,this.ondrain=()=>e[ME](),r.on("drain",this.ondrain)}unpipe(){this.dest.removeListener("drain",this.ondrain)}proxyErrors(){}end(){this.unpipe(),this.opts.end&&this.dest.end()}},kU=class extends $x{unpipe(){this.src.removeListener("error",this.proxyErrors),super.unpipe()}constructor(e,r,o){super(e,r,o),this.proxyErrors=a=>r.emit("error",a),e.on("error",this.proxyErrors)}};due.exports=class gue extends cue{constructor(e){super(),this[Zx]=!1,this[U1]=!1,this.pipes=[],this.buffer=[],this[Fo]=e&&e.objectMode||!1,this[Fo]?this[ka]=null:this[ka]=e&&e.encoding||null,this[ka]==="buffer"&&(this[ka]=null),this[_f]=e&&!!e.async||!1,this[Uf]=this[ka]?new uue(this[ka]):null,this[Mf]=!1,this[ph]=!1,this[Jx]=!1,this[zx]=!1,this[O1]=null,this.writable=!0,this.readable=!0,this[Fs]=0,this[To]=!1}get bufferLength(){return this[Fs]}get encoding(){return this[ka]}set encoding(e){if(this[Fo])throw new Error("cannot set encoding in objectMode");if(this[ka]&&e!==this[ka]&&(this[Uf]&&this[Uf].lastNeed||this[Fs]))throw new Error("cannot change encoding");this[ka]!==e&&(this[Uf]=e?new uue(e):null,this.buffer.length&&(this.buffer=this.buffer.map(r=>this[Uf].write(r)))),this[ka]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Fo]}set objectMode(e){this[Fo]=this[Fo]||!!e}get async(){return this[_f]}set async(e){this[_f]=this[_f]||!!e}write(e,r,o){if(this[Mf])throw new Error("write after end");if(this[To])return this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0;typeof r=="function"&&(o=r,r="utf8"),r||(r="utf8");let a=this[_f]?_1:n=>n();return!this[Fo]&&!Buffer.isBuffer(e)&&(Mat(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):Lat(e)?e=Buffer.from(e):typeof e!="string"&&(this.objectMode=!0)),this[Fo]?(this.flowing&&this[Fs]!==0&&this[Xx](!0),this.flowing?this.emit("data",e):this[PU](e),this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing):e.length?(typeof e=="string"&&!(r===this[ka]&&!this[Uf].lastNeed)&&(e=Buffer.from(e,r)),Buffer.isBuffer(e)&&this[ka]&&(e=this[Uf].write(e)),this.flowing&&this[Fs]!==0&&this[Xx](!0),this.flowing?this.emit("data",e):this[PU](e),this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing):(this[Fs]!==0&&this.emit("readable"),o&&a(o),this.flowing)}read(e){if(this[To])return null;if(this[Fs]===0||e===0||e>this[Fs])return this[Of](),null;this[Fo]&&(e=null),this.buffer.length>1&&!this[Fo]&&(this.encoding?this.buffer=[this.buffer.join("")]:this.buffer=[Buffer.concat(this.buffer,this[Fs])]);let r=this[Aue](e||null,this.buffer[0]);return this[Of](),r}[Aue](e,r){return e===r.length||e===null?this[SU]():(this.buffer[0]=r.slice(e),r=r.slice(0,e),this[Fs]-=e),this.emit("data",r),!this.buffer.length&&!this[Mf]&&this.emit("drain"),r}end(e,r,o){return typeof e=="function"&&(o=e,e=null),typeof r=="function"&&(o=r,r="utf8"),e&&this.write(e,r),o&&this.once("end",o),this[Mf]=!0,this.writable=!1,(this.flowing||!this[U1])&&this[Of](),this}[ME](){this[To]||(this[U1]=!1,this[Zx]=!0,this.emit("resume"),this.buffer.length?this[Xx]():this[Mf]?this[Of]():this.emit("drain"))}resume(){return this[ME]()}pause(){this[Zx]=!1,this[U1]=!0}get destroyed(){return this[To]}get flowing(){return this[Zx]}get paused(){return this[U1]}[PU](e){this[Fo]?this[Fs]+=1:this[Fs]+=e.length,this.buffer.push(e)}[SU](){return this.buffer.length&&(this[Fo]?this[Fs]-=1:this[Fs]-=this.buffer[0].length),this.buffer.shift()}[Xx](e){do;while(this[fue](this[SU]()));!e&&!this.buffer.length&&!this[Mf]&&this.emit("drain")}[fue](e){return e?(this.emit("data",e),this.flowing):!1}pipe(e,r){if(this[To])return;let o=this[ph];return r=r||{},e===lue.stdout||e===lue.stderr?r.end=!1:r.end=r.end!==!1,r.proxyErrors=!!r.proxyErrors,o?r.end&&e.end():(this.pipes.push(r.proxyErrors?new kU(this,e,r):new $x(this,e,r)),this[_f]?_1(()=>this[ME]()):this[ME]()),e}unpipe(e){let r=this.pipes.find(o=>o.dest===e);r&&(this.pipes.splice(this.pipes.indexOf(r),1),r.unpipe())}addListener(e,r){return this.on(e,r)}on(e,r){let o=super.on(e,r);return e==="data"&&!this.pipes.length&&!this.flowing?this[ME]():e==="readable"&&this[Fs]!==0?super.emit("readable"):Nat(e)&&this[ph]?(super.emit(e),this.removeAllListeners(e)):e==="error"&&this[O1]&&(this[_f]?_1(()=>r.call(this,this[O1])):r.call(this,this[O1])),o}get emittedEnd(){return this[ph]}[Of](){!this[Jx]&&!this[ph]&&!this[To]&&this.buffer.length===0&&this[Mf]&&(this[Jx]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[zx]&&this.emit("close"),this[Jx]=!1)}emit(e,r,...o){if(e!=="error"&&e!=="close"&&e!==To&&this[To])return;if(e==="data")return r?this[_f]?_1(()=>this[xU](r)):this[xU](r):!1;if(e==="end")return this[pue]();if(e==="close"){if(this[zx]=!0,!this[ph]&&!this[To])return;let n=super.emit("close");return this.removeAllListeners("close"),n}else if(e==="error"){this[O1]=r;let n=super.emit("error",r);return this[Of](),n}else if(e==="resume"){let n=super.emit("resume");return this[Of](),n}else if(e==="finish"||e==="prefinish"){let n=super.emit(e);return this.removeAllListeners(e),n}let a=super.emit(e,r,...o);return this[Of](),a}[xU](e){for(let o of this.pipes)o.dest.write(e)===!1&&this.pause();let r=super.emit("data",e);return this[Of](),r}[pue](){this[ph]||(this[ph]=!0,this.readable=!1,this[_f]?_1(()=>this[bU]()):this[bU]())}[bU](){if(this[Uf]){let r=this[Uf].end();if(r){for(let o of this.pipes)o.dest.write(r);super.emit("data",r)}}for(let r of this.pipes)r.end();let e=super.emit("end");return this.removeAllListeners("end"),e}collect(){let e=[];this[Fo]||(e.dataLength=0);let r=this.promise();return this.on("data",o=>{e.push(o),this[Fo]||(e.dataLength+=o.length)}),r.then(()=>e)}concat(){return this[Fo]?Promise.reject(new Error("cannot concat in objectMode")):this.collect().then(e=>this[Fo]?Promise.reject(new Error("cannot concat in objectMode")):this[ka]?e.join(""):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,r)=>{this.on(To,()=>r(new Error("stream destroyed"))),this.on("error",o=>r(o)),this.on("end",()=>e())})}[Tat](){return{next:()=>{let r=this.read();if(r!==null)return Promise.resolve({done:!1,value:r});if(this[Mf])return Promise.resolve({done:!0});let o=null,a=null,n=h=>{this.removeListener("data",u),this.removeListener("end",A),a(h)},u=h=>{this.removeListener("error",n),this.removeListener("end",A),this.pause(),o({value:h,done:!!this[Mf]})},A=()=>{this.removeListener("error",n),this.removeListener("data",u),o({done:!0})},p=()=>n(new Error("stream destroyed"));return new Promise((h,E)=>{a=E,o=h,this.once(To,p),this.once("error",n),this.once("end",A),this.once("data",u)})}}}[Rat](){return{next:()=>{let r=this.read();return{value:r,done:r===null}}}}destroy(e){return this[To]?(e?this.emit("error",e):this.emit(To),this):(this[To]=!0,this.buffer.length=0,this[Fs]=0,typeof this.close=="function"&&!this[zx]&&this.close(),e?this.emit("error",e):this.emit(To),this)}static isStream(e){return!!e&&(e instanceof gue||e instanceof cue||e instanceof Fat&&(typeof e.pipe=="function"||typeof e.write=="function"&&typeof e.end=="function"))}}});var yue=_((U4t,mue)=>{var Oat=Be("zlib").constants||{ZLIB_VERNUM:4736};mue.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},Oat))});var WU=_(cl=>{"use strict";var NU=Be("assert"),hh=Be("buffer").Buffer,wue=Be("zlib"),Qd=cl.constants=yue(),Uat=OE(),Eue=hh.concat,Fd=Symbol("_superWrite"),_E=class extends Error{constructor(e){super("zlib: "+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code="ZLIB_ERROR"),this.message="zlib: "+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return"ZlibError"}},_at=Symbol("opts"),H1=Symbol("flushFlag"),Cue=Symbol("finishFlushFlag"),YU=Symbol("fullFlushFlag"),ti=Symbol("handle"),eb=Symbol("onError"),UE=Symbol("sawError"),QU=Symbol("level"),FU=Symbol("strategy"),TU=Symbol("ended"),_4t=Symbol("_defaultFullFlush"),tb=class extends Uat{constructor(e,r){if(!e||typeof e!="object")throw new TypeError("invalid options for ZlibBase constructor");super(e),this[UE]=!1,this[TU]=!1,this[_at]=e,this[H1]=e.flush,this[Cue]=e.finishFlush;try{this[ti]=new wue[r](e)}catch(o){throw new _E(o)}this[eb]=o=>{this[UE]||(this[UE]=!0,this.close(),this.emit("error",o))},this[ti].on("error",o=>this[eb](new _E(o))),this.once("end",()=>this.close)}close(){this[ti]&&(this[ti].close(),this[ti]=null,this.emit("close"))}reset(){if(!this[UE])return NU(this[ti],"zlib binding closed"),this[ti].reset()}flush(e){this.ended||(typeof e!="number"&&(e=this[YU]),this.write(Object.assign(hh.alloc(0),{[H1]:e})))}end(e,r,o){return e&&this.write(e,r),this.flush(this[Cue]),this[TU]=!0,super.end(null,null,o)}get ended(){return this[TU]}write(e,r,o){if(typeof r=="function"&&(o=r,r="utf8"),typeof e=="string"&&(e=hh.from(e,r)),this[UE])return;NU(this[ti],"zlib binding closed");let a=this[ti]._handle,n=a.close;a.close=()=>{};let u=this[ti].close;this[ti].close=()=>{},hh.concat=h=>h;let A;try{let h=typeof e[H1]=="number"?e[H1]:this[H1];A=this[ti]._processChunk(e,h),hh.concat=Eue}catch(h){hh.concat=Eue,this[eb](new _E(h))}finally{this[ti]&&(this[ti]._handle=a,a.close=n,this[ti].close=u,this[ti].removeAllListeners("error"))}this[ti]&&this[ti].on("error",h=>this[eb](new _E(h)));let p;if(A)if(Array.isArray(A)&&A.length>0){p=this[Fd](hh.from(A[0]));for(let h=1;h{this.flush(a),n()};try{this[ti].params(e,r)}finally{this[ti].flush=o}this[ti]&&(this[QU]=e,this[FU]=r)}}}},LU=class extends Hf{constructor(e){super(e,"Deflate")}},MU=class extends Hf{constructor(e){super(e,"Inflate")}},RU=Symbol("_portable"),OU=class extends Hf{constructor(e){super(e,"Gzip"),this[RU]=e&&!!e.portable}[Fd](e){return this[RU]?(this[RU]=!1,e[9]=255,super[Fd](e)):super[Fd](e)}},UU=class extends Hf{constructor(e){super(e,"Gunzip")}},_U=class extends Hf{constructor(e){super(e,"DeflateRaw")}},HU=class extends Hf{constructor(e){super(e,"InflateRaw")}},jU=class extends Hf{constructor(e){super(e,"Unzip")}},rb=class extends tb{constructor(e,r){e=e||{},e.flush=e.flush||Qd.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||Qd.BROTLI_OPERATION_FINISH,super(e,r),this[YU]=Qd.BROTLI_OPERATION_FLUSH}},qU=class extends rb{constructor(e){super(e,"BrotliCompress")}},GU=class extends rb{constructor(e){super(e,"BrotliDecompress")}};cl.Deflate=LU;cl.Inflate=MU;cl.Gzip=OU;cl.Gunzip=UU;cl.DeflateRaw=_U;cl.InflateRaw=HU;cl.Unzip=jU;typeof wue.BrotliCompress=="function"?(cl.BrotliCompress=qU,cl.BrotliDecompress=GU):cl.BrotliCompress=cl.BrotliDecompress=class{constructor(){throw new Error("Brotli is not supported in this version of Node.js")}}});var HE=_((q4t,Iue)=>{var Hat=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;Iue.exports=Hat!=="win32"?t=>t:t=>t&&t.replace(/\\/g,"/")});var nb=_((Y4t,Bue)=>{"use strict";var jat=OE(),VU=HE(),KU=Symbol("slurp");Bue.exports=class extends jat{constructor(e,r,o){switch(super(),this.pause(),this.extended=r,this.globalExtended=o,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case"File":case"OldFile":case"Link":case"SymbolicLink":case"CharacterDevice":case"BlockDevice":case"Directory":case"FIFO":case"ContiguousFile":case"GNUDumpDir":break;case"NextFileHasLongLinkpath":case"NextFileHasLongPath":case"OldGnuLongPath":case"GlobalExtendedHeader":case"ExtendedHeader":case"OldExtendedHeader":this.meta=!0;break;default:this.ignore=!0}this.path=VU(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=VU(e.linkpath),this.uname=e.uname,this.gname=e.gname,r&&this[KU](r),o&&this[KU](o,!0)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");let o=this.remain,a=this.blockRemain;return this.remain=Math.max(0,o-r),this.blockRemain=Math.max(0,a-r),this.ignore?!0:o>=r?super.write(e):super.write(e.slice(0,o))}[KU](e,r){for(let o in e)e[o]!==null&&e[o]!==void 0&&!(r&&o==="path")&&(this[o]=o==="path"||o==="linkpath"?VU(e[o]):e[o])}}});var JU=_(ib=>{"use strict";ib.name=new Map([["0","File"],["","OldFile"],["1","Link"],["2","SymbolicLink"],["3","CharacterDevice"],["4","BlockDevice"],["5","Directory"],["6","FIFO"],["7","ContiguousFile"],["g","GlobalExtendedHeader"],["x","ExtendedHeader"],["A","SolarisACL"],["D","GNUDumpDir"],["I","Inode"],["K","NextFileHasLongLinkpath"],["L","NextFileHasLongPath"],["M","ContinuationFile"],["N","OldGnuLongPath"],["S","SparseFile"],["V","TapeVolumeHeader"],["X","OldExtendedHeader"]]);ib.code=new Map(Array.from(ib.name).map(t=>[t[1],t[0]]))});var Sue=_((V4t,Pue)=>{"use strict";var qat=(t,e)=>{if(Number.isSafeInteger(t))t<0?Yat(t,e):Gat(t,e);else throw Error("cannot encode number outside of javascript safe integer range");return e},Gat=(t,e)=>{e[0]=128;for(var r=e.length;r>1;r--)e[r-1]=t&255,t=Math.floor(t/256)},Yat=(t,e)=>{e[0]=255;var r=!1;t=t*-1;for(var o=e.length;o>1;o--){var a=t&255;t=Math.floor(t/256),r?e[o-1]=vue(a):a===0?e[o-1]=0:(r=!0,e[o-1]=Due(a))}},Wat=t=>{let e=t[0],r=e===128?Kat(t.slice(1,t.length)):e===255?Vat(t):null;if(r===null)throw Error("invalid base256 encoding");if(!Number.isSafeInteger(r))throw Error("parsed number outside of javascript safe integer range");return r},Vat=t=>{for(var e=t.length,r=0,o=!1,a=e-1;a>-1;a--){var n=t[a],u;o?u=vue(n):n===0?u=n:(o=!0,u=Due(n)),u!==0&&(r-=u*Math.pow(256,e-a-1))}return r},Kat=t=>{for(var e=t.length,r=0,o=e-1;o>-1;o--){var a=t[o];a!==0&&(r+=a*Math.pow(256,e-o-1))}return r},vue=t=>(255^t)&255,Due=t=>(255^t)+1&255;Pue.exports={encode:qat,parse:Wat}});var qE=_((K4t,bue)=>{"use strict";var zU=JU(),jE=Be("path").posix,xue=Sue(),XU=Symbol("slurp"),ul=Symbol("type"),e3=class{constructor(e,r,o,a){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[ul]="0",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,r||0,o,a):e&&this.set(e)}decode(e,r,o,a){if(r||(r=0),!e||!(e.length>=r+512))throw new Error("need 512 bytes for header");if(this.path=Td(e,r,100),this.mode=gh(e,r+100,8),this.uid=gh(e,r+108,8),this.gid=gh(e,r+116,8),this.size=gh(e,r+124,12),this.mtime=ZU(e,r+136,12),this.cksum=gh(e,r+148,12),this[XU](o),this[XU](a,!0),this[ul]=Td(e,r+156,1),this[ul]===""&&(this[ul]="0"),this[ul]==="0"&&this.path.substr(-1)==="/"&&(this[ul]="5"),this[ul]==="5"&&(this.size=0),this.linkpath=Td(e,r+157,100),e.slice(r+257,r+265).toString()==="ustar\x0000")if(this.uname=Td(e,r+265,32),this.gname=Td(e,r+297,32),this.devmaj=gh(e,r+329,8),this.devmin=gh(e,r+337,8),e[r+475]!==0){let u=Td(e,r+345,155);this.path=u+"/"+this.path}else{let u=Td(e,r+345,130);u&&(this.path=u+"/"+this.path),this.atime=ZU(e,r+476,12),this.ctime=ZU(e,r+488,12)}let n=8*32;for(let u=r;u=r+512))throw new Error("need 512 bytes for header");let o=this.ctime||this.atime?130:155,a=Jat(this.path||"",o),n=a[0],u=a[1];this.needPax=a[2],this.needPax=Rd(e,r,100,n)||this.needPax,this.needPax=dh(e,r+100,8,this.mode)||this.needPax,this.needPax=dh(e,r+108,8,this.uid)||this.needPax,this.needPax=dh(e,r+116,8,this.gid)||this.needPax,this.needPax=dh(e,r+124,12,this.size)||this.needPax,this.needPax=$U(e,r+136,12,this.mtime)||this.needPax,e[r+156]=this[ul].charCodeAt(0),this.needPax=Rd(e,r+157,100,this.linkpath)||this.needPax,e.write("ustar\x0000",r+257,8),this.needPax=Rd(e,r+265,32,this.uname)||this.needPax,this.needPax=Rd(e,r+297,32,this.gname)||this.needPax,this.needPax=dh(e,r+329,8,this.devmaj)||this.needPax,this.needPax=dh(e,r+337,8,this.devmin)||this.needPax,this.needPax=Rd(e,r+345,o,u)||this.needPax,e[r+475]!==0?this.needPax=Rd(e,r+345,155,u)||this.needPax:(this.needPax=Rd(e,r+345,130,u)||this.needPax,this.needPax=$U(e,r+476,12,this.atime)||this.needPax,this.needPax=$U(e,r+488,12,this.ctime)||this.needPax);let A=8*32;for(let p=r;p{let o=t,a="",n,u=jE.parse(t).root||".";if(Buffer.byteLength(o)<100)n=[o,a,!1];else{a=jE.dirname(o),o=jE.basename(o);do Buffer.byteLength(o)<=100&&Buffer.byteLength(a)<=e?n=[o,a,!1]:Buffer.byteLength(o)>100&&Buffer.byteLength(a)<=e?n=[o.substr(0,100-1),a,!0]:(o=jE.join(jE.basename(a),o),a=jE.dirname(a));while(a!==u&&!n);n||(n=[t.substr(0,100-1),"",!0])}return n},Td=(t,e,r)=>t.slice(e,e+r).toString("utf8").replace(/\0.*/,""),ZU=(t,e,r)=>zat(gh(t,e,r)),zat=t=>t===null?null:new Date(t*1e3),gh=(t,e,r)=>t[e]&128?xue.parse(t.slice(e,e+r)):Zat(t,e,r),Xat=t=>isNaN(t)?null:t,Zat=(t,e,r)=>Xat(parseInt(t.slice(e,e+r).toString("utf8").replace(/\0.*$/,"").trim(),8)),$at={12:8589934591,8:2097151},dh=(t,e,r,o)=>o===null?!1:o>$at[r]||o<0?(xue.encode(o,t.slice(e,e+r)),!0):(elt(t,e,r,o),!1),elt=(t,e,r,o)=>t.write(tlt(o,r),e,r,"ascii"),tlt=(t,e)=>rlt(Math.floor(t).toString(8),e),rlt=(t,e)=>(t.length===e-1?t:new Array(e-t.length-1).join("0")+t+" ")+"\0",$U=(t,e,r,o)=>o===null?!1:dh(t,e,r,o.getTime()/1e3),nlt=new Array(156).join("\0"),Rd=(t,e,r,o)=>o===null?!1:(t.write(o+nlt,e,r,"utf8"),o.length!==Buffer.byteLength(o)||o.length>r);bue.exports=e3});var sb=_((J4t,kue)=>{"use strict";var ilt=qE(),slt=Be("path"),j1=class{constructor(e,r){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=r||!1}encode(){let e=this.encodeBody();if(e==="")return null;let r=Buffer.byteLength(e),o=512*Math.ceil(1+r/512),a=Buffer.allocUnsafe(o);for(let n=0;n<512;n++)a[n]=0;new ilt({path:("PaxHeader/"+slt.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:r,mtime:this.mtime||null,type:this.global?"GlobalExtendedHeader":"ExtendedHeader",linkpath:"",uname:this.uname||"",gname:this.gname||"",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(a),a.write(e,512,r,"utf8");for(let n=r+512;n=Math.pow(10,n)&&(n+=1),n+a+o}};j1.parse=(t,e,r)=>new j1(olt(alt(t),e),r);var olt=(t,e)=>e?Object.keys(t).reduce((r,o)=>(r[o]=t[o],r),e):t,alt=t=>t.replace(/\n$/,"").split(` +`).reduce(llt,Object.create(null)),llt=(t,e)=>{let r=parseInt(e,10);if(r!==Buffer.byteLength(e)+1)return t;e=e.substr((r+" ").length);let o=e.split("="),a=o.shift().replace(/^SCHILY\.(dev|ino|nlink)/,"$1");if(!a)return t;let n=o.join("=");return t[a]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(a)?new Date(n*1e3):/^[0-9]+$/.test(n)?+n:n,t};kue.exports=j1});var GE=_((z4t,Que)=>{Que.exports=t=>{let e=t.length-1,r=-1;for(;e>-1&&t.charAt(e)==="/";)r=e,e--;return r===-1?t:t.slice(0,r)}});var ob=_((X4t,Fue)=>{"use strict";Fue.exports=t=>class extends t{warn(e,r,o={}){this.file&&(o.file=this.file),this.cwd&&(o.cwd=this.cwd),o.code=r instanceof Error&&r.code||e,o.tarCode=e,!this.strict&&o.recoverable!==!1?(r instanceof Error&&(o=Object.assign(r,o),r=r.message),this.emit("warn",o.tarCode,r,o)):r instanceof Error?this.emit("error",Object.assign(r,o)):this.emit("error",Object.assign(new Error(`${e}: ${r}`),o))}}});var r3=_(($4t,Tue)=>{"use strict";var ab=["|","<",">","?",":"],t3=ab.map(t=>String.fromCharCode(61440+t.charCodeAt(0))),clt=new Map(ab.map((t,e)=>[t,t3[e]])),ult=new Map(t3.map((t,e)=>[t,ab[e]]));Tue.exports={encode:t=>ab.reduce((e,r)=>e.split(r).join(clt.get(r)),t),decode:t=>t3.reduce((e,r)=>e.split(r).join(ult.get(r)),t)}});var n3=_((eUt,Nue)=>{var{isAbsolute:Alt,parse:Rue}=Be("path").win32;Nue.exports=t=>{let e="",r=Rue(t);for(;Alt(t)||r.root;){let o=t.charAt(0)==="/"&&t.slice(0,4)!=="//?/"?"/":r.root;t=t.substr(o.length),e+=o,r=Rue(t)}return[e,t]}});var Mue=_((tUt,Lue)=>{"use strict";Lue.exports=(t,e,r)=>(t&=4095,r&&(t=(t|384)&-19),e&&(t&256&&(t|=64),t&32&&(t|=8),t&4&&(t|=1)),t)});var p3=_((iUt,Xue)=>{"use strict";var Gue=OE(),Yue=sb(),Wue=qE(),oA=Be("fs"),Oue=Be("path"),sA=HE(),flt=GE(),Vue=(t,e)=>e?(t=sA(t).replace(/^\.(\/|$)/,""),flt(e)+"/"+t):sA(t),plt=16*1024*1024,Uue=Symbol("process"),_ue=Symbol("file"),Hue=Symbol("directory"),s3=Symbol("symlink"),jue=Symbol("hardlink"),q1=Symbol("header"),lb=Symbol("read"),o3=Symbol("lstat"),ub=Symbol("onlstat"),a3=Symbol("onread"),l3=Symbol("onreadlink"),c3=Symbol("openfile"),u3=Symbol("onopenfile"),mh=Symbol("close"),Ab=Symbol("mode"),A3=Symbol("awaitDrain"),i3=Symbol("ondrain"),aA=Symbol("prefix"),que=Symbol("hadError"),Kue=ob(),hlt=r3(),Jue=n3(),zue=Mue(),fb=Kue(class extends Gue{constructor(e,r){if(r=r||{},super(r),typeof e!="string")throw new TypeError("path is required");this.path=sA(e),this.portable=!!r.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||"",this.maxReadSize=r.maxReadSize||plt,this.linkCache=r.linkCache||new Map,this.statCache=r.statCache||new Map,this.preservePaths=!!r.preservePaths,this.cwd=sA(r.cwd||process.cwd()),this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.mtime=r.mtime||null,this.prefix=r.prefix?sA(r.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=Jue(this.path);a&&(this.path=n,o=a)}this.win32=!!r.win32||process.platform==="win32",this.win32&&(this.path=hlt.decode(this.path.replace(/\\/g,"/")),e=e.replace(/\\/g,"/")),this.absolute=sA(r.absolute||Oue.resolve(this.cwd,e)),this.path===""&&(this.path="./"),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.statCache.has(this.absolute)?this[ub](this.statCache.get(this.absolute)):this[o3]()}emit(e,...r){return e==="error"&&(this[que]=!0),super.emit(e,...r)}[o3](){oA.lstat(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[ub](r)})}[ub](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=dlt(e),this.emit("stat",e),this[Uue]()}[Uue](){switch(this.type){case"File":return this[_ue]();case"Directory":return this[Hue]();case"SymbolicLink":return this[s3]();default:return this.end()}}[Ab](e){return zue(e,this.type==="Directory",this.portable)}[aA](e){return Vue(e,this.prefix)}[q1](){this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.header=new Wue({path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,mode:this[Ab](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:"",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new Yue({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[Hue](){this.path.substr(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[q1](),this.end()}[s3](){oA.readlink(this.absolute,(e,r)=>{if(e)return this.emit("error",e);this[l3](r)})}[l3](e){this.linkpath=sA(e),this[q1](),this.end()}[jue](e){this.type="Link",this.linkpath=sA(Oue.relative(this.cwd,e)),this.stat.size=0,this[q1](),this.end()}[_ue](){if(this.stat.nlink>1){let e=this.stat.dev+":"+this.stat.ino;if(this.linkCache.has(e)){let r=this.linkCache.get(e);if(r.indexOf(this.cwd)===0)return this[jue](r)}this.linkCache.set(e,this.absolute)}if(this[q1](),this.stat.size===0)return this.end();this[c3]()}[c3](){oA.open(this.absolute,"r",(e,r)=>{if(e)return this.emit("error",e);this[u3](r)})}[u3](e){if(this.fd=e,this[que])return this[mh]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let r=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(r),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[lb]()}[lb](){let{fd:e,buf:r,offset:o,length:a,pos:n}=this;oA.read(e,r,o,a,n,(u,A)=>{if(u)return this[mh](()=>this.emit("error",u));this[a3](A)})}[mh](e){oA.close(this.fd,e)}[a3](e){if(e<=0&&this.remain>0){let a=new Error("encountered unexpected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[mh](()=>this.emit("error",a))}if(e>this.remain){let a=new Error("did not encounter expected EOF");return a.path=this.absolute,a.syscall="read",a.code="EOF",this[mh](()=>this.emit("error",a))}if(e===this.remain)for(let a=e;athis[i3]())}[A3](e){this.once("drain",e)}write(e){if(this.blockRemaine?this.emit("error",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[lb]()}}),f3=class extends fb{[o3](){this[ub](oA.lstatSync(this.absolute))}[s3](){this[l3](oA.readlinkSync(this.absolute))}[c3](){this[u3](oA.openSync(this.absolute,"r"))}[lb](){let e=!0;try{let{fd:r,buf:o,offset:a,length:n,pos:u}=this,A=oA.readSync(r,o,a,n,u);this[a3](A),e=!1}finally{if(e)try{this[mh](()=>{})}catch{}}}[A3](e){e()}[mh](e){oA.closeSync(this.fd),e()}},glt=Kue(class extends Gue{constructor(e,r){r=r||{},super(r),this.preservePaths=!!r.preservePaths,this.portable=!!r.portable,this.strict=!!r.strict,this.noPax=!!r.noPax,this.noMtime=!!r.noMtime,this.readEntry=e,this.type=e.type,this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.prefix=r.prefix||null,this.path=sA(e.path),this.mode=this[Ab](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:r.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=sA(e.linkpath),typeof r.onwarn=="function"&&this.on("warn",r.onwarn);let o=!1;if(!this.preservePaths){let[a,n]=Jue(this.path);a&&(this.path=n,o=a)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new Wue({path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),o&&this.warn("TAR_ENTRY_INFO",`stripping ${o} from absolute path`,{entry:this,path:o+this.path}),this.header.encode()&&!this.noPax&&super.write(new Yue({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[aA](this.path),linkpath:this.type==="Link"?this[aA](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[aA](e){return Vue(e,this.prefix)}[Ab](e){return zue(e,this.type==="Directory",this.portable)}write(e){let r=e.length;if(r>this.blockRemain)throw new Error("writing more to entry than is appropriate");return this.blockRemain-=r,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});fb.Sync=f3;fb.Tar=glt;var dlt=t=>t.isFile()?"File":t.isDirectory()?"Directory":t.isSymbolicLink()?"SymbolicLink":"Unsupported";Xue.exports=fb});var wb=_((oUt,iAe)=>{"use strict";var Eb=class{constructor(e,r){this.path=e||"./",this.absolute=r,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},mlt=OE(),ylt=WU(),Elt=nb(),I3=p3(),Clt=I3.Sync,wlt=I3.Tar,Ilt=BP(),Zue=Buffer.alloc(1024),gb=Symbol("onStat"),pb=Symbol("ended"),lA=Symbol("queue"),YE=Symbol("current"),Nd=Symbol("process"),hb=Symbol("processing"),$ue=Symbol("processJob"),cA=Symbol("jobs"),h3=Symbol("jobDone"),db=Symbol("addFSEntry"),eAe=Symbol("addTarEntry"),y3=Symbol("stat"),E3=Symbol("readdir"),mb=Symbol("onreaddir"),yb=Symbol("pipe"),tAe=Symbol("entry"),g3=Symbol("entryOpt"),C3=Symbol("writeEntryClass"),nAe=Symbol("write"),d3=Symbol("ondrain"),Cb=Be("fs"),rAe=Be("path"),Blt=ob(),m3=HE(),B3=Blt(class extends mlt{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||"",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=m3(e.prefix||""),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[C3]=I3,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!="object"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new ylt.Gzip(e.gzip),this.zip.on("data",r=>super.write(r)),this.zip.on("end",r=>super.end()),this.zip.on("drain",r=>this[d3]()),this.on("resume",r=>this.zip.resume())):this.on("drain",this[d3]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter=="function"?e.filter:r=>!0,this[lA]=new Ilt,this[cA]=0,this.jobs=+e.jobs||4,this[hb]=!1,this[pb]=!1}[nAe](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[pb]=!0,this[Nd](),this}write(e){if(this[pb])throw new Error("write after end");return e instanceof Elt?this[eAe](e):this[db](e),this.flowing}[eAe](e){let r=m3(rAe.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let o=new Eb(e.path,r,!1);o.entry=new wlt(e,this[g3](o)),o.entry.on("end",a=>this[h3](o)),this[cA]+=1,this[lA].push(o)}this[Nd]()}[db](e){let r=m3(rAe.resolve(this.cwd,e));this[lA].push(new Eb(e,r)),this[Nd]()}[y3](e){e.pending=!0,this[cA]+=1;let r=this.follow?"stat":"lstat";Cb[r](e.absolute,(o,a)=>{e.pending=!1,this[cA]-=1,o?this.emit("error",o):this[gb](e,a)})}[gb](e,r){this.statCache.set(e.absolute,r),e.stat=r,this.filter(e.path,r)||(e.ignore=!0),this[Nd]()}[E3](e){e.pending=!0,this[cA]+=1,Cb.readdir(e.absolute,(r,o)=>{if(e.pending=!1,this[cA]-=1,r)return this.emit("error",r);this[mb](e,o)})}[mb](e,r){this.readdirCache.set(e.absolute,r),e.readdir=r,this[Nd]()}[Nd](){if(!this[hb]){this[hb]=!0;for(let e=this[lA].head;e!==null&&this[cA]this.warn(r,o,a),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[tAe](e){this[cA]+=1;try{return new this[C3](e.path,this[g3](e)).on("end",()=>this[h3](e)).on("error",r=>this.emit("error",r))}catch(r){this.emit("error",r)}}[d3](){this[YE]&&this[YE].entry&&this[YE].entry.resume()}[yb](e){e.piped=!0,e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[db](u+a)});let r=e.entry,o=this.zip;o?r.on("data",a=>{o.write(a)||r.pause()}):r.on("data",a=>{super.write(a)||r.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),w3=class extends B3{constructor(e){super(e),this[C3]=Clt}pause(){}resume(){}[y3](e){let r=this.follow?"statSync":"lstatSync";this[gb](e,Cb[r](e.absolute))}[E3](e,r){this[mb](e,Cb.readdirSync(e.absolute))}[yb](e){let r=e.entry,o=this.zip;e.readdir&&e.readdir.forEach(a=>{let n=e.path,u=n==="./"?"":n.replace(/\/*$/,"/");this[db](u+a)}),o?r.on("data",a=>{o.write(a)}):r.on("data",a=>{super[nAe](a)})}};B3.Sync=w3;iAe.exports=B3});var $E=_(Y1=>{"use strict";var vlt=OE(),Dlt=Be("events").EventEmitter,Qa=Be("fs"),P3=Qa.writev;if(!P3){let t=process.binding("fs"),e=t.FSReqWrap||t.FSReqCallback;P3=(r,o,a,n)=>{let u=(p,h)=>n(p,h,o),A=new e;A.oncomplete=u,t.writeBuffers(r,o,a,A)}}var XE=Symbol("_autoClose"),Yc=Symbol("_close"),G1=Symbol("_ended"),Gn=Symbol("_fd"),sAe=Symbol("_finished"),Eh=Symbol("_flags"),v3=Symbol("_flush"),S3=Symbol("_handleChunk"),x3=Symbol("_makeBuf"),Pb=Symbol("_mode"),Ib=Symbol("_needDrain"),JE=Symbol("_onerror"),ZE=Symbol("_onopen"),D3=Symbol("_onread"),VE=Symbol("_onwrite"),Ch=Symbol("_open"),jf=Symbol("_path"),Ld=Symbol("_pos"),uA=Symbol("_queue"),KE=Symbol("_read"),oAe=Symbol("_readSize"),yh=Symbol("_reading"),Bb=Symbol("_remain"),aAe=Symbol("_size"),vb=Symbol("_write"),WE=Symbol("_writing"),Db=Symbol("_defaultFlag"),zE=Symbol("_errored"),Sb=class extends vlt{constructor(e,r){if(r=r||{},super(r),this.readable=!0,this.writable=!1,typeof e!="string")throw new TypeError("path must be a string");this[zE]=!1,this[Gn]=typeof r.fd=="number"?r.fd:null,this[jf]=e,this[oAe]=r.readSize||16*1024*1024,this[yh]=!1,this[aAe]=typeof r.size=="number"?r.size:1/0,this[Bb]=this[aAe],this[XE]=typeof r.autoClose=="boolean"?r.autoClose:!0,typeof this[Gn]=="number"?this[KE]():this[Ch]()}get fd(){return this[Gn]}get path(){return this[jf]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[Ch](){Qa.open(this[jf],"r",(e,r)=>this[ZE](e,r))}[ZE](e,r){e?this[JE](e):(this[Gn]=r,this.emit("open",r),this[KE]())}[x3](){return Buffer.allocUnsafe(Math.min(this[oAe],this[Bb]))}[KE](){if(!this[yh]){this[yh]=!0;let e=this[x3]();if(e.length===0)return process.nextTick(()=>this[D3](null,0,e));Qa.read(this[Gn],e,0,e.length,null,(r,o,a)=>this[D3](r,o,a))}}[D3](e,r,o){this[yh]=!1,e?this[JE](e):this[S3](r,o)&&this[KE]()}[Yc](){if(this[XE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}[JE](e){this[yh]=!0,this[Yc](),this.emit("error",e)}[S3](e,r){let o=!1;return this[Bb]-=e,e>0&&(o=super.write(ethis[ZE](e,r))}[ZE](e,r){this[Db]&&this[Eh]==="r+"&&e&&e.code==="ENOENT"?(this[Eh]="w",this[Ch]()):e?this[JE](e):(this[Gn]=r,this.emit("open",r),this[v3]())}end(e,r){return e&&this.write(e,r),this[G1]=!0,!this[WE]&&!this[uA].length&&typeof this[Gn]=="number"&&this[VE](null,0),this}write(e,r){return typeof e=="string"&&(e=Buffer.from(e,r)),this[G1]?(this.emit("error",new Error("write() after end()")),!1):this[Gn]===null||this[WE]||this[uA].length?(this[uA].push(e),this[Ib]=!0,!1):(this[WE]=!0,this[vb](e),!0)}[vb](e){Qa.write(this[Gn],e,0,e.length,this[Ld],(r,o)=>this[VE](r,o))}[VE](e,r){e?this[JE](e):(this[Ld]!==null&&(this[Ld]+=r),this[uA].length?this[v3]():(this[WE]=!1,this[G1]&&!this[sAe]?(this[sAe]=!0,this[Yc](),this.emit("finish")):this[Ib]&&(this[Ib]=!1,this.emit("drain"))))}[v3](){if(this[uA].length===0)this[G1]&&this[VE](null,0);else if(this[uA].length===1)this[vb](this[uA].pop());else{let e=this[uA];this[uA]=[],P3(this[Gn],e,this[Ld],(r,o)=>this[VE](r,o))}}[Yc](){if(this[XE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.close(e,r=>r?this.emit("error",r):this.emit("close"))}}},k3=class extends xb{[Ch](){let e;if(this[Db]&&this[Eh]==="r+")try{e=Qa.openSync(this[jf],this[Eh],this[Pb])}catch(r){if(r.code==="ENOENT")return this[Eh]="w",this[Ch]();throw r}else e=Qa.openSync(this[jf],this[Eh],this[Pb]);this[ZE](null,e)}[Yc](){if(this[XE]&&typeof this[Gn]=="number"){let e=this[Gn];this[Gn]=null,Qa.closeSync(e),this.emit("close")}}[vb](e){let r=!0;try{this[VE](null,Qa.writeSync(this[Gn],e,0,e.length,this[Ld])),r=!1}finally{if(r)try{this[Yc]()}catch{}}}};Y1.ReadStream=Sb;Y1.ReadStreamSync=b3;Y1.WriteStream=xb;Y1.WriteStreamSync=k3});var Nb=_((cUt,hAe)=>{"use strict";var Plt=ob(),Slt=qE(),xlt=Be("events"),blt=BP(),klt=1024*1024,Qlt=nb(),lAe=sb(),Flt=WU(),Q3=Buffer.from([31,139]),Xl=Symbol("state"),Md=Symbol("writeEntry"),qf=Symbol("readEntry"),F3=Symbol("nextEntry"),cAe=Symbol("processEntry"),Zl=Symbol("extendedHeader"),W1=Symbol("globalExtendedHeader"),wh=Symbol("meta"),uAe=Symbol("emitMeta"),fi=Symbol("buffer"),Gf=Symbol("queue"),Od=Symbol("ended"),AAe=Symbol("emittedEnd"),Ud=Symbol("emit"),Fa=Symbol("unzip"),bb=Symbol("consumeChunk"),kb=Symbol("consumeChunkSub"),T3=Symbol("consumeBody"),fAe=Symbol("consumeMeta"),pAe=Symbol("consumeHeader"),Qb=Symbol("consuming"),R3=Symbol("bufferConcat"),N3=Symbol("maybeEnd"),V1=Symbol("writing"),Ih=Symbol("aborted"),Fb=Symbol("onDone"),_d=Symbol("sawValidEntry"),Tb=Symbol("sawNullBlock"),Rb=Symbol("sawEOF"),Tlt=t=>!0;hAe.exports=Plt(class extends xlt{constructor(e){e=e||{},super(e),this.file=e.file||"",this[_d]=null,this.on(Fb,r=>{(this[Xl]==="begin"||this[_d]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),e.ondone?this.on(Fb,e.ondone):this.on(Fb,r=>{this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||klt,this.filter=typeof e.filter=="function"?e.filter:Tlt,this.writable=!0,this.readable=!1,this[Gf]=new blt,this[fi]=null,this[qf]=null,this[Md]=null,this[Xl]="begin",this[wh]="",this[Zl]=null,this[W1]=null,this[Od]=!1,this[Fa]=null,this[Ih]=!1,this[Tb]=!1,this[Rb]=!1,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),typeof e.onentry=="function"&&this.on("entry",e.onentry)}[pAe](e,r){this[_d]===null&&(this[_d]=!1);let o;try{o=new Slt(e,r,this[Zl],this[W1])}catch(a){return this.warn("TAR_ENTRY_INVALID",a)}if(o.nullBlock)this[Tb]?(this[Rb]=!0,this[Xl]==="begin"&&(this[Xl]="header"),this[Ud]("eof")):(this[Tb]=!0,this[Ud]("nullBlock"));else if(this[Tb]=!1,!o.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:o});else if(!o.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:o});else{let a=o.type;if(/^(Symbolic)?Link$/.test(a)&&!o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:o});else if(!/^(Symbolic)?Link$/.test(a)&&o.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:o});else{let n=this[Md]=new Qlt(o,this[Zl],this[W1]);if(!this[_d])if(n.remain){let u=()=>{n.invalid||(this[_d]=!0)};n.on("end",u)}else this[_d]=!0;n.meta?n.size>this.maxMetaEntrySize?(n.ignore=!0,this[Ud]("ignoredEntry",n),this[Xl]="ignore",n.resume()):n.size>0&&(this[wh]="",n.on("data",u=>this[wh]+=u),this[Xl]="meta"):(this[Zl]=null,n.ignore=n.ignore||!this.filter(n.path,n),n.ignore?(this[Ud]("ignoredEntry",n),this[Xl]=n.remain?"ignore":"header",n.resume()):(n.remain?this[Xl]="body":(this[Xl]="header",n.end()),this[qf]?this[Gf].push(n):(this[Gf].push(n),this[F3]())))}}}[cAe](e){let r=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[qf]=e,this.emit("entry",e),e.emittedEnd||(e.on("end",o=>this[F3]()),r=!1)):(this[qf]=null,r=!1),r}[F3](){do;while(this[cAe](this[Gf].shift()));if(!this[Gf].length){let e=this[qf];!e||e.flowing||e.size===e.remain?this[V1]||this.emit("drain"):e.once("drain",o=>this.emit("drain"))}}[T3](e,r){let o=this[Md],a=o.blockRemain,n=a>=e.length&&r===0?e:e.slice(r,r+a);return o.write(n),o.blockRemain||(this[Xl]="header",this[Md]=null,o.end()),n.length}[fAe](e,r){let o=this[Md],a=this[T3](e,r);return this[Md]||this[uAe](o),a}[Ud](e,r,o){!this[Gf].length&&!this[qf]?this.emit(e,r,o):this[Gf].push([e,r,o])}[uAe](e){switch(this[Ud]("meta",this[wh]),e.type){case"ExtendedHeader":case"OldExtendedHeader":this[Zl]=lAe.parse(this[wh],this[Zl],!1);break;case"GlobalExtendedHeader":this[W1]=lAe.parse(this[wh],this[W1],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":this[Zl]=this[Zl]||Object.create(null),this[Zl].path=this[wh].replace(/\0.*/,"");break;case"NextFileHasLongLinkpath":this[Zl]=this[Zl]||Object.create(null),this[Zl].linkpath=this[wh].replace(/\0.*/,"");break;default:throw new Error("unknown meta: "+e.type)}}abort(e){this[Ih]=!0,this.emit("abort",e),this.warn("TAR_ABORT",e,{recoverable:!1})}write(e){if(this[Ih])return;if(this[Fa]===null&&e){if(this[fi]&&(e=Buffer.concat([this[fi],e]),this[fi]=null),e.lengththis[bb](n)),this[Fa].on("error",n=>this.abort(n)),this[Fa].on("end",n=>{this[Od]=!0,this[bb]()}),this[V1]=!0;let a=this[Fa][o?"end":"write"](e);return this[V1]=!1,a}}this[V1]=!0,this[Fa]?this[Fa].write(e):this[bb](e),this[V1]=!1;let r=this[Gf].length?!1:this[qf]?this[qf].flowing:!0;return!r&&!this[Gf].length&&this[qf].once("drain",o=>this.emit("drain")),r}[R3](e){e&&!this[Ih]&&(this[fi]=this[fi]?Buffer.concat([this[fi],e]):e)}[N3](){if(this[Od]&&!this[AAe]&&!this[Ih]&&!this[Qb]){this[AAe]=!0;let e=this[Md];if(e&&e.blockRemain){let r=this[fi]?this[fi].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${e.blockRemain} more bytes, only ${r} available)`,{entry:e}),this[fi]&&e.write(this[fi]),e.end()}this[Ud](Fb)}}[bb](e){if(this[Qb])this[R3](e);else if(!e&&!this[fi])this[N3]();else{if(this[Qb]=!0,this[fi]){this[R3](e);let r=this[fi];this[fi]=null,this[kb](r)}else this[kb](e);for(;this[fi]&&this[fi].length>=512&&!this[Ih]&&!this[Rb];){let r=this[fi];this[fi]=null,this[kb](r)}this[Qb]=!1}(!this[fi]||this[Od])&&this[N3]()}[kb](e){let r=0,o=e.length;for(;r+512<=o&&!this[Ih]&&!this[Rb];)switch(this[Xl]){case"begin":case"header":this[pAe](e,r),r+=512;break;case"ignore":case"body":r+=this[T3](e,r);break;case"meta":r+=this[fAe](e,r);break;default:throw new Error("invalid state: "+this[Xl])}r{"use strict";var Rlt=LE(),dAe=Nb(),eC=Be("fs"),Nlt=$E(),gAe=Be("path"),L3=GE();yAe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=Rlt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Mlt(o,e),o.noResume||Llt(o),o.file&&o.sync?Olt(o):o.file?Ult(o,r):mAe(o)};var Llt=t=>{let e=t.onentry;t.onentry=e?r=>{e(r),r.resume()}:r=>r.resume()},Mlt=(t,e)=>{let r=new Map(e.map(n=>[L3(n),!0])),o=t.filter,a=(n,u)=>{let A=u||gAe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(gAe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(L3(n)):n=>a(L3(n))},Olt=t=>{let e=mAe(t),r=t.file,o=!0,a;try{let n=eC.statSync(r),u=t.maxReadSize||16*1024*1024;if(n.size{let r=new dAe(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("end",u),eC.stat(a,(p,h)=>{if(p)A(p);else{let E=new Nlt.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},mAe=t=>new dAe(t)});var vAe=_((AUt,BAe)=>{"use strict";var _lt=LE(),Mb=wb(),EAe=$E(),CAe=Lb(),wAe=Be("path");BAe.exports=(t,e,r)=>{if(typeof e=="function"&&(r=e),Array.isArray(t)&&(e=t,t={}),!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");e=Array.from(e);let o=_lt(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return o.file&&o.sync?Hlt(o,e):o.file?jlt(o,e,r):o.sync?qlt(o,e):Glt(o,e)};var Hlt=(t,e)=>{let r=new Mb.Sync(t),o=new EAe.WriteStreamSync(t.file,{mode:t.mode||438});r.pipe(o),IAe(r,e)},jlt=(t,e,r)=>{let o=new Mb(t),a=new EAe.WriteStream(t.file,{mode:t.mode||438});o.pipe(a);let n=new Promise((u,A)=>{a.on("error",A),a.on("close",u),o.on("error",A)});return M3(o,e),r?n.then(r,r):n},IAe=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?CAe({file:wAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},M3=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return CAe({file:wAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>M3(t,e));t.add(r)}t.end()},qlt=(t,e)=>{let r=new Mb.Sync(t);return IAe(r,e),r},Glt=(t,e)=>{let r=new Mb(t);return M3(r,e),r}});var O3=_((fUt,QAe)=>{"use strict";var Ylt=LE(),DAe=wb(),Al=Be("fs"),PAe=$E(),SAe=Lb(),xAe=Be("path"),bAe=qE();QAe.exports=(t,e,r)=>{let o=Ylt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),o.sync?Wlt(o,e):Klt(o,e,r)};var Wlt=(t,e)=>{let r=new DAe.Sync(t),o=!0,a,n;try{try{a=Al.openSync(t.file,"r+")}catch(p){if(p.code==="ENOENT")a=Al.openSync(t.file,"w+");else throw p}let u=Al.fstatSync(a),A=Buffer.alloc(512);e:for(n=0;nu.size)break;n+=h,t.mtimeCache&&t.mtimeCache.set(p.path,p.mtime)}o=!1,Vlt(t,r,n,a,e)}finally{if(o)try{Al.closeSync(a)}catch{}}},Vlt=(t,e,r,o,a)=>{let n=new PAe.WriteStreamSync(t.file,{fd:o,start:r});e.pipe(n),Jlt(e,a)},Klt=(t,e,r)=>{e=Array.from(e);let o=new DAe(t),a=(u,A,p)=>{let h=(C,T)=>{C?Al.close(u,L=>p(C)):p(null,T)},E=0;if(A===0)return h(null,0);let I=0,v=Buffer.alloc(512),b=(C,T)=>{if(C)return h(C);if(I+=T,I<512&&T)return Al.read(u,v,I,v.length-I,E+I,b);if(E===0&&v[0]===31&&v[1]===139)return h(new Error("cannot append to compressed archives"));if(I<512)return h(null,E);let L=new bAe(v);if(!L.cksumValid)return h(null,E);let U=512*Math.ceil(L.size/512);if(E+U+512>A||(E+=U+512,E>=A))return h(null,E);t.mtimeCache&&t.mtimeCache.set(L.path,L.mtime),I=0,Al.read(u,v,0,512,E,b)};Al.read(u,v,0,512,E,b)},n=new Promise((u,A)=>{o.on("error",A);let p="r+",h=(E,I)=>{if(E&&E.code==="ENOENT"&&p==="r+")return p="w+",Al.open(t.file,p,h);if(E)return A(E);Al.fstat(I,(v,b)=>{if(v)return Al.close(I,()=>A(v));a(I,b.size,(C,T)=>{if(C)return A(C);let L=new PAe.WriteStream(t.file,{fd:I,start:T});o.pipe(L),L.on("error",A),L.on("close",u),kAe(o,e)})})};Al.open(t.file,p,h)});return r?n.then(r,r):n},Jlt=(t,e)=>{e.forEach(r=>{r.charAt(0)==="@"?SAe({file:xAe.resolve(t.cwd,r.substr(1)),sync:!0,noResume:!0,onentry:o=>t.add(o)}):t.add(r)}),t.end()},kAe=(t,e)=>{for(;e.length;){let r=e.shift();if(r.charAt(0)==="@")return SAe({file:xAe.resolve(t.cwd,r.substr(1)),noResume:!0,onentry:o=>t.add(o)}).then(o=>kAe(t,e));t.add(r)}t.end()}});var TAe=_((pUt,FAe)=>{"use strict";var zlt=LE(),Xlt=O3();FAe.exports=(t,e,r)=>{let o=zlt(t);if(!o.file)throw new TypeError("file is required");if(o.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),Zlt(o),Xlt(o,e,r)};var Zlt=t=>{let e=t.filter;t.mtimeCache||(t.mtimeCache=new Map),t.filter=e?(r,o)=>e(r,o)&&!(t.mtimeCache.get(r)>o.mtime):(r,o)=>!(t.mtimeCache.get(r)>o.mtime)}});var LAe=_((hUt,NAe)=>{var{promisify:RAe}=Be("util"),Bh=Be("fs"),$lt=t=>{if(!t)t={mode:511,fs:Bh};else if(typeof t=="object")t={mode:511,fs:Bh,...t};else if(typeof t=="number")t={mode:t,fs:Bh};else if(typeof t=="string")t={mode:parseInt(t,8),fs:Bh};else throw new TypeError("invalid options argument");return t.mkdir=t.mkdir||t.fs.mkdir||Bh.mkdir,t.mkdirAsync=RAe(t.mkdir),t.stat=t.stat||t.fs.stat||Bh.stat,t.statAsync=RAe(t.stat),t.statSync=t.statSync||t.fs.statSync||Bh.statSync,t.mkdirSync=t.mkdirSync||t.fs.mkdirSync||Bh.mkdirSync,t};NAe.exports=$lt});var OAe=_((gUt,MAe)=>{var ect=process.platform,{resolve:tct,parse:rct}=Be("path"),nct=t=>{if(/\0/.test(t))throw Object.assign(new TypeError("path must be a string without null bytes"),{path:t,code:"ERR_INVALID_ARG_VALUE"});if(t=tct(t),ect==="win32"){let e=/[*|"<>?:]/,{root:r}=rct(t);if(e.test(t.substr(r.length)))throw Object.assign(new Error("Illegal characters in path."),{path:t,code:"EINVAL"})}return t};MAe.exports=nct});var qAe=_((dUt,jAe)=>{var{dirname:UAe}=Be("path"),_Ae=(t,e,r=void 0)=>r===e?Promise.resolve():t.statAsync(e).then(o=>o.isDirectory()?r:void 0,o=>o.code==="ENOENT"?_Ae(t,UAe(e),e):void 0),HAe=(t,e,r=void 0)=>{if(r!==e)try{return t.statSync(e).isDirectory()?r:void 0}catch(o){return o.code==="ENOENT"?HAe(t,UAe(e),e):void 0}};jAe.exports={findMade:_Ae,findMadeSync:HAe}});var H3=_((mUt,YAe)=>{var{dirname:GAe}=Be("path"),U3=(t,e,r)=>{e.recursive=!1;let o=GAe(t);return o===t?e.mkdirAsync(t,e).catch(a=>{if(a.code!=="EISDIR")throw a}):e.mkdirAsync(t,e).then(()=>r||t,a=>{if(a.code==="ENOENT")return U3(o,e).then(n=>U3(t,e,n));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;return e.statAsync(t).then(n=>{if(n.isDirectory())return r;throw a},()=>{throw a})})},_3=(t,e,r)=>{let o=GAe(t);if(e.recursive=!1,o===t)try{return e.mkdirSync(t,e)}catch(a){if(a.code!=="EISDIR")throw a;return}try{return e.mkdirSync(t,e),r||t}catch(a){if(a.code==="ENOENT")return _3(t,e,_3(o,e,r));if(a.code!=="EEXIST"&&a.code!=="EROFS")throw a;try{if(!e.statSync(t).isDirectory())throw a}catch{throw a}}};YAe.exports={mkdirpManual:U3,mkdirpManualSync:_3}});var KAe=_((yUt,VAe)=>{var{dirname:WAe}=Be("path"),{findMade:ict,findMadeSync:sct}=qAe(),{mkdirpManual:oct,mkdirpManualSync:act}=H3(),lct=(t,e)=>(e.recursive=!0,WAe(t)===t?e.mkdirAsync(t,e):ict(e,t).then(o=>e.mkdirAsync(t,e).then(()=>o).catch(a=>{if(a.code==="ENOENT")return oct(t,e);throw a}))),cct=(t,e)=>{if(e.recursive=!0,WAe(t)===t)return e.mkdirSync(t,e);let o=sct(e,t);try{return e.mkdirSync(t,e),o}catch(a){if(a.code==="ENOENT")return act(t,e);throw a}};VAe.exports={mkdirpNative:lct,mkdirpNativeSync:cct}});var ZAe=_((EUt,XAe)=>{var JAe=Be("fs"),uct=process.version,j3=uct.replace(/^v/,"").split("."),zAe=+j3[0]>10||+j3[0]==10&&+j3[1]>=12,Act=zAe?t=>t.mkdir===JAe.mkdir:()=>!1,fct=zAe?t=>t.mkdirSync===JAe.mkdirSync:()=>!1;XAe.exports={useNative:Act,useNativeSync:fct}});var ife=_((CUt,nfe)=>{var tC=LAe(),rC=OAe(),{mkdirpNative:$Ae,mkdirpNativeSync:efe}=KAe(),{mkdirpManual:tfe,mkdirpManualSync:rfe}=H3(),{useNative:pct,useNativeSync:hct}=ZAe(),nC=(t,e)=>(t=rC(t),e=tC(e),pct(e)?$Ae(t,e):tfe(t,e)),gct=(t,e)=>(t=rC(t),e=tC(e),hct(e)?efe(t,e):rfe(t,e));nC.sync=gct;nC.native=(t,e)=>$Ae(rC(t),tC(e));nC.manual=(t,e)=>tfe(rC(t),tC(e));nC.nativeSync=(t,e)=>efe(rC(t),tC(e));nC.manualSync=(t,e)=>rfe(rC(t),tC(e));nfe.exports=nC});var Afe=_((wUt,ufe)=>{"use strict";var $l=Be("fs"),Hd=Be("path"),dct=$l.lchown?"lchown":"chown",mct=$l.lchownSync?"lchownSync":"chownSync",ofe=$l.lchown&&!process.version.match(/v1[1-9]+\./)&&!process.version.match(/v10\.[6-9]/),sfe=(t,e,r)=>{try{return $l[mct](t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},yct=(t,e,r)=>{try{return $l.chownSync(t,e,r)}catch(o){if(o.code!=="ENOENT")throw o}},Ect=ofe?(t,e,r,o)=>a=>{!a||a.code!=="EISDIR"?o(a):$l.chown(t,e,r,o)}:(t,e,r,o)=>o,q3=ofe?(t,e,r)=>{try{return sfe(t,e,r)}catch(o){if(o.code!=="EISDIR")throw o;yct(t,e,r)}}:(t,e,r)=>sfe(t,e,r),Cct=process.version,afe=(t,e,r)=>$l.readdir(t,e,r),wct=(t,e)=>$l.readdirSync(t,e);/^v4\./.test(Cct)&&(afe=(t,e,r)=>$l.readdir(t,r));var Ob=(t,e,r,o)=>{$l[dct](t,e,r,Ect(t,e,r,a=>{o(a&&a.code!=="ENOENT"?a:null)}))},lfe=(t,e,r,o,a)=>{if(typeof e=="string")return $l.lstat(Hd.resolve(t,e),(n,u)=>{if(n)return a(n.code!=="ENOENT"?n:null);u.name=e,lfe(t,u,r,o,a)});if(e.isDirectory())G3(Hd.resolve(t,e.name),r,o,n=>{if(n)return a(n);let u=Hd.resolve(t,e.name);Ob(u,r,o,a)});else{let n=Hd.resolve(t,e.name);Ob(n,r,o,a)}},G3=(t,e,r,o)=>{afe(t,{withFileTypes:!0},(a,n)=>{if(a){if(a.code==="ENOENT")return o();if(a.code!=="ENOTDIR"&&a.code!=="ENOTSUP")return o(a)}if(a||!n.length)return Ob(t,e,r,o);let u=n.length,A=null,p=h=>{if(!A){if(h)return o(A=h);if(--u===0)return Ob(t,e,r,o)}};n.forEach(h=>lfe(t,h,e,r,p))})},Ict=(t,e,r,o)=>{if(typeof e=="string")try{let a=$l.lstatSync(Hd.resolve(t,e));a.name=e,e=a}catch(a){if(a.code==="ENOENT")return;throw a}e.isDirectory()&&cfe(Hd.resolve(t,e.name),r,o),q3(Hd.resolve(t,e.name),r,o)},cfe=(t,e,r)=>{let o;try{o=wct(t,{withFileTypes:!0})}catch(a){if(a.code==="ENOENT")return;if(a.code==="ENOTDIR"||a.code==="ENOTSUP")return q3(t,e,r);throw a}return o&&o.length&&o.forEach(a=>Ict(t,a,e,r)),q3(t,e,r)};ufe.exports=G3;G3.sync=cfe});var gfe=_((IUt,Y3)=>{"use strict";var ffe=ife(),ec=Be("fs"),Ub=Be("path"),pfe=Afe(),Wc=HE(),_b=class extends Error{constructor(e,r){super("Cannot extract through symbolic link"),this.path=r,this.symlink=e}get name(){return"SylinkError"}},Hb=class extends Error{constructor(e,r){super(r+": Cannot cd into '"+e+"'"),this.path=e,this.code=r}get name(){return"CwdError"}},jb=(t,e)=>t.get(Wc(e)),K1=(t,e,r)=>t.set(Wc(e),r),Bct=(t,e)=>{ec.stat(t,(r,o)=>{(r||!o.isDirectory())&&(r=new Hb(t,r&&r.code||"ENOTDIR")),e(r)})};Y3.exports=(t,e,r)=>{t=Wc(t);let o=e.umask,a=e.mode|448,n=(a&o)!==0,u=e.uid,A=e.gid,p=typeof u=="number"&&typeof A=="number"&&(u!==e.processUid||A!==e.processGid),h=e.preserve,E=e.unlink,I=e.cache,v=Wc(e.cwd),b=(L,U)=>{L?r(L):(K1(I,t,!0),U&&p?pfe(U,u,A,J=>b(J)):n?ec.chmod(t,a,r):r())};if(I&&jb(I,t)===!0)return b();if(t===v)return Bct(t,b);if(h)return ffe(t,{mode:a}).then(L=>b(null,L),b);let T=Wc(Ub.relative(v,t)).split("/");qb(v,T,a,I,E,v,null,b)};var qb=(t,e,r,o,a,n,u,A)=>{if(!e.length)return A(null,u);let p=e.shift(),h=Wc(Ub.resolve(t+"/"+p));if(jb(o,h))return qb(h,e,r,o,a,n,u,A);ec.mkdir(h,r,hfe(h,e,r,o,a,n,u,A))},hfe=(t,e,r,o,a,n,u,A)=>p=>{p?ec.lstat(t,(h,E)=>{if(h)h.path=h.path&&Wc(h.path),A(h);else if(E.isDirectory())qb(t,e,r,o,a,n,u,A);else if(a)ec.unlink(t,I=>{if(I)return A(I);ec.mkdir(t,r,hfe(t,e,r,o,a,n,u,A))});else{if(E.isSymbolicLink())return A(new _b(t,t+"/"+e.join("/")));A(p)}}):(u=u||t,qb(t,e,r,o,a,n,u,A))},vct=t=>{let e=!1,r="ENOTDIR";try{e=ec.statSync(t).isDirectory()}catch(o){r=o.code}finally{if(!e)throw new Hb(t,r)}};Y3.exports.sync=(t,e)=>{t=Wc(t);let r=e.umask,o=e.mode|448,a=(o&r)!==0,n=e.uid,u=e.gid,A=typeof n=="number"&&typeof u=="number"&&(n!==e.processUid||u!==e.processGid),p=e.preserve,h=e.unlink,E=e.cache,I=Wc(e.cwd),v=L=>{K1(E,t,!0),L&&A&&pfe.sync(L,n,u),a&&ec.chmodSync(t,o)};if(E&&jb(E,t)===!0)return v();if(t===I)return vct(I),v();if(p)return v(ffe.sync(t,o));let C=Wc(Ub.relative(I,t)).split("/"),T=null;for(let L=C.shift(),U=I;L&&(U+="/"+L);L=C.shift())if(U=Wc(Ub.resolve(U)),!jb(E,U))try{ec.mkdirSync(U,o),T=T||U,K1(E,U,!0)}catch{let te=ec.lstatSync(U);if(te.isDirectory()){K1(E,U,!0);continue}else if(h){ec.unlinkSync(U),ec.mkdirSync(U,o),T=T||U,K1(E,U,!0);continue}else if(te.isSymbolicLink())return new _b(U,U+"/"+C.join("/"))}return v(T)}});var V3=_((BUt,dfe)=>{var W3=Object.create(null),{hasOwnProperty:Dct}=Object.prototype;dfe.exports=t=>(Dct.call(W3,t)||(W3[t]=t.normalize("NFKD")),W3[t])});var Cfe=_((vUt,Efe)=>{var mfe=Be("assert"),Pct=V3(),Sct=GE(),{join:yfe}=Be("path"),xct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,bct=xct==="win32";Efe.exports=()=>{let t=new Map,e=new Map,r=h=>h.split("/").slice(0,-1).reduce((I,v)=>(I.length&&(v=yfe(I[I.length-1],v)),I.push(v||"/"),I),[]),o=new Set,a=h=>{let E=e.get(h);if(!E)throw new Error("function does not have any path reservations");return{paths:E.paths.map(I=>t.get(I)),dirs:[...E.dirs].map(I=>t.get(I))}},n=h=>{let{paths:E,dirs:I}=a(h);return E.every(v=>v[0]===h)&&I.every(v=>v[0]instanceof Set&&v[0].has(h))},u=h=>o.has(h)||!n(h)?!1:(o.add(h),h(()=>A(h)),!0),A=h=>{if(!o.has(h))return!1;let{paths:E,dirs:I}=e.get(h),v=new Set;return E.forEach(b=>{let C=t.get(b);mfe.equal(C[0],h),C.length===1?t.delete(b):(C.shift(),typeof C[0]=="function"?v.add(C[0]):C[0].forEach(T=>v.add(T)))}),I.forEach(b=>{let C=t.get(b);mfe(C[0]instanceof Set),C[0].size===1&&C.length===1?t.delete(b):C[0].size===1?(C.shift(),v.add(C[0])):C[0].delete(h)}),o.delete(h),v.forEach(b=>u(b)),!0};return{check:n,reserve:(h,E)=>{h=bct?["win32 parallelization disabled"]:h.map(v=>Pct(Sct(yfe(v))).toLowerCase());let I=new Set(h.map(v=>r(v)).reduce((v,b)=>v.concat(b)));return e.set(E,{dirs:I,paths:h}),h.forEach(v=>{let b=t.get(v);b?b.push(E):t.set(v,[E])}),I.forEach(v=>{let b=t.get(v);b?b[b.length-1]instanceof Set?b[b.length-1].add(E):b.push(new Set([E])):t.set(v,[new Set([E])])}),u(E)}}}});var Bfe=_((DUt,Ife)=>{var kct=process.platform,Qct=kct==="win32",Fct=global.__FAKE_TESTING_FS__||Be("fs"),{O_CREAT:Tct,O_TRUNC:Rct,O_WRONLY:Nct,UV_FS_O_FILEMAP:wfe=0}=Fct.constants,Lct=Qct&&!!wfe,Mct=512*1024,Oct=wfe|Rct|Tct|Nct;Ife.exports=Lct?t=>t"w"});var r_=_((PUt,Mfe)=>{"use strict";var Uct=Be("assert"),_ct=Nb(),vn=Be("fs"),Hct=$E(),Yf=Be("path"),Rfe=gfe(),vfe=r3(),jct=Cfe(),qct=n3(),fl=HE(),Gct=GE(),Yct=V3(),Dfe=Symbol("onEntry"),z3=Symbol("checkFs"),Pfe=Symbol("checkFs2"),Wb=Symbol("pruneCache"),X3=Symbol("isReusable"),tc=Symbol("makeFs"),Z3=Symbol("file"),$3=Symbol("directory"),Vb=Symbol("link"),Sfe=Symbol("symlink"),xfe=Symbol("hardlink"),bfe=Symbol("unsupported"),kfe=Symbol("checkPath"),vh=Symbol("mkdir"),Ro=Symbol("onError"),Gb=Symbol("pending"),Qfe=Symbol("pend"),iC=Symbol("unpend"),K3=Symbol("ended"),J3=Symbol("maybeClose"),e_=Symbol("skip"),J1=Symbol("doChown"),z1=Symbol("uid"),X1=Symbol("gid"),Z1=Symbol("checkedCwd"),Nfe=Be("crypto"),Lfe=Bfe(),Wct=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,$1=Wct==="win32",Vct=(t,e)=>{if(!$1)return vn.unlink(t,e);let r=t+".DELETE."+Nfe.randomBytes(16).toString("hex");vn.rename(t,r,o=>{if(o)return e(o);vn.unlink(r,e)})},Kct=t=>{if(!$1)return vn.unlinkSync(t);let e=t+".DELETE."+Nfe.randomBytes(16).toString("hex");vn.renameSync(t,e),vn.unlinkSync(e)},Ffe=(t,e,r)=>t===t>>>0?t:e===e>>>0?e:r,Tfe=t=>Yct(Gct(fl(t))).toLowerCase(),Jct=(t,e)=>{e=Tfe(e);for(let r of t.keys()){let o=Tfe(r);(o===e||o.indexOf(e+"/")===0)&&t.delete(r)}},zct=t=>{for(let e of t.keys())t.delete(e)},e2=class extends _ct{constructor(e){if(e||(e={}),e.ondone=r=>{this[K3]=!0,this[J3]()},super(e),this[Z1]=!1,this.reservations=jct(),this.transform=typeof e.transform=="function"?e.transform:null,this.writable=!0,this.readable=!1,this[Gb]=0,this[K3]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid=="number"||typeof e.gid=="number"){if(typeof e.uid!="number"||typeof e.gid!="number")throw new TypeError("cannot set owner without number uid and gid");if(e.preserveOwner)throw new TypeError("cannot preserve owner in archive and also set owner explicitly");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!="number"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||$1,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=fl(Yf.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask=="number"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on("entry",r=>this[Dfe](r))}warn(e,r,o={}){return(e==="TAR_BAD_ARCHIVE"||e==="TAR_ABORT")&&(o.recoverable=!1),super.warn(e,r,o)}[J3](){this[K3]&&this[Gb]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close"))}[kfe](e){if(this.strip){let r=fl(e.path).split("/");if(r.length=this.strip)e.linkpath=o.slice(this.strip).join("/");else return!1}}if(!this.preservePaths){let r=fl(e.path),o=r.split("/");if(o.includes("..")||$1&&/^[a-z]:\.\.$/i.test(o[0]))return this.warn("TAR_ENTRY_ERROR","path contains '..'",{entry:e,path:r}),!1;let[a,n]=qct(r);a&&(e.path=n,this.warn("TAR_ENTRY_INFO",`stripping ${a} from absolute path`,{entry:e,path:r}))}if(Yf.isAbsolute(e.path)?e.absolute=fl(Yf.resolve(e.path)):e.absolute=fl(Yf.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+"/")!==0&&e.absolute!==this.cwd)return this.warn("TAR_ENTRY_ERROR","path escaped extraction target",{entry:e,path:fl(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!=="Directory"&&e.type!=="GNUDumpDir")return!1;if(this.win32){let{root:r}=Yf.win32.parse(e.absolute);e.absolute=r+vfe.encode(e.absolute.substr(r.length));let{root:o}=Yf.win32.parse(e.path);e.path=o+vfe.encode(e.path.substr(o.length))}return!0}[Dfe](e){if(!this[kfe](e))return e.resume();switch(Uct.equal(typeof e.absolute,"string"),e.type){case"Directory":case"GNUDumpDir":e.mode&&(e.mode=e.mode|448);case"File":case"OldFile":case"ContiguousFile":case"Link":case"SymbolicLink":return this[z3](e);case"CharacterDevice":case"BlockDevice":case"FIFO":default:return this[bfe](e)}}[Ro](e,r){e.name==="CwdError"?this.emit("error",e):(this.warn("TAR_ENTRY_ERROR",e,{entry:r}),this[iC](),r.resume())}[vh](e,r,o){Rfe(fl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r,noChmod:this.noChmod},o)}[J1](e){return this.forceChown||this.preserveOwner&&(typeof e.uid=="number"&&e.uid!==this.processUid||typeof e.gid=="number"&&e.gid!==this.processGid)||typeof this.uid=="number"&&this.uid!==this.processUid||typeof this.gid=="number"&&this.gid!==this.processGid}[z1](e){return Ffe(this.uid,e.uid,this.processUid)}[X1](e){return Ffe(this.gid,e.gid,this.processGid)}[Z3](e,r){let o=e.mode&4095||this.fmode,a=new Hct.WriteStream(e.absolute,{flags:Lfe(e.size),mode:o,autoClose:!1});a.on("error",p=>{a.fd&&vn.close(a.fd,()=>{}),a.write=()=>!0,this[Ro](p,e),r()});let n=1,u=p=>{if(p){a.fd&&vn.close(a.fd,()=>{}),this[Ro](p,e),r();return}--n===0&&vn.close(a.fd,h=>{h?this[Ro](h,e):this[iC](),r()})};a.on("finish",p=>{let h=e.absolute,E=a.fd;if(e.mtime&&!this.noMtime){n++;let I=e.atime||new Date,v=e.mtime;vn.futimes(E,I,v,b=>b?vn.utimes(h,I,v,C=>u(C&&b)):u())}if(this[J1](e)){n++;let I=this[z1](e),v=this[X1](e);vn.fchown(E,I,v,b=>b?vn.chown(h,I,v,C=>u(C&&b)):u())}u()});let A=this.transform&&this.transform(e)||e;A!==e&&(A.on("error",p=>{this[Ro](p,e),r()}),e.pipe(A)),A.pipe(a)}[$3](e,r){let o=e.mode&4095||this.dmode;this[vh](e.absolute,o,a=>{if(a){this[Ro](a,e),r();return}let n=1,u=A=>{--n===0&&(r(),this[iC](),e.resume())};e.mtime&&!this.noMtime&&(n++,vn.utimes(e.absolute,e.atime||new Date,e.mtime,u)),this[J1](e)&&(n++,vn.chown(e.absolute,this[z1](e),this[X1](e),u)),u()})}[bfe](e){e.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[Sfe](e,r){this[Vb](e,e.linkpath,"symlink",r)}[xfe](e,r){let o=fl(Yf.resolve(this.cwd,e.linkpath));this[Vb](e,o,"link",r)}[Qfe](){this[Gb]++}[iC](){this[Gb]--,this[J3]()}[e_](e){this[iC](),e.resume()}[X3](e,r){return e.type==="File"&&!this.unlink&&r.isFile()&&r.nlink<=1&&!$1}[z3](e){this[Qfe]();let r=[e.path];e.linkpath&&r.push(e.linkpath),this.reservations.reserve(r,o=>this[Pfe](e,o))}[Wb](e){e.type==="SymbolicLink"?zct(this.dirCache):e.type!=="Directory"&&Jct(this.dirCache,e.absolute)}[Pfe](e,r){this[Wb](e);let o=A=>{this[Wb](e),r(A)},a=()=>{this[vh](this.cwd,this.dmode,A=>{if(A){this[Ro](A,e),o();return}this[Z1]=!0,n()})},n=()=>{if(e.absolute!==this.cwd){let A=fl(Yf.dirname(e.absolute));if(A!==this.cwd)return this[vh](A,this.dmode,p=>{if(p){this[Ro](p,e),o();return}u()})}u()},u=()=>{vn.lstat(e.absolute,(A,p)=>{if(p&&(this.keep||this.newer&&p.mtime>e.mtime)){this[e_](e),o();return}if(A||this[X3](e,p))return this[tc](null,e,o);if(p.isDirectory()){if(e.type==="Directory"){let h=!this.noChmod&&e.mode&&(p.mode&4095)!==e.mode,E=I=>this[tc](I,e,o);return h?vn.chmod(e.absolute,e.mode,E):E()}if(e.absolute!==this.cwd)return vn.rmdir(e.absolute,h=>this[tc](h,e,o))}if(e.absolute===this.cwd)return this[tc](null,e,o);Vct(e.absolute,h=>this[tc](h,e,o))})};this[Z1]?n():a()}[tc](e,r,o){if(e){this[Ro](e,r),o();return}switch(r.type){case"File":case"OldFile":case"ContiguousFile":return this[Z3](r,o);case"Link":return this[xfe](r,o);case"SymbolicLink":return this[Sfe](r,o);case"Directory":case"GNUDumpDir":return this[$3](r,o)}}[Vb](e,r,o,a){vn[o](r,e.absolute,n=>{n?this[Ro](n,e):(this[iC](),e.resume()),a()})}},Yb=t=>{try{return[null,t()]}catch(e){return[e,null]}},t_=class extends e2{[tc](e,r){return super[tc](e,r,()=>{})}[z3](e){if(this[Wb](e),!this[Z1]){let n=this[vh](this.cwd,this.dmode);if(n)return this[Ro](n,e);this[Z1]=!0}if(e.absolute!==this.cwd){let n=fl(Yf.dirname(e.absolute));if(n!==this.cwd){let u=this[vh](n,this.dmode);if(u)return this[Ro](u,e)}}let[r,o]=Yb(()=>vn.lstatSync(e.absolute));if(o&&(this.keep||this.newer&&o.mtime>e.mtime))return this[e_](e);if(r||this[X3](e,o))return this[tc](null,e);if(o.isDirectory()){if(e.type==="Directory"){let u=!this.noChmod&&e.mode&&(o.mode&4095)!==e.mode,[A]=u?Yb(()=>{vn.chmodSync(e.absolute,e.mode)}):[];return this[tc](A,e)}let[n]=Yb(()=>vn.rmdirSync(e.absolute));this[tc](n,e)}let[a]=e.absolute===this.cwd?[]:Yb(()=>Kct(e.absolute));this[tc](a,e)}[Z3](e,r){let o=e.mode&4095||this.fmode,a=A=>{let p;try{vn.closeSync(n)}catch(h){p=h}(A||p)&&this[Ro](A||p,e),r()},n;try{n=vn.openSync(e.absolute,Lfe(e.size),o)}catch(A){return a(A)}let u=this.transform&&this.transform(e)||e;u!==e&&(u.on("error",A=>this[Ro](A,e)),e.pipe(u)),u.on("data",A=>{try{vn.writeSync(n,A,0,A.length)}catch(p){a(p)}}),u.on("end",A=>{let p=null;if(e.mtime&&!this.noMtime){let h=e.atime||new Date,E=e.mtime;try{vn.futimesSync(n,h,E)}catch(I){try{vn.utimesSync(e.absolute,h,E)}catch{p=I}}}if(this[J1](e)){let h=this[z1](e),E=this[X1](e);try{vn.fchownSync(n,h,E)}catch(I){try{vn.chownSync(e.absolute,h,E)}catch{p=p||I}}}a(p)})}[$3](e,r){let o=e.mode&4095||this.dmode,a=this[vh](e.absolute,o);if(a){this[Ro](a,e),r();return}if(e.mtime&&!this.noMtime)try{vn.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[J1](e))try{vn.chownSync(e.absolute,this[z1](e),this[X1](e))}catch{}r(),e.resume()}[vh](e,r){try{return Rfe.sync(fl(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:r})}catch(o){return o}}[Vb](e,r,o,a){try{vn[o+"Sync"](r,e.absolute),a(),e.resume()}catch(n){return this[Ro](n,e)}}};e2.Sync=t_;Mfe.exports=e2});var jfe=_((SUt,Hfe)=>{"use strict";var Xct=LE(),Kb=r_(),Ufe=Be("fs"),_fe=$E(),Ofe=Be("path"),n_=GE();Hfe.exports=(t,e,r)=>{typeof t=="function"?(r=t,e=null,t={}):Array.isArray(t)&&(e=t,t={}),typeof e=="function"&&(r=e,e=null),e?e=Array.from(e):e=[];let o=Xct(t);if(o.sync&&typeof r=="function")throw new TypeError("callback not supported for sync tar functions");if(!o.file&&typeof r=="function")throw new TypeError("callback only supported with file option");return e.length&&Zct(o,e),o.file&&o.sync?$ct(o):o.file?eut(o,r):o.sync?tut(o):rut(o)};var Zct=(t,e)=>{let r=new Map(e.map(n=>[n_(n),!0])),o=t.filter,a=(n,u)=>{let A=u||Ofe.parse(n).root||".",p=n===A?!1:r.has(n)?r.get(n):a(Ofe.dirname(n),A);return r.set(n,p),p};t.filter=o?(n,u)=>o(n,u)&&a(n_(n)):n=>a(n_(n))},$ct=t=>{let e=new Kb.Sync(t),r=t.file,o=Ufe.statSync(r),a=t.maxReadSize||16*1024*1024;new _fe.ReadStreamSync(r,{readSize:a,size:o.size}).pipe(e)},eut=(t,e)=>{let r=new Kb(t),o=t.maxReadSize||16*1024*1024,a=t.file,n=new Promise((u,A)=>{r.on("error",A),r.on("close",u),Ufe.stat(a,(p,h)=>{if(p)A(p);else{let E=new _fe.ReadStream(a,{readSize:o,size:h.size});E.on("error",A),E.pipe(r)}})});return e?n.then(e,e):n},tut=t=>new Kb.Sync(t),rut=t=>new Kb(t)});var qfe=_(us=>{"use strict";us.c=us.create=vAe();us.r=us.replace=O3();us.t=us.list=Lb();us.u=us.update=TAe();us.x=us.extract=jfe();us.Pack=wb();us.Unpack=r_();us.Parse=Nb();us.ReadEntry=nb();us.WriteEntry=p3();us.Header=qE();us.Pax=sb();us.types=JU()});var i_,Gfe,Dh,t2,r2,Yfe=Et(()=>{i_=$e(nd()),Gfe=Be("worker_threads"),Dh=Symbol("kTaskInfo"),t2=class{constructor(e,r){this.fn=e;this.limit=(0,i_.default)(r.poolSize)}run(e){return this.limit(()=>this.fn(e))}},r2=class{constructor(e,r){this.source=e;this.workers=[];this.limit=(0,i_.default)(r.poolSize),this.cleanupInterval=setInterval(()=>{if(this.limit.pendingCount===0&&this.limit.activeCount===0){let o=this.workers.pop();o?o.terminate():clearInterval(this.cleanupInterval)}},5e3).unref()}createWorker(){this.cleanupInterval.refresh();let e=new Gfe.Worker(this.source,{eval:!0,execArgv:[...process.execArgv,"--unhandled-rejections=strict"]});return e.on("message",r=>{if(!e[Dh])throw new Error("Assertion failed: Worker sent a result without having a task assigned");e[Dh].resolve(r),e[Dh]=null,e.unref(),this.workers.push(e)}),e.on("error",r=>{e[Dh]?.reject(r),e[Dh]=null}),e.on("exit",r=>{r!==0&&e[Dh]?.reject(new Error(`Worker exited with code ${r}`)),e[Dh]=null}),e}run(e){return this.limit(()=>{let r=this.workers.pop()??this.createWorker();return r.ref(),new Promise((o,a)=>{r[Dh]={resolve:o,reject:a},r.postMessage(e)})})}}});var Vfe=_((QUt,Wfe)=>{var s_;Wfe.exports.getContent=()=>(typeof s_>"u"&&(s_=Be("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),s_)});var Xi={};Kt(Xi,{convertToZip:()=>out,convertToZipWorker:()=>l_,extractArchiveTo:()=>Zfe,getDefaultTaskPool:()=>zfe,getTaskPoolForConfiguration:()=>Xfe,makeArchiveFromDirectory:()=>sut});function nut(t,e){switch(t){case"async":return new t2(l_,{poolSize:e});case"workers":return new r2((0,a_.getContent)(),{poolSize:e});default:throw new Error(`Assertion failed: Unknown value ${t} for taskPoolMode`)}}function zfe(){return typeof o_>"u"&&(o_=nut("workers",Ji.availableParallelism())),o_}function Xfe(t){return typeof t>"u"?zfe():ol(iut,t,()=>{let e=t.get("taskPoolMode"),r=t.get("taskPoolConcurrency");switch(e){case"async":return new t2(l_,{poolSize:r});case"workers":return new r2((0,a_.getContent)(),{poolSize:r});default:throw new Error(`Assertion failed: Unknown value ${e} for taskPoolMode`)}})}async function l_(t){let{tmpFile:e,tgz:r,compressionLevel:o,extractBufferOpts:a}=t,n=new zi(e,{create:!0,level:o,stats:Ea.makeDefaultStats()}),u=Buffer.from(r.buffer,r.byteOffset,r.byteLength);return await Zfe(u,n,a),n.saveAndClose(),e}async function sut(t,{baseFs:e=new Rn,prefixPath:r=Bt.root,compressionLevel:o,inMemory:a=!1}={}){let n;if(a)n=new zi(null,{level:o});else{let A=await oe.mktempPromise(),p=K.join(A,"archive.zip");n=new zi(p,{create:!0,level:o})}let u=K.resolve(Bt.root,r);return await n.copyPromise(u,t,{baseFs:e,stableTime:!0,stableSort:!0}),n}async function out(t,e={}){let r=await oe.mktempPromise(),o=K.join(r,"archive.zip"),a=e.compressionLevel??e.configuration?.get("compressionLevel")??"mixed",n={prefixPath:e.prefixPath,stripComponents:e.stripComponents};return await(e.taskPool??Xfe(e.configuration)).run({tmpFile:o,tgz:t,compressionLevel:a,extractBufferOpts:n}),new zi(o,{level:e.compressionLevel})}async function*aut(t){let e=new Jfe.default.Parse,r=new Kfe.PassThrough({objectMode:!0,autoDestroy:!0,emitClose:!0});e.on("entry",o=>{r.write(o)}),e.on("error",o=>{r.destroy(o)}),e.on("close",()=>{r.destroyed||r.end()}),e.end(t);for await(let o of r){let a=o;yield a,a.resume()}}async function Zfe(t,e,{stripComponents:r=0,prefixPath:o=Bt.dot}={}){function a(n){if(n.path[0]==="/")return!0;let u=n.path.split(/\//g);return!!(u.some(A=>A==="..")||u.length<=r)}for await(let n of aut(t)){if(a(n))continue;let u=K.normalize(ue.toPortablePath(n.path)).replace(/\/$/,"").split(/\//g);if(u.length<=r)continue;let A=u.slice(r).join("/"),p=K.join(o,A),h=420;switch((n.type==="Directory"||((n.mode??0)&73)!==0)&&(h|=73),n.type){case"Directory":e.mkdirpSync(K.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.mkdirSync(p,{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"OldFile":case"File":e.mkdirpSync(K.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.writeFileSync(p,await Vy(n),{mode:h}),e.utimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break;case"SymbolicLink":e.mkdirpSync(K.dirname(p),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),e.symlinkSync(n.linkpath,p),e.lutimesSync(p,vi.SAFE_TIME,vi.SAFE_TIME);break}}return e}var Kfe,Jfe,a_,o_,iut,$fe=Et(()=>{Ye();Pt();nA();Kfe=Be("stream"),Jfe=$e(qfe());Yfe();jl();a_=$e(Vfe());iut=new WeakMap});var tpe=_((c_,epe)=>{(function(t,e){typeof c_=="object"?epe.exports=e():typeof define=="function"&&define.amd?define(e):t.treeify=e()})(c_,function(){function t(a,n){var u=n?"\u2514":"\u251C";return a?u+="\u2500 ":u+="\u2500\u2500\u2510",u}function e(a,n){var u=[];for(var A in a)!a.hasOwnProperty(A)||n&&typeof a[A]=="function"||u.push(A);return u}function r(a,n,u,A,p,h,E){var I="",v=0,b,C,T=A.slice(0);if(T.push([n,u])&&A.length>0&&(A.forEach(function(U,J){J>0&&(I+=(U[1]?" ":"\u2502")+" "),!C&&U[0]===n&&(C=!0)}),I+=t(a,u)+a,p&&(typeof n!="object"||n instanceof Date)&&(I+=": "+n),C&&(I+=" (circular ref.)"),E(I)),!C&&typeof n=="object"){var L=e(n,h);L.forEach(function(U){b=++v===L.length,r(U,n[U],b,T,p,h,E)})}}var o={};return o.asLines=function(a,n,u,A){var p=typeof u!="function"?u:!1;r(".",a,!1,[],n,p,A||u)},o.asTree=function(a,n,u){var A="";return r(".",a,!1,[],n,u,function(p){A+=p+` +`}),A},o})});var $s={};Kt($s,{emitList:()=>lut,emitTree:()=>spe,treeNodeToJson:()=>ipe,treeNodeToTreeify:()=>npe});function npe(t,{configuration:e}){let r={},o=0,a=(n,u)=>{let A=Array.isArray(n)?n.entries():Object.entries(n);for(let[p,h]of A){if(!h)continue;let{label:E,value:I,children:v}=h,b=[];typeof E<"u"&&b.push(md(e,E,2)),typeof I<"u"&&b.push(Ot(e,I[0],I[1])),b.length===0&&b.push(md(e,`${p}`,2));let C=b.join(": ").trim(),T=`\0${o++}\0`,L=u[`${T}${C}`]={};typeof v<"u"&&a(v,L)}};if(typeof t.children>"u")throw new Error("The root node must only contain children");return a(t.children,r),r}function ipe(t){let e=r=>{if(typeof r.children>"u"){if(typeof r.value>"u")throw new Error("Assertion failed: Expected a value to be set if the children are missing");return yd(r.value[0],r.value[1])}let o=Array.isArray(r.children)?r.children.entries():Object.entries(r.children??{}),a=Array.isArray(r.children)?[]:{};for(let[n,u]of o)u&&(a[cut(n)]=e(u));return typeof r.value>"u"?a:{value:yd(r.value[0],r.value[1]),children:a}};return e(t)}function lut(t,{configuration:e,stdout:r,json:o}){let a=t.map(n=>({value:n}));spe({children:a},{configuration:e,stdout:r,json:o})}function spe(t,{configuration:e,stdout:r,json:o,separators:a=0}){if(o){let u=Array.isArray(t.children)?t.children.values():Object.values(t.children??{});for(let A of u)A&&r.write(`${JSON.stringify(ipe(A))} +`);return}let n=(0,rpe.asTree)(npe(t,{configuration:e}),!1,!1);if(n=n.replace(/\0[0-9]+\0/g,""),a>=1&&(n=n.replace(/^([├└]─)/gm,`\u2502 +$1`).replace(/^│\n/,"")),a>=2)for(let u=0;u<2;++u)n=n.replace(/^([│ ].{2}[├│ ].{2}[^\n]+\n)(([│ ]).{2}[├└].{2}[^\n]*\n[│ ].{2}[│ ].{2}[├└]─)/gm,`$1$3 \u2502 +$2`).replace(/^│\n/,"");if(a>=3)throw new Error("Only the first two levels are accepted by treeUtils.emitTree");r.write(n)}function cut(t){return typeof t=="string"?t.replace(/^\0[0-9]+\0/,""):t}var rpe,ope=Et(()=>{rpe=$e(tpe());ql()});function n2(t){let e=t.match(uut);if(!e?.groups)throw new Error("Assertion failed: Expected the checksum to match the requested pattern");let r=e.groups.cacheVersion?parseInt(e.groups.cacheVersion):null;return{cacheKey:e.groups.cacheKey??null,cacheVersion:r,cacheSpec:e.groups.cacheSpec??null,hash:e.groups.hash}}var ape,u_,A_,Jb,Lr,uut,f_=Et(()=>{Ye();Pt();Pt();nA();ape=Be("crypto"),u_=$e(Be("fs"));Yl();rh();jl();xo();A_=Ky(process.env.YARN_CACHE_CHECKPOINT_OVERRIDE??process.env.YARN_CACHE_VERSION_OVERRIDE??9),Jb=Ky(process.env.YARN_CACHE_VERSION_OVERRIDE??10),Lr=class{constructor(e,{configuration:r,immutable:o=r.get("enableImmutableCache"),check:a=!1}){this.markedFiles=new Set;this.mutexes=new Map;this.cacheId=`-${(0,ape.randomBytes)(8).toString("hex")}.tmp`;this.configuration=r,this.cwd=e,this.immutable=o,this.check=a;let{cacheSpec:n,cacheKey:u}=Lr.getCacheKey(r);this.cacheSpec=n,this.cacheKey=u}static async find(e,{immutable:r,check:o}={}){let a=new Lr(e.get("cacheFolder"),{configuration:e,immutable:r,check:o});return await a.setup(),a}static getCacheKey(e){let r=e.get("compressionLevel"),o=r!=="mixed"?`c${r}`:"";return{cacheKey:[Jb,o].join(""),cacheSpec:o}}get mirrorCwd(){if(!this.configuration.get("enableMirror"))return null;let e=`${this.configuration.get("globalFolder")}/cache`;return e!==this.cwd?e:null}getVersionFilename(e){return`${aE(e)}-${this.cacheKey}.zip`}getChecksumFilename(e,r){let a=n2(r).hash.slice(0,10);return`${aE(e)}-${a}.zip`}isChecksumCompatible(e){if(e===null)return!1;let{cacheVersion:r,cacheSpec:o}=n2(e);if(r===null||r{let ae=new zi,we=K.join(Bt.root,sO(e));return ae.mkdirSync(we,{recursive:!0}),ae.writeJsonSync(K.join(we,dr.manifest),{name:fn(e),mocked:!0}),ae},E=async(ae,{isColdHit:we,controlPath:Pe=null})=>{if(Pe===null&&u.unstablePackages?.has(e.locatorHash))return{isValid:!0,hash:null};let g=r&&!we?n2(r).cacheKey:this.cacheKey,Ee=!u.skipIntegrityCheck||!r?`${g}/${await LS(ae)}`:r;if(Pe!==null){let ce=!u.skipIntegrityCheck||!r?`${this.cacheKey}/${await LS(Pe)}`:r;if(Ee!==ce)throw new zt(18,"The remote archive doesn't match the local checksum - has the local cache been corrupted?")}let De=null;switch(r!==null&&Ee!==r&&(this.check?De="throw":n2(r).cacheKey!==n2(Ee).cacheKey?De="update":De=this.configuration.get("checksumBehavior")),De){case null:case"update":return{isValid:!0,hash:Ee};case"ignore":return{isValid:!0,hash:r};case"reset":return{isValid:!1,hash:r};default:case"throw":throw new zt(18,"The remote archive doesn't match the expected checksum")}},I=async ae=>{if(!n)throw new Error(`Cache check required but no loader configured for ${jr(this.configuration,e)}`);let we=await n(),Pe=we.getRealPath();we.saveAndClose(),await oe.chmodPromise(Pe,420);let g=await E(ae,{controlPath:Pe,isColdHit:!1});if(!g.isValid)throw new Error("Assertion failed: Expected a valid checksum");return g.hash},v=async()=>{if(A===null||!await oe.existsPromise(A)){let ae=await n(),we=ae.getRealPath();return ae.saveAndClose(),{source:"loader",path:we}}return{source:"mirror",path:A}},b=async()=>{if(!n)throw new Error(`Cache entry required but missing for ${jr(this.configuration,e)}`);if(this.immutable)throw new zt(56,`Cache entry required but missing for ${jr(this.configuration,e)}`);let{path:ae,source:we}=await v(),{hash:Pe}=await E(ae,{isColdHit:!0}),g=this.getLocatorPath(e,Pe),Ee=[];we!=="mirror"&&A!==null&&Ee.push(async()=>{let ce=`${A}${this.cacheId}`;await oe.copyFilePromise(ae,ce,u_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(ce,420),await oe.renamePromise(ce,A)}),(!u.mirrorWriteOnly||A===null)&&Ee.push(async()=>{let ce=`${g}${this.cacheId}`;await oe.copyFilePromise(ae,ce,u_.default.constants.COPYFILE_FICLONE),await oe.chmodPromise(ce,420),await oe.renamePromise(ce,g)});let De=u.mirrorWriteOnly?A??g:g;return await Promise.all(Ee.map(ce=>ce())),[!1,De,Pe]},C=async()=>{let we=(async()=>{let Pe=u.unstablePackages?.has(e.locatorHash),g=Pe||!r||this.isChecksumCompatible(r)?this.getLocatorPath(e,r):null,Ee=g!==null?this.markedFiles.has(g)||await p.existsPromise(g):!1,De=!!u.mockedPackages?.has(e.locatorHash)&&(!this.check||!Ee),ce=De||Ee,ne=ce?o:a;if(ne&&ne(),ce){let ee=null,Ie=g;if(!De)if(this.check)ee=await I(Ie);else{let ke=await E(Ie,{isColdHit:!1});if(ke.isValid)ee=ke.hash;else return b()}return[De,Ie,ee]}else{if(this.immutable&&Pe)throw new zt(56,`Cache entry required but missing for ${jr(this.configuration,e)}; consider defining ${de.pretty(this.configuration,"supportedArchitectures",de.Type.CODE)} to cache packages for multiple systems`);return b()}})();this.mutexes.set(e.locatorHash,we);try{return await we}finally{this.mutexes.delete(e.locatorHash)}};for(let ae;ae=this.mutexes.get(e.locatorHash);)await ae;let[T,L,U]=await C();T||this.markedFiles.add(L);let J,te=T?()=>h():()=>new zi(L,{baseFs:p,readOnly:!0}),le=new ny(()=>wL(()=>J=te(),ae=>`Failed to open the cache entry for ${jr(this.configuration,e)}: ${ae}`),K),pe=new Uu(L,{baseFs:le,pathUtils:K}),Ae=()=>{J?.discardAndClose()},ye=u.unstablePackages?.has(e.locatorHash)?null:U;return[pe,Ae,ye]}},uut=/^(?:(?(?[0-9]+)(?.*))\/)?(?.*)$/});var zb,lpe=Et(()=>{zb=(r=>(r[r.SCRIPT=0]="SCRIPT",r[r.SHELLCODE=1]="SHELLCODE",r))(zb||{})});var Aut,sC,p_=Et(()=>{Pt();Nl();kf();xo();Aut=[[/^(git(?:\+(?:https|ssh))?:\/\/.*(?:\.git)?)#(.*)$/,(t,e,r,o)=>`${r}#commit=${o}`],[/^https:\/\/((?:[^/]+?)@)?codeload\.github\.com\/([^/]+\/[^/]+)\/tar\.gz\/([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https:\/\/((?:[^/]+?)@)?github\.com\/([^/]+\/[^/]+?)(?:\.git)?#([0-9a-f]+)$/,(t,e,r="",o,a)=>`https://${r}github.com/${o}.git#commit=${a}`],[/^https?:\/\/[^/]+\/(?:[^/]+\/)*(?:@.+(?:\/|(?:%2f)))?([^/]+)\/(?:-|download)\/\1-[^/]+\.tgz(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.pkg\.github\.com\/download\/(?:@[^/]+)\/(?:[^/]+)\/(?:[^/]+)\/(?:[0-9a-f]+)(?:#|$)/,t=>`npm:${t}`],[/^https:\/\/npm\.fontawesome\.com\/(?:@[^/]+)\/([^/]+)\/-\/([^/]+)\/\1-\2.tgz(?:#|$)/,t=>`npm:${t}`],[/^https?:\/\/[^/]+\/.*\/(@[^/]+)\/([^/]+)\/-\/\1\/\2-(?:[.\d\w-]+)\.tgz(?:#|$)/,(t,e)=>HS({protocol:"npm:",source:null,selector:t,params:{__archiveUrl:e}})],[/^[^/]+\.tgz#[0-9a-f]+$/,t=>`npm:${t}`]],sC=class{constructor(e){this.resolver=e;this.resolutions=null}async setup(e,{report:r}){let o=K.join(e.cwd,dr.lockfile);if(!oe.existsSync(o))return;let a=await oe.readFilePromise(o,"utf8"),n=Vi(a);if(Object.hasOwn(n,"__metadata"))return;let u=this.resolutions=new Map;for(let A of Object.keys(n)){let p=i1(A);if(!p){r.reportWarning(14,`Failed to parse the string "${A}" into a proper descriptor`);continue}let h=ba(p.range)?In(p,`npm:${p.range}`):p,{version:E,resolved:I}=n[A];if(!I)continue;let v;for(let[C,T]of Aut){let L=I.match(C);if(L){v=T(E,...L);break}}if(!v){r.reportWarning(14,`${qn(e.configuration,h)}: Only some patterns can be imported from legacy lockfiles (not "${I}")`);continue}let b=h;try{let C=Id(h.range),T=i1(C.selector,!0);T&&(b=T)}catch{}u.set(h.descriptorHash,Qs(b,v))}}supportsDescriptor(e,r){return this.resolutions?this.resolutions.has(e.descriptorHash):!1}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!this.resolutions)throw new Error("Assertion failed: The resolution store should have been setup");let a=this.resolutions.get(e.descriptorHash);if(!a)throw new Error("Assertion failed: The resolution should have been registered");let n=tO(a),u=o.project.configuration.normalizeDependency(n);return await this.resolver.getCandidates(u,r,o)}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){throw new Error("Assertion failed: This resolver doesn't support resolving locators to packages")}}});var AA,cpe=Et(()=>{Yl();L1();ql();AA=class extends Xs{constructor({configuration:r,stdout:o,suggestInstall:a=!0}){super();this.errorCount=0;zI(this,{configuration:r}),this.configuration=r,this.stdout=o,this.suggestInstall=a}static async start(r,o){let a=new this(r);try{await o(a)}catch(n){a.reportExceptionOnce(n)}finally{await a.finalize()}return a}hasErrors(){return this.errorCount>0}exitCode(){return this.hasErrors()?1:0}reportCacheHit(r){}reportCacheMiss(r){}startSectionSync(r,o){return o()}async startSectionPromise(r,o){return await o()}startTimerSync(r,o,a){return(typeof o=="function"?o:a)()}async startTimerPromise(r,o,a){return await(typeof o=="function"?o:a)()}reportSeparator(){}reportInfo(r,o){}reportWarning(r,o){}reportError(r,o){this.errorCount+=1,this.stdout.write(`${Ot(this.configuration,"\u27A4","redBright")} ${this.formatNameWithHyperlink(r)}: ${o} +`)}reportProgress(r){return{...Promise.resolve().then(async()=>{for await(let{}of r);}),stop:()=>{}}}reportJson(r){}reportFold(r,o){}async finalize(){this.errorCount>0&&(this.stdout.write(` +`),this.stdout.write(`${Ot(this.configuration,"\u27A4","redBright")} Errors happened when preparing the environment required to run this command. +`),this.suggestInstall&&this.stdout.write(`${Ot(this.configuration,"\u27A4","redBright")} This might be caused by packages being missing from the lockfile, in which case running "yarn install" might help. +`))}formatNameWithHyperlink(r){return CU(r,{configuration:this.configuration,json:!1})}}});var oC,h_=Et(()=>{xo();oC=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return!!(r.project.storedResolutions.get(e.descriptorHash)||r.project.originalPackages.has(OS(e).locatorHash))}supportsLocator(e,r){return!!(r.project.originalPackages.has(e.locatorHash)&&!r.project.lockfileNeedsRefresh)}shouldPersistResolution(e,r){throw new Error("The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){let a=o.project.storedResolutions.get(e.descriptorHash);if(a){let u=o.project.originalPackages.get(a);if(u)return[u]}let n=o.project.originalPackages.get(OS(e).locatorHash);if(n)return[n];throw new Error("Resolution expected from the lockfile data")}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let o=r.project.originalPackages.get(e.locatorHash);if(!o)throw new Error("The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache");return o}}});function Wf(){}function fut(t,e,r,o,a){for(var n=0,u=e.length,A=0,p=0;nb.length?T:b}),h.value=t.join(E)}else h.value=t.join(r.slice(A,A+h.count));A+=h.count,h.added||(p+=h.count)}}var v=e[u-1];return u>1&&typeof v.value=="string"&&(v.added||v.removed)&&t.equals("",v.value)&&(e[u-2].value+=v.value,e.pop()),e}function put(t){return{newPos:t.newPos,components:t.components.slice(0)}}function hut(t,e){if(typeof t=="function")e.callback=t;else if(t)for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e}function fpe(t,e,r){return r=hut(r,{ignoreWhitespace:!0}),E_.diff(t,e,r)}function gut(t,e,r){return C_.diff(t,e,r)}function Xb(t){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Xb=function(e){return typeof e}:Xb=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xb(t)}function g_(t){return yut(t)||Eut(t)||Cut(t)||wut()}function yut(t){if(Array.isArray(t))return d_(t)}function Eut(t){if(typeof Symbol<"u"&&Symbol.iterator in Object(t))return Array.from(t)}function Cut(t,e){if(!!t){if(typeof t=="string")return d_(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return d_(t,e)}}function d_(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,o=new Array(e);r"u"&&(u.context=4);var A=gut(r,o,u);if(!A)return;A.push({value:"",lines:[]});function p(U){return U.map(function(J){return" "+J})}for(var h=[],E=0,I=0,v=[],b=1,C=1,T=function(J){var te=A[J],le=te.lines||te.value.replace(/\n$/,"").split(` +`);if(te.lines=le,te.added||te.removed){var pe;if(!E){var Ae=A[J-1];E=b,I=C,Ae&&(v=u.context>0?p(Ae.lines.slice(-u.context)):[],E-=v.length,I-=v.length)}(pe=v).push.apply(pe,g_(le.map(function(ce){return(te.added?"+":"-")+ce}))),te.added?C+=le.length:b+=le.length}else{if(E)if(le.length<=u.context*2&&J=A.length-2&&le.length<=u.context){var g=/\n$/.test(r),Ee=/\n$/.test(o),De=le.length==0&&v.length>Pe.oldLines;!g&&De&&r.length>0&&v.splice(Pe.oldLines,0,"\\ No newline at end of file"),(!g&&!De||!Ee)&&v.push("\\ No newline at end of file")}h.push(Pe),E=0,I=0,v=[]}b+=le.length,C+=le.length}},L=0;L{Wf.prototype={diff:function(e,r){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},a=o.callback;typeof o=="function"&&(a=o,o={}),this.options=o;var n=this;function u(T){return a?(setTimeout(function(){a(void 0,T)},0),!0):T}e=this.castInput(e),r=this.castInput(r),e=this.removeEmpty(this.tokenize(e)),r=this.removeEmpty(this.tokenize(r));var A=r.length,p=e.length,h=1,E=A+p;o.maxEditLength&&(E=Math.min(E,o.maxEditLength));var I=[{newPos:-1,components:[]}],v=this.extractCommon(I[0],r,e,0);if(I[0].newPos+1>=A&&v+1>=p)return u([{value:this.join(r),count:r.length}]);function b(){for(var T=-1*h;T<=h;T+=2){var L=void 0,U=I[T-1],J=I[T+1],te=(J?J.newPos:0)-T;U&&(I[T-1]=void 0);var le=U&&U.newPos+1=A&&te+1>=p)return u(fut(n,L.components,r,e,n.useLongestToken));I[T]=L}h++}if(a)(function T(){setTimeout(function(){if(h>E)return a();b()||T()},0)})();else for(;h<=E;){var C=b();if(C)return C}},pushComponent:function(e,r,o){var a=e[e.length-1];a&&a.added===r&&a.removed===o?e[e.length-1]={count:a.count+1,added:r,removed:o}:e.push({count:1,added:r,removed:o})},extractCommon:function(e,r,o,a){for(var n=r.length,u=o.length,A=e.newPos,p=A-a,h=0;A+1"u"?r:u}:o;return typeof t=="string"?t:JSON.stringify(m_(t,null,null,a),a," ")};i2.equals=function(t,e){return Wf.prototype.equals.call(i2,t.replace(/,([\r\n])/g,"$1"),e.replace(/,([\r\n])/g,"$1"))};y_=new Wf;y_.tokenize=function(t){return t.slice()};y_.join=y_.removeEmpty=function(t){return t}});var gpe=_((o3t,hpe)=>{var But=Hl(),vut=fE(),Dut=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Put=/^\w*$/;function Sut(t,e){if(But(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||vut(t)?!0:Put.test(t)||!Dut.test(t)||e!=null&&t in Object(e)}hpe.exports=Sut});var ype=_((a3t,mpe)=>{var dpe=_P(),xut="Expected a function";function I_(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(xut);var r=function(){var o=arguments,a=e?e.apply(this,o):o[0],n=r.cache;if(n.has(a))return n.get(a);var u=t.apply(this,o);return r.cache=n.set(a,u)||n,u};return r.cache=new(I_.Cache||dpe),r}I_.Cache=dpe;mpe.exports=I_});var Cpe=_((l3t,Epe)=>{var but=ype(),kut=500;function Qut(t){var e=but(t,function(o){return r.size===kut&&r.clear(),o}),r=e.cache;return e}Epe.exports=Qut});var B_=_((c3t,wpe)=>{var Fut=Cpe(),Tut=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Rut=/\\(\\)?/g,Nut=Fut(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(Tut,function(r,o,a,n){e.push(a?n.replace(Rut,"$1"):o||r)}),e});wpe.exports=Nut});var jd=_((u3t,Ipe)=>{var Lut=Hl(),Mut=gpe(),Out=B_(),Uut=R1();function _ut(t,e){return Lut(t)?t:Mut(t,e)?[t]:Out(Uut(t))}Ipe.exports=_ut});var aC=_((A3t,Bpe)=>{var Hut=fE(),jut=1/0;function qut(t){if(typeof t=="string"||Hut(t))return t;var e=t+"";return e=="0"&&1/t==-jut?"-0":e}Bpe.exports=qut});var Zb=_((f3t,vpe)=>{var Gut=jd(),Yut=aC();function Wut(t,e){e=Gut(e,t);for(var r=0,o=e.length;t!=null&&r{var Vut=rS(),Kut=jd(),Jut=UI(),Dpe=il(),zut=aC();function Xut(t,e,r,o){if(!Dpe(t))return t;e=Kut(e,t);for(var a=-1,n=e.length,u=n-1,A=t;A!=null&&++a{var Zut=Zb(),$ut=v_(),eAt=jd();function tAt(t,e,r){for(var o=-1,a=e.length,n={};++o{function rAt(t,e){return t!=null&&e in Object(t)}bpe.exports=rAt});var D_=_((d3t,Qpe)=>{var nAt=jd(),iAt=LI(),sAt=Hl(),oAt=UI(),aAt=YP(),lAt=aC();function cAt(t,e,r){e=nAt(e,t);for(var o=-1,a=e.length,n=!1;++o{var uAt=kpe(),AAt=D_();function fAt(t,e){return t!=null&&AAt(t,e,uAt)}Fpe.exports=fAt});var Npe=_((y3t,Rpe)=>{var pAt=xpe(),hAt=Tpe();function gAt(t,e){return pAt(t,e,function(r,o){return hAt(t,o)})}Rpe.exports=gAt});var Upe=_((E3t,Ope)=>{var Lpe=fd(),dAt=LI(),mAt=Hl(),Mpe=Lpe?Lpe.isConcatSpreadable:void 0;function yAt(t){return mAt(t)||dAt(t)||!!(Mpe&&t&&t[Mpe])}Ope.exports=yAt});var jpe=_((C3t,Hpe)=>{var EAt=qP(),CAt=Upe();function _pe(t,e,r,o,a){var n=-1,u=t.length;for(r||(r=CAt),a||(a=[]);++n0&&r(A)?e>1?_pe(A,e-1,r,o,a):EAt(a,A):o||(a[a.length]=A)}return a}Hpe.exports=_pe});var Gpe=_((w3t,qpe)=>{var wAt=jpe();function IAt(t){var e=t==null?0:t.length;return e?wAt(t,1):[]}qpe.exports=IAt});var P_=_((I3t,Ype)=>{var BAt=Gpe(),vAt=pL(),DAt=hL();function PAt(t){return DAt(vAt(t,void 0,BAt),t+"")}Ype.exports=PAt});var S_=_((B3t,Wpe)=>{var SAt=Npe(),xAt=P_(),bAt=xAt(function(t,e){return t==null?{}:SAt(t,e)});Wpe.exports=bAt});var $b,Vpe=Et(()=>{Yl();$b=class{constructor(e){this.resolver=e}supportsDescriptor(e,r){return this.resolver.supportsDescriptor(e,r)}supportsLocator(e,r){return this.resolver.supportsLocator(e,r)}shouldPersistResolution(e,r){return this.resolver.shouldPersistResolution(e,r)}bindDescriptor(e,r,o){return this.resolver.bindDescriptor(e,r,o)}getResolutionDependencies(e,r){return this.resolver.getResolutionDependencies(e,r)}async getCandidates(e,r,o){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async getSatisfying(e,r,o,a){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}async resolve(e,r){throw new zt(20,`This package doesn't seem to be present in your lockfile; run "yarn install" to update the lockfile`)}}});var Qi,x_=Et(()=>{Yl();Qi=class extends Xs{reportCacheHit(e){}reportCacheMiss(e){}startSectionSync(e,r){return r()}async startSectionPromise(e,r){return await r()}startTimerSync(e,r,o){return(typeof r=="function"?r:o)()}async startTimerPromise(e,r,o){return await(typeof r=="function"?r:o)()}reportSeparator(){}reportInfo(e,r){}reportWarning(e,r){}reportError(e,r){}reportProgress(e){return{...Promise.resolve().then(async()=>{for await(let{}of e);}),stop:()=>{}}}reportJson(e){}reportFold(e,r){}async finalize(){}}});var Kpe,lC,b_=Et(()=>{Pt();Kpe=$e(RS());AE();Bd();ql();rh();kf();xo();lC=class{constructor(e,{project:r}){this.workspacesCwds=new Set;this.project=r,this.cwd=e}async setup(){this.manifest=await Mt.tryFind(this.cwd)??new Mt,this.relativeCwd=K.relative(this.project.cwd,this.cwd)||Bt.dot;let e=this.manifest.name?this.manifest.name:eA(null,`${this.computeCandidateName()}-${zs(this.relativeCwd).substring(0,6)}`);this.anchoredDescriptor=In(e,`${Xn.protocol}${this.relativeCwd}`),this.anchoredLocator=Qs(e,`${Xn.protocol}${this.relativeCwd}`);let r=this.manifest.workspaceDefinitions.map(({pattern:a})=>a);if(r.length===0)return;let o=await(0,Kpe.default)(r,{cwd:ue.fromPortablePath(this.cwd),onlyDirectories:!0,ignore:["**/node_modules","**/.git","**/.yarn"]});o.sort(),await o.reduce(async(a,n)=>{let u=K.resolve(this.cwd,ue.toPortablePath(n)),A=await oe.existsPromise(K.join(u,"package.json"));await a,A&&this.workspacesCwds.add(u)},Promise.resolve())}get anchoredPackage(){let e=this.project.storedPackages.get(this.anchoredLocator.locatorHash);if(!e)throw new Error(`Assertion failed: Expected workspace ${o1(this.project.configuration,this)} (${Ot(this.project.configuration,K.join(this.cwd,dr.manifest),yt.PATH)}) to have been resolved. Run "yarn install" to update the lockfile`);return e}accepts(e){let r=e.indexOf(":"),o=r!==-1?e.slice(0,r+1):null,a=r!==-1?e.slice(r+1):e;if(o===Xn.protocol&&K.normalize(a)===this.relativeCwd||o===Xn.protocol&&(a==="*"||a==="^"||a==="~"))return!0;let n=ba(a);return n?o===Xn.protocol?n.test(this.manifest.version??"0.0.0"):this.project.configuration.get("enableTransparentWorkspaces")&&this.manifest.version!==null?n.test(this.manifest.version):!1:!1}computeCandidateName(){return this.cwd===this.project.cwd?"root-workspace":`${K.basename(this.cwd)}`||"unnamed-workspace"}getRecursiveWorkspaceDependencies({dependencies:e=Mt.hardDependencies}={}){let r=new Set,o=a=>{for(let n of e)for(let u of a.manifest[n].values()){let A=this.project.tryWorkspaceByDescriptor(u);A===null||r.has(A)||(r.add(A),o(A))}};return o(this),r}getRecursiveWorkspaceDependents({dependencies:e=Mt.hardDependencies}={}){let r=new Set,o=a=>{for(let n of this.project.workspaces)e.some(A=>[...n.manifest[A].values()].some(p=>{let h=this.project.tryWorkspaceByDescriptor(p);return h!==null&&n1(h.anchoredLocator,a.anchoredLocator)}))&&!r.has(n)&&(r.add(n),o(n))};return o(this),r}getRecursiveWorkspaceChildren(){let e=new Set([this]);for(let r of e)for(let o of r.workspacesCwds){let a=this.project.workspacesByCwd.get(o);a&&e.add(a)}return e.delete(this),Array.from(e)}async persistManifest(){let e={};this.manifest.exportTo(e);let r=K.join(this.cwd,Mt.fileName),o=`${JSON.stringify(e,null,this.manifest.indent)} +`;await oe.changeFilePromise(r,o,{automaticNewlines:!0}),this.manifest.raw=e}}});function NAt({project:t,allDescriptors:e,allResolutions:r,allPackages:o,accessibleLocators:a=new Set,optionalBuilds:n=new Set,peerRequirements:u=new Map,peerWarnings:A=[],volatileDescriptors:p=new Set}){let h=new Map,E=[],I=new Map,v=new Map,b=new Map,C=new Map,T=new Map,L=new Map(t.workspaces.map(Ae=>{let ye=Ae.anchoredLocator.locatorHash,ae=o.get(ye);if(typeof ae>"u")throw new Error("Assertion failed: The workspace should have an associated package");return[ye,$I(ae)]})),U=()=>{let Ae=oe.mktempSync(),ye=K.join(Ae,"stacktrace.log"),ae=String(E.length+1).length,we=E.map((Pe,g)=>`${`${g+1}.`.padStart(ae," ")} ${xa(Pe)} +`).join("");throw oe.writeFileSync(ye,we),oe.detachTemp(Ae),new zt(45,`Encountered a stack overflow when resolving peer dependencies; cf ${ue.fromPortablePath(ye)}`)},J=Ae=>{let ye=r.get(Ae.descriptorHash);if(typeof ye>"u")throw new Error("Assertion failed: The resolution should have been registered");let ae=o.get(ye);if(!ae)throw new Error("Assertion failed: The package could not be found");return ae},te=(Ae,ye,ae,{top:we,optional:Pe})=>{E.length>1e3&&U(),E.push(ye);let g=le(Ae,ye,ae,{top:we,optional:Pe});return E.pop(),g},le=(Ae,ye,ae,{top:we,optional:Pe})=>{if(a.has(ye.locatorHash))return;a.add(ye.locatorHash),Pe||n.delete(ye.locatorHash);let g=o.get(ye.locatorHash);if(!g)throw new Error(`Assertion failed: The package (${jr(t.configuration,ye)}) should have been registered`);let Ee=[],De=[],ce=[],ne=[],ee=[];for(let ke of Array.from(g.dependencies.values())){if(g.peerDependencies.has(ke.identHash)&&g.locatorHash!==we)continue;if(Sf(ke))throw new Error("Assertion failed: Virtual packages shouldn't be encountered when virtualizing a branch");p.delete(ke.descriptorHash);let ht=Pe;if(!ht){let Te=g.dependenciesMeta.get(fn(ke));if(typeof Te<"u"){let Je=Te.get(null);typeof Je<"u"&&Je.optional&&(ht=!0)}}let H=r.get(ke.descriptorHash);if(!H)throw new Error(`Assertion failed: The resolution (${qn(t.configuration,ke)}) should have been registered`);let lt=L.get(H)||o.get(H);if(!lt)throw new Error(`Assertion failed: The package (${H}, resolved from ${qn(t.configuration,ke)}) should have been registered`);if(lt.peerDependencies.size===0){te(ke,lt,new Map,{top:we,optional:ht});continue}let Re,Qe,be=new Set,_e;De.push(()=>{Re=nO(ke,ye.locatorHash),Qe=iO(lt,ye.locatorHash),g.dependencies.delete(ke.identHash),g.dependencies.set(Re.identHash,Re),r.set(Re.descriptorHash,Qe.locatorHash),e.set(Re.descriptorHash,Re),o.set(Qe.locatorHash,Qe),Ee.push([lt,Re,Qe])}),ce.push(()=>{_e=new Map;for(let Te of Qe.peerDependencies.values()){let Je=g.dependencies.get(Te.identHash);if(!Je&&r1(ye,Te)&&(Ae.identHash===ye.identHash?Je=Ae:(Je=In(ye,Ae.range),e.set(Je.descriptorHash,Je),r.set(Je.descriptorHash,ye.locatorHash),p.delete(Je.descriptorHash))),(!Je||Je.range==="missing:")&&Qe.dependencies.has(Te.identHash)){Qe.peerDependencies.delete(Te.identHash);continue}Je||(Je=In(Te,"missing:")),Qe.dependencies.set(Je.identHash,Je),Sf(Je)&&dd(b,Je.descriptorHash).add(Qe.locatorHash),I.set(Je.identHash,Je),Je.range==="missing:"&&be.add(Je.identHash),_e.set(Te.identHash,ae.get(Te.identHash)??Qe.locatorHash)}Qe.dependencies=new Map(ks(Qe.dependencies,([Te,Je])=>fn(Je)))}),ne.push(()=>{if(!o.has(Qe.locatorHash))return;let Te=h.get(lt.locatorHash);typeof Te=="number"&&Te>=2&&U();let Je=h.get(lt.locatorHash),He=typeof Je<"u"?Je+1:1;h.set(lt.locatorHash,He),te(Re,Qe,_e,{top:we,optional:ht}),h.set(lt.locatorHash,He-1)}),ee.push(()=>{let Te=g.dependencies.get(ke.identHash);if(typeof Te>"u")throw new Error("Assertion failed: Expected the peer dependency to have been turned into a dependency");let Je=r.get(Te.descriptorHash);if(typeof Je>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");if(dd(T,Je).add(ye.locatorHash),!!o.has(Qe.locatorHash)){for(let He of Qe.peerDependencies.values()){let x=_e.get(He.identHash);if(typeof x>"u")throw new Error("Assertion failed: Expected the peer dependency ident to be registered");Gy(Yy(C,x),fn(He)).push(Qe.locatorHash)}for(let He of be)Qe.dependencies.delete(He)}})}for(let ke of[...De,...ce])ke();let Ie;do{Ie=!0;for(let[ke,ht,H]of Ee){let lt=Yy(v,ke.locatorHash),Re=zs(...[...H.dependencies.values()].map(Te=>{let Je=Te.range!=="missing:"?r.get(Te.descriptorHash):"missing:";if(typeof Je>"u")throw new Error(`Assertion failed: Expected the resolution for ${qn(t.configuration,Te)} to have been registered`);return Je===we?`${Je} (top)`:Je}),ht.identHash),Qe=lt.get(Re);if(typeof Qe>"u"){lt.set(Re,ht);continue}if(Qe===ht)continue;o.delete(H.locatorHash),e.delete(ht.descriptorHash),r.delete(ht.descriptorHash),a.delete(H.locatorHash);let be=b.get(ht.descriptorHash)||[],_e=[g.locatorHash,...be];b.delete(ht.descriptorHash);for(let Te of _e){let Je=o.get(Te);typeof Je>"u"||(Je.dependencies.get(ht.identHash).descriptorHash!==Qe.descriptorHash&&(Ie=!1),Je.dependencies.set(ht.identHash,Qe))}}}while(!Ie);for(let ke of[...ne,...ee])ke()};for(let Ae of t.workspaces){let ye=Ae.anchoredLocator;p.delete(Ae.anchoredDescriptor.descriptorHash),te(Ae.anchoredDescriptor,ye,new Map,{top:ye.locatorHash,optional:!1})}let pe=new Map;for(let[Ae,ye]of T){let ae=o.get(Ae);if(typeof ae>"u")throw new Error("Assertion failed: Expected the root to be registered");let we=C.get(Ae);if(!(typeof we>"u"))for(let Pe of ye){let g=o.get(Pe);if(!(typeof g>"u")&&!!t.tryWorkspaceByLocator(g))for(let[Ee,De]of we){let ce=Js(Ee);if(g.peerDependencies.has(ce.identHash))continue;let ne=`p${zs(Pe,Ee,Ae).slice(0,5)}`;u.set(ne,{subject:Pe,requested:ce,rootRequester:Ae,allRequesters:De});let ee=ae.dependencies.get(ce.identHash);if(typeof ee<"u"){let Ie=J(ee),ke=Ie.version??"0.0.0",ht=new Set;for(let lt of De){let Re=o.get(lt);if(typeof Re>"u")throw new Error("Assertion failed: Expected the link to be registered");let Qe=Re.peerDependencies.get(ce.identHash);if(typeof Qe>"u")throw new Error("Assertion failed: Expected the ident to be registered");ht.add(Qe.range)}if(![...ht].every(lt=>{if(lt.startsWith(Xn.protocol)){if(!t.tryWorkspaceByLocator(Ie))return!1;lt=lt.slice(Xn.protocol.length),(lt==="^"||lt==="~")&&(lt="*")}return bf(ke,lt)})){let lt=ol(pe,Ie.locatorHash,()=>({type:2,requested:ce,subject:Ie,dependents:new Map,requesters:new Map,links:new Map,version:ke,hash:`p${Ie.locatorHash.slice(0,5)}`}));lt.dependents.set(g.locatorHash,g),lt.requesters.set(ae.locatorHash,ae);for(let Re of De)lt.links.set(Re,o.get(Re));A.push({type:1,subject:g,requested:ce,requester:ae,version:ke,hash:ne,requirementCount:De.length})}}else ae.peerDependenciesMeta.get(Ee)?.optional||A.push({type:0,subject:g,requested:ce,requester:ae,hash:ne})}}}A.push(...pe.values())}function LAt(t,e){let r=BL(t.peerWarnings,"type"),o=r[2]?.map(n=>{let u=Array.from(n.links.values(),E=>{let I=t.storedPackages.get(E.locatorHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the package to be registered");let v=I.peerDependencies.get(n.requested.identHash);if(typeof v>"u")throw new Error("Assertion failed: Expected the ident to be registered");return v.range}),A=n.links.size>1?"and other dependencies request":"requests",p=aO(u),h=p?lE(t.configuration,p):Ot(t.configuration,"but they have non-overlapping ranges!","redBright");return`${cs(t.configuration,n.requested)} is listed by your project with version ${s1(t.configuration,n.version)}, which doesn't satisfy what ${cs(t.configuration,n.requesters.values().next().value)} (${Ot(t.configuration,n.hash,yt.CODE)}) ${A} (${h}).`})??[],a=r[0]?.map(n=>`${jr(t.configuration,n.subject)} doesn't provide ${cs(t.configuration,n.requested)} (${Ot(t.configuration,n.hash,yt.CODE)}), requested by ${cs(t.configuration,n.requester)}.`)??[];e.startSectionSync({reportFooter:()=>{e.reportWarning(86,`Some peer dependencies are incorrectly met; run ${Ot(t.configuration,"yarn explain peer-requirements ",yt.CODE)} for details, where ${Ot(t.configuration,"",yt.CODE)} is the six-letter p-prefixed code.`)},skipIfEmpty:!0},()=>{for(let n of ks(o,u=>zy.default(u)))e.reportWarning(60,n);for(let n of ks(a,u=>zy.default(u)))e.reportWarning(2,n)})}var ek,tk,rk,Xpe,F_,Q_,T_,nk,kAt,QAt,Jpe,FAt,TAt,RAt,pl,k_,ik,zpe,St,Zpe=Et(()=>{Pt();Pt();Nl();qt();ek=Be("crypto");w_();tk=$e(S_()),rk=$e(nd()),Xpe=$e(zn()),F_=Be("util"),Q_=$e(Be("v8")),T_=$e(Be("zlib"));f_();D1();p_();h_();AE();fO();Yl();Vpe();L1();x_();Bd();b_();VS();ql();rh();jl();Dx();DU();kf();xo();nk=Ky(process.env.YARN_LOCKFILE_VERSION_OVERRIDE??8),kAt=3,QAt=/ *, */g,Jpe=/\/$/,FAt=32,TAt=(0,F_.promisify)(T_.default.gzip),RAt=(0,F_.promisify)(T_.default.gunzip),pl=(r=>(r.UpdateLockfile="update-lockfile",r.SkipBuild="skip-build",r))(pl||{}),k_={restoreLinkersCustomData:["linkersCustomData"],restoreResolutions:["accessibleLocators","conditionalLocators","disabledLocators","optionalBuilds","storedDescriptors","storedResolutions","storedPackages","lockFileChecksum"],restoreBuildState:["skippedBuilds","storedBuildState"]},ik=(o=>(o[o.NotProvided=0]="NotProvided",o[o.NotCompatible=1]="NotCompatible",o[o.NotCompatibleAggregate=2]="NotCompatibleAggregate",o))(ik||{}),zpe=t=>zs(`${kAt}`,t),St=class{constructor(e,{configuration:r}){this.resolutionAliases=new Map;this.workspaces=[];this.workspacesByCwd=new Map;this.workspacesByIdent=new Map;this.storedResolutions=new Map;this.storedDescriptors=new Map;this.storedPackages=new Map;this.storedChecksums=new Map;this.storedBuildState=new Map;this.accessibleLocators=new Set;this.conditionalLocators=new Set;this.disabledLocators=new Set;this.originalPackages=new Map;this.optionalBuilds=new Set;this.skippedBuilds=new Set;this.lockfileLastVersion=null;this.lockfileNeedsRefresh=!1;this.peerRequirements=new Map;this.peerWarnings=[];this.linkersCustomData=new Map;this.lockFileChecksum=null;this.installStateChecksum=null;this.configuration=r,this.cwd=e}static async find(e,r){if(!e.projectCwd)throw new it(`No project found in ${r}`);let o=e.projectCwd,a=r,n=null;for(;n!==e.projectCwd;){if(n=a,oe.existsSync(K.join(n,dr.manifest))){o=n;break}a=K.dirname(n)}let u=new St(e.projectCwd,{configuration:e});Ve.telemetry?.reportProject(u.cwd),await u.setupResolutions(),await u.setupWorkspaces(),Ve.telemetry?.reportWorkspaceCount(u.workspaces.length),Ve.telemetry?.reportDependencyCount(u.workspaces.reduce((C,T)=>C+T.manifest.dependencies.size+T.manifest.devDependencies.size,0));let A=u.tryWorkspaceByCwd(o);if(A)return{project:u,workspace:A,locator:A.anchoredLocator};let p=await u.findLocatorForLocation(`${o}/`,{strict:!0});if(p)return{project:u,locator:p,workspace:null};let h=Ot(e,u.cwd,yt.PATH),E=Ot(e,K.relative(u.cwd,o),yt.PATH),I=`- If ${h} isn't intended to be a project, remove any yarn.lock and/or package.json file there.`,v=`- If ${h} is intended to be a project, it might be that you forgot to list ${E} in its workspace configuration.`,b=`- Finally, if ${h} is fine and you intend ${E} to be treated as a completely separate project (not even a workspace), create an empty yarn.lock file in it.`;throw new it(`The nearest package directory (${Ot(e,o,yt.PATH)}) doesn't seem to be part of the project declared in ${Ot(e,u.cwd,yt.PATH)}. + +${[I,v,b].join(` +`)}`)}async setupResolutions(){this.storedResolutions=new Map,this.storedDescriptors=new Map,this.storedPackages=new Map,this.lockFileChecksum=null;let e=K.join(this.cwd,dr.lockfile),r=this.configuration.get("defaultLanguageName");if(oe.existsSync(e)){let o=await oe.readFilePromise(e,"utf8");this.lockFileChecksum=zpe(o);let a=Vi(o);if(a.__metadata){let n=a.__metadata.version,u=a.__metadata.cacheKey;this.lockfileLastVersion=n,this.lockfileNeedsRefresh=n"u")throw new Error(`Assertion failed: Expected the lockfile entry to have a resolution field (${A})`);let h=xf(p.resolution,!0),E=new Mt;E.load(p,{yamlCompatibilityMode:!0});let I=E.version,v=E.languageName||r,b=p.linkType.toUpperCase(),C=p.conditions??null,T=E.dependencies,L=E.peerDependencies,U=E.dependenciesMeta,J=E.peerDependenciesMeta,te=E.bin;if(p.checksum!=null){let pe=typeof u<"u"&&!p.checksum.includes("/")?`${u}/${p.checksum}`:p.checksum;this.storedChecksums.set(h.locatorHash,pe)}let le={...h,version:I,languageName:v,linkType:b,conditions:C,dependencies:T,peerDependencies:L,dependenciesMeta:U,peerDependenciesMeta:J,bin:te};this.originalPackages.set(le.locatorHash,le);for(let pe of A.split(QAt)){let Ae=nh(pe);n<=6&&(Ae=this.configuration.normalizeDependency(Ae),Ae=In(Ae,Ae.range.replace(/^patch:[^@]+@(?!npm(:|%3A))/,"$1npm%3A"))),this.storedDescriptors.set(Ae.descriptorHash,Ae),this.storedResolutions.set(Ae.descriptorHash,h.locatorHash)}}}else o.includes("yarn lockfile v1")&&(this.lockfileLastVersion=-1)}}async setupWorkspaces(){this.workspaces=[],this.workspacesByCwd=new Map,this.workspacesByIdent=new Map;let e=new Set,r=(0,rk.default)(4),o=async(a,n)=>{if(e.has(n))return a;e.add(n);let u=new lC(n,{project:this});await r(()=>u.setup());let A=a.then(()=>{this.addWorkspace(u)});return Array.from(u.workspacesCwds).reduce(o,A)};await o(Promise.resolve(),this.cwd)}addWorkspace(e){let r=this.workspacesByIdent.get(e.anchoredLocator.identHash);if(typeof r<"u")throw new Error(`Duplicate workspace name ${cs(this.configuration,e.anchoredLocator)}: ${ue.fromPortablePath(e.cwd)} conflicts with ${ue.fromPortablePath(r.cwd)}`);this.workspaces.push(e),this.workspacesByCwd.set(e.cwd,e),this.workspacesByIdent.set(e.anchoredLocator.identHash,e)}get topLevelWorkspace(){return this.getWorkspaceByCwd(this.cwd)}tryWorkspaceByCwd(e){K.isAbsolute(e)||(e=K.resolve(this.cwd,e)),e=K.normalize(e).replace(/\/+$/,"");let r=this.workspacesByCwd.get(e);return r||null}getWorkspaceByCwd(e){let r=this.tryWorkspaceByCwd(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByFilePath(e){let r=null;for(let o of this.workspaces)K.relative(o.cwd,e).startsWith("../")||r&&r.cwd.length>=o.cwd.length||(r=o);return r||null}getWorkspaceByFilePath(e){let r=this.tryWorkspaceByFilePath(e);if(!r)throw new Error(`Workspace not found (${e})`);return r}tryWorkspaceByIdent(e){let r=this.workspacesByIdent.get(e.identHash);return typeof r>"u"?null:r}getWorkspaceByIdent(e){let r=this.tryWorkspaceByIdent(e);if(!r)throw new Error(`Workspace not found (${cs(this.configuration,e)})`);return r}tryWorkspaceByDescriptor(e){if(e.range.startsWith(Xn.protocol)){let o=e.range.slice(Xn.protocol.length);if(o!=="^"&&o!=="~"&&o!=="*"&&!ba(o))return this.tryWorkspaceByCwd(o)}let r=this.tryWorkspaceByIdent(e);return r===null||(Sf(e)&&(e=e1(e)),!r.accepts(e.range))?null:r}getWorkspaceByDescriptor(e){let r=this.tryWorkspaceByDescriptor(e);if(r===null)throw new Error(`Workspace not found (${qn(this.configuration,e)})`);return r}tryWorkspaceByLocator(e){let r=this.tryWorkspaceByIdent(e);return r===null||(Hc(e)&&(e=t1(e)),r.anchoredLocator.locatorHash!==e.locatorHash)?null:r}getWorkspaceByLocator(e){let r=this.tryWorkspaceByLocator(e);if(!r)throw new Error(`Workspace not found (${jr(this.configuration,e)})`);return r}deleteDescriptor(e){this.storedResolutions.delete(e),this.storedDescriptors.delete(e)}deleteLocator(e){this.originalPackages.delete(e),this.storedPackages.delete(e),this.accessibleLocators.delete(e)}forgetResolution(e){if("descriptorHash"in e){let r=this.storedResolutions.get(e.descriptorHash);this.deleteDescriptor(e.descriptorHash);let o=new Set(this.storedResolutions.values());typeof r<"u"&&!o.has(r)&&this.deleteLocator(r)}if("locatorHash"in e){this.deleteLocator(e.locatorHash);for(let[r,o]of this.storedResolutions)o===e.locatorHash&&this.deleteDescriptor(r)}}forgetTransientResolutions(){let e=this.configuration.makeResolver(),r=new Map;for(let[o,a]of this.storedResolutions.entries()){let n=r.get(a);n||r.set(a,n=new Set),n.add(o)}for(let o of this.originalPackages.values()){let a;try{a=e.shouldPersistResolution(o,{project:this,resolver:e})}catch{a=!1}if(!a){this.deleteLocator(o.locatorHash);let n=r.get(o.locatorHash);if(n){r.delete(o.locatorHash);for(let u of n)this.deleteDescriptor(u)}}}}forgetVirtualResolutions(){for(let e of this.storedPackages.values())for(let[r,o]of e.dependencies)Sf(o)&&e.dependencies.set(r,e1(o))}getDependencyMeta(e,r){let o={},n=this.topLevelWorkspace.manifest.dependenciesMeta.get(fn(e));if(!n)return o;let u=n.get(null);if(u&&Object.assign(o,u),r===null||!Xpe.default.valid(r))return o;for(let[A,p]of n)A!==null&&A===r&&Object.assign(o,p);return o}async findLocatorForLocation(e,{strict:r=!1}={}){let o=new Qi,a=this.configuration.getLinkers(),n={project:this,report:o};for(let u of a){let A=await u.findPackageLocator(e,n);if(A){if(r&&(await u.findPackageLocation(A,n)).replace(Jpe,"")!==e.replace(Jpe,""))continue;return A}}return null}async loadUserConfig(){let e=K.join(this.cwd,".pnp.cjs");await oe.existsPromise(e)&&vf(e).setup();let r=K.join(this.cwd,"yarn.config.cjs");return await oe.existsPromise(r)?vf(r):null}async preparePackage(e,{resolver:r,resolveOptions:o}){let a=await this.configuration.getPackageExtensions(),n=this.configuration.normalizePackage(e,{packageExtensions:a});for(let[u,A]of n.dependencies){let p=await this.configuration.reduceHook(E=>E.reduceDependency,A,this,n,A,{resolver:r,resolveOptions:o});if(!r1(A,p))throw new Error("Assertion failed: The descriptor ident cannot be changed through aliases");let h=r.bindDescriptor(p,n,o);n.dependencies.set(u,h)}return n}async resolveEverything(e){if(!this.workspacesByCwd||!this.workspacesByIdent)throw new Error("Workspaces must have been setup before calling this function");this.forgetVirtualResolutions();let r=new Map(this.originalPackages),o=[];e.lockfileOnly||this.forgetTransientResolutions();let a=e.resolver||this.configuration.makeResolver(),n=new sC(a);await n.setup(this,{report:e.report});let u=e.lockfileOnly?[new $b(a)]:[n,a],A=new vd([new oC(a),...u]),p=new vd([...u]),h=this.configuration.makeFetcher(),E=e.lockfileOnly?{project:this,report:e.report,resolver:A}:{project:this,report:e.report,resolver:A,fetchOptions:{project:this,cache:e.cache,checksums:this.storedChecksums,report:e.report,fetcher:h,cacheOptions:{mirrorWriteOnly:!0}}},I=new Map,v=new Map,b=new Map,C=new Map,T=new Map,L=new Map,U=this.topLevelWorkspace.anchoredLocator,J=new Set,te=[],le=_4(),pe=this.configuration.getSupportedArchitectures();await e.report.startProgressPromise(Xs.progressViaTitle(),async ce=>{let ne=async H=>{let lt=await Wy(async()=>await A.resolve(H,E),_e=>`${jr(this.configuration,H)}: ${_e}`);if(!n1(H,lt))throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${jr(this.configuration,H)} to ${jr(this.configuration,lt)})`);C.set(lt.locatorHash,lt),!r.delete(lt.locatorHash)&&!this.tryWorkspaceByLocator(lt)&&o.push(lt);let Qe=await this.preparePackage(lt,{resolver:A,resolveOptions:E}),be=Uc([...Qe.dependencies.values()].map(_e=>ht(_e)));return te.push(be),be.catch(()=>{}),v.set(Qe.locatorHash,Qe),Qe},ee=async H=>{let lt=T.get(H.locatorHash);if(typeof lt<"u")return lt;let Re=Promise.resolve().then(()=>ne(H));return T.set(H.locatorHash,Re),Re},Ie=async(H,lt)=>{let Re=await ht(lt);return I.set(H.descriptorHash,H),b.set(H.descriptorHash,Re.locatorHash),Re},ke=async H=>{ce.setTitle(qn(this.configuration,H));let lt=this.resolutionAliases.get(H.descriptorHash);if(typeof lt<"u")return Ie(H,this.storedDescriptors.get(lt));let Re=A.getResolutionDependencies(H,E),Qe=Object.fromEntries(await Uc(Object.entries(Re).map(async([Te,Je])=>{let He=A.bindDescriptor(Je,U,E),x=await ht(He);return J.add(x.locatorHash),[Te,x]}))),_e=(await Wy(async()=>await A.getCandidates(H,Qe,E),Te=>`${qn(this.configuration,H)}: ${Te}`))[0];if(typeof _e>"u")throw new zt(82,`${qn(this.configuration,H)}: No candidates found`);if(e.checkResolutions){let{locators:Te}=await p.getSatisfying(H,Qe,[_e],{...E,resolver:p});if(!Te.find(Je=>Je.locatorHash===_e.locatorHash))throw new zt(78,`Invalid resolution ${XI(this.configuration,H,_e)}`)}return I.set(H.descriptorHash,H),b.set(H.descriptorHash,_e.locatorHash),ee(_e)},ht=H=>{let lt=L.get(H.descriptorHash);if(typeof lt<"u")return lt;I.set(H.descriptorHash,H);let Re=Promise.resolve().then(()=>ke(H));return L.set(H.descriptorHash,Re),Re};for(let H of this.workspaces){let lt=H.anchoredDescriptor;te.push(ht(lt))}for(;te.length>0;){let H=[...te];te.length=0,await Uc(H)}});let Ae=sl(r.values(),ce=>this.tryWorkspaceByLocator(ce)?sl.skip:ce);if(o.length>0||Ae.length>0){let ce=new Set(this.workspaces.flatMap(H=>{let lt=v.get(H.anchoredLocator.locatorHash);if(!lt)throw new Error("Assertion failed: The workspace should have been resolved");return Array.from(lt.dependencies.values(),Re=>{let Qe=b.get(Re.descriptorHash);if(!Qe)throw new Error("Assertion failed: The resolution should have been registered");return Qe})})),ne=H=>ce.has(H.locatorHash)?"0":"1",ee=H=>xa(H),Ie=ks(o,[ne,ee]),ke=ks(Ae,[ne,ee]),ht=e.report.getRecommendedLength();Ie.length>0&&e.report.reportInfo(85,`${Ot(this.configuration,"+",yt.ADDED)} ${cS(this.configuration,Ie,ht)}`),ke.length>0&&e.report.reportInfo(85,`${Ot(this.configuration,"-",yt.REMOVED)} ${cS(this.configuration,ke,ht)}`)}let ye=new Set(this.resolutionAliases.values()),ae=new Set(v.keys()),we=new Set,Pe=new Map,g=[];NAt({project:this,accessibleLocators:we,volatileDescriptors:ye,optionalBuilds:ae,peerRequirements:Pe,peerWarnings:g,allDescriptors:I,allResolutions:b,allPackages:v});for(let ce of J)ae.delete(ce);for(let ce of ye)I.delete(ce),b.delete(ce);let Ee=new Set,De=new Set;for(let ce of v.values())ce.conditions!=null&&(!ae.has(ce.locatorHash)||(qS(ce,pe)||(qS(ce,le)&&e.report.reportWarningOnce(77,`${jr(this.configuration,ce)}: Your current architecture (${process.platform}-${process.arch}) is supported by this package, but is missing from the ${Ot(this.configuration,"supportedArchitectures",yt.SETTING)} setting`),De.add(ce.locatorHash)),Ee.add(ce.locatorHash)));this.storedResolutions=b,this.storedDescriptors=I,this.storedPackages=v,this.accessibleLocators=we,this.conditionalLocators=Ee,this.disabledLocators=De,this.originalPackages=C,this.optionalBuilds=ae,this.peerRequirements=Pe,this.peerWarnings=g}async fetchEverything({cache:e,report:r,fetcher:o,mode:a,persistProject:n=!0}){let u={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators},A=o||this.configuration.makeFetcher(),p={checksums:this.storedChecksums,project:this,cache:e,fetcher:A,report:r,cacheOptions:u},h=Array.from(new Set(ks(this.storedResolutions.values(),[C=>{let T=this.storedPackages.get(C);if(!T)throw new Error("Assertion failed: The locator should have been registered");return xa(T)}])));a==="update-lockfile"&&(h=h.filter(C=>!this.storedChecksums.has(C)));let E=!1,I=Xs.progressViaCounter(h.length);await r.reportProgress(I);let v=(0,rk.default)(FAt);if(await Uc(h.map(C=>v(async()=>{let T=this.storedPackages.get(C);if(!T)throw new Error("Assertion failed: The locator should have been registered");if(Hc(T))return;let L;try{L=await A.fetch(T,p)}catch(U){U.message=`${jr(this.configuration,T)}: ${U.message}`,r.reportExceptionOnce(U),E=U;return}L.checksum!=null?this.storedChecksums.set(T.locatorHash,L.checksum):this.storedChecksums.delete(T.locatorHash),L.releaseFs&&L.releaseFs()}).finally(()=>{I.tick()}))),E)throw E;let b=n&&a!=="update-lockfile"?await this.cacheCleanup({cache:e,report:r}):null;if(r.cacheMisses.size>0||b){let T=(await Promise.all([...r.cacheMisses].map(async Ae=>{let ye=this.storedPackages.get(Ae),ae=this.storedChecksums.get(Ae)??null,we=e.getLocatorPath(ye,ae);return(await oe.statPromise(we)).size}))).reduce((Ae,ye)=>Ae+ye,0)-(b?.size??0),L=r.cacheMisses.size,U=b?.count??0,J=`${nS(L,{zero:"No new packages",one:"A package was",more:`${Ot(this.configuration,L,yt.NUMBER)} packages were`})} added to the project`,te=`${nS(U,{zero:"none were",one:"one was",more:`${Ot(this.configuration,U,yt.NUMBER)} were`})} removed`,le=T!==0?` (${Ot(this.configuration,T,yt.SIZE_DIFF)})`:"",pe=U>0?L>0?`${J}, and ${te}${le}.`:`${J}, but ${te}${le}.`:`${J}${le}.`;r.reportInfo(13,pe)}}async linkEverything({cache:e,report:r,fetcher:o,mode:a}){let n={mockedPackages:this.disabledLocators,unstablePackages:this.conditionalLocators,skipIntegrityCheck:!0},u=o||this.configuration.makeFetcher(),A={checksums:this.storedChecksums,project:this,cache:e,fetcher:u,report:r,cacheOptions:n},p=this.configuration.getLinkers(),h={project:this,report:r},E=new Map(p.map(ce=>{let ne=ce.makeInstaller(h),ee=ce.getCustomDataKey(),Ie=this.linkersCustomData.get(ee);return typeof Ie<"u"&&ne.attachCustomData(Ie),[ce,ne]})),I=new Map,v=new Map,b=new Map,C=new Map(await Uc([...this.accessibleLocators].map(async ce=>{let ne=this.storedPackages.get(ce);if(!ne)throw new Error("Assertion failed: The locator should have been registered");return[ce,await u.fetch(ne,A)]}))),T=[],L=new Set,U=[];for(let ce of this.accessibleLocators){let ne=this.storedPackages.get(ce);if(typeof ne>"u")throw new Error("Assertion failed: The locator should have been registered");let ee=C.get(ne.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The fetch result should have been registered");let Ie=[],ke=H=>{Ie.push(H)},ht=this.tryWorkspaceByLocator(ne);if(ht!==null){let H=[],{scripts:lt}=ht.manifest;for(let Qe of["preinstall","install","postinstall"])lt.has(Qe)&&H.push({type:0,script:Qe});try{for(let[Qe,be]of E)if(Qe.supportsPackage(ne,h)&&(await be.installPackage(ne,ee,{holdFetchResult:ke})).buildRequest!==null)throw new Error("Assertion failed: Linkers can't return build directives for workspaces; this responsibility befalls to the Yarn core")}finally{Ie.length===0?ee.releaseFs?.():T.push(Uc(Ie).catch(()=>{}).then(()=>{ee.releaseFs?.()}))}let Re=K.join(ee.packageFs.getRealPath(),ee.prefixPath);v.set(ne.locatorHash,Re),!Hc(ne)&&H.length>0&&b.set(ne.locatorHash,{buildDirectives:H,buildLocations:[Re]})}else{let H=p.find(Qe=>Qe.supportsPackage(ne,h));if(!H)throw new zt(12,`${jr(this.configuration,ne)} isn't supported by any available linker`);let lt=E.get(H);if(!lt)throw new Error("Assertion failed: The installer should have been registered");let Re;try{Re=await lt.installPackage(ne,ee,{holdFetchResult:ke})}finally{Ie.length===0?ee.releaseFs?.():T.push(Uc(Ie).then(()=>{}).then(()=>{ee.releaseFs?.()}))}I.set(ne.locatorHash,H),v.set(ne.locatorHash,Re.packageLocation),Re.buildRequest&&Re.packageLocation&&(Re.buildRequest.skipped?(L.add(ne.locatorHash),this.skippedBuilds.has(ne.locatorHash)||U.push([ne,Re.buildRequest.explain])):b.set(ne.locatorHash,{buildDirectives:Re.buildRequest.directives,buildLocations:[Re.packageLocation]}))}}let J=new Map;for(let ce of this.accessibleLocators){let ne=this.storedPackages.get(ce);if(!ne)throw new Error("Assertion failed: The locator should have been registered");let ee=this.tryWorkspaceByLocator(ne)!==null,Ie=async(ke,ht)=>{let H=v.get(ne.locatorHash);if(typeof H>"u")throw new Error(`Assertion failed: The package (${jr(this.configuration,ne)}) should have been registered`);let lt=[];for(let Re of ne.dependencies.values()){let Qe=this.storedResolutions.get(Re.descriptorHash);if(typeof Qe>"u")throw new Error(`Assertion failed: The resolution (${qn(this.configuration,Re)}, from ${jr(this.configuration,ne)})should have been registered`);let be=this.storedPackages.get(Qe);if(typeof be>"u")throw new Error(`Assertion failed: The package (${Qe}, resolved from ${qn(this.configuration,Re)}) should have been registered`);let _e=this.tryWorkspaceByLocator(be)===null?I.get(Qe):null;if(typeof _e>"u")throw new Error(`Assertion failed: The package (${Qe}, resolved from ${qn(this.configuration,Re)}) should have been registered`);_e===ke||_e===null?v.get(be.locatorHash)!==null&<.push([Re,be]):!ee&&H!==null&&Gy(J,Qe).push(H)}H!==null&&await ht.attachInternalDependencies(ne,lt)};if(ee)for(let[ke,ht]of E)ke.supportsPackage(ne,h)&&await Ie(ke,ht);else{let ke=I.get(ne.locatorHash);if(!ke)throw new Error("Assertion failed: The linker should have been found");let ht=E.get(ke);if(!ht)throw new Error("Assertion failed: The installer should have been registered");await Ie(ke,ht)}}for(let[ce,ne]of J){let ee=this.storedPackages.get(ce);if(!ee)throw new Error("Assertion failed: The package should have been registered");let Ie=I.get(ee.locatorHash);if(!Ie)throw new Error("Assertion failed: The linker should have been found");let ke=E.get(Ie);if(!ke)throw new Error("Assertion failed: The installer should have been registered");await ke.attachExternalDependents(ee,ne)}let te=new Map;for(let[ce,ne]of E){let ee=await ne.finalizeInstall();for(let Ie of ee?.records??[])Ie.buildRequest.skipped?(L.add(Ie.locator.locatorHash),this.skippedBuilds.has(Ie.locator.locatorHash)||U.push([Ie.locator,Ie.buildRequest.explain])):b.set(Ie.locator.locatorHash,{buildDirectives:Ie.buildRequest.directives,buildLocations:Ie.buildLocations});typeof ee?.customData<"u"&&te.set(ce.getCustomDataKey(),ee.customData)}if(this.linkersCustomData=te,await Uc(T),a==="skip-build")return;for(let[,ce]of ks(U,([ne])=>xa(ne)))ce(r);let le=new Set(this.storedPackages.keys()),pe=new Set(b.keys());for(let ce of pe)le.delete(ce);let Ae=(0,ek.createHash)("sha512");Ae.update(process.versions.node),await this.configuration.triggerHook(ce=>ce.globalHashGeneration,this,ce=>{Ae.update("\0"),Ae.update(ce)});let ye=Ae.digest("hex"),ae=new Map,we=ce=>{let ne=ae.get(ce.locatorHash);if(typeof ne<"u")return ne;let ee=this.storedPackages.get(ce.locatorHash);if(typeof ee>"u")throw new Error("Assertion failed: The package should have been registered");let Ie=(0,ek.createHash)("sha512");Ie.update(ce.locatorHash),ae.set(ce.locatorHash,"");for(let ke of ee.dependencies.values()){let ht=this.storedResolutions.get(ke.descriptorHash);if(typeof ht>"u")throw new Error(`Assertion failed: The resolution (${qn(this.configuration,ke)}) should have been registered`);let H=this.storedPackages.get(ht);if(typeof H>"u")throw new Error("Assertion failed: The package should have been registered");Ie.update(we(H))}return ne=Ie.digest("hex"),ae.set(ce.locatorHash,ne),ne},Pe=(ce,ne)=>{let ee=(0,ek.createHash)("sha512");ee.update(ye),ee.update(we(ce));for(let Ie of ne)ee.update(Ie);return ee.digest("hex")},g=new Map,Ee=!1,De=ce=>{let ne=new Set([ce.locatorHash]);for(let ee of ne){let Ie=this.storedPackages.get(ee);if(!Ie)throw new Error("Assertion failed: The package should have been registered");for(let ke of Ie.dependencies.values()){let ht=this.storedResolutions.get(ke.descriptorHash);if(!ht)throw new Error(`Assertion failed: The resolution (${qn(this.configuration,ke)}) should have been registered`);if(ht!==ce.locatorHash&&pe.has(ht))return!1;let H=this.storedPackages.get(ht);if(!H)throw new Error("Assertion failed: The package should have been registered");let lt=this.tryWorkspaceByLocator(H);if(lt){if(lt.anchoredLocator.locatorHash!==ce.locatorHash&&pe.has(lt.anchoredLocator.locatorHash))return!1;ne.add(lt.anchoredLocator.locatorHash)}ne.add(ht)}}return!0};for(;pe.size>0;){let ce=pe.size,ne=[];for(let ee of pe){let Ie=this.storedPackages.get(ee);if(!Ie)throw new Error("Assertion failed: The package should have been registered");if(!De(Ie))continue;let ke=b.get(Ie.locatorHash);if(!ke)throw new Error("Assertion failed: The build directive should have been registered");let ht=Pe(Ie,ke.buildLocations);if(this.storedBuildState.get(Ie.locatorHash)===ht){g.set(Ie.locatorHash,ht),pe.delete(ee);continue}Ee||(await this.persistInstallStateFile(),Ee=!0),this.storedBuildState.has(Ie.locatorHash)?r.reportInfo(8,`${jr(this.configuration,Ie)} must be rebuilt because its dependency tree changed`):r.reportInfo(7,`${jr(this.configuration,Ie)} must be built because it never has been before or the last one failed`);let H=ke.buildLocations.map(async lt=>{if(!K.isAbsolute(lt))throw new Error(`Assertion failed: Expected the build location to be absolute (not ${lt})`);for(let Re of ke.buildDirectives){let Qe=`# This file contains the result of Yarn building a package (${xa(Ie)}) +`;switch(Re.type){case 0:Qe+=`# Script name: ${Re.script} +`;break;case 1:Qe+=`# Script code: ${Re.script} +`;break}let be=null;if(!await oe.mktempPromise(async Te=>{let Je=K.join(Te,"build.log"),{stdout:He,stderr:x}=this.configuration.getSubprocessStreams(Je,{header:Qe,prefix:jr(this.configuration,Ie),report:r}),w;try{switch(Re.type){case 0:w=await Vx(Ie,Re.script,[],{cwd:lt,project:this,stdin:be,stdout:He,stderr:x});break;case 1:w=await wU(Ie,Re.script,[],{cwd:lt,project:this,stdin:be,stdout:He,stderr:x});break}}catch(F){x.write(F.stack),w=1}if(He.end(),x.end(),w===0)return!0;oe.detachTemp(Te);let S=`${jr(this.configuration,Ie)} couldn't be built successfully (exit code ${Ot(this.configuration,w,yt.NUMBER)}, logs can be found here: ${Ot(this.configuration,Je,yt.PATH)})`,y=this.optionalBuilds.has(Ie.locatorHash);return y?r.reportInfo(9,S):r.reportError(9,S),Jce&&r.reportFold(ue.fromPortablePath(Je),oe.readFileSync(Je,"utf8")),y}))return!1}return!0});ne.push(...H,Promise.allSettled(H).then(lt=>{pe.delete(ee),lt.every(Re=>Re.status==="fulfilled"&&Re.value===!0)&&g.set(Ie.locatorHash,ht)}))}if(await Uc(ne),ce===pe.size){let ee=Array.from(pe).map(Ie=>{let ke=this.storedPackages.get(Ie);if(!ke)throw new Error("Assertion failed: The package should have been registered");return jr(this.configuration,ke)}).join(", ");r.reportError(3,`Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${ee})`);break}}this.storedBuildState=g,this.skippedBuilds=L}async installWithNewReport(e,r){return(await Nt.start({configuration:this.configuration,json:e.json,stdout:e.stdout,forceSectionAlignment:!0,includeLogs:!e.json&&!e.quiet,includeVersion:!0},async a=>{await this.install({...r,report:a})})).exitCode()}async install(e){let r=this.configuration.get("nodeLinker");Ve.telemetry?.reportInstall(r);let o=!1;if(await e.report.startTimerPromise("Project validation",{skipIfEmpty:!0},async()=>{this.configuration.get("enableOfflineMode")&&e.report.reportWarning(90,"Offline work is enabled; Yarn won't fetch packages from the remote registry if it can avoid it"),await this.configuration.triggerHook(E=>E.validateProject,this,{reportWarning:(E,I)=>{e.report.reportWarning(E,I)},reportError:(E,I)=>{e.report.reportError(E,I),o=!0}})}),o)return;let a=await this.configuration.getPackageExtensions();for(let E of a.values())for(let[,I]of E)for(let v of I)v.status="inactive";let n=K.join(this.cwd,dr.lockfile),u=null;if(e.immutable)try{u=await oe.readFilePromise(n,"utf8")}catch(E){throw E.code==="ENOENT"?new zt(28,"The lockfile would have been created by this install, which is explicitly forbidden."):E}await e.report.startTimerPromise("Resolution step",async()=>{await this.resolveEverything(e)}),await e.report.startTimerPromise("Post-resolution validation",{skipIfEmpty:!0},async()=>{LAt(this,e.report);for(let[,E]of a)for(let[,I]of E)for(let v of I)if(v.userProvided){let b=Ot(this.configuration,v,yt.PACKAGE_EXTENSION);switch(v.status){case"inactive":e.report.reportWarning(68,`${b}: No matching package in the dependency tree; you may not need this rule anymore.`);break;case"redundant":e.report.reportWarning(69,`${b}: This rule seems redundant when applied on the original package; the extension may have been applied upstream.`);break}}if(u!==null){let E=Ug(u,this.generateLockfile());if(E!==u){let I=ppe(n,n,u,E,void 0,void 0,{maxEditLength:100});if(I){e.report.reportSeparator();for(let v of I.hunks){e.report.reportInfo(null,`@@ -${v.oldStart},${v.oldLines} +${v.newStart},${v.newLines} @@`);for(let b of v.lines)b.startsWith("+")?e.report.reportError(28,Ot(this.configuration,b,yt.ADDED)):b.startsWith("-")?e.report.reportError(28,Ot(this.configuration,b,yt.REMOVED)):e.report.reportInfo(null,Ot(this.configuration,b,"grey"))}e.report.reportSeparator()}throw new zt(28,"The lockfile would have been modified by this install, which is explicitly forbidden.")}}});for(let E of a.values())for(let[,I]of E)for(let v of I)v.userProvided&&v.status==="active"&&Ve.telemetry?.reportPackageExtension(yd(v,yt.PACKAGE_EXTENSION));await e.report.startTimerPromise("Fetch step",async()=>{await this.fetchEverything(e)});let A=e.immutable?[...new Set(this.configuration.get("immutablePatterns"))].sort():[],p=await Promise.all(A.map(async E=>MS(E,{cwd:this.cwd})));(typeof e.persistProject>"u"||e.persistProject)&&await this.persist(),await e.report.startTimerPromise("Link step",async()=>{if(e.mode==="update-lockfile"){e.report.reportWarning(73,`Skipped due to ${Ot(this.configuration,"mode=update-lockfile",yt.CODE)}`);return}await this.linkEverything(e);let E=await Promise.all(A.map(async I=>MS(I,{cwd:this.cwd})));for(let I=0;I{await this.configuration.triggerHook(E=>E.validateProjectAfterInstall,this,{reportWarning:(E,I)=>{e.report.reportWarning(E,I)},reportError:(E,I)=>{e.report.reportError(E,I),h=!0}})}),!h&&await this.configuration.triggerHook(E=>E.afterAllInstalled,this,e)}generateLockfile(){let e=new Map;for(let[n,u]of this.storedResolutions.entries()){let A=e.get(u);A||e.set(u,A=new Set),A.add(n)}let r={},{cacheKey:o}=Lr.getCacheKey(this.configuration);r.__metadata={version:nk,cacheKey:o};for(let[n,u]of e.entries()){let A=this.originalPackages.get(n);if(!A)continue;let p=[];for(let b of u){let C=this.storedDescriptors.get(b);if(!C)throw new Error("Assertion failed: The descriptor should have been registered");p.push(C)}let h=p.map(b=>Sa(b)).sort().join(", "),E=new Mt;E.version=A.linkType==="HARD"?A.version:"0.0.0-use.local",E.languageName=A.languageName,E.dependencies=new Map(A.dependencies),E.peerDependencies=new Map(A.peerDependencies),E.dependenciesMeta=new Map(A.dependenciesMeta),E.peerDependenciesMeta=new Map(A.peerDependenciesMeta),E.bin=new Map(A.bin);let I,v=this.storedChecksums.get(A.locatorHash);if(typeof v<"u"){let b=v.indexOf("/");if(b===-1)throw new Error("Assertion failed: Expected the checksum to reference its cache key");let C=v.slice(0,b),T=v.slice(b+1);C===o?I=T:I=v}r[h]={...E.exportTo({},{compatibilityMode:!1}),linkType:A.linkType.toLowerCase(),resolution:xa(A),checksum:I,conditions:A.conditions||void 0}}return`${[`# This file is generated by running "yarn install" inside your project. +`,`# Manual changes might be lost - proceed with caution! +`].join("")} +`+Ba(r)}async persistLockfile(){let e=K.join(this.cwd,dr.lockfile),r="";try{r=await oe.readFilePromise(e,"utf8")}catch{}let o=this.generateLockfile(),a=Ug(r,o);a!==r&&(await oe.writeFilePromise(e,a),this.lockFileChecksum=zpe(a),this.lockfileNeedsRefresh=!1)}async persistInstallStateFile(){let e=[];for(let u of Object.values(k_))e.push(...u);let r=(0,tk.default)(this,e),o=Q_.default.serialize(r),a=zs(o);if(this.installStateChecksum===a)return;let n=this.configuration.get("installStatePath");await oe.mkdirPromise(K.dirname(n),{recursive:!0}),await oe.writeFilePromise(n,await TAt(o)),this.installStateChecksum=a}async restoreInstallState({restoreLinkersCustomData:e=!0,restoreResolutions:r=!0,restoreBuildState:o=!0}={}){let a=this.configuration.get("installStatePath"),n;try{let u=await RAt(await oe.readFilePromise(a));n=Q_.default.deserialize(u),this.installStateChecksum=zs(u)}catch{r&&await this.applyLightResolution();return}e&&typeof n.linkersCustomData<"u"&&(this.linkersCustomData=n.linkersCustomData),o&&Object.assign(this,(0,tk.default)(n,k_.restoreBuildState)),r&&(n.lockFileChecksum===this.lockFileChecksum?Object.assign(this,(0,tk.default)(n,k_.restoreResolutions)):await this.applyLightResolution())}async applyLightResolution(){await this.resolveEverything({lockfileOnly:!0,report:new Qi}),await this.persistInstallStateFile()}async persist(){let e=(0,rk.default)(4);await Promise.all([this.persistLockfile(),...this.workspaces.map(r=>e(()=>r.persistManifest()))])}async cacheCleanup({cache:e,report:r}){if(this.configuration.get("enableGlobalCache"))return null;let o=new Set([".gitignore"]);if(!IO(e.cwd,this.cwd)||!await oe.existsPromise(e.cwd))return null;let a=[];for(let u of await oe.readdirPromise(e.cwd)){if(o.has(u))continue;let A=K.resolve(e.cwd,u);e.markedFiles.has(A)||(e.immutable?r.reportError(56,`${Ot(this.configuration,K.basename(A),"magenta")} appears to be unused and would be marked for deletion, but the cache is immutable`):a.push(oe.lstatPromise(A).then(async p=>(await oe.removePromise(A),p.size))))}if(a.length===0)return null;let n=await Promise.all(a);return{count:a.length,size:n.reduce((u,A)=>u+A,0)}}}});function MAt(t){let o=Math.floor(t.timeNow/864e5),a=t.updateInterval*864e5,n=t.state.lastUpdate??t.timeNow+a+Math.floor(a*t.randomInitialInterval),u=n+a,A=t.state.lastTips??o*864e5,p=A+864e5+8*36e5-t.timeZone,h=u<=t.timeNow,E=p<=t.timeNow,I=null;return(h||E||!t.state.lastUpdate||!t.state.lastTips)&&(I={},I.lastUpdate=h?t.timeNow:n,I.lastTips=A,I.blocks=h?{}:t.state.blocks,I.displayedTips=t.state.displayedTips),{nextState:I,triggerUpdate:h,triggerTips:E,nextTips:E?o*864e5:A}}var cC,$pe=Et(()=>{Pt();N1();rh();Bx();jl();kf();cC=class{constructor(e,r){this.values=new Map;this.hits=new Map;this.enumerators=new Map;this.nextTips=0;this.displayedTips=[];this.shouldCommitTips=!1;this.configuration=e;let o=this.getRegistryPath();this.isNew=!oe.existsSync(o),this.shouldShowTips=!1,this.sendReport(r),this.startBuffer()}commitTips(){this.shouldShowTips&&(this.shouldCommitTips=!0)}selectTip(e){let r=new Set(this.displayedTips),o=A=>A&&tn?bf(tn,A):!1,a=e.map((A,p)=>p).filter(A=>e[A]&&o(e[A]?.selector));if(a.length===0)return null;let n=a.filter(A=>!r.has(A));if(n.length===0){let A=Math.floor(a.length*.2);this.displayedTips=A>0?this.displayedTips.slice(-A):[],n=a.filter(p=>!r.has(p))}let u=n[Math.floor(Math.random()*n.length)];return this.displayedTips.push(u),this.commitTips(),e[u]}reportVersion(e){this.reportValue("version",e.replace(/-git\..*/,"-git"))}reportCommandName(e){this.reportValue("commandName",e||"")}reportPluginName(e){this.reportValue("pluginName",e)}reportProject(e){this.reportEnumerator("projectCount",e)}reportInstall(e){this.reportHit("installCount",e)}reportPackageExtension(e){this.reportValue("packageExtension",e)}reportWorkspaceCount(e){this.reportValue("workspaceCount",String(e))}reportDependencyCount(e){this.reportValue("dependencyCount",String(e))}reportValue(e,r){dd(this.values,e).add(r)}reportEnumerator(e,r){dd(this.enumerators,e).add(zs(r))}reportHit(e,r="*"){let o=Yy(this.hits,e),a=ol(o,r,()=>0);o.set(r,a+1)}getRegistryPath(){let e=this.configuration.get("globalFolder");return K.join(e,"telemetry.json")}sendReport(e){let r=this.getRegistryPath(),o;try{o=oe.readJsonSync(r)}catch{o={}}let{nextState:a,triggerUpdate:n,triggerTips:u,nextTips:A}=MAt({state:o,timeNow:Date.now(),timeZone:new Date().getTimezoneOffset()*60*1e3,randomInitialInterval:Math.random(),updateInterval:this.configuration.get("telemetryInterval")});if(this.nextTips=A,this.displayedTips=o.displayedTips??[],a!==null)try{oe.mkdirSync(K.dirname(r),{recursive:!0}),oe.writeJsonSync(r,a)}catch{return!1}if(u&&this.configuration.get("enableTips")&&(this.shouldShowTips=!0),n){let p=o.blocks??{};if(Object.keys(p).length===0){let h=`https://browser-http-intake.logs.datadoghq.eu/v1/input/${e}?ddsource=yarn`,E=I=>U4(h,I,{configuration:this.configuration}).catch(()=>{});for(let[I,v]of Object.entries(o.blocks??{})){if(Object.keys(v).length===0)continue;let b=v;b.userId=I,b.reportType="primary";for(let L of Object.keys(b.enumerators??{}))b.enumerators[L]=b.enumerators[L].length;E(b);let C=new Map,T=20;for(let[L,U]of Object.entries(b.values))U.length>0&&C.set(L,U.slice(0,T));for(;C.size>0;){let L={};L.userId=I,L.reportType="secondary",L.metrics={};for(let[U,J]of C)L.metrics[U]=J.shift(),J.length===0&&C.delete(U);E(L)}}}}return!0}applyChanges(){let e=this.getRegistryPath(),r;try{r=oe.readJsonSync(e)}catch{r={}}let o=this.configuration.get("telemetryUserId")??"*",a=r.blocks=r.blocks??{},n=a[o]=a[o]??{};for(let u of this.hits.keys()){let A=n.hits=n.hits??{},p=A[u]=A[u]??{};for(let[h,E]of this.hits.get(u))p[h]=(p[h]??0)+E}for(let u of["values","enumerators"])for(let A of this[u].keys()){let p=n[u]=n[u]??{};p[A]=[...new Set([...p[A]??[],...this[u].get(A)??[]])]}this.shouldCommitTips&&(r.lastTips=this.nextTips,r.displayedTips=this.displayedTips),oe.mkdirSync(K.dirname(e),{recursive:!0}),oe.writeJsonSync(e,r)}startBuffer(){process.on("exit",()=>{try{this.applyChanges()}catch{}})}}});var s2={};Kt(s2,{BuildDirectiveType:()=>zb,CACHE_CHECKPOINT:()=>A_,CACHE_VERSION:()=>Jb,Cache:()=>Lr,Configuration:()=>Ve,DEFAULT_RC_FILENAME:()=>W4,FormatType:()=>Qle,InstallMode:()=>pl,LEGACY_PLUGINS:()=>B1,LOCKFILE_VERSION:()=>nk,LegacyMigrationResolver:()=>sC,LightReport:()=>AA,LinkType:()=>Jy,LockfileResolver:()=>oC,Manifest:()=>Mt,MessageName:()=>wr,MultiFetcher:()=>pE,PackageExtensionStatus:()=>DL,PackageExtensionType:()=>vL,PeerWarningType:()=>ik,Project:()=>St,Report:()=>Xs,ReportError:()=>zt,SettingsType:()=>v1,StreamReport:()=>Nt,TAG_REGEXP:()=>QE,TelemetryManager:()=>cC,ThrowReport:()=>Qi,VirtualFetcher:()=>hE,WindowsLinkType:()=>kx,Workspace:()=>lC,WorkspaceFetcher:()=>dE,WorkspaceResolver:()=>Xn,YarnVersion:()=>tn,execUtils:()=>Ur,folderUtils:()=>WS,formatUtils:()=>de,hashUtils:()=>wn,httpUtils:()=>rn,miscUtils:()=>je,nodeUtils:()=>Ji,parseMessageName:()=>fP,reportOptionDeprecations:()=>NE,scriptUtils:()=>un,semverUtils:()=>kr,stringifyMessageName:()=>Wu,structUtils:()=>W,tgzUtils:()=>Xi,treeUtils:()=>$s});var Ye=Et(()=>{Px();VS();ql();rh();Bx();jl();Dx();DU();kf();xo();$fe();ope();f_();D1();D1();lpe();p_();cpe();h_();AE();pP();AO();Zpe();Yl();L1();$pe();x_();pO();hO();Bd();b_();N1();Ine()});var she=_((K_t,a2)=>{"use strict";var UAt=process.env.TERM_PROGRAM==="Hyper",_At=process.platform==="win32",rhe=process.platform==="linux",R_={ballotDisabled:"\u2612",ballotOff:"\u2610",ballotOn:"\u2611",bullet:"\u2022",bulletWhite:"\u25E6",fullBlock:"\u2588",heart:"\u2764",identicalTo:"\u2261",line:"\u2500",mark:"\u203B",middot:"\xB7",minus:"\uFF0D",multiplication:"\xD7",obelus:"\xF7",pencilDownRight:"\u270E",pencilRight:"\u270F",pencilUpRight:"\u2710",percent:"%",pilcrow2:"\u2761",pilcrow:"\xB6",plusMinus:"\xB1",section:"\xA7",starsOff:"\u2606",starsOn:"\u2605",upDownArrow:"\u2195"},nhe=Object.assign({},R_,{check:"\u221A",cross:"\xD7",ellipsisLarge:"...",ellipsis:"...",info:"i",question:"?",questionSmall:"?",pointer:">",pointerSmall:"\xBB",radioOff:"( )",radioOn:"(*)",warning:"\u203C"}),ihe=Object.assign({},R_,{ballotCross:"\u2718",check:"\u2714",cross:"\u2716",ellipsisLarge:"\u22EF",ellipsis:"\u2026",info:"\u2139",question:"?",questionFull:"\uFF1F",questionSmall:"\uFE56",pointer:rhe?"\u25B8":"\u276F",pointerSmall:rhe?"\u2023":"\u203A",radioOff:"\u25EF",radioOn:"\u25C9",warning:"\u26A0"});a2.exports=_At&&!UAt?nhe:ihe;Reflect.defineProperty(a2.exports,"common",{enumerable:!1,value:R_});Reflect.defineProperty(a2.exports,"windows",{enumerable:!1,value:nhe});Reflect.defineProperty(a2.exports,"other",{enumerable:!1,value:ihe})});var Vc=_((J_t,N_)=>{"use strict";var HAt=t=>t!==null&&typeof t=="object"&&!Array.isArray(t),jAt=/[\u001b\u009b][[\]#;?()]*(?:(?:(?:[^\W_]*;?[^\W_]*)\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g,ohe=()=>{let t={enabled:!0,visible:!0,styles:{},keys:{}};"FORCE_COLOR"in process.env&&(t.enabled=process.env.FORCE_COLOR!=="0");let e=n=>{let u=n.open=`\x1B[${n.codes[0]}m`,A=n.close=`\x1B[${n.codes[1]}m`,p=n.regex=new RegExp(`\\u001b\\[${n.codes[1]}m`,"g");return n.wrap=(h,E)=>{h.includes(A)&&(h=h.replace(p,A+u));let I=u+h+A;return E?I.replace(/\r*\n/g,`${A}$&${u}`):I},n},r=(n,u,A)=>typeof n=="function"?n(u):n.wrap(u,A),o=(n,u)=>{if(n===""||n==null)return"";if(t.enabled===!1)return n;if(t.visible===!1)return"";let A=""+n,p=A.includes(` +`),h=u.length;for(h>0&&u.includes("unstyle")&&(u=[...new Set(["unstyle",...u])].reverse());h-- >0;)A=r(t.styles[u[h]],A,p);return A},a=(n,u,A)=>{t.styles[n]=e({name:n,codes:u}),(t.keys[A]||(t.keys[A]=[])).push(n),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(h){t.alias(n,h)},get(){let h=E=>o(E,h.stack);return Reflect.setPrototypeOf(h,t),h.stack=this.stack?this.stack.concat(n):[n],h}})};return a("reset",[0,0],"modifier"),a("bold",[1,22],"modifier"),a("dim",[2,22],"modifier"),a("italic",[3,23],"modifier"),a("underline",[4,24],"modifier"),a("inverse",[7,27],"modifier"),a("hidden",[8,28],"modifier"),a("strikethrough",[9,29],"modifier"),a("black",[30,39],"color"),a("red",[31,39],"color"),a("green",[32,39],"color"),a("yellow",[33,39],"color"),a("blue",[34,39],"color"),a("magenta",[35,39],"color"),a("cyan",[36,39],"color"),a("white",[37,39],"color"),a("gray",[90,39],"color"),a("grey",[90,39],"color"),a("bgBlack",[40,49],"bg"),a("bgRed",[41,49],"bg"),a("bgGreen",[42,49],"bg"),a("bgYellow",[43,49],"bg"),a("bgBlue",[44,49],"bg"),a("bgMagenta",[45,49],"bg"),a("bgCyan",[46,49],"bg"),a("bgWhite",[47,49],"bg"),a("blackBright",[90,39],"bright"),a("redBright",[91,39],"bright"),a("greenBright",[92,39],"bright"),a("yellowBright",[93,39],"bright"),a("blueBright",[94,39],"bright"),a("magentaBright",[95,39],"bright"),a("cyanBright",[96,39],"bright"),a("whiteBright",[97,39],"bright"),a("bgBlackBright",[100,49],"bgBright"),a("bgRedBright",[101,49],"bgBright"),a("bgGreenBright",[102,49],"bgBright"),a("bgYellowBright",[103,49],"bgBright"),a("bgBlueBright",[104,49],"bgBright"),a("bgMagentaBright",[105,49],"bgBright"),a("bgCyanBright",[106,49],"bgBright"),a("bgWhiteBright",[107,49],"bgBright"),t.ansiRegex=jAt,t.hasColor=t.hasAnsi=n=>(t.ansiRegex.lastIndex=0,typeof n=="string"&&n!==""&&t.ansiRegex.test(n)),t.alias=(n,u)=>{let A=typeof u=="string"?t[u]:u;if(typeof A!="function")throw new TypeError("Expected alias to be the name of an existing color (string) or a function");A.stack||(Reflect.defineProperty(A,"name",{value:n}),t.styles[n]=A,A.stack=[n]),Reflect.defineProperty(t,n,{configurable:!0,enumerable:!0,set(p){t.alias(n,p)},get(){let p=h=>o(h,p.stack);return Reflect.setPrototypeOf(p,t),p.stack=this.stack?this.stack.concat(A.stack):A.stack,p}})},t.theme=n=>{if(!HAt(n))throw new TypeError("Expected theme to be an object");for(let u of Object.keys(n))t.alias(u,n[u]);return t},t.alias("unstyle",n=>typeof n=="string"&&n!==""?(t.ansiRegex.lastIndex=0,n.replace(t.ansiRegex,"")):""),t.alias("noop",n=>n),t.none=t.clear=t.noop,t.stripColor=t.unstyle,t.symbols=she(),t.define=a,t};N_.exports=ohe();N_.exports.create=ohe});var No=_(nn=>{"use strict";var qAt=Object.prototype.toString,rc=Vc(),ahe=!1,L_=[],lhe={yellow:"blue",cyan:"red",green:"magenta",black:"white",blue:"yellow",red:"cyan",magenta:"green",white:"black"};nn.longest=(t,e)=>t.reduce((r,o)=>Math.max(r,e?o[e].length:o.length),0);nn.hasColor=t=>!!t&&rc.hasColor(t);var ok=nn.isObject=t=>t!==null&&typeof t=="object"&&!Array.isArray(t);nn.nativeType=t=>qAt.call(t).slice(8,-1).toLowerCase().replace(/\s/g,"");nn.isAsyncFn=t=>nn.nativeType(t)==="asyncfunction";nn.isPrimitive=t=>t!=null&&typeof t!="object"&&typeof t!="function";nn.resolve=(t,e,...r)=>typeof e=="function"?e.call(t,...r):e;nn.scrollDown=(t=[])=>[...t.slice(1),t[0]];nn.scrollUp=(t=[])=>[t.pop(),...t];nn.reorder=(t=[])=>{let e=t.slice();return e.sort((r,o)=>r.index>o.index?1:r.index{let o=t.length,a=r===o?0:r<0?o-1:r,n=t[e];t[e]=t[a],t[a]=n};nn.width=(t,e=80)=>{let r=t&&t.columns?t.columns:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[0]),process.platform==="win32"?r-1:r};nn.height=(t,e=20)=>{let r=t&&t.rows?t.rows:e;return t&&typeof t.getWindowSize=="function"&&(r=t.getWindowSize()[1]),r};nn.wordWrap=(t,e={})=>{if(!t)return t;typeof e=="number"&&(e={width:e});let{indent:r="",newline:o=` +`+r,width:a=80}=e,n=(o+r).match(/[^\S\n]/g)||[];a-=n.length;let u=`.{1,${a}}([\\s\\u200B]+|$)|[^\\s\\u200B]+?([\\s\\u200B]+|$)`,A=t.trim(),p=new RegExp(u,"g"),h=A.match(p)||[];return h=h.map(E=>E.replace(/\n$/,"")),e.padEnd&&(h=h.map(E=>E.padEnd(a," "))),e.padStart&&(h=h.map(E=>E.padStart(a," "))),r+h.join(o)};nn.unmute=t=>{let e=t.stack.find(o=>rc.keys.color.includes(o));return e?rc[e]:t.stack.find(o=>o.slice(2)==="bg")?rc[e.slice(2)]:o=>o};nn.pascal=t=>t?t[0].toUpperCase()+t.slice(1):"";nn.inverse=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>rc.keys.color.includes(o));if(e){let o=rc["bg"+nn.pascal(e)];return o?o.black:t}let r=t.stack.find(o=>o.slice(0,2)==="bg");return r?rc[r.slice(2).toLowerCase()]||t:rc.none};nn.complement=t=>{if(!t||!t.stack)return t;let e=t.stack.find(o=>rc.keys.color.includes(o)),r=t.stack.find(o=>o.slice(0,2)==="bg");if(e&&!r)return rc[lhe[e]||e];if(r){let o=r.slice(2).toLowerCase(),a=lhe[o];return a&&rc["bg"+nn.pascal(a)]||t}return rc.none};nn.meridiem=t=>{let e=t.getHours(),r=t.getMinutes(),o=e>=12?"pm":"am";e=e%12;let a=e===0?12:e,n=r<10?"0"+r:r;return a+":"+n+" "+o};nn.set=(t={},e="",r)=>e.split(".").reduce((o,a,n,u)=>{let A=u.length-1>n?o[a]||{}:r;return!nn.isObject(A)&&n{let o=t[e]==null?e.split(".").reduce((a,n)=>a&&a[n],t):t[e];return o??r};nn.mixin=(t,e)=>{if(!ok(t))return e;if(!ok(e))return t;for(let r of Object.keys(e)){let o=Object.getOwnPropertyDescriptor(e,r);if(o.hasOwnProperty("value"))if(t.hasOwnProperty(r)&&ok(o.value)){let a=Object.getOwnPropertyDescriptor(t,r);ok(a.value)?t[r]=nn.merge({},t[r],e[r]):Reflect.defineProperty(t,r,o)}else Reflect.defineProperty(t,r,o);else Reflect.defineProperty(t,r,o)}return t};nn.merge=(...t)=>{let e={};for(let r of t)nn.mixin(e,r);return e};nn.mixinEmitter=(t,e)=>{let r=e.constructor.prototype;for(let o of Object.keys(r)){let a=r[o];typeof a=="function"?nn.define(t,o,a.bind(e)):nn.define(t,o,a)}};nn.onExit=t=>{let e=(r,o)=>{ahe||(ahe=!0,L_.forEach(a=>a()),r===!0&&process.exit(128+o))};L_.length===0&&(process.once("SIGTERM",e.bind(null,!0,15)),process.once("SIGINT",e.bind(null,!0,2)),process.once("exit",e)),L_.push(t)};nn.define=(t,e,r)=>{Reflect.defineProperty(t,e,{value:r})};nn.defineExport=(t,e,r)=>{let o;Reflect.defineProperty(t,e,{enumerable:!0,configurable:!0,set(a){o=a},get(){return o?o():r()}})}});var che=_(pC=>{"use strict";pC.ctrl={a:"first",b:"backward",c:"cancel",d:"deleteForward",e:"last",f:"forward",g:"reset",i:"tab",k:"cutForward",l:"reset",n:"newItem",m:"cancel",j:"submit",p:"search",r:"remove",s:"save",u:"undo",w:"cutLeft",x:"toggleCursor",v:"paste"};pC.shift={up:"shiftUp",down:"shiftDown",left:"shiftLeft",right:"shiftRight",tab:"prev"};pC.fn={up:"pageUp",down:"pageDown",left:"pageLeft",right:"pageRight",delete:"deleteForward"};pC.option={b:"backward",f:"forward",d:"cutRight",left:"cutLeft",up:"altUp",down:"altDown"};pC.keys={pageup:"pageUp",pagedown:"pageDown",home:"home",end:"end",cancel:"cancel",delete:"deleteForward",backspace:"delete",down:"down",enter:"submit",escape:"cancel",left:"left",space:"space",number:"number",return:"submit",right:"right",tab:"next",up:"up"}});var fhe=_((Z_t,Ahe)=>{"use strict";var uhe=Be("readline"),GAt=che(),YAt=/^(?:\x1b)([a-zA-Z0-9])$/,WAt=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,VAt={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"};function KAt(t){return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(t)}function JAt(t){return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(t)}var ak=(t="",e={})=>{let r,o={name:e.name,ctrl:!1,meta:!1,shift:!1,option:!1,sequence:t,raw:t,...e};if(Buffer.isBuffer(t)?t[0]>127&&t[1]===void 0?(t[0]-=128,t="\x1B"+String(t)):t=String(t):t!==void 0&&typeof t!="string"?t=String(t):t||(t=o.sequence||""),o.sequence=o.sequence||t||o.name,t==="\r")o.raw=void 0,o.name="return";else if(t===` +`)o.name="enter";else if(t===" ")o.name="tab";else if(t==="\b"||t==="\x7F"||t==="\x1B\x7F"||t==="\x1B\b")o.name="backspace",o.meta=t.charAt(0)==="\x1B";else if(t==="\x1B"||t==="\x1B\x1B")o.name="escape",o.meta=t.length===2;else if(t===" "||t==="\x1B ")o.name="space",o.meta=t.length===2;else if(t<="")o.name=String.fromCharCode(t.charCodeAt(0)+"a".charCodeAt(0)-1),o.ctrl=!0;else if(t.length===1&&t>="0"&&t<="9")o.name="number";else if(t.length===1&&t>="a"&&t<="z")o.name=t;else if(t.length===1&&t>="A"&&t<="Z")o.name=t.toLowerCase(),o.shift=!0;else if(r=YAt.exec(t))o.meta=!0,o.shift=/^[A-Z]$/.test(r[1]);else if(r=WAt.exec(t)){let a=[...t];a[0]==="\x1B"&&a[1]==="\x1B"&&(o.option=!0);let n=[r[1],r[2],r[4],r[6]].filter(Boolean).join(""),u=(r[3]||r[5]||1)-1;o.ctrl=!!(u&4),o.meta=!!(u&10),o.shift=!!(u&1),o.code=n,o.name=VAt[n],o.shift=KAt(n)||o.shift,o.ctrl=JAt(n)||o.ctrl}return o};ak.listen=(t={},e)=>{let{stdin:r}=t;if(!r||r!==process.stdin&&!r.isTTY)throw new Error("Invalid stream passed");let o=uhe.createInterface({terminal:!0,input:r});uhe.emitKeypressEvents(r,o);let a=(A,p)=>e(A,ak(A,p),o),n=r.isRaw;return r.isTTY&&r.setRawMode(!0),r.on("keypress",a),o.resume(),()=>{r.isTTY&&r.setRawMode(n),r.removeListener("keypress",a),o.pause(),o.close()}};ak.action=(t,e,r)=>{let o={...GAt,...r};return e.ctrl?(e.action=o.ctrl[e.name],e):e.option&&o.option?(e.action=o.option[e.name],e):e.shift?(e.action=o.shift[e.name],e):(e.action=o.keys[e.name],e)};Ahe.exports=ak});var hhe=_(($_t,phe)=>{"use strict";phe.exports=t=>{t.timers=t.timers||{};let e=t.options.timers;if(!!e)for(let r of Object.keys(e)){let o=e[r];typeof o=="number"&&(o={interval:o}),zAt(t,r,o)}};function zAt(t,e,r={}){let o=t.timers[e]={name:e,start:Date.now(),ms:0,tick:0},a=r.interval||120;o.frames=r.frames||[],o.loading=!0;let n=setInterval(()=>{o.ms=Date.now()-o.start,o.tick++,t.render()},a);return o.stop=()=>{o.loading=!1,clearInterval(n)},Reflect.defineProperty(o,"interval",{value:n}),t.once("close",()=>o.stop()),o.stop}});var dhe=_((e8t,ghe)=>{"use strict";var{define:XAt,width:ZAt}=No(),M_=class{constructor(e){let r=e.options;XAt(this,"_prompt",e),this.type=e.type,this.name=e.name,this.message="",this.header="",this.footer="",this.error="",this.hint="",this.input="",this.cursor=0,this.index=0,this.lines=0,this.tick=0,this.prompt="",this.buffer="",this.width=ZAt(r.stdout||process.stdout),Object.assign(this,r),this.name=this.name||this.message,this.message=this.message||this.name,this.symbols=e.symbols,this.styles=e.styles,this.required=new Set,this.cancelled=!1,this.submitted=!1}clone(){let e={...this};return e.status=this.status,e.buffer=Buffer.from(e.buffer),delete e.clone,e}set color(e){this._color=e}get color(){let e=this.prompt.styles;if(this.cancelled)return e.cancelled;if(this.submitted)return e.submitted;let r=this._color||e[this.status];return typeof r=="function"?r:e.pending}set loading(e){this._loading=e}get loading(){return typeof this._loading=="boolean"?this._loading:this.loadingChoices?"choices":!1}get status(){return this.cancelled?"cancelled":this.submitted?"submitted":"pending"}};ghe.exports=M_});var yhe=_((t8t,mhe)=>{"use strict";var O_=No(),eo=Vc(),U_={default:eo.noop,noop:eo.noop,set inverse(t){this._inverse=t},get inverse(){return this._inverse||O_.inverse(this.primary)},set complement(t){this._complement=t},get complement(){return this._complement||O_.complement(this.primary)},primary:eo.cyan,success:eo.green,danger:eo.magenta,strong:eo.bold,warning:eo.yellow,muted:eo.dim,disabled:eo.gray,dark:eo.dim.gray,underline:eo.underline,set info(t){this._info=t},get info(){return this._info||this.primary},set em(t){this._em=t},get em(){return this._em||this.primary.underline},set heading(t){this._heading=t},get heading(){return this._heading||this.muted.underline},set pending(t){this._pending=t},get pending(){return this._pending||this.primary},set submitted(t){this._submitted=t},get submitted(){return this._submitted||this.success},set cancelled(t){this._cancelled=t},get cancelled(){return this._cancelled||this.danger},set typing(t){this._typing=t},get typing(){return this._typing||this.dim},set placeholder(t){this._placeholder=t},get placeholder(){return this._placeholder||this.primary.dim},set highlight(t){this._highlight=t},get highlight(){return this._highlight||this.inverse}};U_.merge=(t={})=>{t.styles&&typeof t.styles.enabled=="boolean"&&(eo.enabled=t.styles.enabled),t.styles&&typeof t.styles.visible=="boolean"&&(eo.visible=t.styles.visible);let e=O_.merge({},U_,t.styles);delete e.merge;for(let r of Object.keys(eo))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>eo[r]});for(let r of Object.keys(eo.styles))e.hasOwnProperty(r)||Reflect.defineProperty(e,r,{get:()=>eo[r]});return e};mhe.exports=U_});var Che=_((r8t,Ehe)=>{"use strict";var __=process.platform==="win32",Vf=Vc(),$At=No(),H_={...Vf.symbols,upDownDoubleArrow:"\u21D5",upDownDoubleArrow2:"\u2B0D",upDownArrow:"\u2195",asterisk:"*",asterism:"\u2042",bulletWhite:"\u25E6",electricArrow:"\u2301",ellipsisLarge:"\u22EF",ellipsisSmall:"\u2026",fullBlock:"\u2588",identicalTo:"\u2261",indicator:Vf.symbols.check,leftAngle:"\u2039",mark:"\u203B",minus:"\u2212",multiplication:"\xD7",obelus:"\xF7",percent:"%",pilcrow:"\xB6",pilcrow2:"\u2761",pencilUpRight:"\u2710",pencilDownRight:"\u270E",pencilRight:"\u270F",plus:"+",plusMinus:"\xB1",pointRight:"\u261E",rightAngle:"\u203A",section:"\xA7",hexagon:{off:"\u2B21",on:"\u2B22",disabled:"\u2B22"},ballot:{on:"\u2611",off:"\u2610",disabled:"\u2612"},stars:{on:"\u2605",off:"\u2606",disabled:"\u2606"},folder:{on:"\u25BC",off:"\u25B6",disabled:"\u25B6"},prefix:{pending:Vf.symbols.question,submitted:Vf.symbols.check,cancelled:Vf.symbols.cross},separator:{pending:Vf.symbols.pointerSmall,submitted:Vf.symbols.middot,cancelled:Vf.symbols.middot},radio:{off:__?"( )":"\u25EF",on:__?"(*)":"\u25C9",disabled:__?"(|)":"\u24BE"},numbers:["\u24EA","\u2460","\u2461","\u2462","\u2463","\u2464","\u2465","\u2466","\u2467","\u2468","\u2469","\u246A","\u246B","\u246C","\u246D","\u246E","\u246F","\u2470","\u2471","\u2472","\u2473","\u3251","\u3252","\u3253","\u3254","\u3255","\u3256","\u3257","\u3258","\u3259","\u325A","\u325B","\u325C","\u325D","\u325E","\u325F","\u32B1","\u32B2","\u32B3","\u32B4","\u32B5","\u32B6","\u32B7","\u32B8","\u32B9","\u32BA","\u32BB","\u32BC","\u32BD","\u32BE","\u32BF"]};H_.merge=t=>{let e=$At.merge({},Vf.symbols,H_,t.symbols);return delete e.merge,e};Ehe.exports=H_});var Ihe=_((n8t,whe)=>{"use strict";var eft=yhe(),tft=Che(),rft=No();whe.exports=t=>{t.options=rft.merge({},t.options.theme,t.options),t.symbols=tft.merge(t.options),t.styles=eft.merge(t.options)}});var She=_((Dhe,Phe)=>{"use strict";var Bhe=process.env.TERM_PROGRAM==="Apple_Terminal",nft=Vc(),j_=No(),Kc=Phe.exports=Dhe,Di="\x1B[",vhe="\x07",q_=!1,Ph=Kc.code={bell:vhe,beep:vhe,beginning:`${Di}G`,down:`${Di}J`,esc:Di,getPosition:`${Di}6n`,hide:`${Di}?25l`,line:`${Di}2K`,lineEnd:`${Di}K`,lineStart:`${Di}1K`,restorePosition:Di+(Bhe?"8":"u"),savePosition:Di+(Bhe?"7":"s"),screen:`${Di}2J`,show:`${Di}?25h`,up:`${Di}1J`},qd=Kc.cursor={get hidden(){return q_},hide(){return q_=!0,Ph.hide},show(){return q_=!1,Ph.show},forward:(t=1)=>`${Di}${t}C`,backward:(t=1)=>`${Di}${t}D`,nextLine:(t=1)=>`${Di}E`.repeat(t),prevLine:(t=1)=>`${Di}F`.repeat(t),up:(t=1)=>t?`${Di}${t}A`:"",down:(t=1)=>t?`${Di}${t}B`:"",right:(t=1)=>t?`${Di}${t}C`:"",left:(t=1)=>t?`${Di}${t}D`:"",to(t,e){return e?`${Di}${e+1};${t+1}H`:`${Di}${t+1}G`},move(t=0,e=0){let r="";return r+=t<0?qd.left(-t):t>0?qd.right(t):"",r+=e<0?qd.up(-e):e>0?qd.down(e):"",r},restore(t={}){let{after:e,cursor:r,initial:o,input:a,prompt:n,size:u,value:A}=t;if(o=j_.isPrimitive(o)?String(o):"",a=j_.isPrimitive(a)?String(a):"",A=j_.isPrimitive(A)?String(A):"",u){let p=Kc.cursor.up(u)+Kc.cursor.to(n.length),h=a.length-r;return h>0&&(p+=Kc.cursor.left(h)),p}if(A||e){let p=!a&&!!o?-o.length:-a.length+r;return e&&(p-=e.length),a===""&&o&&!n.includes(o)&&(p+=o.length),Kc.cursor.move(p)}}},G_=Kc.erase={screen:Ph.screen,up:Ph.up,down:Ph.down,line:Ph.line,lineEnd:Ph.lineEnd,lineStart:Ph.lineStart,lines(t){let e="";for(let r=0;r{if(!e)return G_.line+qd.to(0);let r=n=>[...nft.unstyle(n)].length,o=t.split(/\r?\n/),a=0;for(let n of o)a+=1+Math.floor(Math.max(r(n)-1,0)/e);return(G_.line+qd.prevLine()).repeat(a-1)+G_.line+qd.to(0)}});var hC=_((i8t,bhe)=>{"use strict";var ift=Be("events"),xhe=Vc(),Y_=fhe(),sft=hhe(),oft=dhe(),aft=Ihe(),Ta=No(),Gd=She(),l2=class extends ift{constructor(e={}){super(),this.name=e.name,this.type=e.type,this.options=e,aft(this),sft(this),this.state=new oft(this),this.initial=[e.initial,e.default].find(r=>r!=null),this.stdout=e.stdout||process.stdout,this.stdin=e.stdin||process.stdin,this.scale=e.scale||1,this.term=this.options.term||process.env.TERM_PROGRAM,this.margin=cft(this.options.margin),this.setMaxListeners(0),lft(this)}async keypress(e,r={}){this.keypressed=!0;let o=Y_.action(e,Y_(e,r),this.options.actions);this.state.keypress=o,this.emit("keypress",e,o),this.emit("state",this.state.clone());let a=this.options[o.action]||this[o.action]||this.dispatch;if(typeof a=="function")return await a.call(this,e,o);this.alert()}alert(){delete this.state.alert,this.options.show===!1?this.emit("alert"):this.stdout.write(Gd.code.beep)}cursorHide(){this.stdout.write(Gd.cursor.hide()),Ta.onExit(()=>this.cursorShow())}cursorShow(){this.stdout.write(Gd.cursor.show())}write(e){!e||(this.stdout&&this.state.show!==!1&&this.stdout.write(e),this.state.buffer+=e)}clear(e=0){let r=this.state.buffer;this.state.buffer="",!(!r&&!e||this.options.show===!1)&&this.stdout.write(Gd.cursor.down(e)+Gd.clear(r,this.width))}restore(){if(this.state.closed||this.options.show===!1)return;let{prompt:e,after:r,rest:o}=this.sections(),{cursor:a,initial:n="",input:u="",value:A=""}=this,p=this.state.size=o.length,h={after:r,cursor:a,initial:n,input:u,prompt:e,size:p,value:A},E=Gd.cursor.restore(h);E&&this.stdout.write(E)}sections(){let{buffer:e,input:r,prompt:o}=this.state;o=xhe.unstyle(o);let a=xhe.unstyle(e),n=a.indexOf(o),u=a.slice(0,n),p=a.slice(n).split(` +`),h=p[0],E=p[p.length-1],v=(o+(r?" "+r:"")).length,b=ve.call(this,this.value),this.result=()=>o.call(this,this.value),typeof r.initial=="function"&&(this.initial=await r.initial.call(this,this)),typeof r.onRun=="function"&&await r.onRun.call(this,this),typeof r.onSubmit=="function"){let a=r.onSubmit.bind(this),n=this.submit.bind(this);delete this.options.onSubmit,this.submit=async()=>(await a(this.name,this.value,this),n())}await this.start(),await this.render()}render(){throw new Error("expected prompt to have a custom render method")}run(){return new Promise(async(e,r)=>{if(this.once("submit",e),this.once("cancel",r),await this.skip())return this.render=()=>{},this.submit();await this.initialize(),this.emit("run")})}async element(e,r,o){let{options:a,state:n,symbols:u,timers:A}=this,p=A&&A[e];n.timer=p;let h=a[e]||n[e]||u[e],E=r&&r[e]!=null?r[e]:await h;if(E==="")return E;let I=await this.resolve(E,n,r,o);return!I&&r&&r[e]?this.resolve(h,n,r,o):I}async prefix(){let e=await this.element("prefix")||this.symbols,r=this.timers&&this.timers.prefix,o=this.state;return o.timer=r,Ta.isObject(e)&&(e=e[o.status]||e.pending),Ta.hasColor(e)?e:(this.styles[o.status]||this.styles.pending)(e)}async message(){let e=await this.element("message");return Ta.hasColor(e)?e:this.styles.strong(e)}async separator(){let e=await this.element("separator")||this.symbols,r=this.timers&&this.timers.separator,o=this.state;o.timer=r;let a=e[o.status]||e.pending||o.separator,n=await this.resolve(a,o);return Ta.isObject(n)&&(n=n[o.status]||n.pending),Ta.hasColor(n)?n:this.styles.muted(n)}async pointer(e,r){let o=await this.element("pointer",e,r);if(typeof o=="string"&&Ta.hasColor(o))return o;if(o){let a=this.styles,n=this.index===r,u=n?a.primary:h=>h,A=await this.resolve(o[n?"on":"off"]||o,this.state),p=Ta.hasColor(A)?A:u(A);return n?p:" ".repeat(A.length)}}async indicator(e,r){let o=await this.element("indicator",e,r);if(typeof o=="string"&&Ta.hasColor(o))return o;if(o){let a=this.styles,n=e.enabled===!0,u=n?a.success:a.dark,A=o[n?"on":"off"]||o;return Ta.hasColor(A)?A:u(A)}return""}body(){return null}footer(){if(this.state.status==="pending")return this.element("footer")}header(){if(this.state.status==="pending")return this.element("header")}async hint(){if(this.state.status==="pending"&&!this.isValue(this.state.input)){let e=await this.element("hint");return Ta.hasColor(e)?e:this.styles.muted(e)}}error(e){return this.state.submitted?"":e||this.state.error}format(e){return e}result(e){return e}validate(e){return this.options.required===!0?this.isValue(e):!0}isValue(e){return e!=null&&e!==""}resolve(e,...r){return Ta.resolve(this,e,...r)}get base(){return l2.prototype}get style(){return this.styles[this.state.status]}get height(){return this.options.rows||Ta.height(this.stdout,25)}get width(){return this.options.columns||Ta.width(this.stdout,80)}get size(){return{width:this.width,height:this.height}}set cursor(e){this.state.cursor=e}get cursor(){return this.state.cursor}set input(e){this.state.input=e}get input(){return this.state.input}set value(e){this.state.value=e}get value(){let{input:e,value:r}=this.state,o=[r,e].find(this.isValue.bind(this));return this.isValue(o)?o:this.initial}static get prompt(){return e=>new this(e).run()}};function lft(t){let e=a=>t[a]===void 0||typeof t[a]=="function",r=["actions","choices","initial","margin","roles","styles","symbols","theme","timers","value"],o=["body","footer","error","header","hint","indicator","message","prefix","separator","skip"];for(let a of Object.keys(t.options)){if(r.includes(a)||/^on[A-Z]/.test(a))continue;let n=t.options[a];typeof n=="function"&&e(a)?o.includes(a)||(t[a]=n.bind(t)):typeof t[a]!="function"&&(t[a]=n)}}function cft(t){typeof t=="number"&&(t=[t,t,t,t]);let e=[].concat(t||[]),r=a=>a%2===0?` +`:" ",o=[];for(let a=0;a<4;a++){let n=r(a);e[a]?o.push(n.repeat(e[a])):o.push("")}return o}bhe.exports=l2});var Fhe=_((s8t,Qhe)=>{"use strict";var uft=No(),khe={default(t,e){return e},checkbox(t,e){throw new Error("checkbox role is not implemented yet")},editable(t,e){throw new Error("editable role is not implemented yet")},expandable(t,e){throw new Error("expandable role is not implemented yet")},heading(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||"",e},input(t,e){throw new Error("input role is not implemented yet")},option(t,e){return khe.default(t,e)},radio(t,e){throw new Error("radio role is not implemented yet")},separator(t,e){return e.disabled="",e.indicator=[e.indicator," "].find(r=>r!=null),e.message=e.message||t.symbols.line.repeat(5),e},spacer(t,e){return e}};Qhe.exports=(t,e={})=>{let r=uft.merge({},khe,e.roles);return r[t]||r.default}});var c2=_((o8t,Nhe)=>{"use strict";var Aft=Vc(),fft=hC(),pft=Fhe(),lk=No(),{reorder:W_,scrollUp:hft,scrollDown:gft,isObject:The,swap:dft}=lk,V_=class extends fft{constructor(e){super(e),this.cursorHide(),this.maxSelected=e.maxSelected||1/0,this.multiple=e.multiple||!1,this.initial=e.initial||0,this.delay=e.delay||0,this.longest=0,this.num=""}async initialize(){typeof this.options.initial=="function"&&(this.initial=await this.options.initial.call(this)),await this.reset(!0),await super.initialize()}async reset(){let{choices:e,initial:r,autofocus:o,suggest:a}=this.options;if(this.state._choices=[],this.state.choices=[],this.choices=await Promise.all(await this.toChoices(e)),this.choices.forEach(n=>n.enabled=!1),typeof a!="function"&&this.selectable.length===0)throw new Error("At least one choice must be selectable");The(r)&&(r=Object.keys(r)),Array.isArray(r)?(o!=null&&(this.index=this.findIndex(o)),r.forEach(n=>this.enable(this.find(n))),await this.render()):(o!=null&&(r=o),typeof r=="string"&&(r=this.findIndex(r)),typeof r=="number"&&r>-1&&(this.index=Math.max(0,Math.min(r,this.choices.length)),this.enable(this.find(this.index)))),this.isDisabled(this.focused)&&await this.down()}async toChoices(e,r){this.state.loadingChoices=!0;let o=[],a=0,n=async(u,A)=>{typeof u=="function"&&(u=await u.call(this)),u instanceof Promise&&(u=await u);for(let p=0;p(this.state.loadingChoices=!1,u))}async toChoice(e,r,o){if(typeof e=="function"&&(e=await e.call(this,this)),e instanceof Promise&&(e=await e),typeof e=="string"&&(e={name:e}),e.normalized)return e;e.normalized=!0;let a=e.value;if(e=pft(e.role,this.options)(this,e),typeof e.disabled=="string"&&!e.hint&&(e.hint=e.disabled,e.disabled=!0),e.disabled===!0&&e.hint==null&&(e.hint="(disabled)"),e.index!=null)return e;e.name=e.name||e.key||e.title||e.value||e.message,e.message=e.message||e.name||"",e.value=[e.value,e.name].find(this.isValue.bind(this)),e.input="",e.index=r,e.cursor=0,lk.define(e,"parent",o),e.level=o?o.level+1:1,e.indent==null&&(e.indent=o?o.indent+" ":e.indent||""),e.path=o?o.path+"."+e.name:e.name,e.enabled=!!(this.multiple&&!this.isDisabled(e)&&(e.enabled||this.isSelected(e))),this.isDisabled(e)||(this.longest=Math.max(this.longest,Aft.unstyle(e.message).length));let u={...e};return e.reset=(A=u.input,p=u.value)=>{for(let h of Object.keys(u))e[h]=u[h];e.input=A,e.value=p},a==null&&typeof e.initial=="function"&&(e.input=await e.initial.call(this,this.state,e,r)),e}async onChoice(e,r){this.emit("choice",e,r,this),typeof e.onChoice=="function"&&await e.onChoice.call(this,this.state,e,r)}async addChoice(e,r,o){let a=await this.toChoice(e,r,o);return this.choices.push(a),this.index=this.choices.length-1,this.limit=this.choices.length,a}async newItem(e,r,o){let a={name:"New choice name?",editable:!0,newChoice:!0,...e},n=await this.addChoice(a,r,o);return n.updateChoice=()=>{delete n.newChoice,n.name=n.message=n.input,n.input="",n.cursor=0},this.render()}indent(e){return e.indent==null?e.level>1?" ".repeat(e.level-1):"":e.indent}dispatch(e,r){if(this.multiple&&this[r.name])return this[r.name]();this.alert()}focus(e,r){return typeof r!="boolean"&&(r=e.enabled),r&&!e.enabled&&this.selected.length>=this.maxSelected?this.alert():(this.index=e.index,e.enabled=r&&!this.isDisabled(e),e)}space(){return this.multiple?(this.toggle(this.focused),this.render()):this.alert()}a(){if(this.maxSelectedr.enabled);return this.choices.forEach(r=>r.enabled=!e),this.render()}i(){return this.choices.length-this.selected.length>this.maxSelected?this.alert():(this.choices.forEach(e=>e.enabled=!e.enabled),this.render())}g(e=this.focused){return this.choices.some(r=>!!r.parent)?(this.toggle(e.parent&&!e.choices?e.parent:e),this.render()):this.a()}toggle(e,r){if(!e.enabled&&this.selected.length>=this.maxSelected)return this.alert();typeof r!="boolean"&&(r=!e.enabled),e.enabled=r,e.choices&&e.choices.forEach(a=>this.toggle(a,r));let o=e.parent;for(;o;){let a=o.choices.filter(n=>this.isDisabled(n));o.enabled=a.every(n=>n.enabled===!0),o=o.parent}return Rhe(this,this.choices),this.emit("toggle",e,this),e}enable(e){return this.selected.length>=this.maxSelected?this.alert():(e.enabled=!this.isDisabled(e),e.choices&&e.choices.forEach(this.enable.bind(this)),e)}disable(e){return e.enabled=!1,e.choices&&e.choices.forEach(this.disable.bind(this)),e}number(e){this.num+=e;let r=o=>{let a=Number(o);if(a>this.choices.length-1)return this.alert();let n=this.focused,u=this.choices.find(A=>a===A.index);if(!u.enabled&&this.selected.length>=this.maxSelected)return this.alert();if(this.visible.indexOf(u)===-1){let A=W_(this.choices),p=A.indexOf(u);if(n.index>p){let h=A.slice(p,p+this.limit),E=A.filter(I=>!h.includes(I));this.choices=h.concat(E)}else{let h=p-this.limit+1;this.choices=A.slice(h).concat(A.slice(0,h))}}return this.index=this.choices.indexOf(u),this.toggle(this.focused),this.render()};return clearTimeout(this.numberTimeout),new Promise(o=>{let a=this.choices.length,n=this.num,u=(A=!1,p)=>{clearTimeout(this.numberTimeout),A&&(p=r(n)),this.num="",o(p)};if(n==="0"||n.length===1&&Number(n+"0")>a)return u(!0);if(Number(n)>a)return u(!1,this.alert());this.numberTimeout=setTimeout(()=>u(!0),this.delay)})}home(){return this.choices=W_(this.choices),this.index=0,this.render()}end(){let e=this.choices.length-this.limit,r=W_(this.choices);return this.choices=r.slice(e).concat(r.slice(0,e)),this.index=this.limit-1,this.render()}first(){return this.index=0,this.render()}last(){return this.index=this.visible.length-1,this.render()}prev(){return this.visible.length<=1?this.alert():this.up()}next(){return this.visible.length<=1?this.alert():this.down()}right(){return this.cursor>=this.input.length?this.alert():(this.cursor++,this.render())}left(){return this.cursor<=0?this.alert():(this.cursor--,this.render())}up(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===0?this.alert():e>r&&o===0?this.scrollUp():(this.index=(o-1%e+e)%e,this.isDisabled()?this.up():this.render())}down(){let e=this.choices.length,r=this.visible.length,o=this.index;return this.options.scroll===!1&&o===r-1?this.alert():e>r&&o===r-1?this.scrollDown():(this.index=(o+1)%e,this.isDisabled()?this.down():this.render())}scrollUp(e=0){return this.choices=hft(this.choices),this.index=e,this.isDisabled()?this.up():this.render()}scrollDown(e=this.visible.length-1){return this.choices=gft(this.choices),this.index=e,this.isDisabled()?this.down():this.render()}async shiftUp(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index-1),await this.up(),this.sorting=!1;return}return this.scrollUp(this.index)}async shiftDown(){if(this.options.sort===!0){this.sorting=!0,this.swap(this.index+1),await this.down(),this.sorting=!1;return}return this.scrollDown(this.index)}pageUp(){return this.visible.length<=1?this.alert():(this.limit=Math.max(this.limit-1,0),this.index=Math.min(this.limit-1,this.index),this._limit=this.limit,this.isDisabled()?this.up():this.render())}pageDown(){return this.visible.length>=this.choices.length?this.alert():(this.index=Math.max(0,this.index),this.limit=Math.min(this.limit+1,this.choices.length),this._limit=this.limit,this.isDisabled()?this.down():this.render())}swap(e){dft(this.choices,this.index,e)}isDisabled(e=this.focused){return e&&["disabled","collapsed","hidden","completing","readonly"].some(o=>e[o]===!0)?!0:e&&e.role==="heading"}isEnabled(e=this.focused){if(Array.isArray(e))return e.every(r=>this.isEnabled(r));if(e.choices){let r=e.choices.filter(o=>!this.isDisabled(o));return e.enabled&&r.every(o=>this.isEnabled(o))}return e.enabled&&!this.isDisabled(e)}isChoice(e,r){return e.name===r||e.index===Number(r)}isSelected(e){return Array.isArray(this.initial)?this.initial.some(r=>this.isChoice(e,r)):this.isChoice(e,this.initial)}map(e=[],r="value"){return[].concat(e||[]).reduce((o,a)=>(o[a]=this.find(a,r),o),{})}filter(e,r){let a=typeof e=="function"?e:(A,p)=>[A.name,p].includes(e),u=(this.options.multiple?this.state._choices:this.choices).filter(a);return r?u.map(A=>A[r]):u}find(e,r){if(The(e))return r?e[r]:e;let a=typeof e=="function"?e:(u,A)=>[u.name,A].includes(e),n=this.choices.find(a);if(n)return r?n[r]:n}findIndex(e){return this.choices.indexOf(this.find(e))}async submit(){let e=this.focused;if(!e)return this.alert();if(e.newChoice)return e.input?(e.updateChoice(),this.render()):this.alert();if(this.choices.some(u=>u.newChoice))return this.alert();let{reorder:r,sort:o}=this.options,a=this.multiple===!0,n=this.selected;return n===void 0?this.alert():(Array.isArray(n)&&r!==!1&&o!==!0&&(n=lk.reorder(n)),this.value=a?n.map(u=>u.name):n.name,super.submit())}set choices(e=[]){this.state._choices=this.state._choices||[],this.state.choices=e;for(let r of e)this.state._choices.some(o=>o.name===r.name)||this.state._choices.push(r);if(!this._initial&&this.options.initial){this._initial=!0;let r=this.initial;if(typeof r=="string"||typeof r=="number"){let o=this.find(r);o&&(this.initial=o.index,this.focus(o,!0))}}}get choices(){return Rhe(this,this.state.choices||[])}set visible(e){this.state.visible=e}get visible(){return(this.state.visible||this.choices).slice(0,this.limit)}set limit(e){this.state.limit=e}get limit(){let{state:e,options:r,choices:o}=this,a=e.limit||this._limit||r.limit||o.length;return Math.min(a,this.height)}set value(e){super.value=e}get value(){return typeof super.value!="string"&&super.value===this.initial?this.input:super.value}set index(e){this.state.index=e}get index(){return Math.max(0,this.state?this.state.index:0)}get enabled(){return this.filter(this.isEnabled.bind(this))}get focused(){let e=this.choices[this.index];return e&&this.state.submitted&&this.multiple!==!0&&(e.enabled=!0),e}get selectable(){return this.choices.filter(e=>!this.isDisabled(e))}get selected(){return this.multiple?this.enabled:this.focused}};function Rhe(t,e){if(e instanceof Promise)return e;if(typeof e=="function"){if(lk.isAsyncFn(e))return e;e=e.call(t,t)}for(let r of e){if(Array.isArray(r.choices)){let o=r.choices.filter(a=>!t.isDisabled(a));r.enabled=o.every(a=>a.enabled===!0)}t.isDisabled(r)===!0&&delete r.enabled}return e}Nhe.exports=V_});var Sh=_((a8t,Lhe)=>{"use strict";var mft=c2(),K_=No(),J_=class extends mft{constructor(e){super(e),this.emptyError=this.options.emptyError||"No items were selected"}async dispatch(e,r){if(this.multiple)return this[r.name]?await this[r.name](e,r):await super.dispatch(e,r);this.alert()}separator(){if(this.options.separator)return super.separator();let e=this.styles.muted(this.symbols.ellipsis);return this.state.submitted?super.separator():e}pointer(e,r){return!this.multiple||this.options.pointer?super.pointer(e,r):""}indicator(e,r){return this.multiple?super.indicator(e,r):""}choiceMessage(e,r){let o=this.resolve(e.message,this.state,e,r);return e.role==="heading"&&!K_.hasColor(o)&&(o=this.styles.strong(o)),this.resolve(o,this.state,e,r)}choiceSeparator(){return":"}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await this.indicator(e,r)+(e.pad||""),u=await this.resolve(e.hint,this.state,e,r);u&&!K_.hasColor(u)&&(u=this.styles.muted(u));let A=this.indent(e),p=await this.choiceMessage(e,r),h=()=>[this.margin[3],A+a+n,p,this.margin[1],u].filter(Boolean).join(" ");return e.role==="heading"?h():e.disabled?(K_.hasColor(p)||(p=this.styles.disabled(p)),h()):(o&&(p=this.styles.em(p)),h())}async renderChoices(){if(this.state.loading==="choices")return this.styles.warning("Loading choices");if(this.state.submitted)return"";let e=this.visible.map(async(n,u)=>await this.renderChoice(n,u)),r=await Promise.all(e);r.length||r.push(this.styles.danger("No matching choices"));let o=this.margin[0]+r.join(` +`),a;return this.options.choicesHeader&&(a=await this.resolve(this.options.choicesHeader,this.state)),[a,o].filter(Boolean).join(` +`)}format(){return!this.state.submitted||this.state.cancelled?"":Array.isArray(this.selected)?this.selected.map(e=>this.styles.primary(e.name)).join(", "):this.styles.primary(this.selected.name)}async render(){let{submitted:e,size:r}=this.state,o="",a=await this.header(),n=await this.prefix(),u=await this.separator(),A=await this.message();this.options.promptLine!==!1&&(o=[n,A,u,""].join(" "),this.state.prompt=o);let p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),I=await this.footer();p&&(o+=p),h&&!o.includes(h)&&(o+=" "+h),e&&!p&&!E.trim()&&this.multiple&&this.emptyError!=null&&(o+=this.styles.danger(this.emptyError)),this.clear(r),this.write([a,o,E,I].filter(Boolean).join(` +`)),this.write(this.margin[2]),this.restore()}};Lhe.exports=J_});var Ohe=_((l8t,Mhe)=>{"use strict";var yft=Sh(),Eft=(t,e)=>{let r=t.toLowerCase();return o=>{let n=o.toLowerCase().indexOf(r),u=e(o.slice(n,n+r.length));return n>=0?o.slice(0,n)+u+o.slice(n+r.length):o}},z_=class extends yft{constructor(e){super(e),this.cursorShow()}moveCursor(e){this.state.cursor+=e}dispatch(e){return this.append(e)}space(e){return this.options.multiple?super.space(e):this.append(e)}append(e){let{cursor:r,input:o}=this.state;return this.input=o.slice(0,r)+e+o.slice(r),this.moveCursor(1),this.complete()}delete(){let{cursor:e,input:r}=this.state;return r?(this.input=r.slice(0,e-1)+r.slice(e),this.moveCursor(-1),this.complete()):this.alert()}deleteForward(){let{cursor:e,input:r}=this.state;return r[e]===void 0?this.alert():(this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.complete())}number(e){return this.append(e)}async complete(){this.completing=!0,this.choices=await this.suggest(this.input,this.state._choices),this.state.limit=void 0,this.index=Math.min(Math.max(this.visible.length-1,0),this.index),await this.render(),this.completing=!1}suggest(e=this.input,r=this.state._choices){if(typeof this.options.suggest=="function")return this.options.suggest.call(this,e,r);let o=e.toLowerCase();return r.filter(a=>a.message.toLowerCase().includes(o))}pointer(){return""}format(){if(!this.focused)return this.input;if(this.options.multiple&&this.state.submitted)return this.selected.map(e=>this.styles.primary(e.message)).join(", ");if(this.state.submitted){let e=this.value=this.input=this.focused.value;return this.styles.primary(e)}return this.input}async render(){if(this.state.status!=="pending")return super.render();let e=this.options.highlight?this.options.highlight.bind(this):this.styles.placeholder,r=Eft(this.input,e),o=this.choices;this.choices=o.map(a=>({...a,message:r(a.message)})),await super.render(),this.choices=o}submit(){return this.options.multiple&&(this.value=this.selected.map(e=>e.name)),super.submit()}};Mhe.exports=z_});var Z_=_((c8t,Uhe)=>{"use strict";var X_=No();Uhe.exports=(t,e={})=>{t.cursorHide();let{input:r="",initial:o="",pos:a,showCursor:n=!0,color:u}=e,A=u||t.styles.placeholder,p=X_.inverse(t.styles.primary),h=T=>p(t.styles.black(T)),E=r,I=" ",v=h(I);if(t.blink&&t.blink.off===!0&&(h=T=>T,v=""),n&&a===0&&o===""&&r==="")return h(I);if(n&&a===0&&(r===o||r===""))return h(o[0])+A(o.slice(1));o=X_.isPrimitive(o)?`${o}`:"",r=X_.isPrimitive(r)?`${r}`:"";let b=o&&o.startsWith(r)&&o!==r,C=b?h(o[r.length]):v;if(a!==r.length&&n===!0&&(E=r.slice(0,a)+h(r[a])+r.slice(a+1),C=""),n===!1&&(C=""),b){let T=t.styles.unstyle(E+C);return E+C+A(o.slice(T.length))}return E+C}});var ck=_((u8t,_he)=>{"use strict";var Cft=Vc(),wft=Sh(),Ift=Z_(),$_=class extends wft{constructor(e){super({...e,multiple:!0}),this.type="form",this.initial=this.options.initial,this.align=[this.options.align,"right"].find(r=>r!=null),this.emptyError="",this.values={}}async reset(e){return await super.reset(),e===!0&&(this._index=this.index),this.index=this._index,this.values={},this.choices.forEach(r=>r.reset&&r.reset()),this.render()}dispatch(e){return!!e&&this.append(e)}append(e){let r=this.focused;if(!r)return this.alert();let{cursor:o,input:a}=r;return r.value=r.input=a.slice(0,o)+e+a.slice(o),r.cursor++,this.render()}delete(){let e=this.focused;if(!e||e.cursor<=0)return this.alert();let{cursor:r,input:o}=e;return e.value=e.input=o.slice(0,r-1)+o.slice(r),e.cursor--,this.render()}deleteForward(){let e=this.focused;if(!e)return this.alert();let{cursor:r,input:o}=e;if(o[r]===void 0)return this.alert();let a=`${o}`.slice(0,r)+`${o}`.slice(r+1);return e.value=e.input=a,this.render()}right(){let e=this.focused;return e?e.cursor>=e.input.length?this.alert():(e.cursor++,this.render()):this.alert()}left(){let e=this.focused;return e?e.cursor<=0?this.alert():(e.cursor--,this.render()):this.alert()}space(e,r){return this.dispatch(e,r)}number(e,r){return this.dispatch(e,r)}next(){let e=this.focused;if(!e)return this.alert();let{initial:r,input:o}=e;return r&&r.startsWith(o)&&o!==r?(e.value=e.input=r,e.cursor=e.value.length,this.render()):super.next()}prev(){let e=this.focused;return e?e.cursor===0?super.prev():(e.value=e.input="",e.cursor=0,this.render()):this.alert()}separator(){return""}format(e){return this.state.submitted?"":super.format(e)}pointer(){return""}indicator(e){return e.input?"\u29BF":"\u2299"}async choiceSeparator(e,r){let o=await this.resolve(e.separator,this.state,e,r)||":";return o?" "+this.styles.disabled(o):""}async renderChoice(e,r){await this.onChoice(e,r);let{state:o,styles:a}=this,{cursor:n,initial:u="",name:A,hint:p,input:h=""}=e,{muted:E,submitted:I,primary:v,danger:b}=a,C=p,T=this.index===r,L=e.validate||(()=>!0),U=await this.choiceSeparator(e,r),J=e.message;this.align==="right"&&(J=J.padStart(this.longest+1," ")),this.align==="left"&&(J=J.padEnd(this.longest+1," "));let te=this.values[A]=h||u,le=h?"success":"dark";await L.call(e,te,this.state)!==!0&&(le="danger");let pe=a[le],Ae=pe(await this.indicator(e,r))+(e.pad||""),ye=this.indent(e),ae=()=>[ye,Ae,J+U,h,C].filter(Boolean).join(" ");if(o.submitted)return J=Cft.unstyle(J),h=I(h),C="",ae();if(e.format)h=await e.format.call(this,h,e,r);else{let we=this.styles.muted;h=Ift(this,{input:h,initial:u,pos:n,showCursor:T,color:we})}return this.isValue(h)||(h=this.styles.muted(this.symbols.ellipsis)),e.result&&(this.values[A]=await e.result.call(this,te,e,r)),T&&(J=v(J)),e.error?h+=(h?" ":"")+b(e.error.trim()):e.hint&&(h+=(h?" ":"")+E(e.hint.trim())),ae()}async submit(){return this.value=this.values,super.base.submit.call(this)}};_he.exports=$_});var e8=_((A8t,jhe)=>{"use strict";var Bft=ck(),vft=()=>{throw new Error("expected prompt to have a custom authenticate method")},Hhe=(t=vft)=>{class e extends Bft{constructor(o){super(o)}async submit(){this.value=await t.call(this,this.values,this.state),super.base.submit.call(this)}static create(o){return Hhe(o)}}return e};jhe.exports=Hhe()});var Yhe=_((f8t,Ghe)=>{"use strict";var Dft=e8();function Pft(t,e){return t.username===this.options.username&&t.password===this.options.password}var qhe=(t=Pft)=>{let e=[{name:"username",message:"username"},{name:"password",message:"password",format(o){return this.options.showPassword?o:(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(o.length))}}];class r extends Dft.create(t){constructor(a){super({...a,choices:e})}static create(a){return qhe(a)}}return r};Ghe.exports=qhe()});var uk=_((p8t,Whe)=>{"use strict";var Sft=hC(),{isPrimitive:xft,hasColor:bft}=No(),t8=class extends Sft{constructor(e){super(e),this.cursorHide()}async initialize(){let e=await this.resolve(this.initial,this.state);this.input=await this.cast(e),await super.initialize()}dispatch(e){return this.isValue(e)?(this.input=e,this.submit()):this.alert()}format(e){let{styles:r,state:o}=this;return o.submitted?r.success(e):r.primary(e)}cast(e){return this.isTrue(e)}isTrue(e){return/^[ty1]/i.test(e)}isFalse(e){return/^[fn0]/i.test(e)}isValue(e){return xft(e)&&(this.isTrue(e)||this.isFalse(e))}async hint(){if(this.state.status==="pending"){let e=await this.element("hint");return bft(e)?e:this.styles.muted(e)}}async render(){let{input:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=this.styles.muted(this.default),A=[o,n,u,a].filter(Boolean).join(" ");this.state.prompt=A;let p=await this.header(),h=this.value=this.cast(e),E=await this.format(h),I=await this.error()||await this.hint(),v=await this.footer();I&&!A.includes(I)&&(E+=" "+I),A+=" "+E,this.clear(r),this.write([p,A,v].filter(Boolean).join(` +`)),this.restore()}set value(e){super.value=e}get value(){return this.cast(super.value)}};Whe.exports=t8});var Khe=_((h8t,Vhe)=>{"use strict";var kft=uk(),r8=class extends kft{constructor(e){super(e),this.default=this.options.default||(this.initial?"(Y/n)":"(y/N)")}};Vhe.exports=r8});var zhe=_((g8t,Jhe)=>{"use strict";var Qft=Sh(),Fft=ck(),gC=Fft.prototype,n8=class extends Qft{constructor(e){super({...e,multiple:!0}),this.align=[this.options.align,"left"].find(r=>r!=null),this.emptyError="",this.values={}}dispatch(e,r){let o=this.focused,a=o.parent||{};return!o.editable&&!a.editable&&(e==="a"||e==="i")?super[e]():gC.dispatch.call(this,e,r)}append(e,r){return gC.append.call(this,e,r)}delete(e,r){return gC.delete.call(this,e,r)}space(e){return this.focused.editable?this.append(e):super.space()}number(e){return this.focused.editable?this.append(e):super.number(e)}next(){return this.focused.editable?gC.next.call(this):super.next()}prev(){return this.focused.editable?gC.prev.call(this):super.prev()}async indicator(e,r){let o=e.indicator||"",a=e.editable?o:super.indicator(e,r);return await this.resolve(a,this.state,e,r)||""}indent(e){return e.role==="heading"?"":e.editable?" ":" "}async renderChoice(e,r){return e.indent="",e.editable?gC.renderChoice.call(this,e,r):super.renderChoice(e,r)}error(){return""}footer(){return this.state.error}async validate(){let e=!0;for(let r of this.choices){if(typeof r.validate!="function"||r.role==="heading")continue;let o=r.parent?this.value[r.parent.name]:this.value;if(r.editable?o=r.value===r.name?r.initial||"":r.value:this.isDisabled(r)||(o=r.enabled===!0),e=await r.validate(o,this.state),e!==!0)break}return e!==!0&&(this.state.error=typeof e=="string"?e:"Invalid Input"),e}submit(){if(this.focused.newChoice===!0)return super.submit();if(this.choices.some(e=>e.newChoice))return this.alert();this.value={};for(let e of this.choices){let r=e.parent?this.value[e.parent.name]:this.value;if(e.role==="heading"){this.value[e.name]={};continue}e.editable?r[e.name]=e.value===e.name?e.initial||"":e.value:this.isDisabled(e)||(r[e.name]=e.enabled===!0)}return this.base.submit.call(this)}};Jhe.exports=n8});var Yd=_((d8t,Xhe)=>{"use strict";var Tft=hC(),Rft=Z_(),{isPrimitive:Nft}=No(),i8=class extends Tft{constructor(e){super(e),this.initial=Nft(this.initial)?String(this.initial):"",this.initial&&this.cursorHide(),this.state.prevCursor=0,this.state.clipboard=[]}async keypress(e,r={}){let o=this.state.prevKeypress;return this.state.prevKeypress=r,this.options.multiline===!0&&r.name==="return"&&(!o||o.name!=="return")?this.append(` +`,r):super.keypress(e,r)}moveCursor(e){this.cursor+=e}reset(){return this.input=this.value="",this.cursor=0,this.render()}dispatch(e,r){if(!e||r.ctrl||r.code)return this.alert();this.append(e)}append(e){let{cursor:r,input:o}=this.state;this.input=`${o}`.slice(0,r)+e+`${o}`.slice(r),this.moveCursor(String(e).length),this.render()}insert(e){this.append(e)}delete(){let{cursor:e,input:r}=this.state;if(e<=0)return this.alert();this.input=`${r}`.slice(0,e-1)+`${r}`.slice(e),this.moveCursor(-1),this.render()}deleteForward(){let{cursor:e,input:r}=this.state;if(r[e]===void 0)return this.alert();this.input=`${r}`.slice(0,e)+`${r}`.slice(e+1),this.render()}cutForward(){let e=this.cursor;if(this.input.length<=e)return this.alert();this.state.clipboard.push(this.input.slice(e)),this.input=this.input.slice(0,e),this.render()}cutLeft(){let e=this.cursor;if(e===0)return this.alert();let r=this.input.slice(0,e),o=this.input.slice(e),a=r.split(" ");this.state.clipboard.push(a.pop()),this.input=a.join(" "),this.cursor=this.input.length,this.input+=o,this.render()}paste(){if(!this.state.clipboard.length)return this.alert();this.insert(this.state.clipboard.pop()),this.render()}toggleCursor(){this.state.prevCursor?(this.cursor=this.state.prevCursor,this.state.prevCursor=0):(this.state.prevCursor=this.cursor,this.cursor=0),this.render()}first(){this.cursor=0,this.render()}last(){this.cursor=this.input.length-1,this.render()}next(){let e=this.initial!=null?String(this.initial):"";if(!e||!e.startsWith(this.input))return this.alert();this.input=this.initial,this.cursor=this.initial.length,this.render()}prev(){if(!this.input)return this.alert();this.reset()}backward(){return this.left()}forward(){return this.right()}right(){return this.cursor>=this.input.length?this.alert():(this.moveCursor(1),this.render())}left(){return this.cursor<=0?this.alert():(this.moveCursor(-1),this.render())}isValue(e){return!!e}async format(e=this.value){let r=await this.resolve(this.initial,this.state);return this.state.submitted?this.styles.submitted(e||r):Rft(this,{input:e,initial:r,pos:this.cursor})}async render(){let e=this.state.size,r=await this.prefix(),o=await this.separator(),a=await this.message(),n=[r,a,o].filter(Boolean).join(" ");this.state.prompt=n;let u=await this.header(),A=await this.format(),p=await this.error()||await this.hint(),h=await this.footer();p&&!A.includes(p)&&(A+=" "+p),n+=" "+A,this.clear(e),this.write([u,n,h].filter(Boolean).join(` +`)),this.restore()}};Xhe.exports=i8});var $he=_((m8t,Zhe)=>{"use strict";var Lft=t=>t.filter((e,r)=>t.lastIndexOf(e)===r),Ak=t=>Lft(t).filter(Boolean);Zhe.exports=(t,e={},r="")=>{let{past:o=[],present:a=""}=e,n,u;switch(t){case"prev":case"undo":return n=o.slice(0,o.length-1),u=o[o.length-1]||"",{past:Ak([r,...n]),present:u};case"next":case"redo":return n=o.slice(1),u=o[0]||"",{past:Ak([...n,r]),present:u};case"save":return{past:Ak([...o,r]),present:""};case"remove":return u=Ak(o.filter(A=>A!==r)),a="",u.length&&(a=u.pop()),{past:u,present:a};default:throw new Error(`Invalid action: "${t}"`)}}});var o8=_((y8t,t0e)=>{"use strict";var Mft=Yd(),e0e=$he(),s8=class extends Mft{constructor(e){super(e);let r=this.options.history;if(r&&r.store){let o=r.values||this.initial;this.autosave=!!r.autosave,this.store=r.store,this.data=this.store.get("values")||{past:[],present:o},this.initial=this.data.present||this.data.past[this.data.past.length-1]}}completion(e){return this.store?(this.data=e0e(e,this.data,this.input),this.data.present?(this.input=this.data.present,this.cursor=this.input.length,this.render()):this.alert()):this.alert()}altUp(){return this.completion("prev")}altDown(){return this.completion("next")}prev(){return this.save(),super.prev()}save(){!this.store||(this.data=e0e("save",this.data,this.input),this.store.set("values",this.data))}submit(){return this.store&&this.autosave===!0&&this.save(),super.submit()}};t0e.exports=s8});var n0e=_((E8t,r0e)=>{"use strict";var Oft=Yd(),a8=class extends Oft{format(){return""}};r0e.exports=a8});var s0e=_((C8t,i0e)=>{"use strict";var Uft=Yd(),l8=class extends Uft{constructor(e={}){super(e),this.sep=this.options.separator||/, */,this.initial=e.initial||""}split(e=this.value){return e?String(e).split(this.sep):[]}format(){let e=this.state.submitted?this.styles.primary:r=>r;return this.list.map(e).join(", ")}async submit(e){let r=this.state.error||await this.validate(this.list,this.state);return r!==!0?(this.state.error=r,super.submit()):(this.value=this.list,super.submit())}get list(){return this.split()}};i0e.exports=l8});var a0e=_((w8t,o0e)=>{"use strict";var _ft=Sh(),c8=class extends _ft{constructor(e){super({...e,multiple:!0})}};o0e.exports=c8});var A8=_((I8t,l0e)=>{"use strict";var Hft=Yd(),u8=class extends Hft{constructor(e={}){super({style:"number",...e}),this.min=this.isValue(e.min)?this.toNumber(e.min):-1/0,this.max=this.isValue(e.max)?this.toNumber(e.max):1/0,this.delay=e.delay!=null?e.delay:1e3,this.float=e.float!==!1,this.round=e.round===!0||e.float===!1,this.major=e.major||10,this.minor=e.minor||1,this.initial=e.initial!=null?e.initial:"",this.input=String(this.initial),this.cursor=this.input.length,this.cursorShow()}append(e){return!/[-+.]/.test(e)||e==="."&&this.input.includes(".")?this.alert("invalid number"):super.append(e)}number(e){return super.append(e)}next(){return this.input&&this.input!==this.initial?this.alert():this.isValue(this.initial)?(this.input=this.initial,this.cursor=String(this.initial).length,this.render()):this.alert()}up(e){let r=e||this.minor,o=this.toNumber(this.input);return o>this.max+r?this.alert():(this.input=`${o+r}`,this.render())}down(e){let r=e||this.minor,o=this.toNumber(this.input);return othis.isValue(r));return this.value=this.toNumber(e||0),super.submit()}};l0e.exports=u8});var u0e=_((B8t,c0e)=>{c0e.exports=A8()});var f0e=_((v8t,A0e)=>{"use strict";var jft=Yd(),f8=class extends jft{constructor(e){super(e),this.cursorShow()}format(e=this.input){return this.keypressed?(this.state.submitted?this.styles.primary:this.styles.muted)(this.symbols.asterisk.repeat(e.length)):""}};A0e.exports=f8});var g0e=_((D8t,h0e)=>{"use strict";var qft=Vc(),Gft=c2(),p0e=No(),p8=class extends Gft{constructor(e={}){super(e),this.widths=[].concat(e.messageWidth||50),this.align=[].concat(e.align||"left"),this.linebreak=e.linebreak||!1,this.edgeLength=e.edgeLength||3,this.newline=e.newline||` + `;let r=e.startNumber||1;typeof this.scale=="number"&&(this.scaleKey=!1,this.scale=Array(this.scale).fill(0).map((o,a)=>({name:a+r})))}async reset(){return this.tableized=!1,await super.reset(),this.render()}tableize(){if(this.tableized===!0)return;this.tableized=!0;let e=0;for(let r of this.choices){e=Math.max(e,r.message.length),r.scaleIndex=r.initial||2,r.scale=[];for(let o=0;o=this.scale.length-1?this.alert():(e.scaleIndex++,this.render())}left(){let e=this.focused;return e.scaleIndex<=0?this.alert():(e.scaleIndex--,this.render())}indent(){return""}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.index)).join(", "):""}pointer(){return""}renderScaleKey(){return this.scaleKey===!1||this.state.submitted?"":["",...this.scale.map(o=>` ${o.name} - ${o.message}`)].map(o=>this.styles.muted(o)).join(` +`)}renderScaleHeading(e){let r=this.scale.map(p=>p.name);typeof this.options.renderScaleHeading=="function"&&(r=this.options.renderScaleHeading.call(this,e));let o=this.scaleLength-r.join("").length,a=Math.round(o/(r.length-1)),u=r.map(p=>this.styles.strong(p)).join(" ".repeat(a)),A=" ".repeat(this.widths[0]);return this.margin[3]+A+this.margin[1]+u}scaleIndicator(e,r,o){if(typeof this.options.scaleIndicator=="function")return this.options.scaleIndicator.call(this,e,r,o);let a=e.scaleIndex===r.index;return r.disabled?this.styles.hint(this.symbols.radio.disabled):a?this.styles.success(this.symbols.radio.on):this.symbols.radio.off}renderScale(e,r){let o=e.scale.map(n=>this.scaleIndicator(e,n,r)),a=this.term==="Hyper"?"":" ";return o.join(a+this.symbols.line.repeat(this.edgeLength))}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=await this.pointer(e,r),n=await e.hint;n&&!p0e.hasColor(n)&&(n=this.styles.muted(n));let u=C=>this.margin[3]+C.replace(/\s+$/,"").padEnd(this.widths[0]," "),A=this.newline,p=this.indent(e),h=await this.resolve(e.message,this.state,e,r),E=await this.renderScale(e,r),I=this.margin[1]+this.margin[3];this.scaleLength=qft.unstyle(E).length,this.widths[0]=Math.min(this.widths[0],this.width-this.scaleLength-I.length);let b=p0e.wordWrap(h,{width:this.widths[0],newline:A}).split(` +`).map(C=>u(C)+this.margin[1]);return o&&(E=this.styles.info(E),b=b.map(C=>this.styles.info(C))),b[0]+=E,this.linebreak&&b.push(""),[p+a,b.join(` +`)].filter(Boolean)}async renderChoices(){if(this.state.submitted)return"";this.tableize();let e=this.visible.map(async(a,n)=>await this.renderChoice(a,n)),r=await Promise.all(e),o=await this.renderScaleHeading();return this.margin[0]+[o,...r.map(a=>a.join(" "))].join(` +`)}async render(){let{submitted:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u="";this.options.promptLine!==!1&&(u=[o,n,a,""].join(" "),this.state.prompt=u);let A=await this.header(),p=await this.format(),h=await this.renderScaleKey(),E=await this.error()||await this.hint(),I=await this.renderChoices(),v=await this.footer(),b=this.emptyError;p&&(u+=p),E&&!u.includes(E)&&(u+=" "+E),e&&!p&&!I.trim()&&this.multiple&&b!=null&&(u+=this.styles.danger(b)),this.clear(r),this.write([A,u,h,I,v].filter(Boolean).join(` +`)),this.state.submitted||this.write(this.margin[2]),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIndex;return this.base.submit.call(this)}};h0e.exports=p8});var y0e=_((P8t,m0e)=>{"use strict";var d0e=Vc(),Yft=(t="")=>typeof t=="string"?t.replace(/^['"]|['"]$/g,""):"",g8=class{constructor(e){this.name=e.key,this.field=e.field||{},this.value=Yft(e.initial||this.field.initial||""),this.message=e.message||this.name,this.cursor=0,this.input="",this.lines=[]}},Wft=async(t={},e={},r=o=>o)=>{let o=new Set,a=t.fields||[],n=t.template,u=[],A=[],p=[],h=1;typeof n=="function"&&(n=await n());let E=-1,I=()=>n[++E],v=()=>n[E+1],b=C=>{C.line=h,u.push(C)};for(b({type:"bos",value:""});Ele.name===U.key);U.field=a.find(le=>le.name===U.key),te||(te=new g8(U),A.push(te)),te.lines.push(U.line-1);continue}let T=u[u.length-1];T.type==="text"&&T.line===h?T.value+=C:b({type:"text",value:C})}return b({type:"eos",value:""}),{input:n,tabstops:u,unique:o,keys:p,items:A}};m0e.exports=async t=>{let e=t.options,r=new Set(e.required===!0?[]:e.required||[]),o={...e.values,...e.initial},{tabstops:a,items:n,keys:u}=await Wft(e,o),A=h8("result",t,e),p=h8("format",t,e),h=h8("validate",t,e,!0),E=t.isValue.bind(t);return async(I={},v=!1)=>{let b=0;I.required=r,I.items=n,I.keys=u,I.output="";let C=async(J,te,le,pe)=>{let Ae=await h(J,te,le,pe);return Ae===!1?"Invalid field "+le.name:Ae};for(let J of a){let te=J.value,le=J.key;if(J.type!=="template"){te&&(I.output+=te);continue}if(J.type==="template"){let pe=n.find(Pe=>Pe.name===le);e.required===!0&&I.required.add(pe.name);let Ae=[pe.input,I.values[pe.value],pe.value,te].find(E),ae=(pe.field||{}).message||J.inner;if(v){let Pe=await C(I.values[le],I,pe,b);if(Pe&&typeof Pe=="string"||Pe===!1){I.invalid.set(le,Pe);continue}I.invalid.delete(le);let g=await A(I.values[le],I,pe,b);I.output+=d0e.unstyle(g);continue}pe.placeholder=!1;let we=te;te=await p(te,I,pe,b),Ae!==te?(I.values[le]=Ae,te=t.styles.typing(Ae),I.missing.delete(ae)):(I.values[le]=void 0,Ae=`<${ae}>`,te=t.styles.primary(Ae),pe.placeholder=!0,I.required.has(le)&&I.missing.add(ae)),I.missing.has(ae)&&I.validating&&(te=t.styles.warning(Ae)),I.invalid.has(le)&&I.validating&&(te=t.styles.danger(Ae)),b===I.index&&(we!==te?te=t.styles.underline(te):te=t.styles.heading(d0e.unstyle(te))),b++}te&&(I.output+=te)}let T=I.output.split(` +`).map(J=>" "+J),L=n.length,U=0;for(let J of n)I.invalid.has(J.name)&&J.lines.forEach(te=>{T[te][0]===" "&&(T[te]=I.styles.danger(I.symbols.bullet)+T[te].slice(1))}),t.isValue(I.values[J.name])&&U++;return I.completed=(U/L*100).toFixed(0),I.output=T.join(` +`),I.output}};function h8(t,e,r,o){return(a,n,u,A)=>typeof u.field[t]=="function"?u.field[t].call(e,a,n,u,A):[o,a].find(p=>e.isValue(p))}});var C0e=_((S8t,E0e)=>{"use strict";var Vft=Vc(),Kft=y0e(),Jft=hC(),d8=class extends Jft{constructor(e){super(e),this.cursorHide(),this.reset(!0)}async initialize(){this.interpolate=await Kft(this),await super.initialize()}async reset(e){this.state.keys=[],this.state.invalid=new Map,this.state.missing=new Set,this.state.completed=0,this.state.values={},e!==!0&&(await this.initialize(),await this.render())}moveCursor(e){let r=this.getItem();this.cursor+=e,r.cursor+=e}dispatch(e,r){if(!r.code&&!r.ctrl&&e!=null&&this.getItem()){this.append(e,r);return}this.alert()}append(e,r){let o=this.getItem(),a=o.input.slice(0,this.cursor),n=o.input.slice(this.cursor);this.input=o.input=`${a}${e}${n}`,this.moveCursor(1),this.render()}delete(){let e=this.getItem();if(this.cursor<=0||!e.input)return this.alert();let r=e.input.slice(this.cursor),o=e.input.slice(0,this.cursor-1);this.input=e.input=`${o}${r}`,this.moveCursor(-1),this.render()}increment(e){return e>=this.state.keys.length-1?0:e+1}decrement(e){return e<=0?this.state.keys.length-1:e-1}first(){this.state.index=0,this.render()}last(){this.state.index=this.state.keys.length-1,this.render()}right(){if(this.cursor>=this.input.length)return this.alert();this.moveCursor(1),this.render()}left(){if(this.cursor<=0)return this.alert();this.moveCursor(-1),this.render()}prev(){this.state.index=this.decrement(this.state.index),this.getItem(),this.render()}next(){this.state.index=this.increment(this.state.index),this.getItem(),this.render()}up(){this.prev()}down(){this.next()}format(e){let r=this.state.completed<100?this.styles.warning:this.styles.success;return this.state.submitted===!0&&this.state.completed!==100&&(r=this.styles.danger),r(`${this.state.completed}% completed`)}async render(){let{index:e,keys:r=[],submitted:o,size:a}=this.state,n=[this.options.newline,` +`].find(J=>J!=null),u=await this.prefix(),A=await this.separator(),p=await this.message(),h=[u,p,A].filter(Boolean).join(" ");this.state.prompt=h;let E=await this.header(),I=await this.error()||"",v=await this.hint()||"",b=o?"":await this.interpolate(this.state),C=this.state.key=r[e]||"",T=await this.format(C),L=await this.footer();T&&(h+=" "+T),v&&!T&&this.state.completed===0&&(h+=" "+v),this.clear(a);let U=[E,h,b,L,I.trim()];this.write(U.filter(Boolean).join(n)),this.restore()}getItem(e){let{items:r,keys:o,index:a}=this.state,n=r.find(u=>u.name===o[a]);return n&&n.input!=null&&(this.input=n.input,this.cursor=n.cursor),n}async submit(){typeof this.interpolate!="function"&&await this.initialize(),await this.interpolate(this.state,!0);let{invalid:e,missing:r,output:o,values:a}=this.state;if(e.size){let A="";for(let[p,h]of e)A+=`Invalid ${p}: ${h} +`;return this.state.error=A,super.submit()}if(r.size)return this.state.error="Required: "+[...r.keys()].join(", "),super.submit();let u=Vft.unstyle(o).split(` +`).map(A=>A.slice(1)).join(` +`);return this.value={values:a,result:u},super.submit()}};E0e.exports=d8});var I0e=_((x8t,w0e)=>{"use strict";var zft="(Use + to sort)",Xft=Sh(),m8=class extends Xft{constructor(e){super({...e,reorder:!1,sort:!0,multiple:!0}),this.state.hint=[this.options.hint,zft].find(this.isValue.bind(this))}indicator(){return""}async renderChoice(e,r){let o=await super.renderChoice(e,r),a=this.symbols.identicalTo+" ",n=this.index===r&&this.sorting?this.styles.muted(a):" ";return this.options.drag===!1&&(n=""),this.options.numbered===!0?n+`${r+1} - `+o:n+o}get selected(){return this.choices}submit(){return this.value=this.choices.map(e=>e.value),super.submit()}};w0e.exports=m8});var v0e=_((b8t,B0e)=>{"use strict";var Zft=c2(),y8=class extends Zft{constructor(e={}){if(super(e),this.emptyError=e.emptyError||"No items were selected",this.term=process.env.TERM_PROGRAM,!this.options.header){let r=["","4 - Strongly Agree","3 - Agree","2 - Neutral","1 - Disagree","0 - Strongly Disagree",""];r=r.map(o=>this.styles.muted(o)),this.state.header=r.join(` + `)}}async toChoices(...e){if(this.createdScales)return!1;this.createdScales=!0;let r=await super.toChoices(...e);for(let o of r)o.scale=$ft(5,this.options),o.scaleIdx=2;return r}dispatch(){this.alert()}space(){let e=this.focused,r=e.scale[e.scaleIdx],o=r.selected;return e.scale.forEach(a=>a.selected=!1),r.selected=!o,this.render()}indicator(){return""}pointer(){return""}separator(){return this.styles.muted(this.symbols.ellipsis)}right(){let e=this.focused;return e.scaleIdx>=e.scale.length-1?this.alert():(e.scaleIdx++,this.render())}left(){let e=this.focused;return e.scaleIdx<=0?this.alert():(e.scaleIdx--,this.render())}indent(){return" "}async renderChoice(e,r){await this.onChoice(e,r);let o=this.index===r,a=this.term==="Hyper",n=a?9:8,u=a?"":" ",A=this.symbols.line.repeat(n),p=" ".repeat(n+(a?0:1)),h=te=>(te?this.styles.success("\u25C9"):"\u25EF")+u,E=r+1+".",I=o?this.styles.heading:this.styles.noop,v=await this.resolve(e.message,this.state,e,r),b=this.indent(e),C=b+e.scale.map((te,le)=>h(le===e.scaleIdx)).join(A),T=te=>te===e.scaleIdx?I(te):te,L=b+e.scale.map((te,le)=>T(le)).join(p),U=()=>[E,v].filter(Boolean).join(" "),J=()=>[U(),C,L," "].filter(Boolean).join(` +`);return o&&(C=this.styles.cyan(C),L=this.styles.cyan(L)),J()}async renderChoices(){if(this.state.submitted)return"";let e=this.visible.map(async(o,a)=>await this.renderChoice(o,a)),r=await Promise.all(e);return r.length||r.push(this.styles.danger("No matching choices")),r.join(` +`)}format(){return this.state.submitted?this.choices.map(r=>this.styles.info(r.scaleIdx)).join(", "):""}async render(){let{submitted:e,size:r}=this.state,o=await this.prefix(),a=await this.separator(),n=await this.message(),u=[o,n,a].filter(Boolean).join(" ");this.state.prompt=u;let A=await this.header(),p=await this.format(),h=await this.error()||await this.hint(),E=await this.renderChoices(),I=await this.footer();(p||!h)&&(u+=" "+p),h&&!u.includes(h)&&(u+=" "+h),e&&!p&&!E&&this.multiple&&this.type!=="form"&&(u+=this.styles.danger(this.emptyError)),this.clear(r),this.write([u,A,E,I].filter(Boolean).join(` +`)),this.restore()}submit(){this.value={};for(let e of this.choices)this.value[e.name]=e.scaleIdx;return this.base.submit.call(this)}};function $ft(t,e={}){if(Array.isArray(e.scale))return e.scale.map(o=>({...o}));let r=[];for(let o=1;o{D0e.exports=o8()});var x0e=_((Q8t,S0e)=>{"use strict";var ept=uk(),E8=class extends ept{async initialize(){await super.initialize(),this.value=this.initial=!!this.options.initial,this.disabled=this.options.disabled||"no",this.enabled=this.options.enabled||"yes",await this.render()}reset(){this.value=this.initial,this.render()}delete(){this.alert()}toggle(){this.value=!this.value,this.render()}enable(){if(this.value===!0)return this.alert();this.value=!0,this.render()}disable(){if(this.value===!1)return this.alert();this.value=!1,this.render()}up(){this.toggle()}down(){this.toggle()}right(){this.toggle()}left(){this.toggle()}next(){this.toggle()}prev(){this.toggle()}dispatch(e="",r){switch(e.toLowerCase()){case" ":return this.toggle();case"1":case"y":case"t":return this.enable();case"0":case"n":case"f":return this.disable();default:return this.alert()}}format(){let e=o=>this.styles.primary.underline(o);return[this.value?this.disabled:e(this.disabled),this.value?e(this.enabled):this.enabled].join(this.styles.muted(" / "))}async render(){let{size:e}=this.state,r=await this.header(),o=await this.prefix(),a=await this.separator(),n=await this.message(),u=await this.format(),A=await this.error()||await this.hint(),p=await this.footer(),h=[o,n,a,u].join(" ");this.state.prompt=h,A&&!h.includes(A)&&(h+=" "+A),this.clear(e),this.write([r,h,p].filter(Boolean).join(` +`)),this.write(this.margin[2]),this.restore()}};S0e.exports=E8});var k0e=_((F8t,b0e)=>{"use strict";var tpt=Sh(),C8=class extends tpt{constructor(e){if(super(e),typeof this.options.correctChoice!="number"||this.options.correctChoice<0)throw new Error("Please specify the index of the correct answer from the list of choices")}async toChoices(e,r){let o=await super.toChoices(e,r);if(o.length<2)throw new Error("Please give at least two choices to the user");if(this.options.correctChoice>o.length)throw new Error("Please specify the index of the correct answer from the list of choices");return o}check(e){return e.index===this.options.correctChoice}async result(e){return{selectedAnswer:e,correctAnswer:this.options.choices[this.options.correctChoice].value,correct:await this.check(this.state)}}};b0e.exports=C8});var F0e=_(w8=>{"use strict";var Q0e=No(),As=(t,e)=>{Q0e.defineExport(w8,t,e),Q0e.defineExport(w8,t.toLowerCase(),e)};As("AutoComplete",()=>Ohe());As("BasicAuth",()=>Yhe());As("Confirm",()=>Khe());As("Editable",()=>zhe());As("Form",()=>ck());As("Input",()=>o8());As("Invisible",()=>n0e());As("List",()=>s0e());As("MultiSelect",()=>a0e());As("Numeral",()=>u0e());As("Password",()=>f0e());As("Scale",()=>g0e());As("Select",()=>Sh());As("Snippet",()=>C0e());As("Sort",()=>I0e());As("Survey",()=>v0e());As("Text",()=>P0e());As("Toggle",()=>x0e());As("Quiz",()=>k0e())});var R0e=_((R8t,T0e)=>{T0e.exports={ArrayPrompt:c2(),AuthPrompt:e8(),BooleanPrompt:uk(),NumberPrompt:A8(),StringPrompt:Yd()}});var A2=_((N8t,L0e)=>{"use strict";var N0e=Be("assert"),B8=Be("events"),xh=No(),Jc=class extends B8{constructor(e,r){super(),this.options=xh.merge({},e),this.answers={...r}}register(e,r){if(xh.isObject(e)){for(let a of Object.keys(e))this.register(a,e[a]);return this}N0e.equal(typeof r,"function","expected a function");let o=e.toLowerCase();return r.prototype instanceof this.Prompt?this.prompts[o]=r:this.prompts[o]=r(this.Prompt,this),this}async prompt(e=[]){for(let r of[].concat(e))try{typeof r=="function"&&(r=await r.call(this)),await this.ask(xh.merge({},this.options,r))}catch(o){return Promise.reject(o)}return this.answers}async ask(e){typeof e=="function"&&(e=await e.call(this));let r=xh.merge({},this.options,e),{type:o,name:a}=e,{set:n,get:u}=xh;if(typeof o=="function"&&(o=await o.call(this,e,this.answers)),!o)return this.answers[a];N0e(this.prompts[o],`Prompt "${o}" is not registered`);let A=new this.prompts[o](r),p=u(this.answers,a);A.state.answers=this.answers,A.enquirer=this,a&&A.on("submit",E=>{this.emit("answer",a,E,A),n(this.answers,a,E)});let h=A.emit.bind(A);return A.emit=(...E)=>(this.emit.call(this,...E),h(...E)),this.emit("prompt",A,this),r.autofill&&p!=null?(A.value=A.input=p,r.autofill==="show"&&await A.submit()):p=A.value=await A.run(),p}use(e){return e.call(this,this),this}set Prompt(e){this._Prompt=e}get Prompt(){return this._Prompt||this.constructor.Prompt}get prompts(){return this.constructor.prompts}static set Prompt(e){this._Prompt=e}static get Prompt(){return this._Prompt||hC()}static get prompts(){return F0e()}static get types(){return R0e()}static get prompt(){let e=(r,...o)=>{let a=new this(...o),n=a.emit.bind(a);return a.emit=(...u)=>(e.emit(...u),n(...u)),a.prompt(r)};return xh.mixinEmitter(e,new B8),e}};xh.mixinEmitter(Jc,new B8);var I8=Jc.prompts;for(let t of Object.keys(I8)){let e=t.toLowerCase(),r=o=>new I8[t](o).run();Jc.prompt[e]=r,Jc[e]=r,Jc[t]||Reflect.defineProperty(Jc,t,{get:()=>I8[t]})}var u2=t=>{xh.defineExport(Jc,t,()=>Jc.types[t])};u2("ArrayPrompt");u2("AuthPrompt");u2("BooleanPrompt");u2("NumberPrompt");u2("StringPrompt");L0e.exports=Jc});var g2=_((mHt,q0e)=>{var apt=Zb();function lpt(t,e,r){var o=t==null?void 0:apt(t,e);return o===void 0?r:o}q0e.exports=lpt});var W0e=_((BHt,Y0e)=>{function cpt(t,e){for(var r=-1,o=t==null?0:t.length;++r{var upt=gd(),Apt=zP();function fpt(t,e){return t&&upt(e,Apt(e),t)}V0e.exports=fpt});var z0e=_((DHt,J0e)=>{var ppt=gd(),hpt=qy();function gpt(t,e){return t&&ppt(e,hpt(e),t)}J0e.exports=gpt});var Z0e=_((PHt,X0e)=>{var dpt=gd(),mpt=GP();function ypt(t,e){return dpt(t,mpt(t),e)}X0e.exports=ypt});var b8=_((SHt,$0e)=>{var Ept=qP(),Cpt=tS(),wpt=GP(),Ipt=KN(),Bpt=Object.getOwnPropertySymbols,vpt=Bpt?function(t){for(var e=[];t;)Ept(e,wpt(t)),t=Cpt(t);return e}:Ipt;$0e.exports=vpt});var tge=_((xHt,ege)=>{var Dpt=gd(),Ppt=b8();function Spt(t,e){return Dpt(t,Ppt(t),e)}ege.exports=Spt});var k8=_((bHt,rge)=>{var xpt=VN(),bpt=b8(),kpt=qy();function Qpt(t){return xpt(t,kpt,bpt)}rge.exports=Qpt});var ige=_((kHt,nge)=>{var Fpt=Object.prototype,Tpt=Fpt.hasOwnProperty;function Rpt(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&Tpt.call(t,"index")&&(r.index=t.index,r.input=t.input),r}nge.exports=Rpt});var oge=_((QHt,sge)=>{var Npt=$P();function Lpt(t,e){var r=e?Npt(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}sge.exports=Lpt});var lge=_((FHt,age)=>{var Mpt=/\w*$/;function Opt(t){var e=new t.constructor(t.source,Mpt.exec(t));return e.lastIndex=t.lastIndex,e}age.exports=Opt});var pge=_((THt,fge)=>{var cge=fd(),uge=cge?cge.prototype:void 0,Age=uge?uge.valueOf:void 0;function Upt(t){return Age?Object(Age.call(t)):{}}fge.exports=Upt});var gge=_((RHt,hge)=>{var _pt=$P(),Hpt=oge(),jpt=lge(),qpt=pge(),Gpt=lL(),Ypt="[object Boolean]",Wpt="[object Date]",Vpt="[object Map]",Kpt="[object Number]",Jpt="[object RegExp]",zpt="[object Set]",Xpt="[object String]",Zpt="[object Symbol]",$pt="[object ArrayBuffer]",eht="[object DataView]",tht="[object Float32Array]",rht="[object Float64Array]",nht="[object Int8Array]",iht="[object Int16Array]",sht="[object Int32Array]",oht="[object Uint8Array]",aht="[object Uint8ClampedArray]",lht="[object Uint16Array]",cht="[object Uint32Array]";function uht(t,e,r){var o=t.constructor;switch(e){case $pt:return _pt(t);case Ypt:case Wpt:return new o(+t);case eht:return Hpt(t,r);case tht:case rht:case nht:case iht:case sht:case oht:case aht:case lht:case cht:return Gpt(t,r);case Vpt:return new o;case Kpt:case Xpt:return new o(t);case Jpt:return jpt(t);case zpt:return new o;case Zpt:return qpt(t)}}hge.exports=uht});var mge=_((NHt,dge)=>{var Aht=qI(),fht=Ju(),pht="[object Map]";function hht(t){return fht(t)&&Aht(t)==pht}dge.exports=hht});var wge=_((LHt,Cge)=>{var ght=mge(),dht=WP(),yge=VP(),Ege=yge&&yge.isMap,mht=Ege?dht(Ege):ght;Cge.exports=mht});var Bge=_((MHt,Ige)=>{var yht=qI(),Eht=Ju(),Cht="[object Set]";function wht(t){return Eht(t)&&yht(t)==Cht}Ige.exports=wht});var Sge=_((OHt,Pge)=>{var Iht=Bge(),Bht=WP(),vge=VP(),Dge=vge&&vge.isSet,vht=Dge?Bht(Dge):Iht;Pge.exports=vht});var Q8=_((UHt,Qge)=>{var Dht=HP(),Pht=W0e(),Sht=rS(),xht=K0e(),bht=z0e(),kht=aL(),Qht=eS(),Fht=Z0e(),Tht=tge(),Rht=ZN(),Nht=k8(),Lht=qI(),Mht=ige(),Oht=gge(),Uht=cL(),_ht=Hl(),Hht=OI(),jht=wge(),qht=il(),Ght=Sge(),Yht=zP(),Wht=qy(),Vht=1,Kht=2,Jht=4,xge="[object Arguments]",zht="[object Array]",Xht="[object Boolean]",Zht="[object Date]",$ht="[object Error]",bge="[object Function]",e0t="[object GeneratorFunction]",t0t="[object Map]",r0t="[object Number]",kge="[object Object]",n0t="[object RegExp]",i0t="[object Set]",s0t="[object String]",o0t="[object Symbol]",a0t="[object WeakMap]",l0t="[object ArrayBuffer]",c0t="[object DataView]",u0t="[object Float32Array]",A0t="[object Float64Array]",f0t="[object Int8Array]",p0t="[object Int16Array]",h0t="[object Int32Array]",g0t="[object Uint8Array]",d0t="[object Uint8ClampedArray]",m0t="[object Uint16Array]",y0t="[object Uint32Array]",ri={};ri[xge]=ri[zht]=ri[l0t]=ri[c0t]=ri[Xht]=ri[Zht]=ri[u0t]=ri[A0t]=ri[f0t]=ri[p0t]=ri[h0t]=ri[t0t]=ri[r0t]=ri[kge]=ri[n0t]=ri[i0t]=ri[s0t]=ri[o0t]=ri[g0t]=ri[d0t]=ri[m0t]=ri[y0t]=!0;ri[$ht]=ri[bge]=ri[a0t]=!1;function pk(t,e,r,o,a,n){var u,A=e&Vht,p=e&Kht,h=e&Jht;if(r&&(u=a?r(t,o,a,n):r(t)),u!==void 0)return u;if(!qht(t))return t;var E=_ht(t);if(E){if(u=Mht(t),!A)return Qht(t,u)}else{var I=Lht(t),v=I==bge||I==e0t;if(Hht(t))return kht(t,A);if(I==kge||I==xge||v&&!a){if(u=p||v?{}:Uht(t),!A)return p?Tht(t,bht(u,t)):Fht(t,xht(u,t))}else{if(!ri[I])return a?t:{};u=Oht(t,I,A)}}n||(n=new Dht);var b=n.get(t);if(b)return b;n.set(t,u),Ght(t)?t.forEach(function(L){u.add(pk(L,e,r,L,t,n))}):jht(t)&&t.forEach(function(L,U){u.set(U,pk(L,e,r,U,t,n))});var C=h?p?Nht:Rht:p?Wht:Yht,T=E?void 0:C(t);return Pht(T||t,function(L,U){T&&(U=L,L=t[U]),Sht(u,U,pk(L,e,r,U,t,n))}),u}Qge.exports=pk});var F8=_((_Ht,Fge)=>{var E0t=Q8(),C0t=1,w0t=4;function I0t(t){return E0t(t,C0t|w0t)}Fge.exports=I0t});var T8=_((HHt,Tge)=>{var B0t=v_();function v0t(t,e,r){return t==null?t:B0t(t,e,r)}Tge.exports=v0t});var Oge=_((VHt,Mge)=>{var D0t=Object.prototype,P0t=D0t.hasOwnProperty;function S0t(t,e){return t!=null&&P0t.call(t,e)}Mge.exports=S0t});var _ge=_((KHt,Uge)=>{var x0t=Oge(),b0t=D_();function k0t(t,e){return t!=null&&b0t(t,e,x0t)}Uge.exports=k0t});var jge=_((JHt,Hge)=>{function Q0t(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}Hge.exports=Q0t});var Gge=_((zHt,qge)=>{var F0t=Zb(),T0t=gU();function R0t(t,e){return e.length<2?t:F0t(t,T0t(e,0,-1))}qge.exports=R0t});var N8=_((XHt,Yge)=>{var N0t=jd(),L0t=jge(),M0t=Gge(),O0t=aC();function U0t(t,e){return e=N0t(e,t),t=M0t(t,e),t==null||delete t[O0t(L0t(e))]}Yge.exports=U0t});var L8=_((ZHt,Wge)=>{var _0t=N8();function H0t(t,e){return t==null?!0:_0t(t,e)}Wge.exports=H0t});var Xge=_((S6t,G0t)=>{G0t.exports={name:"@yarnpkg/cli",version:"4.0.2",license:"BSD-2-Clause",main:"./sources/index.ts",exports:{".":"./sources/index.ts","./polyfills":"./sources/polyfills.ts","./package.json":"./package.json"},dependencies:{"@yarnpkg/core":"workspace:^","@yarnpkg/fslib":"workspace:^","@yarnpkg/libzip":"workspace:^","@yarnpkg/parsers":"workspace:^","@yarnpkg/plugin-compat":"workspace:^","@yarnpkg/plugin-constraints":"workspace:^","@yarnpkg/plugin-dlx":"workspace:^","@yarnpkg/plugin-essentials":"workspace:^","@yarnpkg/plugin-exec":"workspace:^","@yarnpkg/plugin-file":"workspace:^","@yarnpkg/plugin-git":"workspace:^","@yarnpkg/plugin-github":"workspace:^","@yarnpkg/plugin-http":"workspace:^","@yarnpkg/plugin-init":"workspace:^","@yarnpkg/plugin-interactive-tools":"workspace:^","@yarnpkg/plugin-link":"workspace:^","@yarnpkg/plugin-nm":"workspace:^","@yarnpkg/plugin-npm":"workspace:^","@yarnpkg/plugin-npm-cli":"workspace:^","@yarnpkg/plugin-pack":"workspace:^","@yarnpkg/plugin-patch":"workspace:^","@yarnpkg/plugin-pnp":"workspace:^","@yarnpkg/plugin-pnpm":"workspace:^","@yarnpkg/plugin-stage":"workspace:^","@yarnpkg/plugin-typescript":"workspace:^","@yarnpkg/plugin-version":"workspace:^","@yarnpkg/plugin-workspace-tools":"workspace:^","@yarnpkg/shell":"workspace:^","ci-info":"^3.2.0",clipanion:"^4.0.0-rc.2",semver:"^7.1.2",tslib:"^2.4.0",typanion:"^3.14.0"},devDependencies:{"@types/semver":"^7.1.0","@yarnpkg/builder":"workspace:^","@yarnpkg/monorepo":"workspace:^","@yarnpkg/pnpify":"workspace:^"},peerDependencies:{"@yarnpkg/core":"workspace:^"},scripts:{postpack:"rm -rf lib",prepack:'run build:compile "$(pwd)"',"build:cli+hook":"run build:pnp:hook && builder build bundle","build:cli":"builder build bundle","run:cli":"builder run","update-local":"run build:cli --no-git-hash && rsync -a --delete bundles/ bin/"},publishConfig:{main:"./lib/index.js",bin:null,exports:{".":"./lib/index.js","./package.json":"./package.json"}},files:["/lib/**/*","!/lib/pluginConfiguration.*","!/lib/cli.*"],"@yarnpkg/builder":{bundles:{standard:["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"]}},repository:{type:"git",url:"ssh://git@github.com/yarnpkg/berry.git",directory:"packages/yarnpkg-cli"},engines:{node:">=18.12.0"}}});var Y8=_((n5t,ude)=>{"use strict";ude.exports=function(e,r){r===!0&&(r=0);var o="";if(typeof e=="string")try{o=new URL(e).protocol}catch{}else e&&e.constructor===URL&&(o=e.protocol);var a=o.split(/\:|\+/).filter(Boolean);return typeof r=="number"?a[r]:a}});var fde=_((i5t,Ade)=>{"use strict";var cgt=Y8();function ugt(t){var e={protocols:[],protocol:null,port:null,resource:"",host:"",user:"",password:"",pathname:"",hash:"",search:"",href:t,query:{},parse_failed:!1};try{var r=new URL(t);e.protocols=cgt(r),e.protocol=e.protocols[0],e.port=r.port,e.resource=r.hostname,e.host=r.host,e.user=r.username||"",e.password=r.password||"",e.pathname=r.pathname,e.hash=r.hash.slice(1),e.search=r.search.slice(1),e.href=r.href,e.query=Object.fromEntries(r.searchParams)}catch{e.protocols=["file"],e.protocol=e.protocols[0],e.port="",e.resource="",e.user="",e.pathname="",e.hash="",e.search="",e.href=t,e.query={},e.parse_failed=!0}return e}Ade.exports=ugt});var gde=_((s5t,hde)=>{"use strict";var Agt=fde();function fgt(t){return t&&typeof t=="object"&&"default"in t?t:{default:t}}var pgt=fgt(Agt),hgt="text/plain",ggt="us-ascii",pde=(t,e)=>e.some(r=>r instanceof RegExp?r.test(t):r===t),dgt=(t,{stripHash:e})=>{let r=/^data:(?[^,]*?),(?[^#]*?)(?:#(?.*))?$/.exec(t);if(!r)throw new Error(`Invalid URL: ${t}`);let{type:o,data:a,hash:n}=r.groups,u=o.split(";");n=e?"":n;let A=!1;u[u.length-1]==="base64"&&(u.pop(),A=!0);let p=(u.shift()||"").toLowerCase(),E=[...u.map(I=>{let[v,b=""]=I.split("=").map(C=>C.trim());return v==="charset"&&(b=b.toLowerCase(),b===ggt)?"":`${v}${b?`=${b}`:""}`}).filter(Boolean)];return A&&E.push("base64"),(E.length>0||p&&p!==hgt)&&E.unshift(p),`data:${E.join(";")},${A?a.trim():a}${n?`#${n}`:""}`};function mgt(t,e){if(e={defaultProtocol:"http:",normalizeProtocol:!0,forceHttp:!1,forceHttps:!1,stripAuthentication:!0,stripHash:!1,stripTextFragment:!0,stripWWW:!0,removeQueryParameters:[/^utm_\w+/i],removeTrailingSlash:!0,removeSingleSlash:!0,removeDirectoryIndex:!1,sortQueryParameters:!0,...e},t=t.trim(),/^data:/i.test(t))return dgt(t,e);if(/^view-source:/i.test(t))throw new Error("`view-source:` is not supported as it is a non-standard protocol");let r=t.startsWith("//");!r&&/^\.*\//.test(t)||(t=t.replace(/^(?!(?:\w+:)?\/\/)|^\/\//,e.defaultProtocol));let a=new URL(t);if(e.forceHttp&&e.forceHttps)throw new Error("The `forceHttp` and `forceHttps` options cannot be used together");if(e.forceHttp&&a.protocol==="https:"&&(a.protocol="http:"),e.forceHttps&&a.protocol==="http:"&&(a.protocol="https:"),e.stripAuthentication&&(a.username="",a.password=""),e.stripHash?a.hash="":e.stripTextFragment&&(a.hash=a.hash.replace(/#?:~:text.*?$/i,"")),a.pathname){let u=/\b[a-z][a-z\d+\-.]{1,50}:\/\//g,A=0,p="";for(;;){let E=u.exec(a.pathname);if(!E)break;let I=E[0],v=E.index,b=a.pathname.slice(A,v);p+=b.replace(/\/{2,}/g,"/"),p+=I,A=v+I.length}let h=a.pathname.slice(A,a.pathname.length);p+=h.replace(/\/{2,}/g,"/"),a.pathname=p}if(a.pathname)try{a.pathname=decodeURI(a.pathname)}catch{}if(e.removeDirectoryIndex===!0&&(e.removeDirectoryIndex=[/^index\.[a-z]+$/]),Array.isArray(e.removeDirectoryIndex)&&e.removeDirectoryIndex.length>0){let u=a.pathname.split("/"),A=u[u.length-1];pde(A,e.removeDirectoryIndex)&&(u=u.slice(0,-1),a.pathname=u.slice(1).join("/")+"/")}if(a.hostname&&(a.hostname=a.hostname.replace(/\.$/,""),e.stripWWW&&/^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(a.hostname)&&(a.hostname=a.hostname.replace(/^www\./,""))),Array.isArray(e.removeQueryParameters))for(let u of[...a.searchParams.keys()])pde(u,e.removeQueryParameters)&&a.searchParams.delete(u);if(e.removeQueryParameters===!0&&(a.search=""),e.sortQueryParameters){a.searchParams.sort();try{a.search=decodeURIComponent(a.search)}catch{}}e.removeTrailingSlash&&(a.pathname=a.pathname.replace(/\/$/,""));let n=t;return t=a.toString(),!e.removeSingleSlash&&a.pathname==="/"&&!n.endsWith("/")&&a.hash===""&&(t=t.replace(/\/$/,"")),(e.removeTrailingSlash||a.pathname==="/")&&a.hash===""&&e.removeSingleSlash&&(t=t.replace(/\/$/,"")),r&&!e.normalizeProtocol&&(t=t.replace(/^http:\/\//,"//")),e.stripProtocol&&(t=t.replace(/^(?:https?:)?\/\//,"")),t}var W8=(t,e=!1)=>{let r=/^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\/\/)([\w\.\-@]+)[\/:]([\~,\.\w,\-,\_,\/]+?(?:\.git|\/)?)$/,o=n=>{let u=new Error(n);throw u.subject_url=t,u};(typeof t!="string"||!t.trim())&&o("Invalid url."),t.length>W8.MAX_INPUT_LENGTH&&o("Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH."),e&&(typeof e!="object"&&(e={stripHash:!1}),t=mgt(t,e));let a=pgt.default(t);if(a.parse_failed){let n=a.href.match(r);n?(a.protocols=["ssh"],a.protocol="ssh",a.resource=n[2],a.host=n[2],a.user=n[1],a.pathname=`/${n[3]}`,a.parse_failed=!1):o("URL parsing failed.")}return a};W8.MAX_INPUT_LENGTH=2048;hde.exports=W8});var yde=_((o5t,mde)=>{"use strict";var ygt=Y8();function dde(t){if(Array.isArray(t))return t.indexOf("ssh")!==-1||t.indexOf("rsync")!==-1;if(typeof t!="string")return!1;var e=ygt(t);if(t=t.substring(t.indexOf("://")+3),dde(e))return!0;var r=new RegExp(".([a-zA-Z\\d]+):(\\d+)/");return!t.match(r)&&t.indexOf("@"){"use strict";var Egt=gde(),Ede=yde();function Cgt(t){var e=Egt(t);return e.token="",e.password==="x-oauth-basic"?e.token=e.user:e.user==="x-token-auth"&&(e.token=e.password),Ede(e.protocols)||e.protocols.length===0&&Ede(t)?e.protocol="ssh":e.protocols.length?e.protocol=e.protocols[0]:(e.protocol="file",e.protocols=["file"]),e.href=e.href.replace(/\/$/,""),e}Cde.exports=Cgt});var Bde=_((l5t,Ide)=>{"use strict";var wgt=wde();function V8(t){if(typeof t!="string")throw new Error("The url must be a string.");var e=/^([a-z\d-]{1,39})\/([-\.\w]{1,100})$/i;e.test(t)&&(t="https://github.com/"+t);var r=wgt(t),o=r.resource.split("."),a=null;switch(r.toString=function(L){return V8.stringify(this,L)},r.source=o.length>2?o.slice(1-o.length).join("."):r.source=r.resource,r.git_suffix=/\.git$/.test(r.pathname),r.name=decodeURIComponent((r.pathname||r.href).replace(/(^\/)|(\/$)/g,"").replace(/\.git$/,"")),r.owner=decodeURIComponent(r.user),r.source){case"git.cloudforge.com":r.owner=r.user,r.organization=o[0],r.source="cloudforge.com";break;case"visualstudio.com":if(r.resource==="vs-ssh.visualstudio.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3],r.full_name=a[2]+"/"+a[3]);break}else{a=r.name.split("/"),a.length===2?(r.owner=a[1],r.name=a[1],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name);break}case"dev.azure.com":case"azure.com":if(r.resource==="ssh.dev.azure.com"){a=r.name.split("/"),a.length===4&&(r.organization=a[1],r.owner=a[2],r.name=a[3]);break}else{a=r.name.split("/"),a.length===5?(r.organization=a[0],r.owner=a[1],r.name=a[4],r.full_name="_git/"+r.name):a.length===3?(r.name=a[2],a[0]==="DefaultCollection"?(r.owner=a[2],r.organization=a[0],r.full_name=r.organization+"/_git/"+r.name):(r.owner=a[0],r.full_name=r.owner+"/_git/"+r.name)):a.length===4&&(r.organization=a[0],r.owner=a[1],r.name=a[3],r.full_name=r.organization+"/"+r.owner+"/_git/"+r.name),r.query&&r.query.path&&(r.filepath=r.query.path.replace(/^\/+/g,"")),r.query&&r.query.version&&(r.ref=r.query.version.replace(/^GB/,""));break}default:a=r.name.split("/");var n=a.length-1;if(a.length>=2){var u=a.indexOf("-",2),A=a.indexOf("blob",2),p=a.indexOf("tree",2),h=a.indexOf("commit",2),E=a.indexOf("src",2),I=a.indexOf("raw",2),v=a.indexOf("edit",2);n=u>0?u-1:A>0?A-1:p>0?p-1:h>0?h-1:E>0?E-1:I>0?I-1:v>0?v-1:n,r.owner=a.slice(0,n).join("/"),r.name=a[n],h&&(r.commit=a[n+2])}r.ref="",r.filepathtype="",r.filepath="";var b=a.length>n&&a[n+1]==="-"?n+1:n;a.length>b+2&&["raw","src","blob","tree","edit"].indexOf(a[b+1])>=0&&(r.filepathtype=a[b+1],r.ref=a[b+2],a.length>b+3&&(r.filepath=a.slice(b+3).join("/"))),r.organization=r.owner;break}r.full_name||(r.full_name=r.owner,r.name&&(r.full_name&&(r.full_name+="/"),r.full_name+=r.name)),r.owner.startsWith("scm/")&&(r.source="bitbucket-server",r.owner=r.owner.replace("scm/",""),r.organization=r.owner,r.full_name=r.owner+"/"+r.name);var C=/(projects|users)\/(.*?)\/repos\/(.*?)((\/.*$)|$)/,T=C.exec(r.pathname);return T!=null&&(r.source="bitbucket-server",T[1]==="users"?r.owner="~"+T[2]:r.owner=T[2],r.organization=r.owner,r.name=T[3],a=T[4].split("/"),a.length>1&&(["raw","browse"].indexOf(a[1])>=0?(r.filepathtype=a[1],a.length>2&&(r.filepath=a.slice(2).join("/"))):a[1]==="commits"&&a.length>2&&(r.commit=a[2])),r.full_name=r.owner+"/"+r.name,r.query.at?r.ref=r.query.at:r.ref=""),r}V8.stringify=function(t,e){e=e||(t.protocols&&t.protocols.length?t.protocols.join("+"):t.protocol);var r=t.port?":"+t.port:"",o=t.user||"git",a=t.git_suffix?".git":"";switch(e){case"ssh":return r?"ssh://"+o+"@"+t.resource+r+"/"+t.full_name+a:o+"@"+t.resource+":"+t.full_name+a;case"git+ssh":case"ssh+git":case"ftp":case"ftps":return e+"://"+o+"@"+t.resource+r+"/"+t.full_name+a;case"http":case"https":var n=t.token?Igt(t):t.user&&(t.protocols.includes("http")||t.protocols.includes("https"))?t.user+"@":"";return e+"://"+n+t.resource+r+"/"+Bgt(t)+a;default:return t.href}};function Igt(t){switch(t.source){case"bitbucket.org":return"x-token-auth:"+t.token+"@";default:return t.token+"@"}}function Bgt(t){switch(t.source){case"bitbucket-server":return"scm/"+t.full_name;default:return""+t.full_name}}Ide.exports=V8});var Ude=_((H9t,Ode)=>{var Rgt=jx(),Ngt=eS(),Lgt=Hl(),Mgt=fE(),Ogt=B_(),Ugt=aC(),_gt=R1();function Hgt(t){return Lgt(t)?Rgt(t,Ugt):Mgt(t)?[t]:Ngt(Ogt(_gt(t)))}Ode.exports=Hgt});function Ygt(t,e){return e===1&&Ggt.has(t[0])}function I2(t){let e=Array.isArray(t)?t:(0,jde.default)(t);return e.map((o,a)=>jgt.test(o)?`[${o}]`:qgt.test(o)&&!Ygt(e,a)?`.${o}`:`[${JSON.stringify(o)}]`).join("").replace(/^\./,"")}function Wgt(t,e){let r=[];if(e.methodName!==null&&r.push(de.pretty(t,e.methodName,de.Type.CODE)),e.file!==null){let o=[];o.push(de.pretty(t,e.file,de.Type.PATH)),e.line!==null&&(o.push(de.pretty(t,e.line,de.Type.NUMBER)),e.column!==null&&o.push(de.pretty(t,e.column,de.Type.NUMBER))),r.push(`(${o.join(de.pretty(t,":","grey"))})`)}return r.join(" ")}function mk(t,{manifestUpdates:e,reportedErrors:r},{fix:o}={}){let a=new Map,n=new Map,u=[...r.keys()].map(A=>[A,new Map]);for(let[A,p]of[...u,...e]){let h=r.get(A)?.map(b=>({text:b,fixable:!1}))??[],E=!1,I=t.getWorkspaceByCwd(A),v=I.manifest.exportTo({});for(let[b,C]of p){if(C.size>1){let T=[...C].map(([L,U])=>{let J=de.pretty(t.configuration,L,de.Type.INSPECT),te=U.size>0?Wgt(t.configuration,U.values().next().value):null;return te!==null?` +${J} at ${te}`:` +${J}`}).join("");h.push({text:`Conflict detected in constraint targeting ${de.pretty(t.configuration,b,de.Type.CODE)}; conflicting values are:${T}`,fixable:!1})}else{let[[T]]=C,L=(0,_de.default)(v,b);if(JSON.stringify(L)===JSON.stringify(T))continue;if(!o){let U=typeof L>"u"?`Missing field ${de.pretty(t.configuration,b,de.Type.CODE)}; expected ${de.pretty(t.configuration,T,de.Type.INSPECT)}`:typeof T>"u"?`Extraneous field ${de.pretty(t.configuration,b,de.Type.CODE)} currently set to ${de.pretty(t.configuration,L,de.Type.INSPECT)}`:`Invalid field ${de.pretty(t.configuration,b,de.Type.CODE)}; expected ${de.pretty(t.configuration,T,de.Type.INSPECT)}, found ${de.pretty(t.configuration,L,de.Type.INSPECT)}`;h.push({text:U,fixable:!0});continue}typeof T>"u"?(0,qde.default)(v,b):(0,Hde.default)(v,b,T),E=!0}E&&a.set(I,v)}h.length>0&&n.set(I,h)}return{changedWorkspaces:a,remainingErrors:n}}function Gde(t,{configuration:e}){let r={children:[]};for(let[o,a]of t){let n=[];for(let A of a){let p=A.text.split(/\n/);A.fixable&&(p[0]=`${de.pretty(e,"\u2699","gray")} ${p[0]}`),n.push({value:de.tuple(de.Type.NO_HINT,p[0]),children:p.slice(1).map(h=>({value:de.tuple(de.Type.NO_HINT,h)}))})}let u={value:de.tuple(de.Type.LOCATOR,o.anchoredLocator),children:je.sortMap(n,A=>A.value[1])};r.children.push(u)}return r.children=je.sortMap(r.children,o=>o.value[1]),r}var _de,Hde,jde,qde,CC,jgt,qgt,Ggt,B2=Et(()=>{Ye();_de=$e(g2()),Hde=$e(T8()),jde=$e(Ude()),qde=$e(L8()),CC=class{constructor(e){this.indexedFields=e;this.items=[];this.indexes={};this.clear()}clear(){this.items=[];for(let e of this.indexedFields)this.indexes[e]=new Map}insert(e){this.items.push(e);for(let r of this.indexedFields){let o=Object.hasOwn(e,r)?e[r]:void 0;if(typeof o>"u")continue;je.getArrayWithDefault(this.indexes[r],o).push(e)}return e}find(e){if(typeof e>"u")return this.items;let r=Object.entries(e);if(r.length===0)return this.items;let o=[],a;for(let[u,A]of r){let p=u,h=Object.hasOwn(this.indexes,p)?this.indexes[p]:void 0;if(typeof h>"u"){o.push([p,A]);continue}let E=new Set(h.get(A)??[]);if(E.size===0)return[];if(typeof a>"u")a=E;else for(let I of a)E.has(I)||a.delete(I);if(a.size===0)break}let n=[...a??[]];return o.length>0&&(n=n.filter(u=>{for(let[A,p]of o)if(!(typeof p<"u"?Object.hasOwn(u,A)&&u[A]===p:Object.hasOwn(u,A)===!1))return!1;return!0})),n}},jgt=/^[0-9]+$/,qgt=/^[a-zA-Z0-9_]+$/,Ggt=new Set(["scripts",...Mt.allDependencies])});var Yde=_(($9t,aH)=>{var Vgt;(function(t){var e=function(){return{"append/2":[new t.type.Rule(new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("L")]),new t.type.Term("foldl",[new t.type.Term("append",[]),new t.type.Var("X"),new t.type.Term("[]",[]),new t.type.Var("L")]))],"append/3":[new t.type.Rule(new t.type.Term("append",[new t.type.Term("[]",[]),new t.type.Var("X"),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("append",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("append",[new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("S")]))],"member/2":[new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("_")])]),null),new t.type.Rule(new t.type.Term("member",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")])]),new t.type.Term("member",[new t.type.Var("X"),new t.type.Var("Xs")]))],"permutation/2":[new t.type.Rule(new t.type.Term("permutation",[new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("permutation",[new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("permutation",[new t.type.Var("T"),new t.type.Var("P")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("P")]),new t.type.Term("append",[new t.type.Var("X"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("Y")]),new t.type.Var("S")])])]))],"maplist/2":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("X")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("Xs")])]))],"maplist/3":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs")])]))],"maplist/4":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs")])]))],"maplist/5":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds")])]))],"maplist/6":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es")])]))],"maplist/7":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs")])]))],"maplist/8":[new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("A"),new t.type.Var("As")]),new t.type.Term(".",[new t.type.Var("B"),new t.type.Var("Bs")]),new t.type.Term(".",[new t.type.Var("C"),new t.type.Var("Cs")]),new t.type.Term(".",[new t.type.Var("D"),new t.type.Var("Ds")]),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Es")]),new t.type.Term(".",[new t.type.Var("F"),new t.type.Var("Fs")]),new t.type.Term(".",[new t.type.Var("G"),new t.type.Var("Gs")])]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P"),new t.type.Var("A"),new t.type.Var("B"),new t.type.Var("C"),new t.type.Var("D"),new t.type.Var("E"),new t.type.Var("F"),new t.type.Var("G")]),new t.type.Term("maplist",[new t.type.Var("P"),new t.type.Var("As"),new t.type.Var("Bs"),new t.type.Var("Cs"),new t.type.Var("Ds"),new t.type.Var("Es"),new t.type.Var("Fs"),new t.type.Var("Gs")])]))],"include/3":[new t.type.Rule(new t.type.Term("include",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("include",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("A")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("A"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("F"),new t.type.Var("B")]),new t.type.Term(",",[new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("F")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("S")])]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("L"),new t.type.Var("S")])]),new t.type.Term("include",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("S")])])])])]))],"exclude/3":[new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Term("[]",[])]),null),new t.type.Rule(new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("exclude",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("E")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term("[]",[])]),new t.type.Var("Q")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("R"),new t.type.Var("Q")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("!",[]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("E")])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("E")])])])])])])]))],"foldl/4":[new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("_"),new t.type.Term("[]",[]),new t.type.Var("I"),new t.type.Var("I")]),null),new t.type.Rule(new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Var("T")]),new t.type.Var("I"),new t.type.Var("R")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P"),new t.type.Var("L")]),new t.type.Term(",",[new t.type.Term("append",[new t.type.Var("L"),new t.type.Term(".",[new t.type.Var("I"),new t.type.Term(".",[new t.type.Var("H"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])])])]),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("=..",[new t.type.Var("P2"),new t.type.Var("L2")]),new t.type.Term(",",[new t.type.Term("call",[new t.type.Var("P2")]),new t.type.Term("foldl",[new t.type.Var("P"),new t.type.Var("T"),new t.type.Var("X"),new t.type.Var("R")])])])])]))],"select/3":[new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("E"),new t.type.Var("Xs")]),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("select",[new t.type.Var("E"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term("select",[new t.type.Var("E"),new t.type.Var("Xs"),new t.type.Var("Ys")]))],"sum_list/2":[new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term("[]",[]),new t.type.Num(0,!1)]),null),new t.type.Rule(new t.type.Term("sum_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("sum_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("+",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"max_list/2":[new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("max_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("max_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"min_list/2":[new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("min_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("min_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term(";",[new t.type.Term(",",[new t.type.Term("=<",[new t.type.Var("X"),new t.type.Var("Y")]),new t.type.Term(",",[new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("X")]),new t.type.Term("!",[])])]),new t.type.Term("=",[new t.type.Var("S"),new t.type.Var("Y")])])]))],"prod_list/2":[new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term("[]",[]),new t.type.Num(1,!1)]),null),new t.type.Rule(new t.type.Term("prod_list",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("S")]),new t.type.Term(",",[new t.type.Term("prod_list",[new t.type.Var("Xs"),new t.type.Var("Y")]),new t.type.Term("is",[new t.type.Var("S"),new t.type.Term("*",[new t.type.Var("X"),new t.type.Var("Y")])])]))],"last/2":[new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("X"),new t.type.Term("[]",[])]),new t.type.Var("X")]),null),new t.type.Rule(new t.type.Term("last",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("Xs")]),new t.type.Var("X")]),new t.type.Term("last",[new t.type.Var("Xs"),new t.type.Var("X")]))],"prefix/2":[new t.type.Rule(new t.type.Term("prefix",[new t.type.Var("Part"),new t.type.Var("Whole")]),new t.type.Term("append",[new t.type.Var("Part"),new t.type.Var("_"),new t.type.Var("Whole")]))],"nth0/3":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth1/3":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("_")]),new t.type.Term("!",[])])])]))],"nth0/4":[new t.type.Rule(new t.type.Term("nth0",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">=",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(0,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth1/4":[new t.type.Rule(new t.type.Term("nth1",[new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term(";",[new t.type.Term("->",[new t.type.Term("var",[new t.type.Var("X")]),new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")])]),new t.type.Term(",",[new t.type.Term(">",[new t.type.Var("X"),new t.type.Num(0,!1)]),new t.type.Term(",",[new t.type.Term("nth",[new t.type.Num(1,!1),new t.type.Var("X"),new t.type.Var("Y"),new t.type.Var("Z"),new t.type.Var("W")]),new t.type.Term("!",[])])])]))],"nth/5":[new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("N"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("X"),new t.type.Var("Xs")]),null),new t.type.Rule(new t.type.Term("nth",[new t.type.Var("N"),new t.type.Var("O"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Xs")]),new t.type.Var("Y"),new t.type.Term(".",[new t.type.Var("X"),new t.type.Var("Ys")])]),new t.type.Term(",",[new t.type.Term("is",[new t.type.Var("M"),new t.type.Term("+",[new t.type.Var("N"),new t.type.Num(1,!1)])]),new t.type.Term("nth",[new t.type.Var("M"),new t.type.Var("O"),new t.type.Var("Xs"),new t.type.Var("Y"),new t.type.Var("Ys")])]))],"length/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(!t.type.is_variable(A)&&!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(t.type.is_integer(A)&&A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else{var p=new t.type.Term("length",[u,new t.type.Num(0,!1),A]);t.type.is_integer(A)&&(p=new t.type.Term(",",[p,new t.type.Term("!",[])])),o.prepend([new t.type.State(a.goal.replace(p),a.substitution,a)])}},"length/3":[new t.type.Rule(new t.type.Term("length",[new t.type.Term("[]",[]),new t.type.Var("N"),new t.type.Var("N")]),null),new t.type.Rule(new t.type.Term("length",[new t.type.Term(".",[new t.type.Var("_"),new t.type.Var("X")]),new t.type.Var("A"),new t.type.Var("N")]),new t.type.Term(",",[new t.type.Term("succ",[new t.type.Var("A"),new t.type.Var("B")]),new t.type.Term("length",[new t.type.Var("X"),new t.type.Var("B"),new t.type.Var("N")])]))],"replicate/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_integer(A))o.throw_error(t.error.type("integer",A,n.indicator));else if(A.value<0)o.throw_error(t.error.domain("not_less_than_zero",A,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=new t.type.Term("[]"),E=0;E0;I--)E[I].equals(E[I-1])&&E.splice(I,1);for(var v=new t.type.Term("[]"),I=E.length-1;I>=0;I--)v=new t.type.Term(".",[E[I],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"msort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h=u;h.indicator==="./2";)p.push(h.args[0]),h=h.args[1];if(t.type.is_variable(h))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(h))o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=p.sort(t.compare),I=new t.type.Term("[]"),v=E.length-1;v>=0;v--)I=new t.type.Term(".",[E[v],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,A])),a.substitution,a)])}}},"keysort/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else{for(var p=[],h,E=u;E.indicator==="./2";){if(h=E.args[0],t.type.is_variable(h)){o.throw_error(t.error.instantiation(n.indicator));return}else if(!t.type.is_term(h)||h.indicator!=="-/2"){o.throw_error(t.error.type("pair",h,n.indicator));return}h.args[0].pair=h.args[1],p.push(h.args[0]),E=E.args[1]}if(t.type.is_variable(E))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_empty_list(E))o.throw_error(t.error.type("list",u,n.indicator));else{for(var I=p.sort(t.compare),v=new t.type.Term("[]"),b=I.length-1;b>=0;b--)v=new t.type.Term(".",[new t.type.Term("-",[I[b],I[b].pair]),v]),delete I[b].pair;o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,A])),a.substitution,a)])}}},"take/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],I=A;h>0&&I.indicator==="./2";)E.push(I.args[0]),I=I.args[1],h--;if(h===0){for(var v=new t.type.Term("[]"),h=E.length-1;h>=0;h--)v=new t.type.Term(".",[E[h],v]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[v,p])),a.substitution,a)])}}},"drop/3":function(o,a,n){var u=n.args[0],A=n.args[1],p=n.args[2];if(t.type.is_variable(A)||t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!t.type.is_integer(u))o.throw_error(t.error.type("integer",u,n.indicator));else if(!t.type.is_variable(p)&&!t.type.is_list(p))o.throw_error(t.error.type("list",p,n.indicator));else{for(var h=u.value,E=[],I=A;h>0&&I.indicator==="./2";)E.push(I.args[0]),I=I.args[1],h--;h===0&&o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p])),a.substitution,a)])}},"reverse/2":function(o,a,n){var u=n.args[0],A=n.args[1],p=t.type.is_instantiated_list(u),h=t.type.is_instantiated_list(A);if(t.type.is_variable(u)&&t.type.is_variable(A))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_variable(u)&&!t.type.is_fully_list(u))o.throw_error(t.error.type("list",u,n.indicator));else if(!t.type.is_variable(A)&&!t.type.is_fully_list(A))o.throw_error(t.error.type("list",A,n.indicator));else if(!p&&!h)o.throw_error(t.error.instantiation(n.indicator));else{for(var E=p?u:A,I=new t.type.Term("[]",[]);E.indicator==="./2";)I=new t.type.Term(".",[E.args[0],I]),E=E.args[1];o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[I,p?A:u])),a.substitution,a)])}},"list_to_set/2":function(o,a,n){var u=n.args[0],A=n.args[1];if(t.type.is_variable(u))o.throw_error(t.error.instantiation(n.indicator));else{for(var p=u,h=[];p.indicator==="./2";)h.push(p.args[0]),p=p.args[1];if(t.type.is_variable(p))o.throw_error(t.error.instantiation(n.indicator));else if(!t.type.is_term(p)||p.indicator!=="[]/0")o.throw_error(t.error.type("list",u,n.indicator));else{for(var E=[],I=new t.type.Term("[]",[]),v,b=0;b=0;b--)I=new t.type.Term(".",[E[b],I]);o.prepend([new t.type.State(a.goal.replace(new t.type.Term("=",[A,I])),a.substitution,a)])}}}}},r=["append/2","append/3","member/2","permutation/2","maplist/2","maplist/3","maplist/4","maplist/5","maplist/6","maplist/7","maplist/8","include/3","exclude/3","foldl/4","sum_list/2","max_list/2","min_list/2","prod_list/2","last/2","prefix/2","nth0/3","nth1/3","nth0/4","nth1/4","length/2","replicate/3","select/3","sort/2","msort/2","keysort/2","take/3","drop/3","reverse/2","list_to_set/2"];typeof aH<"u"?aH.exports=function(o){t=o,new t.type.Module("lists",e(),r)}:new t.type.Module("lists",e(),r)})(Vgt)});var ome=_(Yr=>{"use strict";var Zd=process.platform==="win32",lH="aes-256-cbc",Kgt="sha256",Kde="The current environment doesn't support interactive reading from TTY.",Yn=Be("fs"),Wde=process.binding("tty_wrap").TTY,uH=Be("child_process"),l0=Be("path"),AH={prompt:"> ",hideEchoBack:!1,mask:"*",limit:[],limitMessage:"Input another, please.$<( [)limit(])>",defaultInput:"",trueValue:[],falseValue:[],caseSensitive:!1,keepWhitespace:!1,encoding:"utf8",bufferSize:1024,print:void 0,history:!0,cd:!1,phContent:void 0,preCheck:void 0},Jf="none",Xc,IC,Vde=!1,a0,Ek,cH,Jgt=0,dH="",Xd=[],Ck,Jde=!1,fH=!1,v2=!1;function zde(t){function e(r){return r.replace(/[^\w\u0080-\uFFFF]/g,function(o){return"#"+o.charCodeAt(0)+";"})}return Ek.concat(function(r){var o=[];return Object.keys(r).forEach(function(a){r[a]==="boolean"?t[a]&&o.push("--"+a):r[a]==="string"&&t[a]&&o.push("--"+a,e(t[a]))}),o}({display:"string",displayOnly:"boolean",keyIn:"boolean",hideEchoBack:"boolean",mask:"string",limit:"string",caseSensitive:"boolean"}))}function zgt(t,e){function r(U){var J,te="",le;for(cH=cH||Be("os").tmpdir();;){J=l0.join(cH,U+te);try{le=Yn.openSync(J,"wx")}catch(pe){if(pe.code==="EEXIST"){te++;continue}else throw pe}Yn.closeSync(le);break}return J}var o,a,n,u={},A,p,h=r("readline-sync.stdout"),E=r("readline-sync.stderr"),I=r("readline-sync.exit"),v=r("readline-sync.done"),b=Be("crypto"),C,T,L;C=b.createHash(Kgt),C.update(""+process.pid+Jgt+++Math.random()),L=C.digest("hex"),T=b.createDecipher(lH,L),o=zde(t),Zd?(a=process.env.ComSpec||"cmd.exe",process.env.Q='"',n=["/V:ON","/S","/C","(%Q%"+a+"%Q% /V:ON /S /C %Q%%Q%"+a0+"%Q%"+o.map(function(U){return" %Q%"+U+"%Q%"}).join("")+" & (echo !ERRORLEVEL!)>%Q%"+I+"%Q%%Q%) 2>%Q%"+E+"%Q% |%Q%"+process.execPath+"%Q% %Q%"+__dirname+"\\encrypt.js%Q% %Q%"+lH+"%Q% %Q%"+L+"%Q% >%Q%"+h+"%Q% & (echo 1)>%Q%"+v+"%Q%"]):(a="/bin/sh",n=["-c",'("'+a0+'"'+o.map(function(U){return" '"+U.replace(/'/g,"'\\''")+"'"}).join("")+'; echo $?>"'+I+'") 2>"'+E+'" |"'+process.execPath+'" "'+__dirname+'/encrypt.js" "'+lH+'" "'+L+'" >"'+h+'"; echo 1 >"'+v+'"']),v2&&v2("_execFileSync",o);try{uH.spawn(a,n,e)}catch(U){u.error=new Error(U.message),u.error.method="_execFileSync - spawn",u.error.program=a,u.error.args=n}for(;Yn.readFileSync(v,{encoding:t.encoding}).trim()!=="1";);return(A=Yn.readFileSync(I,{encoding:t.encoding}).trim())==="0"?u.input=T.update(Yn.readFileSync(h,{encoding:"binary"}),"hex",t.encoding)+T.final(t.encoding):(p=Yn.readFileSync(E,{encoding:t.encoding}).trim(),u.error=new Error(Kde+(p?` +`+p:"")),u.error.method="_execFileSync",u.error.program=a,u.error.args=n,u.error.extMessage=p,u.error.exitCode=+A),Yn.unlinkSync(h),Yn.unlinkSync(E),Yn.unlinkSync(I),Yn.unlinkSync(v),u}function Xgt(t){var e,r={},o,a={env:process.env,encoding:t.encoding};if(a0||(Zd?process.env.PSModulePath?(a0="powershell.exe",Ek=["-ExecutionPolicy","Bypass","-File",__dirname+"\\read.ps1"]):(a0="cscript.exe",Ek=["//nologo",__dirname+"\\read.cs.js"]):(a0="/bin/sh",Ek=[__dirname+"/read.sh"])),Zd&&!process.env.PSModulePath&&(a.stdio=[process.stdin]),uH.execFileSync){e=zde(t),v2&&v2("execFileSync",e);try{r.input=uH.execFileSync(a0,e,a)}catch(n){o=n.stderr?(n.stderr+"").trim():"",r.error=new Error(Kde+(o?` +`+o:"")),r.error.method="execFileSync",r.error.program=a0,r.error.args=e,r.error.extMessage=o,r.error.exitCode=n.status,r.error.code=n.code,r.error.signal=n.signal}}else r=zgt(t,a);return r.error||(r.input=r.input.replace(/^\s*'|'\s*$/g,""),t.display=""),r}function pH(t){var e="",r=t.display,o=!t.display&&t.keyIn&&t.hideEchoBack&&!t.mask;function a(){var n=Xgt(t);if(n.error)throw n.error;return n.input}return fH&&fH(t),function(){var n,u,A;function p(){return n||(n=process.binding("fs"),u=process.binding("constants")),n}if(typeof Jf=="string")if(Jf=null,Zd){if(A=function(h){var E=h.replace(/^\D+/,"").split("."),I=0;return(E[0]=+E[0])&&(I+=E[0]*1e4),(E[1]=+E[1])&&(I+=E[1]*100),(E[2]=+E[2])&&(I+=E[2]),I}(process.version),!(A>=20302&&A<40204||A>=5e4&&A<50100||A>=50600&&A<60200)&&process.stdin.isTTY)process.stdin.pause(),Jf=process.stdin.fd,IC=process.stdin._handle;else try{Jf=p().open("CONIN$",u.O_RDWR,parseInt("0666",8)),IC=new Wde(Jf,!0)}catch{}if(process.stdout.isTTY)Xc=process.stdout.fd;else{try{Xc=Yn.openSync("\\\\.\\CON","w")}catch{}if(typeof Xc!="number")try{Xc=p().open("CONOUT$",u.O_RDWR,parseInt("0666",8))}catch{}}}else{if(process.stdin.isTTY){process.stdin.pause();try{Jf=Yn.openSync("/dev/tty","r"),IC=process.stdin._handle}catch{}}else try{Jf=Yn.openSync("/dev/tty","r"),IC=new Wde(Jf,!1)}catch{}if(process.stdout.isTTY)Xc=process.stdout.fd;else try{Xc=Yn.openSync("/dev/tty","w")}catch{}}}(),function(){var n,u,A=!t.hideEchoBack&&!t.keyIn,p,h,E,I,v;Ck="";function b(C){return C===Vde?!0:IC.setRawMode(C)!==0?!1:(Vde=C,!0)}if(Jde||!IC||typeof Xc!="number"&&(t.display||!A)){e=a();return}if(t.display&&(Yn.writeSync(Xc,t.display),t.display=""),!t.displayOnly){if(!b(!A)){e=a();return}for(h=t.keyIn?1:t.bufferSize,p=Buffer.allocUnsafe&&Buffer.alloc?Buffer.alloc(h):new Buffer(h),t.keyIn&&t.limit&&(u=new RegExp("[^"+t.limit+"]","g"+(t.caseSensitive?"":"i")));;){E=0;try{E=Yn.readSync(Jf,p,0,h)}catch(C){if(C.code!=="EOF"){b(!1),e+=a();return}}if(E>0?(I=p.toString(t.encoding,0,E),Ck+=I):(I=` +`,Ck+=String.fromCharCode(0)),I&&typeof(v=(I.match(/^(.*?)[\r\n]/)||[])[1])=="string"&&(I=v,n=!0),I&&(I=I.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g,"")),I&&u&&(I=I.replace(u,"")),I&&(A||(t.hideEchoBack?t.mask&&Yn.writeSync(Xc,new Array(I.length+1).join(t.mask)):Yn.writeSync(Xc,I)),e+=I),!t.keyIn&&n||t.keyIn&&e.length>=h)break}!A&&!o&&Yn.writeSync(Xc,` +`),b(!1)}}(),t.print&&!o&&t.print(r+(t.displayOnly?"":(t.hideEchoBack?new Array(e.length+1).join(t.mask):e)+` +`),t.encoding),t.displayOnly?"":dH=t.keepWhitespace||t.keyIn?e:e.trim()}function Zgt(t,e){var r=[];function o(a){a!=null&&(Array.isArray(a)?a.forEach(o):(!e||e(a))&&r.push(a))}return o(t),r}function mH(t){return t.replace(/[\x00-\x7f]/g,function(e){return"\\x"+("00"+e.charCodeAt().toString(16)).substr(-2)})}function Ts(){var t=Array.prototype.slice.call(arguments),e,r;return t.length&&typeof t[0]=="boolean"&&(r=t.shift(),r&&(e=Object.keys(AH),t.unshift(AH))),t.reduce(function(o,a){return a==null||(a.hasOwnProperty("noEchoBack")&&!a.hasOwnProperty("hideEchoBack")&&(a.hideEchoBack=a.noEchoBack,delete a.noEchoBack),a.hasOwnProperty("noTrim")&&!a.hasOwnProperty("keepWhitespace")&&(a.keepWhitespace=a.noTrim,delete a.noTrim),r||(e=Object.keys(a)),e.forEach(function(n){var u;if(!!a.hasOwnProperty(n))switch(u=a[n],n){case"mask":case"limitMessage":case"defaultInput":case"encoding":u=u!=null?u+"":"",u&&n!=="limitMessage"&&(u=u.replace(/[\r\n]/g,"")),o[n]=u;break;case"bufferSize":!isNaN(u=parseInt(u,10))&&typeof u=="number"&&(o[n]=u);break;case"displayOnly":case"keyIn":case"hideEchoBack":case"caseSensitive":case"keepWhitespace":case"history":case"cd":o[n]=!!u;break;case"limit":case"trueValue":case"falseValue":o[n]=Zgt(u,function(A){var p=typeof A;return p==="string"||p==="number"||p==="function"||A instanceof RegExp}).map(function(A){return typeof A=="string"?A.replace(/[\r\n]/g,""):A});break;case"print":case"phContent":case"preCheck":o[n]=typeof u=="function"?u:void 0;break;case"prompt":case"display":o[n]=u??"";break}})),o},{})}function hH(t,e,r){return e.some(function(o){var a=typeof o;return a==="string"?r?t===o:t.toLowerCase()===o.toLowerCase():a==="number"?parseFloat(t)===o:a==="function"?o(t):o instanceof RegExp?o.test(t):!1})}function yH(t,e){var r=l0.normalize(Zd?(process.env.HOMEDRIVE||"")+(process.env.HOMEPATH||""):process.env.HOME||"").replace(/[\/\\]+$/,"");return t=l0.normalize(t),e?t.replace(/^~(?=\/|\\|$)/,r):t.replace(new RegExp("^"+mH(r)+"(?=\\/|\\\\|$)",Zd?"i":""),"~")}function BC(t,e){var r="(?:\\(([\\s\\S]*?)\\))?(\\w+|.-.)(?:\\(([\\s\\S]*?)\\))?",o=new RegExp("(\\$)?(\\$<"+r+">)","g"),a=new RegExp("(\\$)?(\\$\\{"+r+"\\})","g");function n(u,A,p,h,E,I){var v;return A||typeof(v=e(E))!="string"?p:v?(h||"")+v+(I||""):""}return t.replace(o,n).replace(a,n)}function Xde(t,e,r){var o,a=[],n=-1,u=0,A="",p;function h(E,I){return I.length>3?(E.push(I[0]+"..."+I[I.length-1]),p=!0):I.length&&(E=E.concat(I)),E}return o=t.reduce(function(E,I){return E.concat((I+"").split(""))},[]).reduce(function(E,I){var v,b;return e||(I=I.toLowerCase()),v=/^\d$/.test(I)?1:/^[A-Z]$/.test(I)?2:/^[a-z]$/.test(I)?3:0,r&&v===0?A+=I:(b=I.charCodeAt(0),v&&v===n&&b===u+1?a.push(I):(E=h(E,a),a=[I],n=v),u=b),E},[]),o=h(o,a),A&&(o.push(A),p=!0),{values:o,suppressed:p}}function Zde(t,e){return t.join(t.length>2?", ":e?" / ":"/")}function $de(t,e){var r,o,a={},n;if(e.phContent&&(r=e.phContent(t,e)),typeof r!="string")switch(t){case"hideEchoBack":case"mask":case"defaultInput":case"caseSensitive":case"keepWhitespace":case"encoding":case"bufferSize":case"history":case"cd":r=e.hasOwnProperty(t)?typeof e[t]=="boolean"?e[t]?"on":"off":e[t]+"":"";break;case"limit":case"trueValue":case"falseValue":o=e[e.hasOwnProperty(t+"Src")?t+"Src":t],e.keyIn?(a=Xde(o,e.caseSensitive),o=a.values):o=o.filter(function(u){var A=typeof u;return A==="string"||A==="number"}),r=Zde(o,a.suppressed);break;case"limitCount":case"limitCountNotZero":r=e[e.hasOwnProperty("limitSrc")?"limitSrc":"limit"].length,r=r||t!=="limitCountNotZero"?r+"":"";break;case"lastInput":r=dH;break;case"cwd":case"CWD":case"cwdHome":r=process.cwd(),t==="CWD"?r=l0.basename(r):t==="cwdHome"&&(r=yH(r));break;case"date":case"time":case"localeDate":case"localeTime":r=new Date()["to"+t.replace(/^./,function(u){return u.toUpperCase()})+"String"]();break;default:typeof(n=(t.match(/^history_m(\d+)$/)||[])[1])=="string"&&(r=Xd[Xd.length-n]||"")}return r}function eme(t){var e=/^(.)-(.)$/.exec(t),r="",o,a,n,u;if(!e)return null;for(o=e[1].charCodeAt(0),a=e[2].charCodeAt(0),u=o +And the length must be: $`,trueValue:null,falseValue:null,caseSensitive:!0},e,{history:!1,cd:!1,phContent:function(b){return b==="charlist"?r.text:b==="length"?o+"..."+a:null}}),u,A,p,h,E,I,v;for(e=e||{},u=BC(e.charlist?e.charlist+"":"$",eme),(isNaN(o=parseInt(e.min,10))||typeof o!="number")&&(o=12),(isNaN(a=parseInt(e.max,10))||typeof a!="number")&&(a=24),h=new RegExp("^["+mH(u)+"]{"+o+","+a+"}$"),r=Xde([u],n.caseSensitive,!0),r.text=Zde(r.values,r.suppressed),A=e.confirmMessage!=null?e.confirmMessage:"Reinput a same one to confirm it: ",p=e.unmatchMessage!=null?e.unmatchMessage:"It differs from first one. Hit only the Enter key if you want to retry from first one.",t==null&&(t="Input new password: "),E=n.limitMessage;!v;)n.limit=h,n.limitMessage=E,I=Yr.question(t,n),n.limit=[I,""],n.limitMessage=p,v=Yr.question(A,n);return I};function nme(t,e,r){var o;function a(n){return o=r(n),!isNaN(o)&&typeof o=="number"}return Yr.question(t,Ts({limitMessage:"Input valid number, please."},e,{limit:a,cd:!1})),o}Yr.questionInt=function(t,e){return nme(t,e,function(r){return parseInt(r,10)})};Yr.questionFloat=function(t,e){return nme(t,e,parseFloat)};Yr.questionPath=function(t,e){var r,o="",a=Ts({hideEchoBack:!1,limitMessage:`$Input valid path, please.$<( Min:)min>$<( Max:)max>`,history:!0,cd:!0},e,{keepWhitespace:!1,limit:function(n){var u,A,p;n=yH(n,!0),o="";function h(E){E.split(/\/|\\/).reduce(function(I,v){var b=l0.resolve(I+=v+l0.sep);if(!Yn.existsSync(b))Yn.mkdirSync(b);else if(!Yn.statSync(b).isDirectory())throw new Error("Non directory already exists: "+b);return I},"")}try{if(u=Yn.existsSync(n),r=u?Yn.realpathSync(n):l0.resolve(n),!e.hasOwnProperty("exists")&&!u||typeof e.exists=="boolean"&&e.exists!==u)return o=(u?"Already exists":"No such file or directory")+": "+r,!1;if(!u&&e.create&&(e.isDirectory?h(r):(h(l0.dirname(r)),Yn.closeSync(Yn.openSync(r,"w"))),r=Yn.realpathSync(r)),u&&(e.min||e.max||e.isFile||e.isDirectory)){if(A=Yn.statSync(r),e.isFile&&!A.isFile())return o="Not file: "+r,!1;if(e.isDirectory&&!A.isDirectory())return o="Not directory: "+r,!1;if(e.min&&A.size<+e.min||e.max&&A.size>+e.max)return o="Size "+A.size+" is out of range: "+r,!1}if(typeof e.validate=="function"&&(p=e.validate(r))!==!0)return typeof p=="string"&&(o=p),!1}catch(E){return o=E+"",!1}return!0},phContent:function(n){return n==="error"?o:n!=="min"&&n!=="max"?null:e.hasOwnProperty(n)?e[n]+"":""}});return e=e||{},t==null&&(t='Input path (you can "cd" and "pwd"): '),Yr.question(t,a),r};function ime(t,e){var r={},o={};return typeof t=="object"?(Object.keys(t).forEach(function(a){typeof t[a]=="function"&&(o[e.caseSensitive?a:a.toLowerCase()]=t[a])}),r.preCheck=function(a){var n;return r.args=gH(a),n=r.args[0]||"",e.caseSensitive||(n=n.toLowerCase()),r.hRes=n!=="_"&&o.hasOwnProperty(n)?o[n].apply(a,r.args.slice(1)):o.hasOwnProperty("_")?o._.apply(a,r.args):null,{res:a,forceNext:!1}},o.hasOwnProperty("_")||(r.limit=function(){var a=r.args[0]||"";return e.caseSensitive||(a=a.toLowerCase()),o.hasOwnProperty(a)})):r.preCheck=function(a){return r.args=gH(a),r.hRes=typeof t=="function"?t.apply(a,r.args):!0,{res:a,forceNext:!1}},r}Yr.promptCL=function(t,e){var r=Ts({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=ime(t,r);return r.limit=o.limit,r.preCheck=o.preCheck,Yr.prompt(r),o.args};Yr.promptLoop=function(t,e){for(var r=Ts({hideEchoBack:!1,trueValue:null,falseValue:null,caseSensitive:!1,history:!0},e);!t(Yr.prompt(r)););};Yr.promptCLLoop=function(t,e){var r=Ts({hideEchoBack:!1,limitMessage:"Requested command is not available.",caseSensitive:!1,history:!0},e),o=ime(t,r);for(r.limit=o.limit,r.preCheck=o.preCheck;Yr.prompt(r),!o.hRes;);};Yr.promptSimShell=function(t){return Yr.prompt(Ts({hideEchoBack:!1,history:!0},t,{prompt:function(){return Zd?"$>":(process.env.USER||"")+(process.env.HOSTNAME?"@"+process.env.HOSTNAME.replace(/\..*$/,""):"")+":$$ "}()}))};function sme(t,e,r){var o;return t==null&&(t="Are you sure? "),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s*:?\s*$/,"")+" [y/n]: "),o=Yr.keyIn(t,Ts(e,{hideEchoBack:!1,limit:r,trueValue:"y",falseValue:"n",caseSensitive:!1})),typeof o=="boolean"?o:""}Yr.keyInYN=function(t,e){return sme(t,e)};Yr.keyInYNStrict=function(t,e){return sme(t,e,"yn")};Yr.keyInPause=function(t,e){t==null&&(t="Continue..."),(!e||e.guide!==!1)&&(t+="")&&(t=t.replace(/\s+$/,"")+" (Hit any key)"),Yr.keyIn(t,Ts({limit:null},e,{hideEchoBack:!0,mask:""}))};Yr.keyInSelect=function(t,e,r){var o=Ts({hideEchoBack:!1},r,{trueValue:null,falseValue:null,caseSensitive:!1,phContent:function(p){return p==="itemsCount"?t.length+"":p==="firstItem"?(t[0]+"").trim():p==="lastItem"?(t[t.length-1]+"").trim():null}}),a="",n={},u=49,A=` +`;if(!Array.isArray(t)||!t.length||t.length>35)throw"`items` must be Array (max length: 35).";return t.forEach(function(p,h){var E=String.fromCharCode(u);a+=E,n[E]=h,A+="["+E+"] "+(p+"").trim()+` +`,u=u===57?97:u+1}),(!r||r.cancel!==!1)&&(a+="0",n[0]=-1,A+="[0] "+(r&&r.cancel!=null&&typeof r.cancel!="boolean"?(r.cancel+"").trim():"CANCEL")+` +`),o.limit=a,A+=` +`,e==null&&(e="Choose one from list: "),(e+="")&&((!r||r.guide!==!1)&&(e=e.replace(/\s*:?\s*$/,"")+" [$]: "),A+=e),n[Yr.keyIn(A,o).toLowerCase()]};Yr.getRawInput=function(){return Ck};function D2(t,e){var r;return e.length&&(r={},r[t]=e[0]),Yr.setDefaultOptions(r)[t]}Yr.setPrint=function(){return D2("print",arguments)};Yr.setPrompt=function(){return D2("prompt",arguments)};Yr.setEncoding=function(){return D2("encoding",arguments)};Yr.setMask=function(){return D2("mask",arguments)};Yr.setBufferSize=function(){return D2("bufferSize",arguments)}});var EH=_((t7t,hl)=>{(function(){var t={major:0,minor:2,patch:66,status:"beta"};tau_file_system={files:{},open:function(w,S,y){var F=tau_file_system.files[w];if(!F){if(y==="read")return null;F={path:w,text:"",type:S,get:function(z,X){return X===this.text.length||X>this.text.length?"end_of_file":this.text.substring(X,X+z)},put:function(z,X){return X==="end_of_file"?(this.text+=z,!0):X==="past_end_of_file"?null:(this.text=this.text.substring(0,X)+z+this.text.substring(X+z.length),!0)},get_byte:function(z){if(z==="end_of_stream")return-1;var X=Math.floor(z/2);if(this.text.length<=X)return-1;var Z=n(this.text[Math.floor(z/2)],0);return z%2===0?Z&255:Z/256>>>0},put_byte:function(z,X){var Z=X==="end_of_stream"?this.text.length:Math.floor(X/2);if(this.text.length>>0,ie=(ie&255)<<8|z&255):(ie=ie&255,ie=(z&255)<<8|ie&255),this.text.length===Z?this.text+=u(ie):this.text=this.text.substring(0,Z)+u(ie)+this.text.substring(Z+1),!0},flush:function(){return!0},close:function(){var z=tau_file_system.files[this.path];return z?!0:null}},tau_file_system.files[w]=F}return y==="write"&&(F.text=""),F}},tau_user_input={buffer:"",get:function(w,S){for(var y;tau_user_input.buffer.length\?\@\^\~\\]+|'(?:[^']*?(?:\\(?:x?\d+)?\\)*(?:'')*(?:\\')*)*')/,number:/^(?:0o[0-7]+|0x[0-9a-fA-F]+|0b[01]+|0'(?:''|\\[abfnrtv\\'"`]|\\x?\d+\\|[^\\])|\d+(?:\.\d+(?:[eE][+-]?\d+)?)?)/,string:/^(?:"([^"]|""|\\")*"|`([^`]|``|\\`)*`)/,l_brace:/^(?:\[)/,r_brace:/^(?:\])/,l_bracket:/^(?:\{)/,r_bracket:/^(?:\})/,bar:/^(?:\|)/,l_paren:/^(?:\()/,r_paren:/^(?:\))/};function L(w,S){return w.get_flag("char_conversion").id==="on"?S.replace(/./g,function(y){return w.get_char_conversion(y)}):S}function U(w){this.thread=w,this.text="",this.tokens=[]}U.prototype.set_last_tokens=function(w){return this.tokens=w},U.prototype.new_text=function(w){this.text=w,this.tokens=[]},U.prototype.get_tokens=function(w){var S,y=0,F=0,z=0,X=[],Z=!1;if(w){var ie=this.tokens[w-1];y=ie.len,S=L(this.thread,this.text.substr(ie.len)),F=ie.line,z=ie.start}else S=this.text;if(/^\s*$/.test(S))return null;for(;S!=="";){var Se=[],Ne=!1;if(/^\n/.exec(S)!==null){F++,z=0,y++,S=S.replace(/\n/,""),Z=!0;continue}for(var ot in T)if(T.hasOwnProperty(ot)){var dt=T[ot].exec(S);dt&&Se.push({value:dt[0],name:ot,matches:dt})}if(!Se.length)return this.set_last_tokens([{value:S,matches:[],name:"lexical",line:F,start:z}]);var ie=r(Se,function(Qr,mr){return Qr.value.length>=mr.value.length?Qr:mr});switch(ie.start=z,ie.line=F,S=S.replace(ie.value,""),z+=ie.value.length,y+=ie.value.length,ie.name){case"atom":ie.raw=ie.value,ie.value.charAt(0)==="'"&&(ie.value=v(ie.value.substr(1,ie.value.length-2),"'"),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence"));break;case"number":ie.float=ie.value.substring(0,2)!=="0x"&&ie.value.match(/[.eE]/)!==null&&ie.value!=="0'.",ie.value=C(ie.value),ie.blank=Ne;break;case"string":var jt=ie.value.charAt(0);ie.value=v(ie.value.substr(1,ie.value.length-2),jt),ie.value===null&&(ie.name="lexical",ie.value="unknown escape sequence");break;case"whitespace":var $t=X[X.length-1];$t&&($t.space=!0),Ne=!0;continue;case"r_bracket":X.length>0&&X[X.length-1].name==="l_bracket"&&(ie=X.pop(),ie.name="atom",ie.value="{}",ie.raw="{}",ie.space=!1);break;case"r_brace":X.length>0&&X[X.length-1].name==="l_brace"&&(ie=X.pop(),ie.name="atom",ie.value="[]",ie.raw="[]",ie.space=!1);break}ie.len=y,X.push(ie),Ne=!1}var xt=this.set_last_tokens(X);return xt.length===0?null:xt};function J(w,S,y,F,z){if(!S[y])return{type:A,value:x.error.syntax(S[y-1],"expression expected",!0)};var X;if(F==="0"){var Z=S[y];switch(Z.name){case"number":return{type:p,len:y+1,value:new x.type.Num(Z.value,Z.float)};case"variable":return{type:p,len:y+1,value:new x.type.Var(Z.value)};case"string":var ie;switch(w.get_flag("double_quotes").id){case"atom":ie=new H(Z.value,[]);break;case"codes":ie=new H("[]",[]);for(var Se=Z.value.length-1;Se>=0;Se--)ie=new H(".",[new x.type.Num(n(Z.value,Se),!1),ie]);break;case"chars":ie=new H("[]",[]);for(var Se=Z.value.length-1;Se>=0;Se--)ie=new H(".",[new x.type.Term(Z.value.charAt(Se),[]),ie]);break}return{type:p,len:y+1,value:ie};case"l_paren":var xt=J(w,S,y+1,w.__get_max_priority(),!0);return xt.type!==p?xt:S[xt.len]&&S[xt.len].name==="r_paren"?(xt.len++,xt):{type:A,derived:!0,value:x.error.syntax(S[xt.len]?S[xt.len]:S[xt.len-1],") or operator expected",!S[xt.len])};case"l_bracket":var xt=J(w,S,y+1,w.__get_max_priority(),!0);return xt.type!==p?xt:S[xt.len]&&S[xt.len].name==="r_bracket"?(xt.len++,xt.value=new H("{}",[xt.value]),xt):{type:A,derived:!0,value:x.error.syntax(S[xt.len]?S[xt.len]:S[xt.len-1],"} or operator expected",!S[xt.len])}}var Ne=te(w,S,y,z);return Ne.type===p||Ne.derived||(Ne=le(w,S,y),Ne.type===p||Ne.derived)?Ne:{type:A,derived:!1,value:x.error.syntax(S[y],"unexpected token")}}var ot=w.__get_max_priority(),dt=w.__get_next_priority(F),jt=y;if(S[y].name==="atom"&&S[y+1]&&(S[y].space||S[y+1].name!=="l_paren")){var Z=S[y++],$t=w.__lookup_operator_classes(F,Z.value);if($t&&$t.indexOf("fy")>-1){var xt=J(w,S,y,F,z);if(xt.type!==A)return Z.value==="-"&&!Z.space&&x.type.is_number(xt.value)?{value:new x.type.Num(-xt.value.value,xt.value.is_float),len:xt.len,type:p}:{value:new x.type.Term(Z.value,[xt.value]),len:xt.len,type:p};X=xt}else if($t&&$t.indexOf("fx")>-1){var xt=J(w,S,y,dt,z);if(xt.type!==A)return{value:new x.type.Term(Z.value,[xt.value]),len:xt.len,type:p};X=xt}}y=jt;var xt=J(w,S,y,dt,z);if(xt.type===p){y=xt.len;var Z=S[y];if(S[y]&&(S[y].name==="atom"&&w.__lookup_operator_classes(F,Z.value)||S[y].name==="bar"&&w.__lookup_operator_classes(F,"|"))){var an=dt,Qr=F,$t=w.__lookup_operator_classes(F,Z.value);if($t.indexOf("xf")>-1)return{value:new x.type.Term(Z.value,[xt.value]),len:++xt.len,type:p};if($t.indexOf("xfx")>-1){var mr=J(w,S,y+1,an,z);return mr.type===p?{value:new x.type.Term(Z.value,[xt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if($t.indexOf("xfy")>-1){var mr=J(w,S,y+1,Qr,z);return mr.type===p?{value:new x.type.Term(Z.value,[xt.value,mr.value]),len:mr.len,type:p}:(mr.derived=!0,mr)}else if(xt.type!==A)for(;;){y=xt.len;var Z=S[y];if(Z&&Z.name==="atom"&&w.__lookup_operator_classes(F,Z.value)){var $t=w.__lookup_operator_classes(F,Z.value);if($t.indexOf("yf")>-1)xt={value:new x.type.Term(Z.value,[xt.value]),len:++y,type:p};else if($t.indexOf("yfx")>-1){var mr=J(w,S,++y,an,z);if(mr.type===A)return mr.derived=!0,mr;y=mr.len,xt={value:new x.type.Term(Z.value,[xt.value,mr.value]),len:y,type:p}}else break}else break}}else X={type:A,value:x.error.syntax(S[xt.len-1],"operator expected")};return xt}return xt}function te(w,S,y,F){if(!S[y]||S[y].name==="atom"&&S[y].raw==="."&&!F&&(S[y].space||!S[y+1]||S[y+1].name!=="l_paren"))return{type:A,derived:!1,value:x.error.syntax(S[y-1],"unfounded token")};var z=S[y],X=[];if(S[y].name==="atom"&&S[y].raw!==","){if(y++,S[y-1].space)return{type:p,len:y,value:new x.type.Term(z.value,X)};if(S[y]&&S[y].name==="l_paren"){if(S[y+1]&&S[y+1].name==="r_paren")return{type:A,derived:!0,value:x.error.syntax(S[y+1],"argument expected")};var Z=J(w,S,++y,"999",!0);if(Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:x.error.syntax(S[y]?S[y]:S[y-1],"argument expected",!S[y])};for(X.push(Z.value),y=Z.len;S[y]&&S[y].name==="atom"&&S[y].value===",";){if(Z=J(w,S,y+1,"999",!0),Z.type===A)return Z.derived?Z:{type:A,derived:!0,value:x.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};X.push(Z.value),y=Z.len}if(S[y]&&S[y].name==="r_paren")y++;else return{type:A,derived:!0,value:x.error.syntax(S[y]?S[y]:S[y-1],", or ) expected",!S[y])}}return{type:p,len:y,value:new x.type.Term(z.value,X)}}return{type:A,derived:!1,value:x.error.syntax(S[y],"term expected")}}function le(w,S,y){if(!S[y])return{type:A,derived:!1,value:x.error.syntax(S[y-1],"[ expected")};if(S[y]&&S[y].name==="l_brace"){var F=J(w,S,++y,"999",!0),z=[F.value],X=void 0;if(F.type===A)return S[y]&&S[y].name==="r_brace"?{type:p,len:y+1,value:new x.type.Term("[]",[])}:{type:A,derived:!0,value:x.error.syntax(S[y],"] expected")};for(y=F.len;S[y]&&S[y].name==="atom"&&S[y].value===",";){if(F=J(w,S,y+1,"999",!0),F.type===A)return F.derived?F:{type:A,derived:!0,value:x.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};z.push(F.value),y=F.len}var Z=!1;if(S[y]&&S[y].name==="bar"){if(Z=!0,F=J(w,S,y+1,"999",!0),F.type===A)return F.derived?F:{type:A,derived:!0,value:x.error.syntax(S[y+1]?S[y+1]:S[y],"argument expected",!S[y+1])};X=F.value,y=F.len}return S[y]&&S[y].name==="r_brace"?{type:p,len:y+1,value:g(z,X)}:{type:A,derived:!0,value:x.error.syntax(S[y]?S[y]:S[y-1],Z?"] expected":", or | or ] expected",!S[y])}}return{type:A,derived:!1,value:x.error.syntax(S[y],"list expected")}}function pe(w,S,y){var F=S[y].line,z=J(w,S,y,w.__get_max_priority(),!1),X=null,Z;if(z.type!==A)if(y=z.len,S[y]&&S[y].name==="atom"&&S[y].raw===".")if(y++,x.type.is_term(z.value)){if(z.value.indicator===":-/2"?(X=new x.type.Rule(z.value.args[0],Pe(z.value.args[1])),Z={value:X,len:y,type:p}):z.value.indicator==="-->/2"?(X=ae(new x.type.Rule(z.value.args[0],z.value.args[1]),w),X.body=Pe(X.body),Z={value:X,len:y,type:x.type.is_rule(X)?p:A}):(X=new x.type.Rule(z.value,null),Z={value:X,len:y,type:p}),X){var ie=X.singleton_variables();ie.length>0&&w.throw_warning(x.warning.singleton(ie,X.head.indicator,F))}return Z}else return{type:A,value:x.error.syntax(S[y],"callable expected")};else return{type:A,value:x.error.syntax(S[y]?S[y]:S[y-1],". or operator expected")};return z}function Ae(w,S,y){y=y||{},y.from=y.from?y.from:"$tau-js",y.reconsult=y.reconsult!==void 0?y.reconsult:!0;var F=new U(w),z={},X;F.new_text(S);var Z=0,ie=F.get_tokens(Z);do{if(ie===null||!ie[Z])break;var Se=pe(w,ie,Z);if(Se.type===A)return new H("throw",[Se.value]);if(Se.value.body===null&&Se.value.head.indicator==="?-/1"){var Ne=new Je(w.session);Ne.add_goal(Se.value.head.args[0]),Ne.answer(function(dt){x.type.is_error(dt)?w.throw_warning(dt.args[0]):(dt===!1||dt===null)&&w.throw_warning(x.warning.failed_goal(Se.value.head.args[0],Se.len))}),Z=Se.len;var ot=!0}else if(Se.value.body===null&&Se.value.head.indicator===":-/1"){var ot=w.run_directive(Se.value.head.args[0]);Z=Se.len,Se.value.head.args[0].indicator==="char_conversion/2"&&(ie=F.get_tokens(Z),Z=0)}else{X=Se.value.head.indicator,y.reconsult!==!1&&z[X]!==!0&&!w.is_multifile_predicate(X)&&(w.session.rules[X]=a(w.session.rules[X]||[],function(jt){return jt.dynamic}),z[X]=!0);var ot=w.add_rule(Se.value,y);Z=Se.len}if(!ot)return ot}while(!0);return!0}function ye(w,S){var y=new U(w);y.new_text(S);var F=0;do{var z=y.get_tokens(F);if(z===null)break;var X=J(w,z,0,w.__get_max_priority(),!1);if(X.type!==A){var Z=X.len,ie=Z;if(z[Z]&&z[Z].name==="atom"&&z[Z].raw===".")w.add_goal(Pe(X.value));else{var Se=z[Z];return new H("throw",[x.error.syntax(Se||z[Z-1],". or operator expected",!Se)])}F=X.len+1}else return new H("throw",[X.value])}while(!0);return!0}function ae(w,S){w=w.rename(S);var y=S.next_free_variable(),F=we(w.body,y,S);return F.error?F.value:(w.body=F.value,w.head.args=w.head.args.concat([y,F.variable]),w.head=new H(w.head.id,w.head.args),w)}function we(w,S,y){var F;if(x.type.is_term(w)&&w.indicator==="!/0")return{value:w,variable:S,error:!1};if(x.type.is_term(w)&&w.indicator===",/2"){var z=we(w.args[0],S,y);if(z.error)return z;var X=we(w.args[1],z.variable,y);return X.error?X:{value:new H(",",[z.value,X.value]),variable:X.variable,error:!1}}else{if(x.type.is_term(w)&&w.indicator==="{}/1")return{value:w.args[0],variable:S,error:!1};if(x.type.is_empty_list(w))return{value:new H("true",[]),variable:S,error:!1};if(x.type.is_list(w)){F=y.next_free_variable();for(var Z=w,ie;Z.indicator==="./2";)ie=Z,Z=Z.args[1];return x.type.is_variable(Z)?{value:x.error.instantiation("DCG"),variable:S,error:!0}:x.type.is_empty_list(Z)?(ie.args[1]=F,{value:new H("=",[S,w]),variable:F,error:!1}):{value:x.error.type("list",w,"DCG"),variable:S,error:!0}}else return x.type.is_callable(w)?(F=y.next_free_variable(),w.args=w.args.concat([S,F]),w=new H(w.id,w.args),{value:w,variable:F,error:!1}):{value:x.error.type("callable",w,"DCG"),variable:S,error:!0}}}function Pe(w){return x.type.is_variable(w)?new H("call",[w]):x.type.is_term(w)&&[",/2",";/2","->/2"].indexOf(w.indicator)!==-1?new H(w.id,[Pe(w.args[0]),Pe(w.args[1])]):w}function g(w,S){for(var y=S||new x.type.Term("[]",[]),F=w.length-1;F>=0;F--)y=new x.type.Term(".",[w[F],y]);return y}function Ee(w,S){for(var y=w.length-1;y>=0;y--)w[y]===S&&w.splice(y,1)}function De(w){for(var S={},y=[],F=0;F=0;S--)if(w.charAt(S)==="/")return new H("/",[new H(w.substring(0,S)),new ke(parseInt(w.substring(S+1)),!1)])}function Ie(w){this.id=w}function ke(w,S){this.is_float=S!==void 0?S:parseInt(w)!==w,this.value=this.is_float?w:parseInt(w)}var ht=0;function H(w,S,y){this.ref=y||++ht,this.id=w,this.args=S||[],this.indicator=w+"/"+this.args.length}var lt=0;function Re(w,S,y,F,z,X){this.id=lt++,this.stream=w,this.mode=S,this.alias=y,this.type=F!==void 0?F:"text",this.reposition=z!==void 0?z:!0,this.eof_action=X!==void 0?X:"eof_code",this.position=this.mode==="append"?"end_of_stream":0,this.output=this.mode==="write"||this.mode==="append",this.input=this.mode==="read"}function Qe(w){w=w||{},this.links=w}function be(w,S,y){S=S||new Qe,y=y||null,this.goal=w,this.substitution=S,this.parent=y}function _e(w,S,y){this.head=w,this.body=S,this.dynamic=y||!1}function Te(w){w=w===void 0||w<=0?1e3:w,this.rules={},this.src_predicates={},this.rename=0,this.modules=[],this.thread=new Je(this),this.total_threads=1,this.renamed_variables={},this.public_predicates={},this.multifile_predicates={},this.limit=w,this.streams={user_input:new Re(typeof hl<"u"&&hl.exports?nodejs_user_input:tau_user_input,"read","user_input","text",!1,"reset"),user_output:new Re(typeof hl<"u"&&hl.exports?nodejs_user_output:tau_user_output,"write","user_output","text",!1,"eof_code")},this.file_system=typeof hl<"u"&&hl.exports?nodejs_file_system:tau_file_system,this.standard_input=this.streams.user_input,this.standard_output=this.streams.user_output,this.current_input=this.streams.user_input,this.current_output=this.streams.user_output,this.format_success=function(S){return S.substitution},this.format_error=function(S){return S.goal},this.flag={bounded:x.flag.bounded.value,max_integer:x.flag.max_integer.value,min_integer:x.flag.min_integer.value,integer_rounding_function:x.flag.integer_rounding_function.value,char_conversion:x.flag.char_conversion.value,debug:x.flag.debug.value,max_arity:x.flag.max_arity.value,unknown:x.flag.unknown.value,double_quotes:x.flag.double_quotes.value,occurs_check:x.flag.occurs_check.value,dialect:x.flag.dialect.value,version_data:x.flag.version_data.value,nodejs:x.flag.nodejs.value},this.__loaded_modules=[],this.__char_conversion={},this.__operators={1200:{":-":["fx","xfx"],"-->":["xfx"],"?-":["fx"]},1100:{";":["xfy"]},1050:{"->":["xfy"]},1e3:{",":["xfy"]},900:{"\\+":["fy"]},700:{"=":["xfx"],"\\=":["xfx"],"==":["xfx"],"\\==":["xfx"],"@<":["xfx"],"@=<":["xfx"],"@>":["xfx"],"@>=":["xfx"],"=..":["xfx"],is:["xfx"],"=:=":["xfx"],"=\\=":["xfx"],"<":["xfx"],"=<":["xfx"],">":["xfx"],">=":["xfx"]},600:{":":["xfy"]},500:{"+":["yfx"],"-":["yfx"],"/\\":["yfx"],"\\/":["yfx"]},400:{"*":["yfx"],"/":["yfx"],"//":["yfx"],rem:["yfx"],mod:["yfx"],"<<":["yfx"],">>":["yfx"]},200:{"**":["xfx"],"^":["xfy"],"-":["fy"],"+":["fy"],"\\":["fy"]}}}function Je(w){this.epoch=Date.now(),this.session=w,this.session.total_threads++,this.total_steps=0,this.cpu_time=0,this.cpu_time_last=0,this.points=[],this.debugger=!1,this.debugger_states=[],this.level="top_level/0",this.__calls=[],this.current_limit=this.session.limit,this.warnings=[]}function He(w,S,y){this.id=w,this.rules=S,this.exports=y,x.module[w]=this}He.prototype.exports_predicate=function(w){return this.exports.indexOf(w)!==-1},Ie.prototype.unify=function(w,S){if(S&&e(w.variables(),this.id)!==-1&&!x.type.is_variable(w))return null;var y={};return y[this.id]=w,new Qe(y)},ke.prototype.unify=function(w,S){return x.type.is_number(w)&&this.value===w.value&&this.is_float===w.is_float?new Qe:null},H.prototype.unify=function(w,S){if(x.type.is_term(w)&&this.indicator===w.indicator){for(var y=new Qe,F=0;F=0){var F=this.args[0].value,z=Math.floor(F/26),X=F%26;return"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[X]+(z!==0?z:"")}switch(this.indicator){case"[]/0":case"{}/0":case"!/0":return this.id;case"{}/1":return"{"+this.args[0].toString(w)+"}";case"./2":for(var Z="["+this.args[0].toString(w),ie=this.args[1];ie.indicator==="./2";)Z+=", "+ie.args[0].toString(w),ie=ie.args[1];return ie.indicator!=="[]/0"&&(Z+="|"+ie.toString(w)),Z+="]",Z;case",/2":return"("+this.args[0].toString(w)+", "+this.args[1].toString(w)+")";default:var Se=this.id,Ne=w.session?w.session.lookup_operator(this.id,this.args.length):null;if(w.session===void 0||w.ignore_ops||Ne===null)return w.quoted&&!/^(!|,|;|[a-z][0-9a-zA-Z_]*)$/.test(Se)&&Se!=="{}"&&Se!=="[]"&&(Se="'"+b(Se)+"'"),Se+(this.args.length?"("+o(this.args,function($t){return $t.toString(w)}).join(", ")+")":"");var ot=Ne.priority>S.priority||Ne.priority===S.priority&&(Ne.class==="xfy"&&this.indicator!==S.indicator||Ne.class==="yfx"&&this.indicator!==S.indicator||this.indicator===S.indicator&&Ne.class==="yfx"&&y==="right"||this.indicator===S.indicator&&Ne.class==="xfy"&&y==="left");Ne.indicator=this.indicator;var dt=ot?"(":"",jt=ot?")":"";return this.args.length===0?"("+this.id+")":["fy","fx"].indexOf(Ne.class)!==-1?dt+Se+" "+this.args[0].toString(w,Ne)+jt:["yf","xf"].indexOf(Ne.class)!==-1?dt+this.args[0].toString(w,Ne)+" "+Se+jt:dt+this.args[0].toString(w,Ne,"left")+" "+this.id+" "+this.args[1].toString(w,Ne,"right")+jt}},Re.prototype.toString=function(w){return"("+this.id+")"},Qe.prototype.toString=function(w){var S="{";for(var y in this.links)!this.links.hasOwnProperty(y)||(S!=="{"&&(S+=", "),S+=y+"/"+this.links[y].toString(w));return S+="}",S},be.prototype.toString=function(w){return this.goal===null?"<"+this.substitution.toString(w)+">":"<"+this.goal.toString(w)+", "+this.substitution.toString(w)+">"},_e.prototype.toString=function(w){return this.body?this.head.toString(w)+" :- "+this.body.toString(w)+".":this.head.toString(w)+"."},Te.prototype.toString=function(w){for(var S="",y=0;y=0;z--)F=new H(".",[S[z],F]);return F}return new H(this.id,o(this.args,function(X){return X.apply(w)}),this.ref)},Re.prototype.apply=function(w){return this},_e.prototype.apply=function(w){return new _e(this.head.apply(w),this.body!==null?this.body.apply(w):null)},Qe.prototype.apply=function(w){var S,y={};for(S in this.links)!this.links.hasOwnProperty(S)||(y[S]=this.links[S].apply(w));return new Qe(y)},H.prototype.select=function(){for(var w=this;w.indicator===",/2";)w=w.args[0];return w},H.prototype.replace=function(w){return this.indicator===",/2"?this.args[0].indicator===",/2"?new H(",",[this.args[0].replace(w),this.args[1]]):w===null?this.args[1]:new H(",",[w,this.args[1]]):w},H.prototype.search=function(w){if(x.type.is_term(w)&&w.ref!==void 0&&this.ref===w.ref)return!0;for(var S=0;SS&&F0&&(S=this.head_point().substitution.domain());e(S,x.format_variable(this.session.rename))!==-1;)this.session.rename++;if(w.id==="_")return new Ie(x.format_variable(this.session.rename));this.session.renamed_variables[w.id]=x.format_variable(this.session.rename)}return new Ie(this.session.renamed_variables[w.id])},Te.prototype.next_free_variable=function(){return this.thread.next_free_variable()},Je.prototype.next_free_variable=function(){this.session.rename++;var w=[];for(this.points.length>0&&(w=this.head_point().substitution.domain());e(w,x.format_variable(this.session.rename))!==-1;)this.session.rename++;return new Ie(x.format_variable(this.session.rename))},Te.prototype.is_public_predicate=function(w){return!this.public_predicates.hasOwnProperty(w)||this.public_predicates[w]===!0},Je.prototype.is_public_predicate=function(w){return this.session.is_public_predicate(w)},Te.prototype.is_multifile_predicate=function(w){return this.multifile_predicates.hasOwnProperty(w)&&this.multifile_predicates[w]===!0},Je.prototype.is_multifile_predicate=function(w){return this.session.is_multifile_predicate(w)},Te.prototype.prepend=function(w){return this.thread.prepend(w)},Je.prototype.prepend=function(w){for(var S=w.length-1;S>=0;S--)this.points.push(w[S])},Te.prototype.success=function(w,S){return this.thread.success(w,S)},Je.prototype.success=function(w,y){var y=typeof y>"u"?w:y;this.prepend([new be(w.goal.replace(null),w.substitution,y)])},Te.prototype.throw_error=function(w){return this.thread.throw_error(w)},Je.prototype.throw_error=function(w){this.prepend([new be(new H("throw",[w]),new Qe,null,null)])},Te.prototype.step_rule=function(w,S){return this.thread.step_rule(w,S)},Je.prototype.step_rule=function(w,S){var y=S.indicator;if(w==="user"&&(w=null),w===null&&this.session.rules.hasOwnProperty(y))return this.session.rules[y];for(var F=w===null?this.session.modules:e(this.session.modules,w)===-1?[]:[w],z=0;z1)&&this.again()},Te.prototype.answers=function(w,S,y){return this.thread.answers(w,S,y)},Je.prototype.answers=function(w,S,y){var F=S||1e3,z=this;if(S<=0){y&&y();return}this.answer(function(X){w(X),X!==!1?setTimeout(function(){z.answers(w,S-1,y)},1):y&&y()})},Te.prototype.again=function(w){return this.thread.again(w)},Je.prototype.again=function(w){for(var S,y=Date.now();this.__calls.length>0;){for(this.warnings=[],w!==!1&&(this.current_limit=this.session.limit);this.current_limit>0&&this.points.length>0&&this.head_point().goal!==null&&!x.type.is_error(this.head_point().goal);)if(this.current_limit--,this.step()===!0)return;var F=Date.now();this.cpu_time_last=F-y,this.cpu_time+=this.cpu_time_last;var z=this.__calls.shift();this.current_limit<=0?z(null):this.points.length===0?z(!1):x.type.is_error(this.head_point().goal)?(S=this.session.format_error(this.points.pop()),this.points=[],z(S)):(this.debugger&&this.debugger_states.push(this.head_point()),S=this.session.format_success(this.points.pop()),z(S))}},Te.prototype.unfold=function(w){if(w.body===null)return!1;var S=w.head,y=w.body,F=y.select(),z=new Je(this),X=[];z.add_goal(F),z.step();for(var Z=z.points.length-1;Z>=0;Z--){var ie=z.points[Z],Se=S.apply(ie.substitution),Ne=y.replace(ie.goal);Ne!==null&&(Ne=Ne.apply(ie.substitution)),X.push(new _e(Se,Ne))}var ot=this.rules[S.indicator],dt=e(ot,w);return X.length>0&&dt!==-1?(ot.splice.apply(ot,[dt,1].concat(X)),!0):!1},Je.prototype.unfold=function(w){return this.session.unfold(w)},Ie.prototype.interpret=function(w){return x.error.instantiation(w.level)},ke.prototype.interpret=function(w){return this},H.prototype.interpret=function(w){return x.type.is_unitary_list(this)?this.args[0].interpret(w):x.operate(w,this)},Ie.prototype.compare=function(w){return this.idw.id?1:0},ke.prototype.compare=function(w){if(this.value===w.value&&this.is_float===w.is_float)return 0;if(this.valuew.value)return 1},H.prototype.compare=function(w){if(this.args.lengthw.args.length||this.args.length===w.args.length&&this.id>w.id)return 1;for(var S=0;SF)return 1;if(w.constructor===ke){if(w.is_float&&S.is_float)return 0;if(w.is_float)return-1;if(S.is_float)return 1}return 0},is_substitution:function(w){return w instanceof Qe},is_state:function(w){return w instanceof be},is_rule:function(w){return w instanceof _e},is_variable:function(w){return w instanceof Ie},is_stream:function(w){return w instanceof Re},is_anonymous_var:function(w){return w instanceof Ie&&w.id==="_"},is_callable:function(w){return w instanceof H},is_number:function(w){return w instanceof ke},is_integer:function(w){return w instanceof ke&&!w.is_float},is_float:function(w){return w instanceof ke&&w.is_float},is_term:function(w){return w instanceof H},is_atom:function(w){return w instanceof H&&w.args.length===0},is_ground:function(w){if(w instanceof Ie)return!1;if(w instanceof H){for(var S=0;S0},is_list:function(w){return w instanceof H&&(w.indicator==="[]/0"||w.indicator==="./2")},is_empty_list:function(w){return w instanceof H&&w.indicator==="[]/0"},is_non_empty_list:function(w){return w instanceof H&&w.indicator==="./2"},is_fully_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof Ie||w instanceof H&&w.indicator==="[]/0"},is_instantiated_list:function(w){for(;w instanceof H&&w.indicator==="./2";)w=w.args[1];return w instanceof H&&w.indicator==="[]/0"},is_unitary_list:function(w){return w instanceof H&&w.indicator==="./2"&&w.args[1]instanceof H&&w.args[1].indicator==="[]/0"},is_character:function(w){return w instanceof H&&(w.id.length===1||w.id.length>0&&w.id.length<=2&&n(w.id,0)>=65536)},is_character_code:function(w){return w instanceof ke&&!w.is_float&&w.value>=0&&w.value<=1114111},is_byte:function(w){return w instanceof ke&&!w.is_float&&w.value>=0&&w.value<=255},is_operator:function(w){return w instanceof H&&x.arithmetic.evaluation[w.indicator]},is_directive:function(w){return w instanceof H&&x.directive[w.indicator]!==void 0},is_builtin:function(w){return w instanceof H&&x.predicate[w.indicator]!==void 0},is_error:function(w){return w instanceof H&&w.indicator==="throw/1"},is_predicate_indicator:function(w){return w instanceof H&&w.indicator==="//2"&&w.args[0]instanceof H&&w.args[0].args.length===0&&w.args[1]instanceof ke&&w.args[1].is_float===!1},is_flag:function(w){return w instanceof H&&w.args.length===0&&x.flag[w.id]!==void 0},is_value_flag:function(w,S){if(!x.type.is_flag(w))return!1;for(var y in x.flag[w.id].allowed)if(!!x.flag[w.id].allowed.hasOwnProperty(y)&&x.flag[w.id].allowed[y].equals(S))return!0;return!1},is_io_mode:function(w){return x.type.is_atom(w)&&["read","write","append"].indexOf(w.id)!==-1},is_stream_option:function(w){return x.type.is_term(w)&&(w.indicator==="alias/1"&&x.type.is_atom(w.args[0])||w.indicator==="reposition/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="type/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary")||w.indicator==="eof_action/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))},is_stream_position:function(w){return x.type.is_integer(w)&&w.value>=0||x.type.is_atom(w)&&(w.id==="end_of_stream"||w.id==="past_end_of_stream")},is_stream_property:function(w){return x.type.is_term(w)&&(w.indicator==="input/0"||w.indicator==="output/0"||w.indicator==="alias/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0]))||w.indicator==="file_name/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0]))||w.indicator==="position/1"&&(x.type.is_variable(w.args[0])||x.type.is_stream_position(w.args[0]))||w.indicator==="reposition/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))||w.indicator==="type/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="text"||w.args[0].id==="binary"))||w.indicator==="mode/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="read"||w.args[0].id==="write"||w.args[0].id==="append"))||w.indicator==="eof_action/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="error"||w.args[0].id==="eof_code"||w.args[0].id==="reset"))||w.indicator==="end_of_stream/1"&&(x.type.is_variable(w.args[0])||x.type.is_atom(w.args[0])&&(w.args[0].id==="at"||w.args[0].id==="past"||w.args[0].id==="not")))},is_streamable:function(w){return w.__proto__.stream!==void 0},is_read_option:function(w){return x.type.is_term(w)&&["variables/1","variable_names/1","singletons/1"].indexOf(w.indicator)!==-1},is_write_option:function(w){return x.type.is_term(w)&&(w.indicator==="quoted/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="ignore_ops/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")||w.indicator==="numbervars/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false"))},is_close_option:function(w){return x.type.is_term(w)&&w.indicator==="force/1"&&x.type.is_atom(w.args[0])&&(w.args[0].id==="true"||w.args[0].id==="false")},is_modifiable_flag:function(w){return x.type.is_flag(w)&&x.flag[w.id].changeable},is_module:function(w){return w instanceof H&&w.indicator==="library/1"&&w.args[0]instanceof H&&w.args[0].args.length===0&&x.module[w.args[0].id]!==void 0}},arithmetic:{evaluation:{"e/0":{type_args:null,type_result:!0,fn:function(w){return Math.E}},"pi/0":{type_args:null,type_result:!0,fn:function(w){return Math.PI}},"tau/0":{type_args:null,type_result:!0,fn:function(w){return 2*Math.PI}},"epsilon/0":{type_args:null,type_result:!0,fn:function(w){return Number.EPSILON}},"+/1":{type_args:null,type_result:null,fn:function(w,S){return w}},"-/1":{type_args:null,type_result:null,fn:function(w,S){return-w}},"\\/1":{type_args:!1,type_result:!1,fn:function(w,S){return~w}},"abs/1":{type_args:null,type_result:null,fn:function(w,S){return Math.abs(w)}},"sign/1":{type_args:null,type_result:null,fn:function(w,S){return Math.sign(w)}},"float_integer_part/1":{type_args:!0,type_result:!1,fn:function(w,S){return parseInt(w)}},"float_fractional_part/1":{type_args:!0,type_result:!0,fn:function(w,S){return w-parseInt(w)}},"float/1":{type_args:null,type_result:!0,fn:function(w,S){return parseFloat(w)}},"floor/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.floor(w)}},"truncate/1":{type_args:!0,type_result:!1,fn:function(w,S){return parseInt(w)}},"round/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.round(w)}},"ceiling/1":{type_args:!0,type_result:!1,fn:function(w,S){return Math.ceil(w)}},"sin/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.sin(w)}},"cos/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.cos(w)}},"tan/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.tan(w)}},"asin/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.asin(w)}},"acos/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.acos(w)}},"atan/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.atan(w)}},"atan2/2":{type_args:null,type_result:!0,fn:function(w,S,y){return Math.atan2(w,S)}},"exp/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.exp(w)}},"sqrt/1":{type_args:null,type_result:!0,fn:function(w,S){return Math.sqrt(w)}},"log/1":{type_args:null,type_result:!0,fn:function(w,S){return w>0?Math.log(w):x.error.evaluation("undefined",S.__call_indicator)}},"+/2":{type_args:null,type_result:null,fn:function(w,S,y){return w+S}},"-/2":{type_args:null,type_result:null,fn:function(w,S,y){return w-S}},"*/2":{type_args:null,type_result:null,fn:function(w,S,y){return w*S}},"//2":{type_args:null,type_result:!0,fn:function(w,S,y){return S?w/S:x.error.evaluation("zero_division",y.__call_indicator)}},"///2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?parseInt(w/S):x.error.evaluation("zero_division",y.__call_indicator)}},"**/2":{type_args:null,type_result:!0,fn:function(w,S,y){return Math.pow(w,S)}},"^/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.pow(w,S)}},"<>/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w>>S}},"/\\/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w&S}},"\\//2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w|S}},"xor/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return w^S}},"rem/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?w%S:x.error.evaluation("zero_division",y.__call_indicator)}},"mod/2":{type_args:!1,type_result:!1,fn:function(w,S,y){return S?w-parseInt(w/S)*S:x.error.evaluation("zero_division",y.__call_indicator)}},"max/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.max(w,S)}},"min/2":{type_args:null,type_result:null,fn:function(w,S,y){return Math.min(w,S)}}}},directive:{"dynamic/1":function(w,S){var y=S.args[0];if(x.type.is_variable(y))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_compound(y)||y.indicator!=="//2")w.throw_error(x.error.type("predicate_indicator",y,S.indicator));else if(x.type.is_variable(y.args[0])||x.type.is_variable(y.args[1]))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_atom(y.args[0]))w.throw_error(x.error.type("atom",y.args[0],S.indicator));else if(!x.type.is_integer(y.args[1]))w.throw_error(x.error.type("integer",y.args[1],S.indicator));else{var F=S.args[0].args[0].id+"/"+S.args[0].args[1].value;w.session.public_predicates[F]=!0,w.session.rules[F]||(w.session.rules[F]=[])}},"multifile/1":function(w,S){var y=S.args[0];x.type.is_variable(y)?w.throw_error(x.error.instantiation(S.indicator)):!x.type.is_compound(y)||y.indicator!=="//2"?w.throw_error(x.error.type("predicate_indicator",y,S.indicator)):x.type.is_variable(y.args[0])||x.type.is_variable(y.args[1])?w.throw_error(x.error.instantiation(S.indicator)):x.type.is_atom(y.args[0])?x.type.is_integer(y.args[1])?w.session.multifile_predicates[S.args[0].args[0].id+"/"+S.args[0].args[1].value]=!0:w.throw_error(x.error.type("integer",y.args[1],S.indicator)):w.throw_error(x.error.type("atom",y.args[0],S.indicator))},"set_prolog_flag/2":function(w,S){var y=S.args[0],F=S.args[1];x.type.is_variable(y)||x.type.is_variable(F)?w.throw_error(x.error.instantiation(S.indicator)):x.type.is_atom(y)?x.type.is_flag(y)?x.type.is_value_flag(y,F)?x.type.is_modifiable_flag(y)?w.session.flag[y.id]=F:w.throw_error(x.error.permission("modify","flag",y)):w.throw_error(x.error.domain("flag_value",new H("+",[y,F]),S.indicator)):w.throw_error(x.error.domain("prolog_flag",y,S.indicator)):w.throw_error(x.error.type("atom",y,S.indicator))},"use_module/1":function(w,S){var y=S.args[0];if(x.type.is_variable(y))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_term(y))w.throw_error(x.error.type("term",y,S.indicator));else if(x.type.is_module(y)){var F=y.args[0].id;e(w.session.modules,F)===-1&&w.session.modules.push(F)}},"char_conversion/2":function(w,S){var y=S.args[0],F=S.args[1];x.type.is_variable(y)||x.type.is_variable(F)?w.throw_error(x.error.instantiation(S.indicator)):x.type.is_character(y)?x.type.is_character(F)?y.id===F.id?delete w.session.__char_conversion[y.id]:w.session.__char_conversion[y.id]=F.id:w.throw_error(x.error.type("character",F,S.indicator)):w.throw_error(x.error.type("character",y,S.indicator))},"op/3":function(w,S){var y=S.args[0],F=S.args[1],z=S.args[2];if(x.type.is_variable(y)||x.type.is_variable(F)||x.type.is_variable(z))w.throw_error(x.error.instantiation(S.indicator));else if(!x.type.is_integer(y))w.throw_error(x.error.type("integer",y,S.indicator));else if(!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,S.indicator));else if(!x.type.is_atom(z))w.throw_error(x.error.type("atom",z,S.indicator));else if(y.value<0||y.value>1200)w.throw_error(x.error.domain("operator_priority",y,S.indicator));else if(z.id===",")w.throw_error(x.error.permission("modify","operator",z,S.indicator));else if(z.id==="|"&&(y.value<1001||F.id.length!==3))w.throw_error(x.error.permission("modify","operator",z,S.indicator));else if(["fy","fx","yf","xf","xfx","yfx","xfy"].indexOf(F.id)===-1)w.throw_error(x.error.domain("operator_specifier",F,S.indicator));else{var X={prefix:null,infix:null,postfix:null};for(var Z in w.session.__operators)if(!!w.session.__operators.hasOwnProperty(Z)){var ie=w.session.__operators[Z][z.id];ie&&(e(ie,"fx")!==-1&&(X.prefix={priority:Z,type:"fx"}),e(ie,"fy")!==-1&&(X.prefix={priority:Z,type:"fy"}),e(ie,"xf")!==-1&&(X.postfix={priority:Z,type:"xf"}),e(ie,"yf")!==-1&&(X.postfix={priority:Z,type:"yf"}),e(ie,"xfx")!==-1&&(X.infix={priority:Z,type:"xfx"}),e(ie,"xfy")!==-1&&(X.infix={priority:Z,type:"xfy"}),e(ie,"yfx")!==-1&&(X.infix={priority:Z,type:"yfx"}))}var Se;switch(F.id){case"fy":case"fx":Se="prefix";break;case"yf":case"xf":Se="postfix";break;default:Se="infix";break}if(((X.prefix&&Se==="prefix"||X.postfix&&Se==="postfix"||X.infix&&Se==="infix")&&X[Se].type!==F.id||X.infix&&Se==="postfix"||X.postfix&&Se==="infix")&&y.value!==0)w.throw_error(x.error.permission("create","operator",z,S.indicator));else return X[Se]&&(Ee(w.session.__operators[X[Se].priority][z.id],F.id),w.session.__operators[X[Se].priority][z.id].length===0&&delete w.session.__operators[X[Se].priority][z.id]),y.value>0&&(w.session.__operators[y.value]||(w.session.__operators[y.value.toString()]={}),w.session.__operators[y.value][z.id]||(w.session.__operators[y.value][z.id]=[]),w.session.__operators[y.value][z.id].push(F.id)),!0}}},predicate:{"op/3":function(w,S,y){x.directive["op/3"](w,y)&&w.success(S)},"current_op/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2],Z=[];for(var ie in w.session.__operators)for(var Se in w.session.__operators[ie])for(var Ne=0;Ne/2"){var F=w.points,z=w.session.format_success,X=w.session.format_error;w.session.format_success=function(Ne){return Ne.substitution},w.session.format_error=function(Ne){return Ne.goal},w.points=[new be(y.args[0].args[0],S.substitution,S)];var Z=function(Ne){w.points=F,w.session.format_success=z,w.session.format_error=X,Ne===!1?w.prepend([new be(S.goal.replace(y.args[1]),S.substitution,S)]):x.type.is_error(Ne)?w.throw_error(Ne.args[0]):Ne===null?(w.prepend([S]),w.__calls.shift()(null)):w.prepend([new be(S.goal.replace(y.args[0].args[1]).apply(Ne),S.substitution.apply(Ne),S)])};w.__calls.unshift(Z)}else{var ie=new be(S.goal.replace(y.args[0]),S.substitution,S),Se=new be(S.goal.replace(y.args[1]),S.substitution,S);w.prepend([ie,Se])}},"!/0":function(w,S,y){var F,z,X=[];for(F=S,z=null;F.parent!==null&&F.parent.goal.search(y);)if(z=F,F=F.parent,F.goal!==null){var Z=F.goal.select();if(Z&&Z.id==="call"&&Z.search(y)){F=z;break}}for(var ie=w.points.length-1;ie>=0;ie--){for(var Se=w.points[ie],Ne=Se.parent;Ne!==null&&Ne!==F.parent;)Ne=Ne.parent;Ne===null&&Ne!==F.parent&&X.push(Se)}w.points=X.reverse(),w.success(S)},"\\+/1":function(w,S,y){var F=y.args[0];x.type.is_variable(F)?w.throw_error(x.error.instantiation(w.level)):x.type.is_callable(F)?w.prepend([new be(S.goal.replace(new H(",",[new H(",",[new H("call",[F]),new H("!",[])]),new H("fail",[])])),S.substitution,S),new be(S.goal.replace(null),S.substitution,S)]):w.throw_error(x.error.type("callable",F,w.level))},"->/2":function(w,S,y){var F=S.goal.replace(new H(",",[y.args[0],new H(",",[new H("!"),y.args[1]])]));w.prepend([new be(F,S.substitution,S)])},"fail/0":function(w,S,y){},"false/0":function(w,S,y){},"true/0":function(w,S,y){w.success(S)},"call/1":ne(1),"call/2":ne(2),"call/3":ne(3),"call/4":ne(4),"call/5":ne(5),"call/6":ne(6),"call/7":ne(7),"call/8":ne(8),"once/1":function(w,S,y){var F=y.args[0];w.prepend([new be(S.goal.replace(new H(",",[new H("call",[F]),new H("!",[])])),S.substitution,S)])},"forall/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("\\+",[new H(",",[new H("call",[F]),new H("\\+",[new H("call",[z])])])])),S.substitution,S)])},"repeat/0":function(w,S,y){w.prepend([new be(S.goal.replace(null),S.substitution,S),S])},"throw/1":function(w,S,y){x.type.is_variable(y.args[0])?w.throw_error(x.error.instantiation(w.level)):w.throw_error(y.args[0])},"catch/3":function(w,S,y){var F=w.points;w.points=[],w.prepend([new be(y.args[0],S.substitution,S)]);var z=w.session.format_success,X=w.session.format_error;w.session.format_success=function(ie){return ie.substitution},w.session.format_error=function(ie){return ie.goal};var Z=function(ie){var Se=w.points;if(w.points=F,w.session.format_success=z,w.session.format_error=X,x.type.is_error(ie)){for(var Ne=[],ot=w.points.length-1;ot>=0;ot--){for(var $t=w.points[ot],dt=$t.parent;dt!==null&&dt!==S.parent;)dt=dt.parent;dt===null&&dt!==S.parent&&Ne.push($t)}w.points=Ne;var jt=w.get_flag("occurs_check").indicator==="true/0",$t=new be,xt=x.unify(ie.args[0],y.args[1],jt);xt!==null?($t.substitution=S.substitution.apply(xt),$t.goal=S.goal.replace(y.args[2]).apply(xt),$t.parent=S,w.prepend([$t])):w.throw_error(ie.args[0])}else if(ie!==!1){for(var an=ie===null?[]:[new be(S.goal.apply(ie).replace(null),S.substitution.apply(ie),S)],Qr=[],ot=Se.length-1;ot>=0;ot--){Qr.push(Se[ot]);var mr=Se[ot].goal!==null?Se[ot].goal.select():null;if(x.type.is_term(mr)&&mr.indicator==="!/0")break}var xr=o(Qr,function(Wr){return Wr.goal===null&&(Wr.goal=new H("true",[])),Wr=new be(S.goal.replace(new H("catch",[Wr.goal,y.args[1],y.args[2]])),S.substitution.apply(Wr.substitution),Wr.parent),Wr.exclude=y.args[0].variables(),Wr}).reverse();w.prepend(xr),w.prepend(an),ie===null&&(this.current_limit=0,w.__calls.shift()(null))}};w.__calls.unshift(Z)},"=/2":function(w,S,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=new be,X=x.unify(y.args[0],y.args[1],F);X!==null&&(z.goal=S.goal.apply(X).replace(null),z.substitution=S.substitution.apply(X),z.parent=S,w.prepend([z]))},"unify_with_occurs_check/2":function(w,S,y){var F=new be,z=x.unify(y.args[0],y.args[1],!0);z!==null&&(F.goal=S.goal.apply(z).replace(null),F.substitution=S.substitution.apply(z),F.parent=S,w.prepend([F]))},"\\=/2":function(w,S,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=x.unify(y.args[0],y.args[1],F);z===null&&w.success(S)},"subsumes_term/2":function(w,S,y){var F=w.get_flag("occurs_check").indicator==="true/0",z=x.unify(y.args[1],y.args[0],F);z!==null&&y.args[1].apply(z).equals(y.args[1])&&w.success(S)},"findall/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(z))w.throw_error(x.error.type("callable",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else{var Z=w.next_free_variable(),ie=new H(",",[z,new H("=",[Z,F])]),Se=w.points,Ne=w.session.limit,ot=w.session.format_success;w.session.format_success=function($t){return $t.substitution},w.add_goal(ie,!0,S);var dt=[],jt=function($t){if($t!==!1&&$t!==null&&!x.type.is_error($t))w.__calls.unshift(jt),dt.push($t.links[Z.id]),w.session.limit=w.current_limit;else if(w.points=Se,w.session.limit=Ne,w.session.format_success=ot,x.type.is_error($t))w.throw_error($t.args[0]);else if(w.current_limit>0){for(var xt=new H("[]"),an=dt.length-1;an>=0;an--)xt=new H(".",[dt[an],xt]);w.prepend([new be(S.goal.replace(new H("=",[X,xt])),S.substitution,S)])}};w.__calls.unshift(jt)}},"bagof/3":function(w,S,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(X))w.throw_error(x.error.type("callable",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_list(Z))w.throw_error(x.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),Se;X.indicator==="^/2"?(Se=X.args[0].variables(),X=X.args[1]):Se=[],Se=Se.concat(z.variables());for(var Ne=X.variables().filter(function(xr){return e(Se,xr)===-1}),ot=new H("[]"),dt=Ne.length-1;dt>=0;dt--)ot=new H(".",[new Ie(Ne[dt]),ot]);var jt=new H(",",[X,new H("=",[ie,new H(",",[ot,z])])]),$t=w.points,xt=w.session.limit,an=w.session.format_success;w.session.format_success=function(xr){return xr.substitution},w.add_goal(jt,!0,S);var Qr=[],mr=function(xr){if(xr!==!1&&xr!==null&&!x.type.is_error(xr)){w.__calls.unshift(mr);var Wr=!1,Vn=xr.links[ie.id].args[0],Ns=xr.links[ie.id].args[1];for(var Ri in Qr)if(!!Qr.hasOwnProperty(Ri)){var ps=Qr[Ri];if(ps.variables.equals(Vn)){ps.answers.push(Ns),Wr=!0;break}}Wr||Qr.push({variables:Vn,answers:[Ns]}),w.session.limit=w.current_limit}else if(w.points=$t,w.session.limit=xt,w.session.format_success=an,x.type.is_error(xr))w.throw_error(xr.args[0]);else if(w.current_limit>0){for(var io=[],Si=0;Si=0;so--)Ls=new H(".",[xr[so],Ls]);io.push(new be(S.goal.replace(new H(",",[new H("=",[ot,Qr[Si].variables]),new H("=",[Z,Ls])])),S.substitution,S))}w.prepend(io)}};w.__calls.unshift(mr)}},"setof/3":function(w,S,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(X))w.throw_error(x.error.type("callable",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_list(Z))w.throw_error(x.error.type("list",Z,y.indicator));else{var ie=w.next_free_variable(),Se;X.indicator==="^/2"?(Se=X.args[0].variables(),X=X.args[1]):Se=[],Se=Se.concat(z.variables());for(var Ne=X.variables().filter(function(xr){return e(Se,xr)===-1}),ot=new H("[]"),dt=Ne.length-1;dt>=0;dt--)ot=new H(".",[new Ie(Ne[dt]),ot]);var jt=new H(",",[X,new H("=",[ie,new H(",",[ot,z])])]),$t=w.points,xt=w.session.limit,an=w.session.format_success;w.session.format_success=function(xr){return xr.substitution},w.add_goal(jt,!0,S);var Qr=[],mr=function(xr){if(xr!==!1&&xr!==null&&!x.type.is_error(xr)){w.__calls.unshift(mr);var Wr=!1,Vn=xr.links[ie.id].args[0],Ns=xr.links[ie.id].args[1];for(var Ri in Qr)if(!!Qr.hasOwnProperty(Ri)){var ps=Qr[Ri];if(ps.variables.equals(Vn)){ps.answers.push(Ns),Wr=!0;break}}Wr||Qr.push({variables:Vn,answers:[Ns]}),w.session.limit=w.current_limit}else if(w.points=$t,w.session.limit=xt,w.session.format_success=an,x.type.is_error(xr))w.throw_error(xr.args[0]);else if(w.current_limit>0){for(var io=[],Si=0;Si=0;so--)Ls=new H(".",[xr[so],Ls]);io.push(new be(S.goal.replace(new H(",",[new H("=",[ot,Qr[Si].variables]),new H("=",[Z,Ls])])),S.substitution,S))}w.prepend(io)}};w.__calls.unshift(mr)}},"functor/3":function(w,S,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2];if(x.type.is_variable(z)&&(x.type.is_variable(X)||x.type.is_variable(Z)))w.throw_error(x.error.instantiation("functor/3"));else if(!x.type.is_variable(Z)&&!x.type.is_integer(Z))w.throw_error(x.error.type("integer",y.args[2],"functor/3"));else if(!x.type.is_variable(X)&&!x.type.is_atomic(X))w.throw_error(x.error.type("atomic",y.args[1],"functor/3"));else if(x.type.is_integer(X)&&x.type.is_integer(Z)&&Z.value!==0)w.throw_error(x.error.type("atom",y.args[1],"functor/3"));else if(x.type.is_variable(z)){if(y.args[2].value>=0){for(var ie=[],Se=0;Se0&&F<=y.args[1].args.length){var z=new H("=",[y.args[1].args[F-1],y.args[2]]);w.prepend([new be(S.goal.replace(z),S.substitution,S)])}}},"=../2":function(w,S,y){var F;if(x.type.is_variable(y.args[0])&&(x.type.is_variable(y.args[1])||x.type.is_non_empty_list(y.args[1])&&x.type.is_variable(y.args[1].args[0])))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_fully_list(y.args[1]))w.throw_error(x.error.type("list",y.args[1],y.indicator));else if(x.type.is_variable(y.args[0])){if(!x.type.is_variable(y.args[1])){var X=[];for(F=y.args[1].args[1];F.indicator==="./2";)X.push(F.args[0]),F=F.args[1];x.type.is_variable(y.args[0])&&x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):X.length===0&&x.type.is_compound(y.args[1].args[0])?w.throw_error(x.error.type("atomic",y.args[1].args[0],y.indicator)):X.length>0&&(x.type.is_compound(y.args[1].args[0])||x.type.is_number(y.args[1].args[0]))?w.throw_error(x.error.type("atom",y.args[1].args[0],y.indicator)):X.length===0?w.prepend([new be(S.goal.replace(new H("=",[y.args[1].args[0],y.args[0]],S)),S.substitution,S)]):w.prepend([new be(S.goal.replace(new H("=",[new H(y.args[1].args[0].id,X),y.args[0]])),S.substitution,S)])}}else{if(x.type.is_atomic(y.args[0]))F=new H(".",[y.args[0],new H("[]")]);else{F=new H("[]");for(var z=y.args[0].args.length-1;z>=0;z--)F=new H(".",[y.args[0].args[z],F]);F=new H(".",[new H(y.args[0].id),F])}w.prepend([new be(S.goal.replace(new H("=",[F,y.args[1]])),S.substitution,S)])}},"copy_term/2":function(w,S,y){var F=y.args[0].rename(w);w.prepend([new be(S.goal.replace(new H("=",[F,y.args[1]])),S.substitution,S.parent)])},"term_variables/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(!x.type.is_fully_list(z))w.throw_error(x.error.type("list",z,y.indicator));else{var X=g(o(De(F.variables()),function(Z){return new Ie(Z)}));w.prepend([new be(S.goal.replace(new H("=",[z,X])),S.substitution,S)])}},"clause/2":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else if(!x.type.is_variable(y.args[1])&&!x.type.is_callable(y.args[1]))w.throw_error(x.error.type("callable",y.args[1],y.indicator));else if(w.session.rules[y.args[0].indicator]!==void 0)if(w.is_public_predicate(y.args[0].indicator)){var F=[];for(var z in w.session.rules[y.args[0].indicator])if(!!w.session.rules[y.args[0].indicator].hasOwnProperty(z)){var X=w.session.rules[y.args[0].indicator][z];w.session.renamed_variables={},X=X.rename(w),X.body===null&&(X.body=new H("true"));var Z=new H(",",[new H("=",[X.head,y.args[0]]),new H("=",[X.body,y.args[1]])]);F.push(new be(S.goal.replace(Z),S.substitution,S))}w.prepend(F)}else w.throw_error(x.error.permission("access","private_procedure",y.args[0].indicator,y.indicator))},"current_predicate/1":function(w,S,y){var F=y.args[0];if(!x.type.is_variable(F)&&(!x.type.is_compound(F)||F.indicator!=="//2"))w.throw_error(x.error.type("predicate_indicator",F,y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_variable(F.args[0])&&!x.type.is_atom(F.args[0]))w.throw_error(x.error.type("atom",F.args[0],y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_variable(F.args[1])&&!x.type.is_integer(F.args[1]))w.throw_error(x.error.type("integer",F.args[1],y.indicator));else{var z=[];for(var X in w.session.rules)if(!!w.session.rules.hasOwnProperty(X)){var Z=X.lastIndexOf("/"),ie=X.substr(0,Z),Se=parseInt(X.substr(Z+1,X.length-(Z+1))),Ne=new H("/",[new H(ie),new ke(Se,!1)]),ot=new H("=",[Ne,F]);z.push(new be(S.goal.replace(ot),S.substitution,S))}w.prepend(z)}},"asserta/1":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=Pe(y.args[0].args[1])):(F=y.args[0],z=null),x.type.is_callable(F)?z!==null&&!x.type.is_callable(z)?w.throw_error(x.error.type("callable",z,y.indicator)):w.is_public_predicate(F.indicator)?(w.session.rules[F.indicator]===void 0&&(w.session.rules[F.indicator]=[]),w.session.public_predicates[F.indicator]=!0,w.session.rules[F.indicator]=[new _e(F,z,!0)].concat(w.session.rules[F.indicator]),w.success(S)):w.throw_error(x.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(x.error.type("callable",F,y.indicator))}},"assertz/1":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=Pe(y.args[0].args[1])):(F=y.args[0],z=null),x.type.is_callable(F)?z!==null&&!x.type.is_callable(z)?w.throw_error(x.error.type("callable",z,y.indicator)):w.is_public_predicate(F.indicator)?(w.session.rules[F.indicator]===void 0&&(w.session.rules[F.indicator]=[]),w.session.public_predicates[F.indicator]=!0,w.session.rules[F.indicator].push(new _e(F,z,!0)),w.success(S)):w.throw_error(x.error.permission("modify","static_procedure",F.indicator,y.indicator)):w.throw_error(x.error.type("callable",F,y.indicator))}},"retract/1":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_callable(y.args[0]))w.throw_error(x.error.type("callable",y.args[0],y.indicator));else{var F,z;if(y.args[0].indicator===":-/2"?(F=y.args[0].args[0],z=y.args[0].args[1]):(F=y.args[0],z=new H("true")),typeof S.retract>"u")if(w.is_public_predicate(F.indicator)){if(w.session.rules[F.indicator]!==void 0){for(var X=[],Z=0;Zw.get_flag("max_arity").value)w.throw_error(x.error.representation("max_arity",y.indicator));else{var F=y.args[0].args[0].id+"/"+y.args[0].args[1].value;w.is_public_predicate(F)?(delete w.session.rules[F],w.success(S)):w.throw_error(x.error.permission("modify","static_procedure",F,y.indicator))}},"atom_length/2":function(w,S,y){if(x.type.is_variable(y.args[0]))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_atom(y.args[0]))w.throw_error(x.error.type("atom",y.args[0],y.indicator));else if(!x.type.is_variable(y.args[1])&&!x.type.is_integer(y.args[1]))w.throw_error(x.error.type("integer",y.args[1],y.indicator));else if(x.type.is_integer(y.args[1])&&y.args[1].value<0)w.throw_error(x.error.domain("not_less_than_zero",y.args[1],y.indicator));else{var F=new ke(y.args[0].id.length,!1);w.prepend([new be(S.goal.replace(new H("=",[F,y.args[1]])),S.substitution,S)])}},"atom_concat/3":function(w,S,y){var F,z,X=y.args[0],Z=y.args[1],ie=y.args[2];if(x.type.is_variable(ie)&&(x.type.is_variable(X)||x.type.is_variable(Z)))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_atom(X))w.throw_error(x.error.type("atom",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_atom(Z))w.throw_error(x.error.type("atom",Z,y.indicator));else if(!x.type.is_variable(ie)&&!x.type.is_atom(ie))w.throw_error(x.error.type("atom",ie,y.indicator));else{var Se=x.type.is_variable(X),Ne=x.type.is_variable(Z);if(!Se&&!Ne)z=new H("=",[ie,new H(X.id+Z.id)]),w.prepend([new be(S.goal.replace(z),S.substitution,S)]);else if(Se&&!Ne)F=ie.id.substr(0,ie.id.length-Z.id.length),F+Z.id===ie.id&&(z=new H("=",[X,new H(F)]),w.prepend([new be(S.goal.replace(z),S.substitution,S)]));else if(Ne&&!Se)F=ie.id.substr(X.id.length),X.id+F===ie.id&&(z=new H("=",[Z,new H(F)]),w.prepend([new be(S.goal.replace(z),S.substitution,S)]));else{for(var ot=[],dt=0;dt<=ie.id.length;dt++){var jt=new H(ie.id.substr(0,dt)),$t=new H(ie.id.substr(dt));z=new H(",",[new H("=",[jt,X]),new H("=",[$t,Z])]),ot.push(new be(S.goal.replace(z),S.substitution,S))}w.prepend(ot)}}},"sub_atom/5":function(w,S,y){var F,z=y.args[0],X=y.args[1],Z=y.args[2],ie=y.args[3],Se=y.args[4];if(x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_integer(X))w.throw_error(x.error.type("integer",X,y.indicator));else if(!x.type.is_variable(Z)&&!x.type.is_integer(Z))w.throw_error(x.error.type("integer",Z,y.indicator));else if(!x.type.is_variable(ie)&&!x.type.is_integer(ie))w.throw_error(x.error.type("integer",ie,y.indicator));else if(x.type.is_integer(X)&&X.value<0)w.throw_error(x.error.domain("not_less_than_zero",X,y.indicator));else if(x.type.is_integer(Z)&&Z.value<0)w.throw_error(x.error.domain("not_less_than_zero",Z,y.indicator));else if(x.type.is_integer(ie)&&ie.value<0)w.throw_error(x.error.domain("not_less_than_zero",ie,y.indicator));else{var Ne=[],ot=[],dt=[];if(x.type.is_variable(X))for(F=0;F<=z.id.length;F++)Ne.push(F);else Ne.push(X.value);if(x.type.is_variable(Z))for(F=0;F<=z.id.length;F++)ot.push(F);else ot.push(Z.value);if(x.type.is_variable(ie))for(F=0;F<=z.id.length;F++)dt.push(F);else dt.push(ie.value);var jt=[];for(var $t in Ne)if(!!Ne.hasOwnProperty($t)){F=Ne[$t];for(var xt in ot)if(!!ot.hasOwnProperty(xt)){var an=ot[xt],Qr=z.id.length-F-an;if(e(dt,Qr)!==-1&&F+an+Qr===z.id.length){var mr=z.id.substr(F,an);if(z.id===z.id.substr(0,F)+mr+z.id.substr(F+an,Qr)){var xr=new H("=",[new H(mr),Se]),Wr=new H("=",[X,new ke(F)]),Vn=new H("=",[Z,new ke(an)]),Ns=new H("=",[ie,new ke(Qr)]),Ri=new H(",",[new H(",",[new H(",",[Wr,Vn]),Ns]),xr]);jt.push(new be(S.goal.replace(Ri),S.substitution,S))}}}}w.prepend(jt)}},"atom_chars/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_variable(F)){for(var ie=z,Se=x.type.is_variable(F),Ne="";ie.indicator==="./2";){if(x.type.is_character(ie.args[0]))Ne+=ie.args[0].id;else if(x.type.is_variable(ie.args[0])&&Se){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}x.type.is_variable(ie)&&Se?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)?w.throw_error(x.error.type("list",z,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[new H(Ne),F])),S.substitution,S)])}else{for(var X=new H("[]"),Z=F.id.length-1;Z>=0;Z--)X=new H(".",[new H(F.id.charAt(Z)),X]);w.prepend([new be(S.goal.replace(new H("=",[z,X])),S.substitution,S)])}},"atom_codes/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_variable(F)){for(var ie=z,Se=x.type.is_variable(F),Ne="";ie.indicator==="./2";){if(x.type.is_character_code(ie.args[0]))Ne+=u(ie.args[0].value);else if(x.type.is_variable(ie.args[0])&&Se){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.representation("character_code",y.indicator));return}ie=ie.args[1]}x.type.is_variable(ie)&&Se?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)?w.throw_error(x.error.type("list",z,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[new H(Ne),F])),S.substitution,S)])}else{for(var X=new H("[]"),Z=F.id.length-1;Z>=0;Z--)X=new H(".",[new ke(n(F.id,Z),!1),X]);w.prepend([new be(S.goal.replace(new H("=",[z,X])),S.substitution,S)])}},"char_code/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(x.type.is_variable(F)&&x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_character(F))w.throw_error(x.error.type("character",F,y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_integer(z))w.throw_error(x.error.type("integer",z,y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_character_code(z))w.throw_error(x.error.representation("character_code",y.indicator));else if(x.type.is_variable(z)){var X=new ke(n(F.id,0),!1);w.prepend([new be(S.goal.replace(new H("=",[X,z])),S.substitution,S)])}else{var Z=new H(u(z.value));w.prepend([new be(S.goal.replace(new H("=",[Z,F])),S.substitution,S)])}},"number_chars/2":function(w,S,y){var F,z=y.args[0],X=y.args[1];if(x.type.is_variable(z)&&x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_number(z))w.throw_error(x.error.type("number",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else{var Z=x.type.is_variable(z);if(!x.type.is_variable(X)){var ie=X,Se=!0;for(F="";ie.indicator==="./2";){if(x.type.is_character(ie.args[0]))F+=ie.args[0].id;else if(x.type.is_variable(ie.args[0]))Se=!1;else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.type("character",ie.args[0],y.indicator));return}ie=ie.args[1]}if(Se=Se&&x.type.is_empty_list(ie),!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)){w.throw_error(x.error.type("list",X,y.indicator));return}if(!Se&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else if(Se)if(x.type.is_variable(ie)&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else{var Ne=w.parse(F),ot=Ne.value;!x.type.is_number(ot)||Ne.tokens[Ne.tokens.length-1].space?w.throw_error(x.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[z,ot])),S.substitution,S)]);return}}if(!Z){F=z.toString();for(var dt=new H("[]"),jt=F.length-1;jt>=0;jt--)dt=new H(".",[new H(F.charAt(jt)),dt]);w.prepend([new be(S.goal.replace(new H("=",[X,dt])),S.substitution,S)])}}},"number_codes/2":function(w,S,y){var F,z=y.args[0],X=y.args[1];if(x.type.is_variable(z)&&x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(z)&&!x.type.is_number(z))w.throw_error(x.error.type("number",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else{var Z=x.type.is_variable(z);if(!x.type.is_variable(X)){var ie=X,Se=!0;for(F="";ie.indicator==="./2";){if(x.type.is_character_code(ie.args[0]))F+=u(ie.args[0].value);else if(x.type.is_variable(ie.args[0]))Se=!1;else if(!x.type.is_variable(ie.args[0])){w.throw_error(x.error.type("character_code",ie.args[0],y.indicator));return}ie=ie.args[1]}if(Se=Se&&x.type.is_empty_list(ie),!x.type.is_empty_list(ie)&&!x.type.is_variable(ie)){w.throw_error(x.error.type("list",X,y.indicator));return}if(!Se&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else if(Se)if(x.type.is_variable(ie)&&Z){w.throw_error(x.error.instantiation(y.indicator));return}else{var Ne=w.parse(F),ot=Ne.value;!x.type.is_number(ot)||Ne.tokens[Ne.tokens.length-1].space?w.throw_error(x.error.syntax_by_predicate("parseable_number",y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[z,ot])),S.substitution,S)]);return}}if(!Z){F=z.toString();for(var dt=new H("[]"),jt=F.length-1;jt>=0;jt--)dt=new H(".",[new ke(n(F,jt),!1),dt]);w.prepend([new be(S.goal.replace(new H("=",[X,dt])),S.substitution,S)])}}},"upcase_atom/2":function(w,S,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?!x.type.is_variable(z)&&!x.type.is_atom(z)?w.throw_error(x.error.type("atom",z,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[z,new H(F.id.toUpperCase(),[])])),S.substitution,S)]):w.throw_error(x.error.type("atom",F,y.indicator))},"downcase_atom/2":function(w,S,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?!x.type.is_variable(z)&&!x.type.is_atom(z)?w.throw_error(x.error.type("atom",z,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[z,new H(F.id.toLowerCase(),[])])),S.substitution,S)]):w.throw_error(x.error.type("atom",F,y.indicator))},"atomic_list_concat/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("atomic_list_concat",[F,new H("",[]),z])),S.substitution,S)])},"atomic_list_concat/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(x.type.is_variable(z)||x.type.is_variable(F)&&x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_list(F))w.throw_error(x.error.type("list",F,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_atom(X))w.throw_error(x.error.type("atom",X,y.indicator));else if(x.type.is_variable(X)){for(var ie="",Se=F;x.type.is_term(Se)&&Se.indicator==="./2";){if(!x.type.is_atom(Se.args[0])&&!x.type.is_number(Se.args[0])){w.throw_error(x.error.type("atomic",Se.args[0],y.indicator));return}ie!==""&&(ie+=z.id),x.type.is_atom(Se.args[0])?ie+=Se.args[0].id:ie+=""+Se.args[0].value,Se=Se.args[1]}ie=new H(ie,[]),x.type.is_variable(Se)?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_term(Se)||Se.indicator!=="[]/0"?w.throw_error(x.error.type("list",F,y.indicator)):w.prepend([new be(S.goal.replace(new H("=",[ie,X])),S.substitution,S)])}else{var Z=g(o(X.id.split(z.id),function(Ne){return new H(Ne,[])}));w.prepend([new be(S.goal.replace(new H("=",[Z,F])),S.substitution,S)])}},"@=/2":function(w,S,y){x.compare(y.args[0],y.args[1])>0&&w.success(S)},"@>=/2":function(w,S,y){x.compare(y.args[0],y.args[1])>=0&&w.success(S)},"compare/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(x.type.is_atom(F)&&["<",">","="].indexOf(F.id)===-1)w.throw_error(x.type.domain("order",F,y.indicator));else{var Z=x.compare(z,X);Z=Z===0?"=":Z===-1?"<":">",w.prepend([new be(S.goal.replace(new H("=",[F,new H(Z,[])])),S.substitution,S)])}},"is/2":function(w,S,y){var F=y.args[1].interpret(w);x.type.is_number(F)?w.prepend([new be(S.goal.replace(new H("=",[y.args[0],F],w.level)),S.substitution,S)]):w.throw_error(F)},"between/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2];if(x.type.is_variable(F)||x.type.is_variable(z))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_integer(F))w.throw_error(x.error.type("integer",F,y.indicator));else if(!x.type.is_integer(z))w.throw_error(x.error.type("integer",z,y.indicator));else if(!x.type.is_variable(X)&&!x.type.is_integer(X))w.throw_error(x.error.type("integer",X,y.indicator));else if(x.type.is_variable(X)){var Z=[new be(S.goal.replace(new H("=",[X,F])),S.substitution,S)];F.value=X.value&&w.success(S)},"succ/2":function(w,S,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)&&x.type.is_variable(z)?w.throw_error(x.error.instantiation(y.indicator)):!x.type.is_variable(F)&&!x.type.is_integer(F)?w.throw_error(x.error.type("integer",F,y.indicator)):!x.type.is_variable(z)&&!x.type.is_integer(z)?w.throw_error(x.error.type("integer",z,y.indicator)):!x.type.is_variable(F)&&F.value<0?w.throw_error(x.error.domain("not_less_than_zero",F,y.indicator)):!x.type.is_variable(z)&&z.value<0?w.throw_error(x.error.domain("not_less_than_zero",z,y.indicator)):(x.type.is_variable(z)||z.value>0)&&(x.type.is_variable(F)?w.prepend([new be(S.goal.replace(new H("=",[F,new ke(z.value-1,!1)])),S.substitution,S)]):w.prepend([new be(S.goal.replace(new H("=",[z,new ke(F.value+1,!1)])),S.substitution,S)]))},"=:=/2":function(w,S,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F===0&&w.success(S)},"=\\=/2":function(w,S,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F!==0&&w.success(S)},"/2":function(w,S,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F>0&&w.success(S)},">=/2":function(w,S,y){var F=x.arithmetic_compare(w,y.args[0],y.args[1]);x.type.is_term(F)?w.throw_error(F):F>=0&&w.success(S)},"var/1":function(w,S,y){x.type.is_variable(y.args[0])&&w.success(S)},"atom/1":function(w,S,y){x.type.is_atom(y.args[0])&&w.success(S)},"atomic/1":function(w,S,y){x.type.is_atomic(y.args[0])&&w.success(S)},"compound/1":function(w,S,y){x.type.is_compound(y.args[0])&&w.success(S)},"integer/1":function(w,S,y){x.type.is_integer(y.args[0])&&w.success(S)},"float/1":function(w,S,y){x.type.is_float(y.args[0])&&w.success(S)},"number/1":function(w,S,y){x.type.is_number(y.args[0])&&w.success(S)},"nonvar/1":function(w,S,y){x.type.is_variable(y.args[0])||w.success(S)},"ground/1":function(w,S,y){y.variables().length===0&&w.success(S)},"acyclic_term/1":function(w,S,y){for(var F=S.substitution.apply(S.substitution),z=y.args[0].variables(),X=0;X0?xt[xt.length-1]:null,xt!==null&&(jt=J(w,xt,0,w.__get_max_priority(),!1))}if(jt.type===p&&jt.len===xt.length-1&&an.value==="."){jt=jt.value.rename(w);var Qr=new H("=",[z,jt]);if(ie.variables){var mr=g(o(De(jt.variables()),function(xr){return new Ie(xr)}));Qr=new H(",",[Qr,new H("=",[ie.variables,mr])])}if(ie.variable_names){var mr=g(o(De(jt.variables()),function(Wr){var Vn;for(Vn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Vn)&&w.session.renamed_variables[Vn]===Wr)break;return new H("=",[new H(Vn,[]),new Ie(Wr)])}));Qr=new H(",",[Qr,new H("=",[ie.variable_names,mr])])}if(ie.singletons){var mr=g(o(new _e(jt,null).singleton_variables(),function(Wr){var Vn;for(Vn in w.session.renamed_variables)if(w.session.renamed_variables.hasOwnProperty(Vn)&&w.session.renamed_variables[Vn]===Wr)break;return new H("=",[new H(Vn,[]),new Ie(Wr)])}));Qr=new H(",",[Qr,new H("=",[ie.singletons,mr])])}w.prepend([new be(S.goal.replace(Qr),S.substitution,S)])}else jt.type===p?w.throw_error(x.error.syntax(xt[jt.len],"unexpected token",!1)):w.throw_error(jt.value)}}},"write/1":function(w,S,y){var F=y.args[0];w.prepend([new be(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write",[new Ie("S"),F])])),S.substitution,S)])},"write/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("false",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),S.substitution,S)])},"writeq/1":function(w,S,y){var F=y.args[0];w.prepend([new be(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("writeq",[new Ie("S"),F])])),S.substitution,S)])},"writeq/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("false")]),new H(".",[new H("numbervars",[new H("true")]),new H("[]",[])])])])])),S.substitution,S)])},"write_canonical/1":function(w,S,y){var F=y.args[0];w.prepend([new be(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write_canonical",[new Ie("S"),F])])),S.substitution,S)])},"write_canonical/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H("write_term",[F,z,new H(".",[new H("quoted",[new H("true",[])]),new H(".",[new H("ignore_ops",[new H("true")]),new H(".",[new H("numbervars",[new H("false")]),new H("[]",[])])])])])),S.substitution,S)])},"write_term/2":function(w,S,y){var F=y.args[0],z=y.args[1];w.prepend([new be(S.goal.replace(new H(",",[new H("current_output",[new Ie("S")]),new H("write_term",[new Ie("S"),F,z])])),S.substitution,S)])},"write_term/3":function(w,S,y){var F=y.args[0],z=y.args[1],X=y.args[2],Z=x.type.is_stream(F)?F:w.get_stream_by_alias(F.id);if(x.type.is_variable(F)||x.type.is_variable(X))w.throw_error(x.error.instantiation(y.indicator));else if(!x.type.is_list(X))w.throw_error(x.error.type("list",X,y.indicator));else if(!x.type.is_stream(F)&&!x.type.is_atom(F))w.throw_error(x.error.domain("stream_or_alias",F,y.indicator));else if(!x.type.is_stream(Z)||Z.stream===null)w.throw_error(x.error.existence("stream",F,y.indicator));else if(Z.input)w.throw_error(x.error.permission("output","stream",F,y.indicator));else if(Z.type==="binary")w.throw_error(x.error.permission("output","binary_stream",F,y.indicator));else if(Z.position==="past_end_of_stream"&&Z.eof_action==="error")w.throw_error(x.error.permission("output","past_end_of_stream",F,y.indicator));else{for(var ie={},Se=X,Ne;x.type.is_term(Se)&&Se.indicator==="./2";){if(Ne=Se.args[0],x.type.is_variable(Ne)){w.throw_error(x.error.instantiation(y.indicator));return}else if(!x.type.is_write_option(Ne)){w.throw_error(x.error.domain("write_option",Ne,y.indicator));return}ie[Ne.id]=Ne.args[0].id==="true",Se=Se.args[1]}if(Se.indicator!=="[]/0"){x.type.is_variable(Se)?w.throw_error(x.error.instantiation(y.indicator)):w.throw_error(x.error.type("list",X,y.indicator));return}else{ie.session=w.session;var ot=z.toString(ie);Z.stream.put(ot,Z.position),typeof Z.position=="number"&&(Z.position+=ot.length),w.success(S)}}},"halt/0":function(w,S,y){w.points=[]},"halt/1":function(w,S,y){var F=y.args[0];x.type.is_variable(F)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_integer(F)?w.points=[]:w.throw_error(x.error.type("integer",F,y.indicator))},"current_prolog_flag/2":function(w,S,y){var F=y.args[0],z=y.args[1];if(!x.type.is_variable(F)&&!x.type.is_atom(F))w.throw_error(x.error.type("atom",F,y.indicator));else if(!x.type.is_variable(F)&&!x.type.is_flag(F))w.throw_error(x.error.domain("prolog_flag",F,y.indicator));else{var X=[];for(var Z in x.flag)if(!!x.flag.hasOwnProperty(Z)){var ie=new H(",",[new H("=",[new H(Z),F]),new H("=",[w.get_flag(Z),z])]);X.push(new be(S.goal.replace(ie),S.substitution,S))}w.prepend(X)}},"set_prolog_flag/2":function(w,S,y){var F=y.args[0],z=y.args[1];x.type.is_variable(F)||x.type.is_variable(z)?w.throw_error(x.error.instantiation(y.indicator)):x.type.is_atom(F)?x.type.is_flag(F)?x.type.is_value_flag(F,z)?x.type.is_modifiable_flag(F)?(w.session.flag[F.id]=z,w.success(S)):w.throw_error(x.error.permission("modify","flag",F)):w.throw_error(x.error.domain("flag_value",new H("+",[F,z]),y.indicator)):w.throw_error(x.error.domain("prolog_flag",F,y.indicator)):w.throw_error(x.error.type("atom",F,y.indicator))}},flag:{bounded:{allowed:[new H("true"),new H("false")],value:new H("true"),changeable:!1},max_integer:{allowed:[new ke(Number.MAX_SAFE_INTEGER)],value:new ke(Number.MAX_SAFE_INTEGER),changeable:!1},min_integer:{allowed:[new ke(Number.MIN_SAFE_INTEGER)],value:new ke(Number.MIN_SAFE_INTEGER),changeable:!1},integer_rounding_function:{allowed:[new H("down"),new H("toward_zero")],value:new H("toward_zero"),changeable:!1},char_conversion:{allowed:[new H("on"),new H("off")],value:new H("on"),changeable:!0},debug:{allowed:[new H("on"),new H("off")],value:new H("off"),changeable:!0},max_arity:{allowed:[new H("unbounded")],value:new H("unbounded"),changeable:!1},unknown:{allowed:[new H("error"),new H("fail"),new H("warning")],value:new H("error"),changeable:!0},double_quotes:{allowed:[new H("chars"),new H("codes"),new H("atom")],value:new H("codes"),changeable:!0},occurs_check:{allowed:[new H("false"),new H("true")],value:new H("false"),changeable:!0},dialect:{allowed:[new H("tau")],value:new H("tau"),changeable:!1},version_data:{allowed:[new H("tau",[new ke(t.major,!1),new ke(t.minor,!1),new ke(t.patch,!1),new H(t.status)])],value:new H("tau",[new ke(t.major,!1),new ke(t.minor,!1),new ke(t.patch,!1),new H(t.status)]),changeable:!1},nodejs:{allowed:[new H("yes"),new H("no")],value:new H(typeof hl<"u"&&hl.exports?"yes":"no"),changeable:!1}},unify:function(w,S,y){y=y===void 0?!1:y;for(var F=[{left:w,right:S}],z={};F.length!==0;){var X=F.pop();if(w=X.left,S=X.right,x.type.is_term(w)&&x.type.is_term(S)){if(w.indicator!==S.indicator)return null;for(var Z=0;Zz.value?1:0:z}else return F},operate:function(w,S){if(x.type.is_operator(S)){for(var y=x.type.is_operator(S),F=[],z,X=!1,Z=0;Zw.get_flag("max_integer").value||z0?w.start+w.matches[0].length:w.start,z=y?new H("token_not_found"):new H("found",[new H(w.value.toString())]),X=new H(".",[new H("line",[new ke(w.line+1)]),new H(".",[new H("column",[new ke(F+1)]),new H(".",[z,new H("[]",[])])])]);return new H("error",[new H("syntax_error",[new H(S)]),X])},syntax_by_predicate:function(w,S){return new H("error",[new H("syntax_error",[new H(w)]),ee(S)])}},warning:{singleton:function(w,S,y){for(var F=new H("[]"),z=w.length-1;z>=0;z--)F=new H(".",[new Ie(w[z]),F]);return new H("warning",[new H("singleton_variables",[F,ee(S)]),new H(".",[new H("line",[new ke(y,!1)]),new H("[]")])])},failed_goal:function(w,S){return new H("warning",[new H("failed_goal",[w]),new H(".",[new H("line",[new ke(S,!1)]),new H("[]")])])}},format_variable:function(w){return"_"+w},format_answer:function(w,S,F){S instanceof Te&&(S=S.thread);var F=F||{};if(F.session=S?S.session:void 0,x.type.is_error(w))return"uncaught exception: "+w.args[0].toString();if(w===!1)return"false.";if(w===null)return"limit exceeded ;";var z=0,X="";if(x.type.is_substitution(w)){var Z=w.domain(!0);w=w.filter(function(Ne,ot){return!x.type.is_variable(ot)||Z.indexOf(ot.id)!==-1&&Ne!==ot.id})}for(var ie in w.links)!w.links.hasOwnProperty(ie)||(z++,X!==""&&(X+=", "),X+=ie.toString(F)+" = "+w.links[ie].toString(F));var Se=typeof S>"u"||S.points.length>0?" ;":".";return z===0?"true"+Se:X+Se},flatten_error:function(w){if(!x.type.is_error(w))return null;w=w.args[0];var S={};return S.type=w.args[0].id,S.thrown=S.type==="syntax_error"?null:w.args[1].id,S.expected=null,S.found=null,S.representation=null,S.existence=null,S.existence_type=null,S.line=null,S.column=null,S.permission_operation=null,S.permission_type=null,S.evaluation_type=null,S.type==="type_error"||S.type==="domain_error"?(S.expected=w.args[0].args[0].id,S.found=w.args[0].args[1].toString()):S.type==="syntax_error"?w.args[1].indicator==="./2"?(S.expected=w.args[0].args[0].id,S.found=w.args[1].args[1].args[1].args[0],S.found=S.found.id==="token_not_found"?S.found.id:S.found.args[0].id,S.line=w.args[1].args[0].args[0].value,S.column=w.args[1].args[1].args[0].args[0].value):S.thrown=w.args[1].id:S.type==="permission_error"?(S.found=w.args[0].args[2].toString(),S.permission_operation=w.args[0].args[0].id,S.permission_type=w.args[0].args[1].id):S.type==="evaluation_error"?S.evaluation_type=w.args[0].args[0].id:S.type==="representation_error"?S.representation=w.args[0].args[0].id:S.type==="existence_error"&&(S.existence=w.args[0].args[1].toString(),S.existence_type=w.args[0].args[0].id),S},create:function(w){return new x.type.Session(w)}};typeof hl<"u"?hl.exports=x:window.pl=x})()});function ame(t,e,r){t.prepend(r.map(o=>new Ra.default.type.State(e.goal.replace(o),e.substitution,e)))}function CH(t){let e=cme.get(t.session);if(e==null)throw new Error("Assertion failed: A project should have been registered for the active session");return e}function ume(t,e){cme.set(t,e),t.consult(`:- use_module(library(${tdt.id})).`)}var wH,Ra,lme,c0,$gt,edt,cme,tdt,Ame=Et(()=>{Ye();wH=$e(g2()),Ra=$e(EH()),lme=$e(Be("vm")),{is_atom:c0,is_variable:$gt,is_instantiated_list:edt}=Ra.default.type;cme=new WeakMap;tdt=new Ra.default.type.Module("constraints",{["project_workspaces_by_descriptor/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!c0(o)||!c0(a)){t.throw_error(Ra.default.error.instantiation(r.indicator));return}let u=W.parseIdent(o.id),A=W.makeDescriptor(u,a.id),h=CH(t).tryWorkspaceByDescriptor(A);$gt(n)&&h!==null&&ame(t,e,[new Ra.default.type.Term("=",[n,new Ra.default.type.Term(String(h.relativeCwd))])]),c0(n)&&h!==null&&h.relativeCwd===n.id&&t.success(e)},["workspace_field/3"]:(t,e,r)=>{let[o,a,n]=r.args;if(!c0(o)||!c0(a)){t.throw_error(Ra.default.error.instantiation(r.indicator));return}let A=CH(t).tryWorkspaceByCwd(o.id);if(A==null)return;let p=(0,wH.default)(A.manifest.raw,a.id);typeof p>"u"||ame(t,e,[new Ra.default.type.Term("=",[n,new Ra.default.type.Term(typeof p=="object"?JSON.stringify(p):p)])])},["workspace_field_test/3"]:(t,e,r)=>{let[o,a,n]=r.args;t.prepend([new Ra.default.type.State(e.goal.replace(new Ra.default.type.Term("workspace_field_test",[o,a,n,new Ra.default.type.Term("[]",[])])),e.substitution,e)])},["workspace_field_test/4"]:(t,e,r)=>{let[o,a,n,u]=r.args;if(!c0(o)||!c0(a)||!c0(n)||!edt(u)){t.throw_error(Ra.default.error.instantiation(r.indicator));return}let p=CH(t).tryWorkspaceByCwd(o.id);if(p==null)return;let h=(0,wH.default)(p.manifest.raw,a.id);if(typeof h>"u")return;let E={$$:h};for(let[v,b]of u.toJavaScript().entries())E[`$${v}`]=b;lme.default.runInNewContext(n.id,E)&&t.success(e)}},["project_workspaces_by_descriptor/3","workspace_field/3","workspace_field_test/3","workspace_field_test/4"])});var S2={};Kt(S2,{Constraints:()=>P2,DependencyType:()=>gme});function to(t){if(t instanceof vC.default.type.Num)return t.value;if(t instanceof vC.default.type.Term)switch(t.indicator){case"throw/1":return to(t.args[0]);case"error/1":return to(t.args[0]);case"error/2":if(t.args[0]instanceof vC.default.type.Term&&t.args[0].indicator==="syntax_error/1")return Object.assign(to(t.args[0]),...to(t.args[1]));{let e=to(t.args[0]);return e.message+=` (in ${to(t.args[1])})`,e}case"syntax_error/1":return new zt(43,`Syntax error: ${to(t.args[0])}`);case"existence_error/2":return new zt(44,`Existence error: ${to(t.args[0])} ${to(t.args[1])} not found`);case"instantiation_error/0":return new zt(75,"Instantiation error: an argument is variable when an instantiated argument was expected");case"line/1":return{line:to(t.args[0])};case"column/1":return{column:to(t.args[0])};case"found/1":return{found:to(t.args[0])};case"./2":return[to(t.args[0])].concat(to(t.args[1]));case"//2":return`${to(t.args[0])}/${to(t.args[1])}`;default:return t.id}throw`couldn't pretty print because of unsupported node ${t}`}function pme(t){let e;try{e=to(t)}catch(r){throw typeof r=="string"?new zt(42,`Unknown error: ${t} (note: ${r})`):r}return typeof e.line<"u"&&typeof e.column<"u"&&(e.message+=` at line ${e.line}, column ${e.column}`),e}function $d(t){return t.id==="null"?null:`${t.toJavaScript()}`}function rdt(t){if(t.id==="null")return null;{let e=t.toJavaScript();if(typeof e!="string")return JSON.stringify(e);try{return JSON.stringify(JSON.parse(e))}catch{return JSON.stringify(e)}}}function u0(t){return typeof t=="string"?`'${t}'`:"[]"}var hme,vC,gme,fme,IH,P2,x2=Et(()=>{Ye();Ye();Pt();hme=$e(Yde()),vC=$e(EH());B2();Ame();(0,hme.default)(vC.default);gme=(o=>(o.Dependencies="dependencies",o.DevDependencies="devDependencies",o.PeerDependencies="peerDependencies",o))(gme||{}),fme=["dependencies","devDependencies","peerDependencies"];IH=class{constructor(e,r){let o=1e3*e.workspaces.length;this.session=vC.default.create(o),ume(this.session,e),this.session.consult(":- use_module(library(lists))."),this.session.consult(r)}fetchNextAnswer(){return new Promise(e=>{this.session.answer(r=>{e(r)})})}async*makeQuery(e){let r=this.session.query(e);if(r!==!0)throw pme(r);for(;;){let o=await this.fetchNextAnswer();if(o===null)throw new zt(79,"Resolution limit exceeded");if(!o)break;if(o.id==="throw")throw pme(o);yield o}}};P2=class{constructor(e){this.source="";this.project=e;let r=e.configuration.get("constraintsPath");oe.existsSync(r)&&(this.source=oe.readFileSync(r,"utf8"))}static async find(e){return new P2(e)}getProjectDatabase(){let e="";for(let r of fme)e+=`dependency_type(${r}). +`;for(let r of this.project.workspacesByCwd.values()){let o=r.relativeCwd;e+=`workspace(${u0(o)}). +`,e+=`workspace_ident(${u0(o)}, ${u0(W.stringifyIdent(r.anchoredLocator))}). +`,e+=`workspace_version(${u0(o)}, ${u0(r.manifest.version)}). +`;for(let a of fme)for(let n of r.manifest[a].values())e+=`workspace_has_dependency(${u0(o)}, ${u0(W.stringifyIdent(n))}, ${u0(n.range)}, ${a}). +`}return e+=`workspace(_) :- false. +`,e+=`workspace_ident(_, _) :- false. +`,e+=`workspace_version(_, _) :- false. +`,e+=`workspace_has_dependency(_, _, _, _) :- false. +`,e}getDeclarations(){let e="";return e+=`gen_enforced_dependency(_, _, _, _) :- false. +`,e+=`gen_enforced_field(_, _, _) :- false. +`,e}get fullSource(){return`${this.getProjectDatabase()} +${this.source} +${this.getDeclarations()}`}createSession(){return new IH(this.project,this.fullSource)}async processClassic(){let e=this.createSession();return{enforcedDependencies:await this.genEnforcedDependencies(e),enforcedFields:await this.genEnforcedFields(e)}}async process(){let{enforcedDependencies:e,enforcedFields:r}=await this.processClassic(),o=new Map;for(let{workspace:a,dependencyIdent:n,dependencyRange:u,dependencyType:A}of e){let p=I2([A,W.stringifyIdent(n)]),h=je.getMapWithDefault(o,a.cwd);je.getMapWithDefault(h,p).set(u??void 0,new Set)}for(let{workspace:a,fieldPath:n,fieldValue:u}of r){let A=I2(n),p=je.getMapWithDefault(o,a.cwd);je.getMapWithDefault(p,A).set(JSON.parse(u)??void 0,new Set)}return{manifestUpdates:o,reportedErrors:new Map}}async genEnforcedDependencies(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), dependency_type(DependencyType), gen_enforced_dependency(WorkspaceCwd, DependencyIdent, DependencyRange, DependencyType).")){let a=K.resolve(this.project.cwd,$d(o.links.WorkspaceCwd)),n=$d(o.links.DependencyIdent),u=$d(o.links.DependencyRange),A=$d(o.links.DependencyType);if(a===null||n===null)throw new Error("Invalid rule");let p=this.project.getWorkspaceByCwd(a),h=W.parseIdent(n);r.push({workspace:p,dependencyIdent:h,dependencyRange:u,dependencyType:A})}return je.sortMap(r,[({dependencyRange:o})=>o!==null?"0":"1",({workspace:o})=>W.stringifyIdent(o.anchoredLocator),({dependencyIdent:o})=>W.stringifyIdent(o)])}async genEnforcedFields(e){let r=[];for await(let o of e.makeQuery("workspace(WorkspaceCwd), gen_enforced_field(WorkspaceCwd, FieldPath, FieldValue).")){let a=K.resolve(this.project.cwd,$d(o.links.WorkspaceCwd)),n=$d(o.links.FieldPath),u=rdt(o.links.FieldValue);if(a===null||n===null)throw new Error("Invalid rule");let A=this.project.getWorkspaceByCwd(a);r.push({workspace:A,fieldPath:n,fieldValue:u})}return je.sortMap(r,[({workspace:o})=>W.stringifyIdent(o.anchoredLocator),({fieldPath:o})=>o])}async*query(e){let r=this.createSession();for await(let o of r.makeQuery(e)){let a={};for(let[n,u]of Object.entries(o.links))n!=="_"&&(a[n]=$d(u));yield a}}}});var vme=_(vk=>{"use strict";Object.defineProperty(vk,"__esModule",{value:!0});function q2(t){let e=[...t.caches],r=e.shift();return r===void 0?Bme():{get(o,a,n={miss:()=>Promise.resolve()}){return r.get(o,a,n).catch(()=>q2({caches:e}).get(o,a,n))},set(o,a){return r.set(o,a).catch(()=>q2({caches:e}).set(o,a))},delete(o){return r.delete(o).catch(()=>q2({caches:e}).delete(o))},clear(){return r.clear().catch(()=>q2({caches:e}).clear())}}}function Bme(){return{get(t,e,r={miss:()=>Promise.resolve()}){return e().then(a=>Promise.all([a,r.miss(a)])).then(([a])=>a)},set(t,e){return Promise.resolve(e)},delete(t){return Promise.resolve()},clear(){return Promise.resolve()}}}vk.createFallbackableCache=q2;vk.createNullCache=Bme});var Pme=_((QWt,Dme)=>{Dme.exports=vme()});var Sme=_(LH=>{"use strict";Object.defineProperty(LH,"__esModule",{value:!0});function wdt(t={serializable:!0}){let e={};return{get(r,o,a={miss:()=>Promise.resolve()}){let n=JSON.stringify(r);if(n in e)return Promise.resolve(t.serializable?JSON.parse(e[n]):e[n]);let u=o(),A=a&&a.miss||(()=>Promise.resolve());return u.then(p=>A(p)).then(()=>u)},set(r,o){return e[JSON.stringify(r)]=t.serializable?JSON.stringify(o):o,Promise.resolve(o)},delete(r){return delete e[JSON.stringify(r)],Promise.resolve()},clear(){return e={},Promise.resolve()}}}LH.createInMemoryCache=wdt});var bme=_((TWt,xme)=>{xme.exports=Sme()});var Qme=_(Zc=>{"use strict";Object.defineProperty(Zc,"__esModule",{value:!0});function Idt(t,e,r){let o={"x-algolia-api-key":r,"x-algolia-application-id":e};return{headers(){return t===MH.WithinHeaders?o:{}},queryParameters(){return t===MH.WithinQueryParameters?o:{}}}}function Bdt(t){let e=0,r=()=>(e++,new Promise(o=>{setTimeout(()=>{o(t(r))},Math.min(100*e,1e3))}));return t(r)}function kme(t,e=(r,o)=>Promise.resolve()){return Object.assign(t,{wait(r){return kme(t.then(o=>Promise.all([e(o,r),o])).then(o=>o[1]))}})}function vdt(t){let e=t.length-1;for(e;e>0;e--){let r=Math.floor(Math.random()*(e+1)),o=t[e];t[e]=t[r],t[r]=o}return t}function Ddt(t,e){return e&&Object.keys(e).forEach(r=>{t[r]=e[r](t)}),t}function Pdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}var Sdt="4.14.2",xdt=t=>()=>t.transporter.requester.destroy(),MH={WithinQueryParameters:0,WithinHeaders:1};Zc.AuthMode=MH;Zc.addMethods=Ddt;Zc.createAuth=Idt;Zc.createRetryablePromise=Bdt;Zc.createWaitablePromise=kme;Zc.destroy=xdt;Zc.encode=Pdt;Zc.shuffle=vdt;Zc.version=Sdt});var G2=_((NWt,Fme)=>{Fme.exports=Qme()});var Tme=_(OH=>{"use strict";Object.defineProperty(OH,"__esModule",{value:!0});var bdt={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};OH.MethodEnum=bdt});var Y2=_((MWt,Rme)=>{Rme.exports=Tme()});var Jme=_(Fi=>{"use strict";Object.defineProperty(Fi,"__esModule",{value:!0});var Lme=Y2();function UH(t,e){let r=t||{},o=r.data||{};return Object.keys(r).forEach(a=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(a)===-1&&(o[a]=r[a])}),{data:Object.entries(o).length>0?o:void 0,timeout:r.timeout||e,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var W2={Read:1,Write:2,Any:3},xC={Up:1,Down:2,Timeouted:3},Mme=2*60*1e3;function HH(t,e=xC.Up){return{...t,status:e,lastUpdate:Date.now()}}function Ome(t){return t.status===xC.Up||Date.now()-t.lastUpdate>Mme}function Ume(t){return t.status===xC.Timeouted&&Date.now()-t.lastUpdate<=Mme}function jH(t){return typeof t=="string"?{protocol:"https",url:t,accept:W2.Any}:{protocol:t.protocol||"https",url:t.url,accept:t.accept||W2.Any}}function kdt(t,e){return Promise.all(e.map(r=>t.get(r,()=>Promise.resolve(HH(r))))).then(r=>{let o=r.filter(A=>Ome(A)),a=r.filter(A=>Ume(A)),n=[...o,...a],u=n.length>0?n.map(A=>jH(A)):e;return{getTimeout(A,p){return(a.length===0&&A===0?1:a.length+3+A)*p},statelessHosts:u}})}var Qdt=({isTimedOut:t,status:e})=>!t&&~~e===0,Fdt=t=>{let e=t.status;return t.isTimedOut||Qdt(t)||~~(e/100)!==2&&~~(e/100)!==4},Tdt=({status:t})=>~~(t/100)===2,Rdt=(t,e)=>Fdt(t)?e.onRetry(t):Tdt(t)?e.onSuccess(t):e.onFail(t);function Nme(t,e,r,o){let a=[],n=Gme(r,o),u=Yme(t,o),A=r.method,p=r.method!==Lme.MethodEnum.Get?{}:{...r.data,...o.data},h={"x-algolia-agent":t.userAgent.value,...t.queryParameters,...p,...o.queryParameters},E=0,I=(v,b)=>{let C=v.pop();if(C===void 0)throw Kme(_H(a));let T={data:n,headers:u,method:A,url:jme(C,r.path,h),connectTimeout:b(E,t.timeouts.connect),responseTimeout:b(E,o.timeout)},L=J=>{let te={request:T,response:J,host:C,triesLeft:v.length};return a.push(te),te},U={onSuccess:J=>_me(J),onRetry(J){let te=L(J);return J.isTimedOut&&E++,Promise.all([t.logger.info("Retryable failure",qH(te)),t.hostsCache.set(C,HH(C,J.isTimedOut?xC.Timeouted:xC.Down))]).then(()=>I(v,b))},onFail(J){throw L(J),Hme(J,_H(a))}};return t.requester.send(T).then(J=>Rdt(J,U))};return kdt(t.hostsCache,e).then(v=>I([...v.statelessHosts].reverse(),v.getTimeout))}function Ndt(t){let{hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,hosts:p,queryParameters:h,headers:E}=t,I={hostsCache:e,logger:r,requester:o,requestsCache:a,responsesCache:n,timeouts:u,userAgent:A,headers:E,queryParameters:h,hosts:p.map(v=>jH(v)),read(v,b){let C=UH(b,I.timeouts.read),T=()=>Nme(I,I.hosts.filter(J=>(J.accept&W2.Read)!==0),v,C);if((C.cacheable!==void 0?C.cacheable:v.cacheable)!==!0)return T();let U={request:v,mappedRequestOptions:C,transporter:{queryParameters:I.queryParameters,headers:I.headers}};return I.responsesCache.get(U,()=>I.requestsCache.get(U,()=>I.requestsCache.set(U,T()).then(J=>Promise.all([I.requestsCache.delete(U),J]),J=>Promise.all([I.requestsCache.delete(U),Promise.reject(J)])).then(([J,te])=>te)),{miss:J=>I.responsesCache.set(U,J)})},write(v,b){return Nme(I,I.hosts.filter(C=>(C.accept&W2.Write)!==0),v,UH(b,I.timeouts.write))}};return I}function Ldt(t){let e={value:`Algolia for JavaScript (${t})`,add(r){let o=`; ${r.segment}${r.version!==void 0?` (${r.version})`:""}`;return e.value.indexOf(o)===-1&&(e.value=`${e.value}${o}`),e}};return e}function _me(t){try{return JSON.parse(t.content)}catch(e){throw Vme(e.message,t)}}function Hme({content:t,status:e},r){let o=t;try{o=JSON.parse(t).message}catch{}return Wme(o,e,r)}function Mdt(t,...e){let r=0;return t.replace(/%s/g,()=>encodeURIComponent(e[r++]))}function jme(t,e,r){let o=qme(r),a=`${t.protocol}://${t.url}/${e.charAt(0)==="/"?e.substr(1):e}`;return o.length&&(a+=`?${o}`),a}function qme(t){let e=r=>Object.prototype.toString.call(r)==="[object Object]"||Object.prototype.toString.call(r)==="[object Array]";return Object.keys(t).map(r=>Mdt("%s=%s",r,e(t[r])?JSON.stringify(t[r]):t[r])).join("&")}function Gme(t,e){if(t.method===Lme.MethodEnum.Get||t.data===void 0&&e.data===void 0)return;let r=Array.isArray(t.data)?t.data:{...t.data,...e.data};return JSON.stringify(r)}function Yme(t,e){let r={...t.headers,...e.headers},o={};return Object.keys(r).forEach(a=>{let n=r[a];o[a.toLowerCase()]=n}),o}function _H(t){return t.map(e=>qH(e))}function qH(t){let e=t.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...t,request:{...t.request,headers:{...t.request.headers,...e}}}}function Wme(t,e,r){return{name:"ApiError",message:t,status:e,transporterStackTrace:r}}function Vme(t,e){return{name:"DeserializationError",message:t,response:e}}function Kme(t){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:t}}Fi.CallEnum=W2;Fi.HostStatusEnum=xC;Fi.createApiError=Wme;Fi.createDeserializationError=Vme;Fi.createMappedRequestOptions=UH;Fi.createRetryError=Kme;Fi.createStatefulHost=HH;Fi.createStatelessHost=jH;Fi.createTransporter=Ndt;Fi.createUserAgent=Ldt;Fi.deserializeFailure=Hme;Fi.deserializeSuccess=_me;Fi.isStatefulHostTimeouted=Ume;Fi.isStatefulHostUp=Ome;Fi.serializeData=Gme;Fi.serializeHeaders=Yme;Fi.serializeQueryParameters=qme;Fi.serializeUrl=jme;Fi.stackFrameWithoutCredentials=qH;Fi.stackTraceWithoutCredentials=_H});var V2=_((UWt,zme)=>{zme.exports=Jme()});var Xme=_(d0=>{"use strict";Object.defineProperty(d0,"__esModule",{value:!0});var bC=G2(),Odt=V2(),K2=Y2(),Udt=t=>{let e=t.region||"us",r=bC.createAuth(bC.AuthMode.WithinHeaders,t.appId,t.apiKey),o=Odt.createTransporter({hosts:[{url:`analytics.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a=t.appId;return bC.addMethods({appId:a,transporter:o},t.methods)},_dt=t=>(e,r)=>t.transporter.write({method:K2.MethodEnum.Post,path:"2/abtests",data:e},r),Hdt=t=>(e,r)=>t.transporter.write({method:K2.MethodEnum.Delete,path:bC.encode("2/abtests/%s",e)},r),jdt=t=>(e,r)=>t.transporter.read({method:K2.MethodEnum.Get,path:bC.encode("2/abtests/%s",e)},r),qdt=t=>e=>t.transporter.read({method:K2.MethodEnum.Get,path:"2/abtests"},e),Gdt=t=>(e,r)=>t.transporter.write({method:K2.MethodEnum.Post,path:bC.encode("2/abtests/%s/stop",e)},r);d0.addABTest=_dt;d0.createAnalyticsClient=Udt;d0.deleteABTest=Hdt;d0.getABTest=jdt;d0.getABTests=qdt;d0.stopABTest=Gdt});var $me=_((HWt,Zme)=>{Zme.exports=Xme()});var tye=_(J2=>{"use strict";Object.defineProperty(J2,"__esModule",{value:!0});var GH=G2(),Ydt=V2(),eye=Y2(),Wdt=t=>{let e=t.region||"us",r=GH.createAuth(GH.AuthMode.WithinHeaders,t.appId,t.apiKey),o=Ydt.createTransporter({hosts:[{url:`personalization.${e}.algolia.com`}],...t,headers:{...r.headers(),"content-type":"application/json",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}});return GH.addMethods({appId:t.appId,transporter:o},t.methods)},Vdt=t=>e=>t.transporter.read({method:eye.MethodEnum.Get,path:"1/strategies/personalization"},e),Kdt=t=>(e,r)=>t.transporter.write({method:eye.MethodEnum.Post,path:"1/strategies/personalization",data:e},r);J2.createPersonalizationClient=Wdt;J2.getPersonalizationStrategy=Vdt;J2.setPersonalizationStrategy=Kdt});var nye=_((qWt,rye)=>{rye.exports=tye()});var mye=_(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});var Gt=G2(),Na=V2(),Ir=Y2(),Jdt=Be("crypto");function Dk(t){let e=r=>t.request(r).then(o=>{if(t.batch!==void 0&&t.batch(o.hits),!t.shouldStop(o))return o.cursor?e({cursor:o.cursor}):e({page:(r.page||0)+1})});return e({})}var zdt=t=>{let e=t.appId,r=Gt.createAuth(t.authMode!==void 0?t.authMode:Gt.AuthMode.WithinHeaders,e,t.apiKey),o=Na.createTransporter({hosts:[{url:`${e}-dsn.algolia.net`,accept:Na.CallEnum.Read},{url:`${e}.algolia.net`,accept:Na.CallEnum.Write}].concat(Gt.shuffle([{url:`${e}-1.algolianet.com`},{url:`${e}-2.algolianet.com`},{url:`${e}-3.algolianet.com`}])),...t,headers:{...r.headers(),"content-type":"application/x-www-form-urlencoded",...t.headers},queryParameters:{...r.queryParameters(),...t.queryParameters}}),a={transporter:o,appId:e,addAlgoliaAgent(n,u){o.userAgent.add({segment:n,version:u})},clearCache(){return Promise.all([o.requestsCache.clear(),o.responsesCache.clear()]).then(()=>{})}};return Gt.addMethods(a,t.methods)};function iye(){return{name:"MissingObjectIDError",message:"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option."}}function sye(){return{name:"ObjectNotFoundError",message:"Object not found."}}function oye(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var Xdt=t=>(e,r)=>{let{queryParameters:o,...a}=r||{},n={acl:e,...o!==void 0?{queryParameters:o}:{}},u=(A,p)=>Gt.createRetryablePromise(h=>z2(t)(A.key,p).catch(E=>{if(E.status!==404)throw E;return h()}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/keys",data:n},a),u)},Zdt=t=>(e,r,o)=>{let a=Na.createMappedRequestOptions(o);return a.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:r}},a)},$dt=t=>(e,r,o)=>t.transporter.write({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:e,cluster:r}},o),emt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:{action:"addEntry",body:[]}}},r),(o,a)=>kC(t)(o.taskID,a)),Pk=t=>(e,r,o)=>{let a=(n,u)=>X2(t)(e,{methods:{waitTask:Zi}}).waitTask(n.taskID,u);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",e),data:{operation:"copy",destination:r}},o),a)},tmt=t=>(e,r,o)=>Pk(t)(e,r,{...o,scope:[xk.Rules]}),rmt=t=>(e,r,o)=>Pk(t)(e,r,{...o,scope:[xk.Settings]}),nmt=t=>(e,r,o)=>Pk(t)(e,r,{...o,scope:[xk.Synonyms]}),imt=t=>(e,r)=>e.method===Ir.MethodEnum.Get?t.transporter.read(e,r):t.transporter.write(e,r),smt=t=>(e,r)=>{let o=(a,n)=>Gt.createRetryablePromise(u=>z2(t)(e,n).then(u).catch(A=>{if(A.status!==404)throw A}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/keys/%s",e)},r),o)},omt=t=>(e,r,o)=>{let a=r.map(n=>({action:"deleteEntry",body:{objectID:n}}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>kC(t)(n.taskID,u))},amt=()=>(t,e)=>{let r=Na.serializeQueryParameters(e),o=Jdt.createHmac("sha256",t).update(r).digest("hex");return Buffer.from(o+r).toString("base64")},z2=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/keys/%s",e)},r),aye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/task/%s",e.toString())},r),lmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"/1/dictionaries/*/settings"},e),cmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/logs"},e),umt=()=>t=>{let e=Buffer.from(t,"base64").toString("ascii"),r=/validUntil=(\d+)/,o=e.match(r);if(o===null)throw oye();return parseInt(o[1],10)-Math.round(new Date().getTime()/1e3)},Amt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/top"},e),fmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/clusters/mapping/%s",e)},r),pmt=t=>e=>{let{retrieveMappings:r,...o}=e||{};return r===!0&&(o.getClusters=!0),t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping/pending"},o)},X2=t=>(e,r={})=>{let o={transporter:t.transporter,appId:t.appId,indexName:e};return Gt.addMethods(o,r.methods)},hmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/keys"},e),gmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters"},e),dmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/indexes"},e),mmt=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:"1/clusters/mapping"},e),ymt=t=>(e,r,o)=>{let a=(n,u)=>X2(t)(e,{methods:{waitTask:Zi}}).waitTask(n.taskID,u);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",e),data:{operation:"move",destination:r}},o),a)},Emt=t=>(e,r)=>{let o=(a,n)=>Promise.all(Object.keys(a.taskID).map(u=>X2(t)(u,{methods:{waitTask:Zi}}).waitTask(a.taskID[u],n)));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:e}},r),o)},Cmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:e}},r),wmt=t=>(e,r)=>{let o=e.map(a=>({...a,params:Na.serializeQueryParameters(a.params||{})}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:o},cacheable:!0},r)},Imt=t=>(e,r)=>Promise.all(e.map(o=>{let{facetName:a,facetQuery:n,...u}=o.params;return X2(t)(o.indexName,{methods:{searchForFacetValues:hye}}).searchForFacetValues(a,n,{...r,...u})})),Bmt=t=>(e,r)=>{let o=Na.createMappedRequestOptions(r);return o.queryParameters["X-Algolia-User-ID"]=e,t.transporter.write({method:Ir.MethodEnum.Delete,path:"1/clusters/mapping"},o)},vmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!0,requests:a}},o),(n,u)=>kC(t)(n.taskID,u))},Dmt=t=>(e,r)=>{let o=(a,n)=>Gt.createRetryablePromise(u=>z2(t)(e,n).catch(A=>{if(A.status!==404)throw A;return u()}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/keys/%s/restore",e)},r),o)},Pmt=t=>(e,r,o)=>{let a=r.map(n=>({action:"addEntry",body:n}));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/batch",e),data:{clearExistingDictionaryEntries:!1,requests:a}},o),(n,u)=>kC(t)(n.taskID,u))},Smt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("/1/dictionaries/%s/search",e),data:{query:r},cacheable:!0},o),xmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:e}},r),bmt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:"/1/dictionaries/*/settings",data:e},r),(o,a)=>kC(t)(o.taskID,a)),kmt=t=>(e,r)=>{let o=Object.assign({},r),{queryParameters:a,...n}=r||{},u=a?{queryParameters:a}:{},A=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],p=E=>Object.keys(o).filter(I=>A.indexOf(I)!==-1).every(I=>E[I]===o[I]),h=(E,I)=>Gt.createRetryablePromise(v=>z2(t)(e,I).then(b=>p(b)?Promise.resolve():v()));return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:Gt.encode("1/keys/%s",e),data:u},n),h)},kC=t=>(e,r)=>Gt.createRetryablePromise(o=>aye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),lye=t=>(e,r)=>{let o=(a,n)=>Zi(t)(a.taskID,n);return Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/batch",t.indexName),data:{requests:e}},r),o)},Qmt=t=>e=>Dk({shouldStop:r=>r.cursor===void 0,...e,request:r=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/browse",t.indexName),data:r},e)}),Fmt=t=>e=>{let r={hitsPerPage:1e3,...e};return Dk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},Tmt=t=>e=>{let r={hitsPerPage:1e3,...e};return Dk({shouldStop:o=>o.hits.length({...a,hits:a.hits.map(n=>(delete n._highlightResult,n))}))}})},Sk=t=>(e,r,o)=>{let{batchSize:a,...n}=o||{},u={taskIDs:[],objectIDs:[]},A=(p=0)=>{let h=[],E;for(E=p;E({action:r,body:I})),n).then(I=>(u.objectIDs=u.objectIDs.concat(I.objectIDs),u.taskIDs.push(I.taskID),E++,A(E)))};return Gt.createWaitablePromise(A(),(p,h)=>Promise.all(p.taskIDs.map(E=>Zi(t)(E,h))))},Rmt=t=>e=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/clear",t.indexName)},e),(r,o)=>Zi(t)(r.taskID,o)),Nmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=Na.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/clear",t.indexName)},a),(n,u)=>Zi(t)(n.taskID,u))},Lmt=t=>e=>{let{forwardToReplicas:r,...o}=e||{},a=Na.createMappedRequestOptions(o);return r&&(a.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/clear",t.indexName)},a),(n,u)=>Zi(t)(n.taskID,u))},Mmt=t=>(e,r)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/deleteByQuery",t.indexName),data:e},r),(o,a)=>Zi(t)(o.taskID,a)),Omt=t=>e=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s",t.indexName)},e),(r,o)=>Zi(t)(r.taskID,o)),Umt=t=>(e,r)=>Gt.createWaitablePromise(cye(t)([e],r).then(o=>({taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),cye=t=>(e,r)=>{let o=e.map(a=>({objectID:a}));return Sk(t)(o,rm.DeleteObject,r)},_mt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s/rules/%s",t.indexName,e)},n),(u,A)=>Zi(t)(u.taskID,A))},Hmt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Delete,path:Gt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},n),(u,A)=>Zi(t)(u.taskID,A))},jmt=t=>e=>uye(t)(e).then(()=>!0).catch(r=>{if(r.status!==404)throw r;return!1}),qmt=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/answers/%s/prediction",t.indexName),data:{query:e,queryLanguages:r},cacheable:!0},o),Gmt=t=>(e,r)=>{let{query:o,paginate:a,...n}=r||{},u=0,A=()=>pye(t)(o||"",{...n,page:u}).then(p=>{for(let[h,E]of Object.entries(p.hits))if(e(E))return{object:E,position:parseInt(h,10),page:u};if(u++,a===!1||u>=p.nbPages)throw sye();return A()});return A()},Ymt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/%s",t.indexName,e)},r),Wmt=()=>(t,e)=>{for(let[r,o]of Object.entries(t.hits))if(o.objectID===e)return parseInt(r,10);return-1},Vmt=t=>(e,r)=>{let{attributesToRetrieve:o,...a}=r||{},n=e.map(u=>({indexName:t.indexName,objectID:u,...o?{attributesToRetrieve:o}:{}}));return t.transporter.read({method:Ir.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:n}},a)},Kmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/rules/%s",t.indexName,e)},r),uye=t=>e=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/settings",t.indexName),data:{getVersion:2}},e),Jmt=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/synonyms/%s",t.indexName,e)},r),Aye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Get,path:Gt.encode("1/indexes/%s/task/%s",t.indexName,e.toString())},r),zmt=t=>(e,r)=>Gt.createWaitablePromise(fye(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),fye=t=>(e,r)=>{let{createIfNotExists:o,...a}=r||{},n=o?rm.PartialUpdateObject:rm.PartialUpdateObjectNoCreate;return Sk(t)(e,n,a)},Xmt=t=>(e,r)=>{let{safe:o,autoGenerateObjectIDIfNotExist:a,batchSize:n,...u}=r||{},A=(C,T,L,U)=>Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/operation",C),data:{operation:L,destination:T}},U),(J,te)=>Zi(t)(J.taskID,te)),p=Math.random().toString(36).substring(7),h=`${t.indexName}_tmp_${p}`,E=YH({appId:t.appId,transporter:t.transporter,indexName:h}),I=[],v=A(t.indexName,h,"copy",{...u,scope:["settings","synonyms","rules"]});I.push(v);let b=(o?v.wait(u):v).then(()=>{let C=E(e,{...u,autoGenerateObjectIDIfNotExist:a,batchSize:n});return I.push(C),o?C.wait(u):C}).then(()=>{let C=A(h,t.indexName,"move",u);return I.push(C),o?C.wait(u):C}).then(()=>Promise.all(I)).then(([C,T,L])=>({objectIDs:T.objectIDs,taskIDs:[C.taskID,...T.taskIDs,L.taskID]}));return Gt.createWaitablePromise(b,(C,T)=>Promise.all(I.map(L=>L.wait(T))))},Zmt=t=>(e,r)=>WH(t)(e,{...r,clearExistingRules:!0}),$mt=t=>(e,r)=>VH(t)(e,{...r,clearExistingSynonyms:!0}),eyt=t=>(e,r)=>Gt.createWaitablePromise(YH(t)([e],r).then(o=>({objectID:o.objectIDs[0],taskID:o.taskIDs[0]})),(o,a)=>Zi(t)(o.taskID,a)),YH=t=>(e,r)=>{let{autoGenerateObjectIDIfNotExist:o,...a}=r||{},n=o?rm.AddObject:rm.UpdateObject;if(n===rm.UpdateObject){for(let u of e)if(u.objectID===void 0)return Gt.createWaitablePromise(Promise.reject(iye()))}return Sk(t)(e,n,a)},tyt=t=>(e,r)=>WH(t)([e],r),WH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingRules:a,...n}=r||{},u=Na.createMappedRequestOptions(n);return o&&(u.queryParameters.forwardToReplicas=1),a&&(u.queryParameters.clearExistingRules=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/batch",t.indexName),data:e},u),(A,p)=>Zi(t)(A.taskID,p))},ryt=t=>(e,r)=>VH(t)([e],r),VH=t=>(e,r)=>{let{forwardToReplicas:o,clearExistingSynonyms:a,replaceExistingSynonyms:n,...u}=r||{},A=Na.createMappedRequestOptions(u);return o&&(A.queryParameters.forwardToReplicas=1),(n||a)&&(A.queryParameters.replaceExistingSynonyms=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/batch",t.indexName),data:e},A),(p,h)=>Zi(t)(p.taskID,h))},pye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/query",t.indexName),data:{query:e},cacheable:!0},r),hye=t=>(e,r,o)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/facets/%s/query",t.indexName,e),data:{facetQuery:r},cacheable:!0},o),gye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/rules/search",t.indexName),data:{query:e}},r),dye=t=>(e,r)=>t.transporter.read({method:Ir.MethodEnum.Post,path:Gt.encode("1/indexes/%s/synonyms/search",t.indexName),data:{query:e}},r),nyt=t=>(e,r)=>{let{forwardToReplicas:o,...a}=r||{},n=Na.createMappedRequestOptions(a);return o&&(n.queryParameters.forwardToReplicas=1),Gt.createWaitablePromise(t.transporter.write({method:Ir.MethodEnum.Put,path:Gt.encode("1/indexes/%s/settings",t.indexName),data:e},n),(u,A)=>Zi(t)(u.taskID,A))},Zi=t=>(e,r)=>Gt.createRetryablePromise(o=>Aye(t)(e,r).then(a=>a.status!=="published"?o():void 0)),iyt={AddObject:"addObject",Analytics:"analytics",Browser:"browse",DeleteIndex:"deleteIndex",DeleteObject:"deleteObject",EditSettings:"editSettings",ListIndexes:"listIndexes",Logs:"logs",Personalization:"personalization",Recommendation:"recommendation",Search:"search",SeeUnretrievableAttributes:"seeUnretrievableAttributes",Settings:"settings",Usage:"usage"},rm={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject",DeleteIndex:"delete",ClearIndex:"clear"},xk={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},syt={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},oyt={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};Ft.ApiKeyACLEnum=iyt;Ft.BatchActionEnum=rm;Ft.ScopeEnum=xk;Ft.StrategyEnum=syt;Ft.SynonymEnum=oyt;Ft.addApiKey=Xdt;Ft.assignUserID=Zdt;Ft.assignUserIDs=$dt;Ft.batch=lye;Ft.browseObjects=Qmt;Ft.browseRules=Fmt;Ft.browseSynonyms=Tmt;Ft.chunkedBatch=Sk;Ft.clearDictionaryEntries=emt;Ft.clearObjects=Rmt;Ft.clearRules=Nmt;Ft.clearSynonyms=Lmt;Ft.copyIndex=Pk;Ft.copyRules=tmt;Ft.copySettings=rmt;Ft.copySynonyms=nmt;Ft.createBrowsablePromise=Dk;Ft.createMissingObjectIDError=iye;Ft.createObjectNotFoundError=sye;Ft.createSearchClient=zdt;Ft.createValidUntilNotFoundError=oye;Ft.customRequest=imt;Ft.deleteApiKey=smt;Ft.deleteBy=Mmt;Ft.deleteDictionaryEntries=omt;Ft.deleteIndex=Omt;Ft.deleteObject=Umt;Ft.deleteObjects=cye;Ft.deleteRule=_mt;Ft.deleteSynonym=Hmt;Ft.exists=jmt;Ft.findAnswers=qmt;Ft.findObject=Gmt;Ft.generateSecuredApiKey=amt;Ft.getApiKey=z2;Ft.getAppTask=aye;Ft.getDictionarySettings=lmt;Ft.getLogs=cmt;Ft.getObject=Ymt;Ft.getObjectPosition=Wmt;Ft.getObjects=Vmt;Ft.getRule=Kmt;Ft.getSecuredApiKeyRemainingValidity=umt;Ft.getSettings=uye;Ft.getSynonym=Jmt;Ft.getTask=Aye;Ft.getTopUserIDs=Amt;Ft.getUserID=fmt;Ft.hasPendingMappings=pmt;Ft.initIndex=X2;Ft.listApiKeys=hmt;Ft.listClusters=gmt;Ft.listIndices=dmt;Ft.listUserIDs=mmt;Ft.moveIndex=ymt;Ft.multipleBatch=Emt;Ft.multipleGetObjects=Cmt;Ft.multipleQueries=wmt;Ft.multipleSearchForFacetValues=Imt;Ft.partialUpdateObject=zmt;Ft.partialUpdateObjects=fye;Ft.removeUserID=Bmt;Ft.replaceAllObjects=Xmt;Ft.replaceAllRules=Zmt;Ft.replaceAllSynonyms=$mt;Ft.replaceDictionaryEntries=vmt;Ft.restoreApiKey=Dmt;Ft.saveDictionaryEntries=Pmt;Ft.saveObject=eyt;Ft.saveObjects=YH;Ft.saveRule=tyt;Ft.saveRules=WH;Ft.saveSynonym=ryt;Ft.saveSynonyms=VH;Ft.search=pye;Ft.searchDictionaryEntries=Smt;Ft.searchForFacetValues=hye;Ft.searchRules=gye;Ft.searchSynonyms=dye;Ft.searchUserIDs=xmt;Ft.setDictionarySettings=bmt;Ft.setSettings=nyt;Ft.updateApiKey=kmt;Ft.waitAppTask=kC;Ft.waitTask=Zi});var Eye=_((YWt,yye)=>{yye.exports=mye()});var Cye=_(bk=>{"use strict";Object.defineProperty(bk,"__esModule",{value:!0});function ayt(){return{debug(t,e){return Promise.resolve()},info(t,e){return Promise.resolve()},error(t,e){return Promise.resolve()}}}var lyt={Debug:1,Info:2,Error:3};bk.LogLevelEnum=lyt;bk.createNullLogger=ayt});var Iye=_((VWt,wye)=>{wye.exports=Cye()});var Pye=_(KH=>{"use strict";Object.defineProperty(KH,"__esModule",{value:!0});var Bye=Be("http"),vye=Be("https"),cyt=Be("url"),Dye={keepAlive:!0},uyt=new Bye.Agent(Dye),Ayt=new vye.Agent(Dye);function fyt({agent:t,httpAgent:e,httpsAgent:r,requesterOptions:o={}}={}){let a=e||t||uyt,n=r||t||Ayt;return{send(u){return new Promise(A=>{let p=cyt.parse(u.url),h=p.query===null?p.pathname:`${p.pathname}?${p.query}`,E={...o,agent:p.protocol==="https:"?n:a,hostname:p.hostname,path:h,method:u.method,headers:{...o&&o.headers?o.headers:{},...u.headers},...p.port!==void 0?{port:p.port||""}:{}},I=(p.protocol==="https:"?vye:Bye).request(E,T=>{let L=[];T.on("data",U=>{L=L.concat(U)}),T.on("end",()=>{clearTimeout(b),clearTimeout(C),A({status:T.statusCode||0,content:Buffer.concat(L).toString(),isTimedOut:!1})})}),v=(T,L)=>setTimeout(()=>{I.abort(),A({status:0,content:L,isTimedOut:!0})},T*1e3),b=v(u.connectTimeout,"Connection timeout"),C;I.on("error",T=>{clearTimeout(b),clearTimeout(C),A({status:0,content:T.message,isTimedOut:!1})}),I.once("response",()=>{clearTimeout(b),C=v(u.responseTimeout,"Socket timeout")}),u.data!==void 0&&I.write(u.data),I.end()})},destroy(){return a.destroy(),n.destroy(),Promise.resolve()}}}KH.createNodeHttpRequester=fyt});var xye=_((JWt,Sye)=>{Sye.exports=Pye()});var Fye=_((zWt,Qye)=>{"use strict";var bye=Pme(),pyt=bme(),QC=$me(),zH=G2(),JH=nye(),Ut=Eye(),hyt=Iye(),gyt=xye(),dyt=V2();function kye(t,e,r){let o={appId:t,apiKey:e,timeouts:{connect:2,read:5,write:30},requester:gyt.createNodeHttpRequester(),logger:hyt.createNullLogger(),responsesCache:bye.createNullCache(),requestsCache:bye.createNullCache(),hostsCache:pyt.createInMemoryCache(),userAgent:dyt.createUserAgent(zH.version).add({segment:"Node.js",version:process.versions.node})},a={...o,...r},n=()=>u=>JH.createPersonalizationClient({...o,...u,methods:{getPersonalizationStrategy:JH.getPersonalizationStrategy,setPersonalizationStrategy:JH.setPersonalizationStrategy}});return Ut.createSearchClient({...a,methods:{search:Ut.multipleQueries,searchForFacetValues:Ut.multipleSearchForFacetValues,multipleBatch:Ut.multipleBatch,multipleGetObjects:Ut.multipleGetObjects,multipleQueries:Ut.multipleQueries,copyIndex:Ut.copyIndex,copySettings:Ut.copySettings,copyRules:Ut.copyRules,copySynonyms:Ut.copySynonyms,moveIndex:Ut.moveIndex,listIndices:Ut.listIndices,getLogs:Ut.getLogs,listClusters:Ut.listClusters,multipleSearchForFacetValues:Ut.multipleSearchForFacetValues,getApiKey:Ut.getApiKey,addApiKey:Ut.addApiKey,listApiKeys:Ut.listApiKeys,updateApiKey:Ut.updateApiKey,deleteApiKey:Ut.deleteApiKey,restoreApiKey:Ut.restoreApiKey,assignUserID:Ut.assignUserID,assignUserIDs:Ut.assignUserIDs,getUserID:Ut.getUserID,searchUserIDs:Ut.searchUserIDs,listUserIDs:Ut.listUserIDs,getTopUserIDs:Ut.getTopUserIDs,removeUserID:Ut.removeUserID,hasPendingMappings:Ut.hasPendingMappings,generateSecuredApiKey:Ut.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:Ut.getSecuredApiKeyRemainingValidity,destroy:zH.destroy,clearDictionaryEntries:Ut.clearDictionaryEntries,deleteDictionaryEntries:Ut.deleteDictionaryEntries,getDictionarySettings:Ut.getDictionarySettings,getAppTask:Ut.getAppTask,replaceDictionaryEntries:Ut.replaceDictionaryEntries,saveDictionaryEntries:Ut.saveDictionaryEntries,searchDictionaryEntries:Ut.searchDictionaryEntries,setDictionarySettings:Ut.setDictionarySettings,waitAppTask:Ut.waitAppTask,customRequest:Ut.customRequest,initIndex:u=>A=>Ut.initIndex(u)(A,{methods:{batch:Ut.batch,delete:Ut.deleteIndex,findAnswers:Ut.findAnswers,getObject:Ut.getObject,getObjects:Ut.getObjects,saveObject:Ut.saveObject,saveObjects:Ut.saveObjects,search:Ut.search,searchForFacetValues:Ut.searchForFacetValues,waitTask:Ut.waitTask,setSettings:Ut.setSettings,getSettings:Ut.getSettings,partialUpdateObject:Ut.partialUpdateObject,partialUpdateObjects:Ut.partialUpdateObjects,deleteObject:Ut.deleteObject,deleteObjects:Ut.deleteObjects,deleteBy:Ut.deleteBy,clearObjects:Ut.clearObjects,browseObjects:Ut.browseObjects,getObjectPosition:Ut.getObjectPosition,findObject:Ut.findObject,exists:Ut.exists,saveSynonym:Ut.saveSynonym,saveSynonyms:Ut.saveSynonyms,getSynonym:Ut.getSynonym,searchSynonyms:Ut.searchSynonyms,browseSynonyms:Ut.browseSynonyms,deleteSynonym:Ut.deleteSynonym,clearSynonyms:Ut.clearSynonyms,replaceAllObjects:Ut.replaceAllObjects,replaceAllSynonyms:Ut.replaceAllSynonyms,searchRules:Ut.searchRules,getRule:Ut.getRule,deleteRule:Ut.deleteRule,saveRule:Ut.saveRule,saveRules:Ut.saveRules,replaceAllRules:Ut.replaceAllRules,browseRules:Ut.browseRules,clearRules:Ut.clearRules}}),initAnalytics:()=>u=>QC.createAnalyticsClient({...o,...u,methods:{addABTest:QC.addABTest,getABTest:QC.getABTest,getABTests:QC.getABTests,stopABTest:QC.stopABTest,deleteABTest:QC.deleteABTest}}),initPersonalization:n,initRecommendation:()=>u=>(a.logger.info("The `initRecommendation` method is deprecated. Use `initPersonalization` instead."),n()(u))}})}kye.version=zH.version;Qye.exports=kye});var ZH=_((XWt,XH)=>{var Tye=Fye();XH.exports=Tye;XH.exports.default=Tye});var t6=_(($Wt,Lye)=>{"use strict";var Nye=Object.getOwnPropertySymbols,yyt=Object.prototype.hasOwnProperty,Eyt=Object.prototype.propertyIsEnumerable;function Cyt(t){if(t==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function wyt(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de",Object.getOwnPropertyNames(t)[0]==="5")return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;var o=Object.getOwnPropertyNames(e).map(function(n){return e[n]});if(o.join("")!=="0123456789")return!1;var a={};return"abcdefghijklmnopqrst".split("").forEach(function(n){a[n]=n}),Object.keys(Object.assign({},a)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}Lye.exports=wyt()?Object.assign:function(t,e){for(var r,o=Cyt(t),a,n=1;n{"use strict";var o6=t6(),$c=typeof Symbol=="function"&&Symbol.for,Z2=$c?Symbol.for("react.element"):60103,Iyt=$c?Symbol.for("react.portal"):60106,Byt=$c?Symbol.for("react.fragment"):60107,vyt=$c?Symbol.for("react.strict_mode"):60108,Dyt=$c?Symbol.for("react.profiler"):60114,Pyt=$c?Symbol.for("react.provider"):60109,Syt=$c?Symbol.for("react.context"):60110,xyt=$c?Symbol.for("react.forward_ref"):60112,byt=$c?Symbol.for("react.suspense"):60113,kyt=$c?Symbol.for("react.memo"):60115,Qyt=$c?Symbol.for("react.lazy"):60116,Mye=typeof Symbol=="function"&&Symbol.iterator;function $2(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,r=1;rkk.length&&kk.push(t)}function n6(t,e,r,o){var a=typeof t;(a==="undefined"||a==="boolean")&&(t=null);var n=!1;if(t===null)n=!0;else switch(a){case"string":case"number":n=!0;break;case"object":switch(t.$$typeof){case Z2:case Iyt:n=!0}}if(n)return r(o,t,e===""?"."+r6(t,0):e),1;if(n=0,e=e===""?".":e+":",Array.isArray(t))for(var u=0;u{"use strict";Jye.exports=Kye()});var f6=_((rVt,A6)=>{"use strict";var An=A6.exports;A6.exports.default=An;var Ln="\x1B[",eB="\x1B]",TC="\x07",Qk=";",zye=process.env.TERM_PROGRAM==="Apple_Terminal";An.cursorTo=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");return typeof e!="number"?Ln+(t+1)+"G":Ln+(e+1)+";"+(t+1)+"H"};An.cursorMove=(t,e)=>{if(typeof t!="number")throw new TypeError("The `x` argument is required");let r="";return t<0?r+=Ln+-t+"D":t>0&&(r+=Ln+t+"C"),e<0?r+=Ln+-e+"A":e>0&&(r+=Ln+e+"B"),r};An.cursorUp=(t=1)=>Ln+t+"A";An.cursorDown=(t=1)=>Ln+t+"B";An.cursorForward=(t=1)=>Ln+t+"C";An.cursorBackward=(t=1)=>Ln+t+"D";An.cursorLeft=Ln+"G";An.cursorSavePosition=zye?"\x1B7":Ln+"s";An.cursorRestorePosition=zye?"\x1B8":Ln+"u";An.cursorGetPosition=Ln+"6n";An.cursorNextLine=Ln+"E";An.cursorPrevLine=Ln+"F";An.cursorHide=Ln+"?25l";An.cursorShow=Ln+"?25h";An.eraseLines=t=>{let e="";for(let r=0;r[eB,"8",Qk,Qk,e,TC,t,eB,"8",Qk,Qk,TC].join("");An.image=(t,e={})=>{let r=`${eB}1337;File=inline=1`;return e.width&&(r+=`;width=${e.width}`),e.height&&(r+=`;height=${e.height}`),e.preserveAspectRatio===!1&&(r+=";preserveAspectRatio=0"),r+":"+t.toString("base64")+TC};An.iTerm={setCwd:(t=process.cwd())=>`${eB}50;CurrentDir=${t}${TC}`,annotation:(t,e={})=>{let r=`${eB}1337;`,o=typeof e.x<"u",a=typeof e.y<"u";if((o||a)&&!(o&&a&&typeof e.length<"u"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return t=t.replace(/\|/g,""),r+=e.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",e.length>0?r+=(o?[t,e.length,e.x,e.y]:[e.length,t]).join("|"):r+=t,r+TC}}});var Zye=_((nVt,p6)=>{"use strict";var Xye=(t,e)=>{for(let r of Reflect.ownKeys(e))Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r));return t};p6.exports=Xye;p6.exports.default=Xye});var eEe=_((iVt,Tk)=>{"use strict";var Myt=Zye(),Fk=new WeakMap,$ye=(t,e={})=>{if(typeof t!="function")throw new TypeError("Expected a function");let r,o=0,a=t.displayName||t.name||"",n=function(...u){if(Fk.set(n,++o),o===1)r=t.apply(this,u),t=null;else if(e.throw===!0)throw new Error(`Function \`${a}\` can only be called once`);return r};return Myt(n,t),Fk.set(n,o),n};Tk.exports=$ye;Tk.exports.default=$ye;Tk.exports.callCount=t=>{if(!Fk.has(t))throw new Error(`The given function \`${t.name}\` is not wrapped by the \`onetime\` package`);return Fk.get(t)}});var tEe=_((sVt,Rk)=>{Rk.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&Rk.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&Rk.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var d6=_((oVt,LC)=>{var Ei=global.process,nm=function(t){return t&&typeof t=="object"&&typeof t.removeListener=="function"&&typeof t.emit=="function"&&typeof t.reallyExit=="function"&&typeof t.listeners=="function"&&typeof t.kill=="function"&&typeof t.pid=="number"&&typeof t.on=="function"};nm(Ei)?(rEe=Be("assert"),RC=tEe(),nEe=/^win/i.test(Ei.platform),tB=Be("events"),typeof tB!="function"&&(tB=tB.EventEmitter),Ei.__signal_exit_emitter__?Rs=Ei.__signal_exit_emitter__:(Rs=Ei.__signal_exit_emitter__=new tB,Rs.count=0,Rs.emitted={}),Rs.infinite||(Rs.setMaxListeners(1/0),Rs.infinite=!0),LC.exports=function(t,e){if(!nm(global.process))return function(){};rEe.equal(typeof t,"function","a callback must be provided for exit handler"),NC===!1&&h6();var r="exit";e&&e.alwaysLast&&(r="afterexit");var o=function(){Rs.removeListener(r,t),Rs.listeners("exit").length===0&&Rs.listeners("afterexit").length===0&&Nk()};return Rs.on(r,t),o},Nk=function(){!NC||!nm(global.process)||(NC=!1,RC.forEach(function(e){try{Ei.removeListener(e,Lk[e])}catch{}}),Ei.emit=Mk,Ei.reallyExit=g6,Rs.count-=1)},LC.exports.unload=Nk,im=function(e,r,o){Rs.emitted[e]||(Rs.emitted[e]=!0,Rs.emit(e,r,o))},Lk={},RC.forEach(function(t){Lk[t]=function(){if(!!nm(global.process)){var r=Ei.listeners(t);r.length===Rs.count&&(Nk(),im("exit",null,t),im("afterexit",null,t),nEe&&t==="SIGHUP"&&(t="SIGINT"),Ei.kill(Ei.pid,t))}}}),LC.exports.signals=function(){return RC},NC=!1,h6=function(){NC||!nm(global.process)||(NC=!0,Rs.count+=1,RC=RC.filter(function(e){try{return Ei.on(e,Lk[e]),!0}catch{return!1}}),Ei.emit=sEe,Ei.reallyExit=iEe)},LC.exports.load=h6,g6=Ei.reallyExit,iEe=function(e){!nm(global.process)||(Ei.exitCode=e||0,im("exit",Ei.exitCode,null),im("afterexit",Ei.exitCode,null),g6.call(Ei,Ei.exitCode))},Mk=Ei.emit,sEe=function(e,r){if(e==="exit"&&nm(global.process)){r!==void 0&&(Ei.exitCode=r);var o=Mk.apply(this,arguments);return im("exit",Ei.exitCode,null),im("afterexit",Ei.exitCode,null),o}else return Mk.apply(this,arguments)}):LC.exports=function(){return function(){}};var rEe,RC,nEe,tB,Rs,Nk,im,Lk,NC,h6,g6,iEe,Mk,sEe});var aEe=_((aVt,oEe)=>{"use strict";var Oyt=eEe(),Uyt=d6();oEe.exports=Oyt(()=>{Uyt(()=>{process.stderr.write("\x1B[?25h")},{alwaysLast:!0})})});var m6=_(MC=>{"use strict";var _yt=aEe(),Ok=!1;MC.show=(t=process.stderr)=>{!t.isTTY||(Ok=!1,t.write("\x1B[?25h"))};MC.hide=(t=process.stderr)=>{!t.isTTY||(_yt(),Ok=!0,t.write("\x1B[?25l"))};MC.toggle=(t,e)=>{t!==void 0&&(Ok=t),Ok?MC.show(e):MC.hide(e)}});var AEe=_(rB=>{"use strict";var uEe=rB&&rB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(rB,"__esModule",{value:!0});var lEe=uEe(f6()),cEe=uEe(m6()),Hyt=(t,{showCursor:e=!1}={})=>{let r=0,o="",a=!1,n=u=>{!e&&!a&&(cEe.default.hide(),a=!0);let A=u+` +`;A!==o&&(o=A,t.write(lEe.default.eraseLines(r)+A),r=A.split(` +`).length)};return n.clear=()=>{t.write(lEe.default.eraseLines(r)),o="",r=0},n.done=()=>{o="",r=0,e||(cEe.default.show(),a=!1)},n};rB.default={create:Hyt}});var fEe=_((uVt,jyt)=>{jyt.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY_BUILD_BASE",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}}]});var gEe=_(gl=>{"use strict";var hEe=fEe(),pA=process.env;Object.defineProperty(gl,"_vendors",{value:hEe.map(function(t){return t.constant})});gl.name=null;gl.isPR=null;hEe.forEach(function(t){var e=Array.isArray(t.env)?t.env:[t.env],r=e.every(function(o){return pEe(o)});if(gl[t.constant]=r,r)switch(gl.name=t.name,typeof t.pr){case"string":gl.isPR=!!pA[t.pr];break;case"object":"env"in t.pr?gl.isPR=t.pr.env in pA&&pA[t.pr.env]!==t.pr.ne:"any"in t.pr?gl.isPR=t.pr.any.some(function(o){return!!pA[o]}):gl.isPR=pEe(t.pr);break;default:gl.isPR=null}});gl.isCI=!!(pA.CI||pA.CONTINUOUS_INTEGRATION||pA.BUILD_NUMBER||pA.RUN_ID||gl.name);function pEe(t){return typeof t=="string"?!!pA[t]:Object.keys(t).every(function(e){return pA[e]===t[e]})}});var mEe=_((fVt,dEe)=>{"use strict";dEe.exports=gEe().isCI});var EEe=_((pVt,yEe)=>{"use strict";var qyt=t=>{let e=new Set;do for(let r of Reflect.ownKeys(t))e.add([t,r]);while((t=Reflect.getPrototypeOf(t))&&t!==Object.prototype);return e};yEe.exports=(t,{include:e,exclude:r}={})=>{let o=a=>{let n=u=>typeof u=="string"?a===u:u.test(a);return e?e.some(n):r?!r.some(n):!0};for(let[a,n]of qyt(t.constructor.prototype)){if(n==="constructor"||!o(n))continue;let u=Reflect.getOwnPropertyDescriptor(a,n);u&&typeof u.value=="function"&&(t[n]=t[n].bind(t))}return t}});var PEe=_(kn=>{"use strict";Object.defineProperty(kn,"__esModule",{value:!0});var UC,sB,qk,Gk,v6;typeof window>"u"||typeof MessageChannel!="function"?(OC=null,y6=null,E6=function(){if(OC!==null)try{var t=kn.unstable_now();OC(!0,t),OC=null}catch(e){throw setTimeout(E6,0),e}},CEe=Date.now(),kn.unstable_now=function(){return Date.now()-CEe},UC=function(t){OC!==null?setTimeout(UC,0,t):(OC=t,setTimeout(E6,0))},sB=function(t,e){y6=setTimeout(t,e)},qk=function(){clearTimeout(y6)},Gk=function(){return!1},v6=kn.unstable_forceFrameRate=function(){}):(Uk=window.performance,C6=window.Date,wEe=window.setTimeout,IEe=window.clearTimeout,typeof console<"u"&&(BEe=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),typeof BEe!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")),typeof Uk=="object"&&typeof Uk.now=="function"?kn.unstable_now=function(){return Uk.now()}:(vEe=C6.now(),kn.unstable_now=function(){return C6.now()-vEe}),nB=!1,iB=null,_k=-1,w6=5,I6=0,Gk=function(){return kn.unstable_now()>=I6},v6=function(){},kn.unstable_forceFrameRate=function(t){0>t||125jk(u,r))p!==void 0&&0>jk(p,u)?(t[o]=p,t[A]=r,o=A):(t[o]=u,t[n]=r,o=n);else if(p!==void 0&&0>jk(p,r))t[o]=p,t[A]=r,o=A;else break e}}return e}return null}function jk(t,e){var r=t.sortIndex-e.sortIndex;return r!==0?r:t.id-e.id}var eu=[],m0=[],Gyt=1,na=null,Lo=3,Wk=!1,sm=!1,oB=!1;function Vk(t){for(var e=nc(m0);e!==null;){if(e.callback===null)Yk(m0);else if(e.startTime<=t)Yk(m0),e.sortIndex=e.expirationTime,D6(eu,e);else break;e=nc(m0)}}function P6(t){if(oB=!1,Vk(t),!sm)if(nc(eu)!==null)sm=!0,UC(S6);else{var e=nc(m0);e!==null&&sB(P6,e.startTime-t)}}function S6(t,e){sm=!1,oB&&(oB=!1,qk()),Wk=!0;var r=Lo;try{for(Vk(e),na=nc(eu);na!==null&&(!(na.expirationTime>e)||t&&!Gk());){var o=na.callback;if(o!==null){na.callback=null,Lo=na.priorityLevel;var a=o(na.expirationTime<=e);e=kn.unstable_now(),typeof a=="function"?na.callback=a:na===nc(eu)&&Yk(eu),Vk(e)}else Yk(eu);na=nc(eu)}if(na!==null)var n=!0;else{var u=nc(m0);u!==null&&sB(P6,u.startTime-e),n=!1}return n}finally{na=null,Lo=r,Wk=!1}}function DEe(t){switch(t){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var Yyt=v6;kn.unstable_ImmediatePriority=1;kn.unstable_UserBlockingPriority=2;kn.unstable_NormalPriority=3;kn.unstable_IdlePriority=5;kn.unstable_LowPriority=4;kn.unstable_runWithPriority=function(t,e){switch(t){case 1:case 2:case 3:case 4:case 5:break;default:t=3}var r=Lo;Lo=t;try{return e()}finally{Lo=r}};kn.unstable_next=function(t){switch(Lo){case 1:case 2:case 3:var e=3;break;default:e=Lo}var r=Lo;Lo=e;try{return t()}finally{Lo=r}};kn.unstable_scheduleCallback=function(t,e,r){var o=kn.unstable_now();if(typeof r=="object"&&r!==null){var a=r.delay;a=typeof a=="number"&&0o?(t.sortIndex=a,D6(m0,t),nc(eu)===null&&t===nc(m0)&&(oB?qk():oB=!0,sB(P6,a-o))):(t.sortIndex=r,D6(eu,t),sm||Wk||(sm=!0,UC(S6))),t};kn.unstable_cancelCallback=function(t){t.callback=null};kn.unstable_wrapCallback=function(t){var e=Lo;return function(){var r=Lo;Lo=e;try{return t.apply(this,arguments)}finally{Lo=r}}};kn.unstable_getCurrentPriorityLevel=function(){return Lo};kn.unstable_shouldYield=function(){var t=kn.unstable_now();Vk(t);var e=nc(eu);return e!==na&&na!==null&&e!==null&&e.callback!==null&&e.startTime<=t&&e.expirationTime{"use strict";SEe.exports=PEe()});var xEe=_((dVt,aB)=>{aB.exports=function t(e){"use strict";var r=t6(),o=sn(),a=x6();function n(P){for(var D="https://reactjs.org/docs/error-decoder.html?invariant="+P,R=1;Rao||(P.current=yl[ao],yl[ao]=null,ao--)}function Mn(P,D){ao++,yl[ao]=P.current,P.current=D}var Ni={},On={current:Ni},_i={current:!1},tr=Ni;function Me(P,D){var R=P.type.contextTypes;if(!R)return Ni;var j=P.stateNode;if(j&&j.__reactInternalMemoizedUnmaskedChildContext===D)return j.__reactInternalMemoizedMaskedChildContext;var Y={},fe;for(fe in R)Y[fe]=D[fe];return j&&(P=P.stateNode,P.__reactInternalMemoizedUnmaskedChildContext=D,P.__reactInternalMemoizedMaskedChildContext=Y),Y}function ii(P){return P=P.childContextTypes,P!=null}function Oa(P){Kn(_i,P),Kn(On,P)}function hr(P){Kn(_i,P),Kn(On,P)}function uc(P,D,R){if(On.current!==Ni)throw Error(n(168));Mn(On,D,P),Mn(_i,R,P)}function uu(P,D,R){var j=P.stateNode;if(P=D.childContextTypes,typeof j.getChildContext!="function")return R;j=j.getChildContext();for(var Y in j)if(!(Y in P))throw Error(n(108,ae(D)||"Unknown",Y));return r({},R,{},j)}function Ac(P){var D=P.stateNode;return D=D&&D.__reactInternalMemoizedMergedChildContext||Ni,tr=On.current,Mn(On,D,P),Mn(_i,_i.current,P),!0}function El(P,D,R){var j=P.stateNode;if(!j)throw Error(n(169));R?(D=uu(P,D,tr),j.__reactInternalMemoizedMergedChildContext=D,Kn(_i,P),Kn(On,P),Mn(On,D,P)):Kn(_i,P),Mn(_i,R,P)}var vA=a.unstable_runWithPriority,Au=a.unstable_scheduleCallback,Ce=a.unstable_cancelCallback,Tt=a.unstable_shouldYield,fc=a.unstable_requestPaint,Hi=a.unstable_now,fu=a.unstable_getCurrentPriorityLevel,Yt=a.unstable_ImmediatePriority,Cl=a.unstable_UserBlockingPriority,DA=a.unstable_NormalPriority,cp=a.unstable_LowPriority,pc=a.unstable_IdlePriority,PA={},Qn=fc!==void 0?fc:function(){},hi=null,hc=null,SA=!1,sa=Hi(),Li=1e4>sa?Hi:function(){return Hi()-sa};function _o(){switch(fu()){case Yt:return 99;case Cl:return 98;case DA:return 97;case cp:return 96;case pc:return 95;default:throw Error(n(332))}}function Ze(P){switch(P){case 99:return Yt;case 98:return Cl;case 97:return DA;case 96:return cp;case 95:return pc;default:throw Error(n(332))}}function lo(P,D){return P=Ze(P),vA(P,D)}function gc(P,D,R){return P=Ze(P),Au(P,D,R)}function pu(P){return hi===null?(hi=[P],hc=Au(Yt,hu)):hi.push(P),PA}function ji(){if(hc!==null){var P=hc;hc=null,Ce(P)}hu()}function hu(){if(!SA&&hi!==null){SA=!0;var P=0;try{var D=hi;lo(99,function(){for(;P=D&&(qo=!0),P.firstContext=null)}function ms(P,D){if(aa!==P&&D!==!1&&D!==0)if((typeof D!="number"||D===1073741823)&&(aa=P,D=1073741823),D={context:P,observedBits:D,next:null},Us===null){if(co===null)throw Error(n(308));Us=D,co.dependencies={expirationTime:0,firstContext:D,responders:null}}else Us=Us.next=D;return x?P._currentValue:P._currentValue2}var _s=!1;function Un(P){return{baseState:P,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Pn(P){return{baseState:P.baseState,firstUpdate:P.firstUpdate,lastUpdate:P.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function ys(P,D){return{expirationTime:P,suspenseConfig:D,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function We(P,D){P.lastUpdate===null?P.firstUpdate=P.lastUpdate=D:(P.lastUpdate.next=D,P.lastUpdate=D)}function tt(P,D){var R=P.alternate;if(R===null){var j=P.updateQueue,Y=null;j===null&&(j=P.updateQueue=Un(P.memoizedState))}else j=P.updateQueue,Y=R.updateQueue,j===null?Y===null?(j=P.updateQueue=Un(P.memoizedState),Y=R.updateQueue=Un(R.memoizedState)):j=P.updateQueue=Pn(Y):Y===null&&(Y=R.updateQueue=Pn(j));Y===null||j===Y?We(j,D):j.lastUpdate===null||Y.lastUpdate===null?(We(j,D),We(Y,D)):(We(j,D),Y.lastUpdate=D)}function It(P,D){var R=P.updateQueue;R=R===null?P.updateQueue=Un(P.memoizedState):nr(P,R),R.lastCapturedUpdate===null?R.firstCapturedUpdate=R.lastCapturedUpdate=D:(R.lastCapturedUpdate.next=D,R.lastCapturedUpdate=D)}function nr(P,D){var R=P.alternate;return R!==null&&D===R.updateQueue&&(D=P.updateQueue=Pn(D)),D}function $(P,D,R,j,Y,fe){switch(R.tag){case 1:return P=R.payload,typeof P=="function"?P.call(fe,j,Y):P;case 3:P.effectTag=P.effectTag&-4097|64;case 0:if(P=R.payload,Y=typeof P=="function"?P.call(fe,j,Y):P,Y==null)break;return r({},j,Y);case 2:_s=!0}return j}function me(P,D,R,j,Y){_s=!1,D=nr(P,D);for(var fe=D.baseState,ve=null,vt=0,wt=D.firstUpdate,bt=fe;wt!==null;){var _r=wt.expirationTime;_rxn?(ai=Fr,Fr=null):ai=Fr.sibling;var en=di(rt,Fr,At[xn],Wt);if(en===null){Fr===null&&(Fr=ai);break}P&&Fr&&en.alternate===null&&D(rt,Fr),Ke=fe(en,Ke,xn),Sn===null?vr=en:Sn.sibling=en,Sn=en,Fr=ai}if(xn===At.length)return R(rt,Fr),vr;if(Fr===null){for(;xnxn?(ai=Fr,Fr=null):ai=Fr.sibling;var ho=di(rt,Fr,en.value,Wt);if(ho===null){Fr===null&&(Fr=ai);break}P&&Fr&&ho.alternate===null&&D(rt,Fr),Ke=fe(ho,Ke,xn),Sn===null?vr=ho:Sn.sibling=ho,Sn=ho,Fr=ai}if(en.done)return R(rt,Fr),vr;if(Fr===null){for(;!en.done;xn++,en=At.next())en=is(rt,en.value,Wt),en!==null&&(Ke=fe(en,Ke,xn),Sn===null?vr=en:Sn.sibling=en,Sn=en);return vr}for(Fr=j(rt,Fr);!en.done;xn++,en=At.next())en=po(Fr,rt,xn,en.value,Wt),en!==null&&(P&&en.alternate!==null&&Fr.delete(en.key===null?xn:en.key),Ke=fe(en,Ke,xn),Sn===null?vr=en:Sn.sibling=en,Sn=en);return P&&Fr.forEach(function(PF){return D(rt,PF)}),vr}return function(rt,Ke,At,Wt){var vr=typeof At=="object"&&At!==null&&At.type===E&&At.key===null;vr&&(At=At.props.children);var Sn=typeof At=="object"&&At!==null;if(Sn)switch(At.$$typeof){case p:e:{for(Sn=At.key,vr=Ke;vr!==null;){if(vr.key===Sn)if(vr.tag===7?At.type===E:vr.elementType===At.type){R(rt,vr.sibling),Ke=Y(vr,At.type===E?At.props.children:At.props,Wt),Ke.ref=kA(rt,vr,At),Ke.return=rt,rt=Ke;break e}else{R(rt,vr);break}else D(rt,vr);vr=vr.sibling}At.type===E?(Ke=xu(At.props.children,rt.mode,Wt,At.key),Ke.return=rt,rt=Ke):(Wt=Hm(At.type,At.key,At.props,null,rt.mode,Wt),Wt.ref=kA(rt,Ke,At),Wt.return=rt,rt=Wt)}return ve(rt);case h:e:{for(vr=At.key;Ke!==null;){if(Ke.key===vr)if(Ke.tag===4&&Ke.stateNode.containerInfo===At.containerInfo&&Ke.stateNode.implementation===At.implementation){R(rt,Ke.sibling),Ke=Y(Ke,At.children||[],Wt),Ke.return=rt,rt=Ke;break e}else{R(rt,Ke);break}else D(rt,Ke);Ke=Ke.sibling}Ke=Fw(At,rt.mode,Wt),Ke.return=rt,rt=Ke}return ve(rt)}if(typeof At=="string"||typeof At=="number")return At=""+At,Ke!==null&&Ke.tag===6?(R(rt,Ke.sibling),Ke=Y(Ke,At,Wt),Ke.return=rt,rt=Ke):(R(rt,Ke),Ke=Qw(At,rt.mode,Wt),Ke.return=rt,rt=Ke),ve(rt);if(bA(At))return VA(rt,Ke,At,Wt);if(Ae(At))return Yo(rt,Ke,At,Wt);if(Sn&&up(rt,At),typeof At>"u"&&!vr)switch(rt.tag){case 1:case 0:throw rt=rt.type,Error(n(152,rt.displayName||rt.name||"Component"))}return R(rt,Ke)}}var gu=ng(!0),ig=ng(!1),du={},uo={current:du},QA={current:du},mc={current:du};function ca(P){if(P===du)throw Error(n(174));return P}function sg(P,D){Mn(mc,D,P),Mn(QA,P,P),Mn(uo,du,P),D=ne(D),Kn(uo,P),Mn(uo,D,P)}function yc(P){Kn(uo,P),Kn(QA,P),Kn(mc,P)}function Pm(P){var D=ca(mc.current),R=ca(uo.current);D=ee(R,P.type,D),R!==D&&(Mn(QA,P,P),Mn(uo,D,P))}function og(P){QA.current===P&&(Kn(uo,P),Kn(QA,P))}var $n={current:0};function Ap(P){for(var D=P;D!==null;){if(D.tag===13){var R=D.memoizedState;if(R!==null&&(R=R.dehydrated,R===null||Ls(R)||so(R)))return D}else if(D.tag===19&&D.memoizedProps.revealOrder!==void 0){if((D.effectTag&64)!==0)return D}else if(D.child!==null){D.child.return=D,D=D.child;continue}if(D===P)break;for(;D.sibling===null;){if(D.return===null||D.return===P)return null;D=D.return}D.sibling.return=D.return,D=D.sibling}return null}function ag(P,D){return{responder:P,props:D}}var FA=u.ReactCurrentDispatcher,Hs=u.ReactCurrentBatchConfig,mu=0,Ha=null,Gi=null,ua=null,yu=null,Es=null,Ec=null,Cc=0,G=null,Dt=0,wl=!1,bi=null,wc=0;function ct(){throw Error(n(321))}function Eu(P,D){if(D===null)return!1;for(var R=0;RCc&&(Cc=_r,_m(Cc))):(Pw(_r,wt.suspenseConfig),fe=wt.eagerReducer===P?wt.eagerState:P(fe,wt.action)),ve=wt,wt=wt.next}while(wt!==null&&wt!==j);bt||(vt=ve,Y=fe),hs(fe,D.memoizedState)||(qo=!0),D.memoizedState=fe,D.baseUpdate=vt,D.baseState=Y,R.lastRenderedState=fe}return[D.memoizedState,R.dispatch]}function cg(P){var D=TA();return typeof P=="function"&&(P=P()),D.memoizedState=D.baseState=P,P=D.queue={last:null,dispatch:null,lastRenderedReducer:Br,lastRenderedState:P},P=P.dispatch=hg.bind(null,Ha,P),[D.memoizedState,P]}function ug(P){return Cs(Br,P)}function Ag(P,D,R,j){return P={tag:P,create:D,destroy:R,deps:j,next:null},G===null?(G={lastEffect:null},G.lastEffect=P.next=P):(D=G.lastEffect,D===null?G.lastEffect=P.next=P:(R=D.next,D.next=P,P.next=R,G.lastEffect=P)),P}function pp(P,D,R,j){var Y=TA();Dt|=P,Y.memoizedState=Ag(D,R,void 0,j===void 0?null:j)}function Ic(P,D,R,j){var Y=fp();j=j===void 0?null:j;var fe=void 0;if(Gi!==null){var ve=Gi.memoizedState;if(fe=ve.destroy,j!==null&&Eu(j,ve.deps)){Ag(0,R,fe,j);return}}Dt|=P,Y.memoizedState=Ag(D,R,fe,j)}function Ct(P,D){return pp(516,192,P,D)}function Sm(P,D){return Ic(516,192,P,D)}function fg(P,D){if(typeof D=="function")return P=P(),D(P),function(){D(null)};if(D!=null)return P=P(),D.current=P,function(){D.current=null}}function pg(){}function Cu(P,D){return TA().memoizedState=[P,D===void 0?null:D],P}function xm(P,D){var R=fp();D=D===void 0?null:D;var j=R.memoizedState;return j!==null&&D!==null&&Eu(D,j[1])?j[0]:(R.memoizedState=[P,D],P)}function hg(P,D,R){if(!(25>wc))throw Error(n(301));var j=P.alternate;if(P===Ha||j!==null&&j===Ha)if(wl=!0,P={expirationTime:mu,suspenseConfig:null,action:R,eagerReducer:null,eagerState:null,next:null},bi===null&&(bi=new Map),R=bi.get(D),R===void 0)bi.set(D,P);else{for(D=R;D.next!==null;)D=D.next;D.next=P}else{var Y=ga(),fe=pt.suspense;Y=HA(Y,P,fe),fe={expirationTime:Y,suspenseConfig:fe,action:R,eagerReducer:null,eagerState:null,next:null};var ve=D.last;if(ve===null)fe.next=fe;else{var vt=ve.next;vt!==null&&(fe.next=vt),ve.next=fe}if(D.last=fe,P.expirationTime===0&&(j===null||j.expirationTime===0)&&(j=D.lastRenderedReducer,j!==null))try{var wt=D.lastRenderedState,bt=j(wt,R);if(fe.eagerReducer=j,fe.eagerState=bt,hs(bt,wt))return}catch{}finally{}Sc(P,Y)}}var wu={readContext:ms,useCallback:ct,useContext:ct,useEffect:ct,useImperativeHandle:ct,useLayoutEffect:ct,useMemo:ct,useReducer:ct,useRef:ct,useState:ct,useDebugValue:ct,useResponder:ct,useDeferredValue:ct,useTransition:ct},yw={readContext:ms,useCallback:Cu,useContext:ms,useEffect:Ct,useImperativeHandle:function(P,D,R){return R=R!=null?R.concat([P]):null,pp(4,36,fg.bind(null,D,P),R)},useLayoutEffect:function(P,D){return pp(4,36,P,D)},useMemo:function(P,D){var R=TA();return D=D===void 0?null:D,P=P(),R.memoizedState=[P,D],P},useReducer:function(P,D,R){var j=TA();return D=R!==void 0?R(D):D,j.memoizedState=j.baseState=D,P=j.queue={last:null,dispatch:null,lastRenderedReducer:P,lastRenderedState:D},P=P.dispatch=hg.bind(null,Ha,P),[j.memoizedState,P]},useRef:function(P){var D=TA();return P={current:P},D.memoizedState=P},useState:cg,useDebugValue:pg,useResponder:ag,useDeferredValue:function(P,D){var R=cg(P),j=R[0],Y=R[1];return Ct(function(){a.unstable_next(function(){var fe=Hs.suspense;Hs.suspense=D===void 0?null:D;try{Y(P)}finally{Hs.suspense=fe}})},[P,D]),j},useTransition:function(P){var D=cg(!1),R=D[0],j=D[1];return[Cu(function(Y){j(!0),a.unstable_next(function(){var fe=Hs.suspense;Hs.suspense=P===void 0?null:P;try{j(!1),Y()}finally{Hs.suspense=fe}})},[P,R]),R]}},bm={readContext:ms,useCallback:xm,useContext:ms,useEffect:Sm,useImperativeHandle:function(P,D,R){return R=R!=null?R.concat([P]):null,Ic(4,36,fg.bind(null,D,P),R)},useLayoutEffect:function(P,D){return Ic(4,36,P,D)},useMemo:function(P,D){var R=fp();D=D===void 0?null:D;var j=R.memoizedState;return j!==null&&D!==null&&Eu(D,j[1])?j[0]:(P=P(),R.memoizedState=[P,D],P)},useReducer:Cs,useRef:function(){return fp().memoizedState},useState:ug,useDebugValue:pg,useResponder:ag,useDeferredValue:function(P,D){var R=ug(P),j=R[0],Y=R[1];return Sm(function(){a.unstable_next(function(){var fe=Hs.suspense;Hs.suspense=D===void 0?null:D;try{Y(P)}finally{Hs.suspense=fe}})},[P,D]),j},useTransition:function(P){var D=ug(!1),R=D[0],j=D[1];return[xm(function(Y){j(!0),a.unstable_next(function(){var fe=Hs.suspense;Hs.suspense=P===void 0?null:P;try{j(!1),Y()}finally{Hs.suspense=fe}})},[P,R]),R]}},Aa=null,Bc=null,Il=!1;function Iu(P,D){var R=Dl(5,null,null,0);R.elementType="DELETED",R.type="DELETED",R.stateNode=D,R.return=P,R.effectTag=8,P.lastEffect!==null?(P.lastEffect.nextEffect=R,P.lastEffect=R):P.firstEffect=P.lastEffect=R}function gg(P,D){switch(P.tag){case 5:return D=io(D,P.type,P.pendingProps),D!==null?(P.stateNode=D,!0):!1;case 6:return D=Si(D,P.pendingProps),D!==null?(P.stateNode=D,!0):!1;case 13:return!1;default:return!1}}function RA(P){if(Il){var D=Bc;if(D){var R=D;if(!gg(P,D)){if(D=cc(R),!D||!gg(P,D)){P.effectTag=P.effectTag&-1025|2,Il=!1,Aa=P;return}Iu(Aa,R)}Aa=P,Bc=cu(D)}else P.effectTag=P.effectTag&-1025|2,Il=!1,Aa=P}}function hp(P){for(P=P.return;P!==null&&P.tag!==5&&P.tag!==3&&P.tag!==13;)P=P.return;Aa=P}function ja(P){if(!y||P!==Aa)return!1;if(!Il)return hp(P),Il=!0,!1;var D=P.type;if(P.tag!==5||D!=="head"&&D!=="body"&&!Qe(D,P.memoizedProps))for(D=Bc;D;)Iu(P,D),D=cc(D);if(hp(P),P.tag===13){if(!y)throw Error(n(316));if(P=P.memoizedState,P=P!==null?P.dehydrated:null,!P)throw Error(n(317));Bc=Ms(P)}else Bc=Aa?cc(P.stateNode):null;return!0}function dg(){y&&(Bc=Aa=null,Il=!1)}var gp=u.ReactCurrentOwner,qo=!1;function ws(P,D,R,j){D.child=P===null?ig(D,null,R,j):gu(D,P.child,R,j)}function Ii(P,D,R,j,Y){R=R.render;var fe=D.ref;return ds(D,Y),j=lg(P,D,R,j,fe,Y),P!==null&&!qo?(D.updateQueue=P.updateQueue,D.effectTag&=-517,P.expirationTime<=Y&&(P.expirationTime=0),si(P,D,Y)):(D.effectTag|=1,ws(P,D,j,Y),D.child)}function km(P,D,R,j,Y,fe){if(P===null){var ve=R.type;return typeof ve=="function"&&!kw(ve)&&ve.defaultProps===void 0&&R.compare===null&&R.defaultProps===void 0?(D.tag=15,D.type=ve,Qm(P,D,ve,j,Y,fe)):(P=Hm(R.type,null,j,null,D.mode,fe),P.ref=D.ref,P.return=D,D.child=P)}return ve=P.child,YD)&&_A.set(P,D)))}}function vg(P,D){P.expirationTimeP?D:P)}function fo(P){if(P.lastExpiredTime!==0)P.callbackExpirationTime=1073741823,P.callbackPriority=99,P.callbackNode=pu(Dw.bind(null,P));else{var D=Um(P),R=P.callbackNode;if(D===0)R!==null&&(P.callbackNode=null,P.callbackExpirationTime=0,P.callbackPriority=90);else{var j=ga();if(D===1073741823?j=99:D===1||D===2?j=95:(j=10*(1073741821-D)-10*(1073741821-j),j=0>=j?99:250>=j?98:5250>=j?97:95),R!==null){var Y=P.callbackPriority;if(P.callbackExpirationTime===D&&Y>=j)return;R!==PA&&Ce(R)}P.callbackExpirationTime=D,P.callbackPriority=j,D=D===1073741823?pu(Dw.bind(null,P)):gc(j,Wv.bind(null,P),{timeout:10*(1073741821-D)-Li()}),P.callbackNode=D}}}function Wv(P,D){if(Om=0,D)return D=ga(),jm(P,D),fo(P),null;var R=Um(P);if(R!==0){if(D=P.callbackNode,(yr&(rs|js))!==En)throw Error(n(327));if(Ip(),P===gi&&R===ns||Pu(P,R),Mr!==null){var j=yr;yr|=rs;var Y=qA(P);do try{gF();break}catch(vt){jA(P,vt)}while(1);if(la(),yr=j,Ep.current=Y,Yi===Rm)throw D=Nm,Pu(P,R),WA(P,R),fo(P),D;if(Mr===null)switch(Y=P.finishedWork=P.current.alternate,P.finishedExpirationTime=R,j=Yi,gi=null,j){case Bu:case Rm:throw Error(n(345));case Bi:jm(P,2=R){P.lastPingedTime=R,Pu(P,R);break}}if(fe=Um(P),fe!==0&&fe!==R)break;if(j!==0&&j!==R){P.lastPingedTime=j;break}P.timeoutHandle=Te(Su.bind(null,P),Y);break}Su(P);break;case vl:if(WA(P,R),j=P.lastSuspendedTime,R===j&&(P.nextKnownPendingLevel=Sw(Y)),OA&&(Y=P.lastPingedTime,Y===0||Y>=R)){P.lastPingedTime=R,Pu(P,R);break}if(Y=Um(P),Y!==0&&Y!==R)break;if(j!==0&&j!==R){P.lastPingedTime=j;break}if(MA!==1073741823?j=10*(1073741821-MA)-Li():Ya===1073741823?j=0:(j=10*(1073741821-Ya)-5e3,Y=Li(),R=10*(1073741821-R)-Y,j=Y-j,0>j&&(j=0),j=(120>j?120:480>j?480:1080>j?1080:1920>j?1920:3e3>j?3e3:4320>j?4320:1960*Cw(j/1960))-j,R=j?j=0:(Y=ve.busyDelayMs|0,fe=Li()-(10*(1073741821-fe)-(ve.timeoutMs|0||5e3)),j=fe<=Y?0:Y+j-fe),10 component higher in the tree to provide a loading indicator or placeholder to display.`+ml(Y))}Yi!==Pc&&(Yi=Bi),fe=yg(fe,Y),wt=j;do{switch(wt.tag){case 3:ve=fe,wt.effectTag|=4096,wt.expirationTime=D;var Ke=Gv(wt,ve,D);It(wt,Ke);break e;case 1:ve=fe;var At=wt.type,Wt=wt.stateNode;if((wt.effectTag&64)===0&&(typeof At.getDerivedStateFromError=="function"||Wt!==null&&typeof Wt.componentDidCatch=="function"&&(Du===null||!Du.has(Wt)))){wt.effectTag|=4096,wt.expirationTime=D;var vr=Yv(wt,ve,D);It(wt,vr);break e}}wt=wt.return}while(wt!==null)}Mr=zv(Mr)}catch(Sn){D=Sn;continue}break}while(1)}function qA(){var P=Ep.current;return Ep.current=wu,P===null?wu:P}function Pw(P,D){PCp&&(Cp=P)}function hF(){for(;Mr!==null;)Mr=Jv(Mr)}function gF(){for(;Mr!==null&&!Tt();)Mr=Jv(Mr)}function Jv(P){var D=Zv(P.alternate,P,ns);return P.memoizedProps=P.pendingProps,D===null&&(D=zv(P)),ww.current=null,D}function zv(P){Mr=P;do{var D=Mr.alternate;if(P=Mr.return,(Mr.effectTag&2048)===0){e:{var R=D;D=Mr;var j=ns,Y=D.pendingProps;switch(D.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:ii(D.type)&&Oa(D);break;case 3:yc(D),hr(D),Y=D.stateNode,Y.pendingContext&&(Y.context=Y.pendingContext,Y.pendingContext=null),(R===null||R.child===null)&&ja(D)&&pa(D),Bl(D);break;case 5:og(D);var fe=ca(mc.current);if(j=D.type,R!==null&&D.stateNode!=null)ts(R,D,j,Y,fe),R.ref!==D.ref&&(D.effectTag|=128);else if(Y){if(R=ca(uo.current),ja(D)){if(Y=D,!y)throw Error(n(175));R=ap(Y.stateNode,Y.type,Y.memoizedProps,fe,R,Y),Y.updateQueue=R,R=R!==null,R&&pa(D)}else{var ve=ht(j,Y,fe,R,D);vc(ve,D,!1,!1),D.stateNode=ve,lt(ve,j,Y,fe,R)&&pa(D)}D.ref!==null&&(D.effectTag|=128)}else if(D.stateNode===null)throw Error(n(166));break;case 6:if(R&&D.stateNode!=null)Gr(R,D,R.memoizedProps,Y);else{if(typeof Y!="string"&&D.stateNode===null)throw Error(n(166));if(R=ca(mc.current),fe=ca(uo.current),ja(D)){if(R=D,!y)throw Error(n(176));(R=lp(R.stateNode,R.memoizedProps,R))&&pa(D)}else D.stateNode=_e(Y,R,fe,D)}break;case 11:break;case 13:if(Kn($n,D),Y=D.memoizedState,(D.effectTag&64)!==0){D.expirationTime=j;break e}Y=Y!==null,fe=!1,R===null?D.memoizedProps.fallback!==void 0&&ja(D):(j=R.memoizedState,fe=j!==null,Y||j===null||(j=R.child.sibling,j!==null&&(ve=D.firstEffect,ve!==null?(D.firstEffect=j,j.nextEffect=ve):(D.firstEffect=D.lastEffect=j,j.nextEffect=null),j.effectTag=8))),Y&&!fe&&(D.mode&2)!==0&&(R===null&&D.memoizedProps.unstable_avoidThisFallback!==!0||($n.current&1)!==0?Yi===Bu&&(Yi=ha):((Yi===Bu||Yi===ha)&&(Yi=vl),Cp!==0&&gi!==null&&(WA(gi,ns),eD(gi,Cp)))),S&&Y&&(D.effectTag|=4),w&&(Y||fe)&&(D.effectTag|=4);break;case 7:break;case 8:break;case 12:break;case 4:yc(D),Bl(D);break;case 10:wi(D);break;case 9:break;case 14:break;case 17:ii(D.type)&&Oa(D);break;case 19:if(Kn($n,D),Y=D.memoizedState,Y===null)break;if(fe=(D.effectTag&64)!==0,ve=Y.rendering,ve===null){if(fe)Dc(Y,!1);else if(Yi!==Bu||R!==null&&(R.effectTag&64)!==0)for(R=D.child;R!==null;){if(ve=Ap(R),ve!==null){for(D.effectTag|=64,Dc(Y,!1),R=ve.updateQueue,R!==null&&(D.updateQueue=R,D.effectTag|=4),Y.lastEffect===null&&(D.firstEffect=null),D.lastEffect=Y.lastEffect,R=j,Y=D.child;Y!==null;)fe=Y,j=R,fe.effectTag&=2,fe.nextEffect=null,fe.firstEffect=null,fe.lastEffect=null,ve=fe.alternate,ve===null?(fe.childExpirationTime=0,fe.expirationTime=j,fe.child=null,fe.memoizedProps=null,fe.memoizedState=null,fe.updateQueue=null,fe.dependencies=null):(fe.childExpirationTime=ve.childExpirationTime,fe.expirationTime=ve.expirationTime,fe.child=ve.child,fe.memoizedProps=ve.memoizedProps,fe.memoizedState=ve.memoizedState,fe.updateQueue=ve.updateQueue,j=ve.dependencies,fe.dependencies=j===null?null:{expirationTime:j.expirationTime,firstContext:j.firstContext,responders:j.responders}),Y=Y.sibling;Mn($n,$n.current&1|2,D),D=D.child;break e}R=R.sibling}}else{if(!fe)if(R=Ap(ve),R!==null){if(D.effectTag|=64,fe=!0,R=R.updateQueue,R!==null&&(D.updateQueue=R,D.effectTag|=4),Dc(Y,!0),Y.tail===null&&Y.tailMode==="hidden"&&!ve.alternate){D=D.lastEffect=Y.lastEffect,D!==null&&(D.nextEffect=null);break}}else Li()>Y.tailExpiration&&1Y&&(Y=j),ve>Y&&(Y=ve),fe=fe.sibling;R.childExpirationTime=Y}if(D!==null)return D;P!==null&&(P.effectTag&2048)===0&&(P.firstEffect===null&&(P.firstEffect=Mr.firstEffect),Mr.lastEffect!==null&&(P.lastEffect!==null&&(P.lastEffect.nextEffect=Mr.firstEffect),P.lastEffect=Mr.lastEffect),1P?D:P}function Su(P){var D=_o();return lo(99,dF.bind(null,P,D)),null}function dF(P,D){do Ip();while(Ig!==null);if((yr&(rs|js))!==En)throw Error(n(327));var R=P.finishedWork,j=P.finishedExpirationTime;if(R===null)return null;if(P.finishedWork=null,P.finishedExpirationTime=0,R===P.current)throw Error(n(177));P.callbackNode=null,P.callbackExpirationTime=0,P.callbackPriority=90,P.nextKnownPendingLevel=0;var Y=Sw(R);if(P.firstPendingTime=Y,j<=P.lastSuspendedTime?P.firstSuspendedTime=P.lastSuspendedTime=P.nextKnownPendingLevel=0:j<=P.firstSuspendedTime&&(P.firstSuspendedTime=j-1),j<=P.lastPingedTime&&(P.lastPingedTime=0),j<=P.lastExpiredTime&&(P.lastExpiredTime=0),P===gi&&(Mr=gi=null,ns=0),1=R?ln(P,D,R):(Mn($n,$n.current&1,D),D=si(P,D,R),D!==null?D.sibling:null);Mn($n,$n.current&1,D);break;case 19:if(j=D.childExpirationTime>=R,(P.effectTag&64)!==0){if(j)return qa(P,D,R);D.effectTag|=64}if(Y=D.memoizedState,Y!==null&&(Y.rendering=null,Y.tail=null),Mn($n,$n.current,D),!j)return null}return si(P,D,R)}qo=!1}}else qo=!1;switch(D.expirationTime=0,D.tag){case 2:if(j=D.type,P!==null&&(P.alternate=null,D.alternate=null,D.effectTag|=2),P=D.pendingProps,Y=Me(D,On.current),ds(D,R),Y=lg(null,D,j,P,Y,R),D.effectTag|=1,typeof Y=="object"&&Y!==null&&typeof Y.render=="function"&&Y.$$typeof===void 0){if(D.tag=1,mw(),ii(j)){var fe=!0;Ac(D)}else fe=!1;D.memoizedState=Y.state!==null&&Y.state!==void 0?Y.state:null;var ve=j.getDerivedStateFromProps;typeof ve=="function"&&er(D,j,ve,P),Y.updater=Zr,D.stateNode=Y,Y._reactInternalFiber=D,jo(D,j,P,R),D=mp(null,D,j,!0,fe,R)}else D.tag=0,ws(null,D,Y,R),D=D.child;return D;case 16:if(Y=D.elementType,P!==null&&(P.alternate=null,D.alternate=null,D.effectTag|=2),P=D.pendingProps,ye(Y),Y._status!==1)throw Y._result;switch(Y=Y._result,D.type=Y,fe=D.tag=BF(Y),P=Ci(Y,P),fe){case 0:D=NA(null,D,Y,P,R);break;case 1:D=dp(null,D,Y,P,R);break;case 11:D=Ii(null,D,Y,P,R);break;case 14:D=km(null,D,Y,Ci(Y.type,P),j,R);break;default:throw Error(n(306,Y,""))}return D;case 0:return j=D.type,Y=D.pendingProps,Y=D.elementType===j?Y:Ci(j,Y),NA(P,D,j,Y,R);case 1:return j=D.type,Y=D.pendingProps,Y=D.elementType===j?Y:Ci(j,Y),dp(P,D,j,Y,R);case 3:if(mg(D),j=D.updateQueue,j===null)throw Error(n(282));if(Y=D.memoizedState,Y=Y!==null?Y.element:null,me(D,j,D.pendingProps,null,R),j=D.memoizedState.element,j===Y)dg(),D=si(P,D,R);else{if((Y=D.stateNode.hydrate)&&(y?(Bc=cu(D.stateNode.containerInfo),Aa=D,Y=Il=!0):Y=!1),Y)for(R=ig(D,null,j,R),D.child=R;R;)R.effectTag=R.effectTag&-3|1024,R=R.sibling;else ws(P,D,j,R),dg();D=D.child}return D;case 5:return Pm(D),P===null&&RA(D),j=D.type,Y=D.pendingProps,fe=P!==null?P.memoizedProps:null,ve=Y.children,Qe(j,Y)?ve=null:fe!==null&&Qe(j,fe)&&(D.effectTag|=16),Go(P,D),D.mode&4&&R!==1&&be(j,Y)?(D.expirationTime=D.childExpirationTime=1,D=null):(ws(P,D,ve,R),D=D.child),D;case 6:return P===null&&RA(D),null;case 13:return ln(P,D,R);case 4:return sg(D,D.stateNode.containerInfo),j=D.pendingProps,P===null?D.child=gu(D,null,j,R):ws(P,D,j,R),D.child;case 11:return j=D.type,Y=D.pendingProps,Y=D.elementType===j?Y:Ci(j,Y),Ii(P,D,j,Y,R);case 7:return ws(P,D,D.pendingProps,R),D.child;case 8:return ws(P,D,D.pendingProps.children,R),D.child;case 12:return ws(P,D,D.pendingProps.children,R),D.child;case 10:e:{if(j=D.type._context,Y=D.pendingProps,ve=D.memoizedProps,fe=Y.value,Ho(D,fe),ve!==null){var vt=ve.value;if(fe=hs(vt,fe)?0:(typeof j._calculateChangedBits=="function"?j._calculateChangedBits(vt,fe):1073741823)|0,fe===0){if(ve.children===Y.children&&!_i.current){D=si(P,D,R);break e}}else for(vt=D.child,vt!==null&&(vt.return=D);vt!==null;){var wt=vt.dependencies;if(wt!==null){ve=vt.child;for(var bt=wt.firstContext;bt!==null;){if(bt.context===j&&(bt.observedBits&fe)!==0){vt.tag===1&&(bt=ys(R,null),bt.tag=2,tt(vt,bt)),vt.expirationTime"u")return!1;var D=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(D.isDisabled||!D.supportsFiber)return!0;try{var R=D.inject(P);xw=function(j){try{D.onCommitFiberRoot(R,j,void 0,(j.current.effectTag&64)===64)}catch{}},bw=function(j){try{D.onCommitFiberUnmount(R,j)}catch{}}}catch{}return!0}function IF(P,D,R,j){this.tag=P,this.key=R,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=D,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=j,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function Dl(P,D,R,j){return new IF(P,D,R,j)}function kw(P){return P=P.prototype,!(!P||!P.isReactComponent)}function BF(P){if(typeof P=="function")return kw(P)?1:0;if(P!=null){if(P=P.$$typeof,P===L)return 11;if(P===te)return 14}return 2}function YA(P,D){var R=P.alternate;return R===null?(R=Dl(P.tag,D,P.key,P.mode),R.elementType=P.elementType,R.type=P.type,R.stateNode=P.stateNode,R.alternate=P,P.alternate=R):(R.pendingProps=D,R.effectTag=0,R.nextEffect=null,R.firstEffect=null,R.lastEffect=null),R.childExpirationTime=P.childExpirationTime,R.expirationTime=P.expirationTime,R.child=P.child,R.memoizedProps=P.memoizedProps,R.memoizedState=P.memoizedState,R.updateQueue=P.updateQueue,D=P.dependencies,R.dependencies=D===null?null:{expirationTime:D.expirationTime,firstContext:D.firstContext,responders:D.responders},R.sibling=P.sibling,R.index=P.index,R.ref=P.ref,R}function Hm(P,D,R,j,Y,fe){var ve=2;if(j=P,typeof P=="function")kw(P)&&(ve=1);else if(typeof P=="string")ve=5;else e:switch(P){case E:return xu(R.children,Y,fe,D);case T:ve=8,Y|=7;break;case I:ve=8,Y|=1;break;case v:return P=Dl(12,R,D,Y|8),P.elementType=v,P.type=v,P.expirationTime=fe,P;case U:return P=Dl(13,R,D,Y),P.type=U,P.elementType=U,P.expirationTime=fe,P;case J:return P=Dl(19,R,D,Y),P.elementType=J,P.expirationTime=fe,P;default:if(typeof P=="object"&&P!==null)switch(P.$$typeof){case b:ve=10;break e;case C:ve=9;break e;case L:ve=11;break e;case te:ve=14;break e;case le:ve=16,j=null;break e}throw Error(n(130,P==null?P:typeof P,""))}return D=Dl(ve,R,D,Y),D.elementType=P,D.type=j,D.expirationTime=fe,D}function xu(P,D,R,j){return P=Dl(7,P,j,D),P.expirationTime=R,P}function Qw(P,D,R){return P=Dl(6,P,null,D),P.expirationTime=R,P}function Fw(P,D,R){return D=Dl(4,P.children!==null?P.children:[],P.key,D),D.expirationTime=R,D.stateNode={containerInfo:P.containerInfo,pendingChildren:null,implementation:P.implementation},D}function vF(P,D,R){this.tag=D,this.current=null,this.containerInfo=P,this.pingCache=this.pendingChildren=null,this.finishedExpirationTime=0,this.finishedWork=null,this.timeoutHandle=He,this.pendingContext=this.context=null,this.hydrate=R,this.callbackNode=null,this.callbackPriority=90,this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}function $v(P,D){var R=P.firstSuspendedTime;return P=P.lastSuspendedTime,R!==0&&R>=D&&P<=D}function WA(P,D){var R=P.firstSuspendedTime,j=P.lastSuspendedTime;RD||R===0)&&(P.lastSuspendedTime=D),D<=P.lastPingedTime&&(P.lastPingedTime=0),D<=P.lastExpiredTime&&(P.lastExpiredTime=0)}function eD(P,D){D>P.firstPendingTime&&(P.firstPendingTime=D);var R=P.firstSuspendedTime;R!==0&&(D>=R?P.firstSuspendedTime=P.lastSuspendedTime=P.nextKnownPendingLevel=0:D>=P.lastSuspendedTime&&(P.lastSuspendedTime=D+1),D>P.nextKnownPendingLevel&&(P.nextKnownPendingLevel=D))}function jm(P,D){var R=P.lastExpiredTime;(R===0||R>D)&&(P.lastExpiredTime=D)}function tD(P){var D=P._reactInternalFiber;if(D===void 0)throw typeof P.render=="function"?Error(n(188)):Error(n(268,Object.keys(P)));return P=Ee(D),P===null?null:P.stateNode}function rD(P,D){P=P.memoizedState,P!==null&&P.dehydrated!==null&&P.retryTime{"use strict";bEe.exports=xEe()});var FEe=_((yVt,QEe)=>{"use strict";var Wyt={ALIGN_COUNT:8,ALIGN_AUTO:0,ALIGN_FLEX_START:1,ALIGN_CENTER:2,ALIGN_FLEX_END:3,ALIGN_STRETCH:4,ALIGN_BASELINE:5,ALIGN_SPACE_BETWEEN:6,ALIGN_SPACE_AROUND:7,DIMENSION_COUNT:2,DIMENSION_WIDTH:0,DIMENSION_HEIGHT:1,DIRECTION_COUNT:3,DIRECTION_INHERIT:0,DIRECTION_LTR:1,DIRECTION_RTL:2,DISPLAY_COUNT:2,DISPLAY_FLEX:0,DISPLAY_NONE:1,EDGE_COUNT:9,EDGE_LEFT:0,EDGE_TOP:1,EDGE_RIGHT:2,EDGE_BOTTOM:3,EDGE_START:4,EDGE_END:5,EDGE_HORIZONTAL:6,EDGE_VERTICAL:7,EDGE_ALL:8,EXPERIMENTAL_FEATURE_COUNT:1,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:0,FLEX_DIRECTION_COUNT:4,FLEX_DIRECTION_COLUMN:0,FLEX_DIRECTION_COLUMN_REVERSE:1,FLEX_DIRECTION_ROW:2,FLEX_DIRECTION_ROW_REVERSE:3,JUSTIFY_COUNT:6,JUSTIFY_FLEX_START:0,JUSTIFY_CENTER:1,JUSTIFY_FLEX_END:2,JUSTIFY_SPACE_BETWEEN:3,JUSTIFY_SPACE_AROUND:4,JUSTIFY_SPACE_EVENLY:5,LOG_LEVEL_COUNT:6,LOG_LEVEL_ERROR:0,LOG_LEVEL_WARN:1,LOG_LEVEL_INFO:2,LOG_LEVEL_DEBUG:3,LOG_LEVEL_VERBOSE:4,LOG_LEVEL_FATAL:5,MEASURE_MODE_COUNT:3,MEASURE_MODE_UNDEFINED:0,MEASURE_MODE_EXACTLY:1,MEASURE_MODE_AT_MOST:2,NODE_TYPE_COUNT:2,NODE_TYPE_DEFAULT:0,NODE_TYPE_TEXT:1,OVERFLOW_COUNT:3,OVERFLOW_VISIBLE:0,OVERFLOW_HIDDEN:1,OVERFLOW_SCROLL:2,POSITION_TYPE_COUNT:2,POSITION_TYPE_RELATIVE:0,POSITION_TYPE_ABSOLUTE:1,PRINT_OPTIONS_COUNT:3,PRINT_OPTIONS_LAYOUT:1,PRINT_OPTIONS_STYLE:2,PRINT_OPTIONS_CHILDREN:4,UNIT_COUNT:4,UNIT_UNDEFINED:0,UNIT_POINT:1,UNIT_PERCENT:2,UNIT_AUTO:3,WRAP_COUNT:3,WRAP_NO_WRAP:0,WRAP_WRAP:1,WRAP_WRAP_REVERSE:2};QEe.exports=Wyt});var LEe=_((EVt,NEe)=>{"use strict";var Vyt=Object.assign||function(t){for(var e=1;e"}}]),t}(),TEe=function(){Kk(t,null,[{key:"fromJS",value:function(r){var o=r.width,a=r.height;return new t(o,a)}}]);function t(e,r){k6(this,t),this.width=e,this.height=r}return Kk(t,[{key:"fromJS",value:function(r){r(this.width,this.height)}},{key:"toString",value:function(){return""}}]),t}(),REe=function(){function t(e,r){k6(this,t),this.unit=e,this.value=r}return Kk(t,[{key:"fromJS",value:function(r){r(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case tu.UNIT_POINT:return String(this.value);case tu.UNIT_PERCENT:return this.value+"%";case tu.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),t}();NEe.exports=function(t,e){function r(u,A,p){var h=u[A];u[A]=function(){for(var E=arguments.length,I=Array(E),v=0;v1?I-1:0),b=1;b1&&arguments[1]!==void 0?arguments[1]:NaN,p=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,h=arguments.length>3&&arguments[3]!==void 0?arguments[3]:tu.DIRECTION_LTR;return u.call(this,A,p,h)}),Vyt({Config:e.Config,Node:e.Node,Layout:t("Layout",Kyt),Size:t("Size",TEe),Value:t("Value",REe),getInstanceCount:function(){return e.getInstanceCount.apply(e,arguments)}},tu)}});var MEe=_((exports,module)=>{(function(t,e){typeof define=="function"&&define.amd?define([],function(){return e}):typeof module=="object"&&module.exports?module.exports=e:(t.nbind=t.nbind||{}).init=e})(exports,function(Module,cb){typeof Module=="function"&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(t,e){return function(){t&&t.apply(this,arguments);try{Module.ccall("nbind_init")}catch(r){e(r);return}e(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb);var Module;Module||(Module=(typeof Module<"u"?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if(Module.ENVIRONMENT==="WEB")ENVIRONMENT_IS_WEB=!0;else if(Module.ENVIRONMENT==="WORKER")ENVIRONMENT_IS_WORKER=!0;else if(Module.ENVIRONMENT==="NODE")ENVIRONMENT_IS_NODE=!0;else if(Module.ENVIRONMENT==="SHELL")ENVIRONMENT_IS_SHELL=!0;else throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else ENVIRONMENT_IS_WEB=typeof window=="object",ENVIRONMENT_IS_WORKER=typeof importScripts=="function",ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof Be=="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(e,r){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),e=nodePath.normalize(e);var o=nodeFS.readFileSync(e);return r?o:o.toString()},Module.readBinary=function(e){var r=Module.read(e,!0);return r.buffer||(r=new Uint8Array(r)),assert(r.buffer),r},Module.load=function(e){globalEval(read(e))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),typeof module<"u"&&(module.exports=Module),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),typeof printErr<"u"&&(Module.printErr=printErr),typeof read<"u"?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(e){if(typeof readbuffer=="function")return new Uint8Array(readbuffer(e));var r=read(e,"binary");return assert(typeof r=="object"),r},typeof scriptArgs<"u"?Module.arguments=scriptArgs:typeof arguments<"u"&&(Module.arguments=arguments),typeof quit=="function"&&(Module.quit=function(t,e){quit(t)});else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(Module.read=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.send(null),r.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(e){var r=new XMLHttpRequest;return r.open("GET",e,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),Module.readAsync=function(e,r,o){var a=new XMLHttpRequest;a.open("GET",e,!0),a.responseType="arraybuffer",a.onload=function(){a.status==200||a.status==0&&a.response?r(a.response):o()},a.onerror=o,a.send(null)},typeof arguments<"u"&&(Module.arguments=arguments),typeof console<"u")Module.print||(Module.print=function(e){console.log(e)}),Module.printErr||(Module.printErr=function(e){console.warn(e)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&typeof dump<"u"?function(t){dump(t)}:function(t){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),typeof Module.setWindowTitle>"u"&&(Module.setWindowTitle=function(t){document.title=t})}else throw"Unknown runtime environment. Where are we?";function globalEval(t){eval.call(null,t)}!Module.load&&Module.read&&(Module.load=function(e){globalEval(Module.read(e))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(t,e){throw e}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(t){return tempRet0=t,t},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(t){STACKTOP=t},getNativeTypeSize:function(t){switch(t){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(t[t.length-1]==="*")return Runtime.QUANTUM_SIZE;if(t[0]==="i"){var e=parseInt(t.substr(1));return assert(e%8===0),e/8}else return 0}}},getNativeFieldSize:function(t){return Math.max(Runtime.getNativeTypeSize(t),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(t,e){return e==="double"||e==="i64"?t&7&&(assert((t&7)===4),t+=4):assert((t&3)===0),t},getAlignSize:function(t,e,r){return!r&&(t=="i64"||t=="double")?8:t?Math.min(e||(t?Runtime.getNativeFieldSize(t):0),Runtime.QUANTUM_SIZE):Math.min(e,8)},dynCall:function(t,e,r){return r&&r.length?Module["dynCall_"+t].apply(null,[e].concat(r)):Module["dynCall_"+t].call(null,e)},functionPointers:[],addFunction:function(t){for(var e=0;e>2],r=(e+t+15|0)&-16;if(HEAP32[DYNAMICTOP_PTR>>2]=r,r>=TOTAL_MEMORY){var o=enlargeMemory();if(!o)return HEAP32[DYNAMICTOP_PTR>>2]=e,0}return e},alignMemory:function(t,e){var r=t=Math.ceil(t/(e||16))*(e||16);return r},makeBigInt:function(t,e,r){var o=r?+(t>>>0)+ +(e>>>0)*4294967296:+(t>>>0)+ +(e|0)*4294967296;return o},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0;function assert(t,e){t||abort("Assertion failed: "+e)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(t){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}var cwrap,ccall;(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(t){var e=Runtime.stackAlloc(t.length);return writeArrayToMemory(t,e),e},stringToC:function(t){var e=0;if(t!=null&&t!==0){var r=(t.length<<2)+1;e=Runtime.stackAlloc(r),stringToUTF8(t,e,r)}return e}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(e,r,o,a,n){var u=getCFunc(e),A=[],p=0;if(a)for(var h=0;h>0]=e;break;case"i8":HEAP8[t>>0]=e;break;case"i16":HEAP16[t>>1]=e;break;case"i32":HEAP32[t>>2]=e;break;case"i64":tempI64=[e>>>0,(tempDouble=e,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[t>>2]=tempI64[0],HEAP32[t+4>>2]=tempI64[1];break;case"float":HEAPF32[t>>2]=e;break;case"double":HEAPF64[t>>3]=e;break;default:abort("invalid type for setValue: "+r)}}Module.setValue=setValue;function getValue(t,e,r){switch(e=e||"i8",e.charAt(e.length-1)==="*"&&(e="i32"),e){case"i1":return HEAP8[t>>0];case"i8":return HEAP8[t>>0];case"i16":return HEAP16[t>>1];case"i32":return HEAP32[t>>2];case"i64":return HEAP32[t>>2];case"float":return HEAPF32[t>>2];case"double":return HEAPF64[t>>3];default:abort("invalid type for setValue: "+e)}return null}Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE;function allocate(t,e,r,o){var a,n;typeof t=="number"?(a=!0,n=t):(a=!1,n=t.length);var u=typeof e=="string"?e:null,A;if(r==ALLOC_NONE?A=o:A=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][r===void 0?ALLOC_STATIC:r](Math.max(n,u?1:e.length)),a){var o=A,p;for(assert((A&3)==0),p=A+(n&-4);o>2]=0;for(p=A+n;o>0]=0;return A}if(u==="i8")return t.subarray||t.slice?HEAPU8.set(t,A):HEAPU8.set(new Uint8Array(t),A),A;for(var h=0,E,I,v;h>0],r|=o,!(o==0&&!e||(a++,e&&a==e)););e||(e=a);var n="";if(r<128){for(var u=1024,A;e>0;)A=String.fromCharCode.apply(String,HEAPU8.subarray(t,t+Math.min(e,u))),n=n?n+A:A,t+=u,e-=u;return n}return Module.UTF8ToString(t)}Module.Pointer_stringify=Pointer_stringify;function AsciiToString(t){for(var e="";;){var r=HEAP8[t++>>0];if(!r)return e;e+=String.fromCharCode(r)}}Module.AsciiToString=AsciiToString;function stringToAscii(t,e){return writeAsciiToMemory(t,e,!1)}Module.stringToAscii=stringToAscii;var UTF8Decoder=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(t,e){for(var r=e;t[r];)++r;if(r-e>16&&t.subarray&&UTF8Decoder)return UTF8Decoder.decode(t.subarray(e,r));for(var o,a,n,u,A,p,h="";;){if(o=t[e++],!o)return h;if(!(o&128)){h+=String.fromCharCode(o);continue}if(a=t[e++]&63,(o&224)==192){h+=String.fromCharCode((o&31)<<6|a);continue}if(n=t[e++]&63,(o&240)==224?o=(o&15)<<12|a<<6|n:(u=t[e++]&63,(o&248)==240?o=(o&7)<<18|a<<12|n<<6|u:(A=t[e++]&63,(o&252)==248?o=(o&3)<<24|a<<18|n<<12|u<<6|A:(p=t[e++]&63,o=(o&1)<<30|a<<24|n<<18|u<<12|A<<6|p))),o<65536)h+=String.fromCharCode(o);else{var E=o-65536;h+=String.fromCharCode(55296|E>>10,56320|E&1023)}}}Module.UTF8ArrayToString=UTF8ArrayToString;function UTF8ToString(t){return UTF8ArrayToString(HEAPU8,t)}Module.UTF8ToString=UTF8ToString;function stringToUTF8Array(t,e,r,o){if(!(o>0))return 0;for(var a=r,n=r+o-1,u=0;u=55296&&A<=57343&&(A=65536+((A&1023)<<10)|t.charCodeAt(++u)&1023),A<=127){if(r>=n)break;e[r++]=A}else if(A<=2047){if(r+1>=n)break;e[r++]=192|A>>6,e[r++]=128|A&63}else if(A<=65535){if(r+2>=n)break;e[r++]=224|A>>12,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=2097151){if(r+3>=n)break;e[r++]=240|A>>18,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else if(A<=67108863){if(r+4>=n)break;e[r++]=248|A>>24,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}else{if(r+5>=n)break;e[r++]=252|A>>30,e[r++]=128|A>>24&63,e[r++]=128|A>>18&63,e[r++]=128|A>>12&63,e[r++]=128|A>>6&63,e[r++]=128|A&63}}return e[r]=0,r-a}Module.stringToUTF8Array=stringToUTF8Array;function stringToUTF8(t,e,r){return stringToUTF8Array(t,HEAPU8,e,r)}Module.stringToUTF8=stringToUTF8;function lengthBytesUTF8(t){for(var e=0,r=0;r=55296&&o<=57343&&(o=65536+((o&1023)<<10)|t.charCodeAt(++r)&1023),o<=127?++e:o<=2047?e+=2:o<=65535?e+=3:o<=2097151?e+=4:o<=67108863?e+=5:e+=6}return e}Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function demangle(t){var e=Module.___cxa_demangle||Module.__cxa_demangle;if(e){try{var r=t.substr(1),o=lengthBytesUTF8(r)+1,a=_malloc(o);stringToUTF8(r,a,o);var n=_malloc(4),u=e(a,0,0,n);if(getValue(n,"i32")===0&&u)return Pointer_stringify(u)}catch{}finally{a&&_free(a),n&&_free(n),u&&_free(u)}return t}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),t}function demangleAll(t){var e=/__Z[\w\d_]+/g;return t.replace(e,function(r){var o=demangle(r);return r===o?r:r+" ["+o+"]"})}function jsStackTrace(){var t=new Error;if(!t.stack){try{throw new Error(0)}catch(e){t=e}if(!t.stack)return"(no stack trace available)"}return t.stack.toString()}function stackTrace(){var t=jsStackTrace();return Module.extraStackTrace&&(t+=` +`+Module.extraStackTrace()),demangleAll(t)}Module.stackTrace=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;TOTAL_MEMORY0;){var e=t.shift();if(typeof e=="function"){e();continue}var r=e.func;typeof r=="number"?e.arg===void 0?Module.dynCall_v(r):Module.dynCall_vi(r,e.arg):r(e.arg===void 0?null:e.arg)}}var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(typeof Module.preRun=="function"&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(typeof Module.postRun=="function"&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(t){__ATPRERUN__.unshift(t)}Module.addOnPreRun=addOnPreRun;function addOnInit(t){__ATINIT__.unshift(t)}Module.addOnInit=addOnInit;function addOnPreMain(t){__ATMAIN__.unshift(t)}Module.addOnPreMain=addOnPreMain;function addOnExit(t){__ATEXIT__.unshift(t)}Module.addOnExit=addOnExit;function addOnPostRun(t){__ATPOSTRUN__.unshift(t)}Module.addOnPostRun=addOnPostRun;function intArrayFromString(t,e,r){var o=r>0?r:lengthBytesUTF8(t)+1,a=new Array(o),n=stringToUTF8Array(t,a,0,a.length);return e&&(a.length=n),a}Module.intArrayFromString=intArrayFromString;function intArrayToString(t){for(var e=[],r=0;r255&&(o&=255),e.push(String.fromCharCode(o))}return e.join("")}Module.intArrayToString=intArrayToString;function writeStringToMemory(t,e,r){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var o,a;r&&(a=e+lengthBytesUTF8(t),o=HEAP8[a]),stringToUTF8(t,e,1/0),r&&(HEAP8[a]=o)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(t,e){HEAP8.set(t,e)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(t,e,r){for(var o=0;o>0]=t.charCodeAt(o);r||(HEAP8[e>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function t(e,r){var o=e>>>16,a=e&65535,n=r>>>16,u=r&65535;return a*u+(o*u+a*n<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(t){return froundBuffer[0]=t,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(t){t=t>>>0;for(var e=0;e<32;e++)if(t&1<<31-e)return e;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(t){return t<0?Math.ceil(t):Math.floor(t)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(t){return t}function addRunDependency(t){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}Module.addRunDependency=addRunDependency;function removeRunDependency(t){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),runDependencies==0&&(runDependencyWatcher!==null&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var e=dependenciesFulfilled;dependenciesFulfilled=null,e()}}Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(t,e,r,o,a,n,u,A){return _nbind.callbackSignatureList[t].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(t,e,r,o,a,n,u,A){return ASM_CONSTS[t](e,r,o,a,n,u,A)}function _emscripten_asm_const_iiiii(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiidddddd(t,e,r,o,a,n,u,A,p){return ASM_CONSTS[t](e,r,o,a,n,u,A,p)}function _emscripten_asm_const_iiididi(t,e,r,o,a,n,u){return ASM_CONSTS[t](e,r,o,a,n,u)}function _emscripten_asm_const_iiii(t,e,r,o){return ASM_CONSTS[t](e,r,o)}function _emscripten_asm_const_iiiid(t,e,r,o,a){return ASM_CONSTS[t](e,r,o,a)}function _emscripten_asm_const_iiiiii(t,e,r,o,a,n){return ASM_CONSTS[t](e,r,o,a,n)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _atexit(t,e){__ATEXIT__.unshift({func:t,arg:e})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr("missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj"),abort(-1)}function __decorate(t,e,r,o){var a=arguments.length,n=a<3?e:o===null?o=Object.getOwnPropertyDescriptor(e,r):o,u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")n=Reflect.decorate(t,e,r,o);else for(var A=t.length-1;A>=0;A--)(u=t[A])&&(n=(a<3?u(n):a>3?u(e,r,n):u(e,r))||n);return a>3&&n&&Object.defineProperty(e,r,n),n}function _defineHidden(t){return function(e,r){Object.defineProperty(e,r,{configurable:!1,enumerable:!1,value:t,writable:!0})}}var _nbind={};function __nbind_free_external(t){_nbind.externalList[t].dereference(t)}function __nbind_reference_external(t){_nbind.externalList[t].reference()}function _llvm_stackrestore(t){var e=_llvm_stacksave,r=e.LLVM_SAVEDSTACKS[t];e.LLVM_SAVEDSTACKS.splice(t,1),Runtime.stackRestore(r)}function __nbind_register_pool(t,e,r,o){_nbind.Pool.pageSize=t,_nbind.Pool.usedPtr=e/4,_nbind.Pool.rootPtr=r,_nbind.Pool.pagePtr=o/4,HEAP32[e/4]=16909060,HEAP8[e]==1&&(_nbind.bigEndian=!0),HEAP32[e/4]=0,_nbind.makeTypeKindTbl=(n={},n[1024]=_nbind.PrimitiveType,n[64]=_nbind.Int64Type,n[2048]=_nbind.BindClass,n[3072]=_nbind.BindClassPtr,n[4096]=_nbind.SharedClassPtr,n[5120]=_nbind.ArrayType,n[6144]=_nbind.ArrayType,n[7168]=_nbind.CStringType,n[9216]=_nbind.CallbackType,n[10240]=_nbind.BindType,n),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,"cbFunction &":_nbind.CallbackType,"const cbFunction &":_nbind.CallbackType,"const std::string &":_nbind.StringType,"std::string":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var a=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});a.proto=Module,_nbind.BindClass.list.push(a);var n}function _emscripten_set_main_loop_timing(t,e){if(Browser.mainLoop.timingMode=t,Browser.mainLoop.timingValue=e,!Browser.mainLoop.func)return 1;if(t==0)Browser.mainLoop.scheduler=function(){var u=Math.max(0,Browser.mainLoop.tickStartTime+e-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,u)},Browser.mainLoop.method="timeout";else if(t==1)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(t==2){if(!window.setImmediate){let n=function(u){u.source===window&&u.data===o&&(u.stopPropagation(),r.shift()())};var a=n,r=[],o="setimmediate";window.addEventListener("message",n,!0),window.setImmediate=function(A){r.push(A),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(A),window.postMessage({target:o})):window.postMessage(o,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(t,e,r,o,a){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=t,Browser.mainLoop.arg=o;var n;typeof o<"u"?n=function(){Module.dynCall_vi(t,o)}:n=function(){Module.dynCall_v(t)};var u=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var p=Date.now(),h=Browser.mainLoop.queue.shift();if(h.func(h.arg),Browser.mainLoop.remainingBlockers){var E=Browser.mainLoop.remainingBlockers,I=E%1==0?E-1:Math.floor(E);h.counted?Browser.mainLoop.remainingBlockers=I:(I=I+.5,Browser.mainLoop.remainingBlockers=(8*E+I)/9)}if(console.log('main loop blocker "'+h.name+'" took '+(Date.now()-p)+" ms"),Browser.mainLoop.updateStatus(),u1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else Browser.mainLoop.timingMode==0&&(Browser.mainLoop.tickStartTime=_emscripten_get_now());Browser.mainLoop.method==="timeout"&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(n),!(u0?_emscripten_set_main_loop_timing(0,1e3/e):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),r)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var t=Browser.mainLoop.timingMode,e=Browser.mainLoop.timingValue,r=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(r,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(t,e),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var t=Module.statusMessage||"Please wait...",e=Browser.mainLoop.remainingBlockers,r=Browser.mainLoop.expectedBlockers;e?e"u"&&(console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."),Module.noImageDecoding=!0);var t={};t.canHandle=function(n){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(n)},t.handle=function(n,u,A,p){var h=null;if(Browser.hasBlobConstructor)try{h=new Blob([n],{type:Browser.getMimetype(u)}),h.size!==n.length&&(h=new Blob([new Uint8Array(n).buffer],{type:Browser.getMimetype(u)}))}catch(b){Runtime.warnOnce("Blob constructor present but fails: "+b+"; falling back to blob builder")}if(!h){var E=new Browser.BlobBuilder;E.append(new Uint8Array(n).buffer),h=E.getBlob()}var I=Browser.URLObject.createObjectURL(h),v=new Image;v.onload=function(){assert(v.complete,"Image "+u+" could not be decoded");var C=document.createElement("canvas");C.width=v.width,C.height=v.height;var T=C.getContext("2d");T.drawImage(v,0,0),Module.preloadedImages[u]=C,Browser.URLObject.revokeObjectURL(I),A&&A(n)},v.onerror=function(C){console.log("Image "+I+" could not be decoded"),p&&p()},v.src=I},Module.preloadPlugins.push(t);var e={};e.canHandle=function(n){return!Module.noAudioDecoding&&n.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},e.handle=function(n,u,A,p){var h=!1;function E(T){h||(h=!0,Module.preloadedAudios[u]=T,A&&A(n))}function I(){h||(h=!0,Module.preloadedAudios[u]=new Audio,p&&p())}if(Browser.hasBlobConstructor){try{var v=new Blob([n],{type:Browser.getMimetype(u)})}catch{return I()}var b=Browser.URLObject.createObjectURL(v),C=new Audio;C.addEventListener("canplaythrough",function(){E(C)},!1),C.onerror=function(L){if(h)return;console.log("warning: browser could not fully decode audio "+u+", trying slower base64 approach");function U(J){for(var te="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",le="=",pe="",Ae=0,ye=0,ae=0;ae=6;){var we=Ae>>ye-6&63;ye-=6,pe+=te[we]}return ye==2?(pe+=te[(Ae&3)<<4],pe+=le+le):ye==4&&(pe+=te[(Ae&15)<<2],pe+=le),pe}C.src="data:audio/x-"+u.substr(-3)+";base64,"+U(n),E(C)},C.src=b,Browser.safeSetTimeout(function(){E(C)},1e4)}else return I()},Module.preloadPlugins.push(e);function r(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}var o=Module.canvas;o&&(o.requestPointerLock=o.requestPointerLock||o.mozRequestPointerLock||o.webkitRequestPointerLock||o.msRequestPointerLock||function(){},o.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},o.exitPointerLock=o.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",r,!1),document.addEventListener("mozpointerlockchange",r,!1),document.addEventListener("webkitpointerlockchange",r,!1),document.addEventListener("mspointerlockchange",r,!1),Module.elementPointerLock&&o.addEventListener("click",function(a){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),a.preventDefault())},!1))},createContext:function(t,e,r,o){if(e&&Module.ctx&&t==Module.canvas)return Module.ctx;var a,n;if(e){var u={antialias:!1,alpha:!1};if(o)for(var A in o)u[A]=o[A];n=GL.createContext(t,u),n&&(a=GL.getContext(n).GLctx)}else a=t.getContext("2d");return a?(r&&(e||assert(typeof GLctx>"u","cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=a,e&&GL.makeContextCurrent(n),Module.useWebGL=e,Browser.moduleContextCreatedCallbacks.forEach(function(p){p()}),Browser.init()),a):null},destroyContext:function(t,e,r){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(t,e,r){Browser.lockPointer=t,Browser.resizeCanvas=e,Browser.vrDevice=r,typeof Browser.lockPointer>"u"&&(Browser.lockPointer=!0),typeof Browser.resizeCanvas>"u"&&(Browser.resizeCanvas=!1),typeof Browser.vrDevice>"u"&&(Browser.vrDevice=null);var o=Module.canvas;function a(){Browser.isFullscreen=!1;var u=o.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===u?(o.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},o.exitFullscreen=o.exitFullscreen.bind(document),Browser.lockPointer&&o.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(u.parentNode.insertBefore(o,u),u.parentNode.removeChild(u),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(o)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",a,!1),document.addEventListener("mozfullscreenchange",a,!1),document.addEventListener("webkitfullscreenchange",a,!1),document.addEventListener("MSFullscreenChange",a,!1));var n=document.createElement("div");o.parentNode.insertBefore(n,o),n.appendChild(o),n.requestFullscreen=n.requestFullscreen||n.mozRequestFullScreen||n.msRequestFullscreen||(n.webkitRequestFullscreen?function(){n.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(n.webkitRequestFullScreen?function(){n.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),r?n.requestFullscreen({vrDisplay:r}):n.requestFullscreen()},requestFullScreen:function(t,e,r){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(o,a,n){return Browser.requestFullscreen(o,a,n)},Browser.requestFullscreen(t,e,r)},nextRAF:0,fakeRequestAnimationFrame:function(t){var e=Date.now();if(Browser.nextRAF===0)Browser.nextRAF=e+1e3/60;else for(;e+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var r=Math.max(Browser.nextRAF-e,0);setTimeout(t,r)},requestAnimationFrame:function t(e){typeof window>"u"?Browser.fakeRequestAnimationFrame(e):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(e))},safeCallback:function(t){return function(){if(!ABORT)return t.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var t=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],t.forEach(function(e){e()})}},safeRequestAnimationFrame:function(t){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))})},safeSetTimeout:function(t,e){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?t():Browser.queuedAsyncCallbacks.push(t))},e)},safeSetInterval:function(t,e){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&t()},e)},getMimetype:function(t){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[t.substr(t.lastIndexOf(".")+1)]},getUserMedia:function(t){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(t)},getMovementX:function(t){return t.movementX||t.mozMovementX||t.webkitMovementX||0},getMovementY:function(t){return t.movementY||t.mozMovementY||t.webkitMovementY||0},getMouseWheelDelta:function(t){var e=0;switch(t.type){case"DOMMouseScroll":e=t.detail;break;case"mousewheel":e=t.wheelDelta;break;case"wheel":e=t.deltaY;break;default:throw"unrecognized mouse wheel event: "+t.type}return e},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(t){if(Browser.pointerLock)t.type!="mousemove"&&"mozMovementX"in t?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(t),Browser.mouseMovementY=Browser.getMovementY(t)),typeof SDL<"u"?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var e=Module.canvas.getBoundingClientRect(),r=Module.canvas.width,o=Module.canvas.height,a=typeof window.scrollX<"u"?window.scrollX:window.pageXOffset,n=typeof window.scrollY<"u"?window.scrollY:window.pageYOffset;if(t.type==="touchstart"||t.type==="touchend"||t.type==="touchmove"){var u=t.touch;if(u===void 0)return;var A=u.pageX-(a+e.left),p=u.pageY-(n+e.top);A=A*(r/e.width),p=p*(o/e.height);var h={x:A,y:p};if(t.type==="touchstart")Browser.lastTouches[u.identifier]=h,Browser.touches[u.identifier]=h;else if(t.type==="touchend"||t.type==="touchmove"){var E=Browser.touches[u.identifier];E||(E=h),Browser.lastTouches[u.identifier]=E,Browser.touches[u.identifier]=h}return}var I=t.pageX-(a+e.left),v=t.pageY-(n+e.top);I=I*(r/e.width),v=v*(o/e.height),Browser.mouseMovementX=I-Browser.mouseX,Browser.mouseMovementY=v-Browser.mouseY,Browser.mouseX=I,Browser.mouseY=v}},asyncLoad:function(t,e,r,o){var a=o?"":"al "+t;Module.readAsync(t,function(n){assert(n,'Loading data file "'+t+'" failed (no arrayBuffer).'),e(new Uint8Array(n)),a&&removeRunDependency(a)},function(n){if(r)r();else throw'Loading data file "'+t+'" failed.'}),a&&addRunDependency(a)},resizeListeners:[],updateResizeListeners:function(){var t=Module.canvas;Browser.resizeListeners.forEach(function(e){e(t.width,t.height)})},setCanvasSize:function(t,e,r){var o=Module.canvas;Browser.updateCanvasDimensions(o,t,e),r||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t|8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL<"u"){var t=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];t=t&-8388609,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=t}Browser.updateResizeListeners()},updateCanvasDimensions:function(t,e,r){e&&r?(t.widthNative=e,t.heightNative=r):(e=t.widthNative,r=t.heightNative);var o=e,a=r;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(o/a>2];return e},getStr:function(){var t=Pointer_stringify(SYSCALLS.get());return t},get64:function(){var t=SYSCALLS.get(),e=SYSCALLS.get();return t>=0?assert(e===0):assert(e===-1),t},getZero:function(){assert(SYSCALLS.get()===0)}};function ___syscall6(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD();return FS.close(r),0}catch(o){return(typeof FS>"u"||!(o instanceof FS.ErrnoError))&&abort(o),-o.errno}}function ___syscall54(t,e){SYSCALLS.varargs=e;try{return 0}catch(r){return(typeof FS>"u"||!(r instanceof FS.ErrnoError))&&abort(r),-r.errno}}function _typeModule(t){var e=[[0,1,"X"],[1,1,"const X"],[128,1,"X *"],[256,1,"X &"],[384,1,"X &&"],[512,1,"std::shared_ptr"],[640,1,"std::unique_ptr"],[5120,1,"std::vector"],[6144,2,"std::array"],[9216,-1,"std::function"]];function r(p,h,E,I,v,b){if(h==1){var C=I&896;(C==128||C==256||C==384)&&(p="X const")}var T;return b?T=E.replace("X",p).replace("Y",v):T=p.replace("X",E).replace("Y",v),T.replace(/([*&]) (?=[*&])/g,"$1")}function o(p,h,E,I,v){throw new Error(p+" type "+E.replace("X",h+"?")+(I?" with flag "+I:"")+" in "+v)}function a(p,h,E,I,v,b,C,T){b===void 0&&(b="X"),T===void 0&&(T=1);var L=E(p);if(L)return L;var U=I(p),J=U.placeholderFlag,te=e[J];C&&te&&(b=r(C[2],C[0],b,te[0],"?",!0));var le;J==0&&(le="Unbound"),J>=10&&(le="Corrupt"),T>20&&(le="Deeply nested"),le&&o(le,p,b,J,v||"?");var pe=U.paramList[0],Ae=a(pe,h,E,I,v,b,te,T+1),ye,ae={flags:te[0],id:p,name:"",paramList:[Ae]},we=[],Pe="?";switch(U.placeholderFlag){case 1:ye=Ae.spec;break;case 2:if((Ae.flags&15360)==1024&&Ae.spec.ptrSize==1){ae.flags=7168;break}case 3:case 6:case 5:ye=Ae.spec,Ae.flags&15360;break;case 8:Pe=""+U.paramList[1],ae.paramList.push(U.paramList[1]);break;case 9:for(var g=0,Ee=U.paramList[1];g>2]=t),t}function _llvm_stacksave(){var t=_llvm_stacksave;return t.LLVM_SAVEDSTACKS||(t.LLVM_SAVEDSTACKS=[]),t.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),t.LLVM_SAVEDSTACKS.length-1}function ___syscall140(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.getStreamFromFD(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=SYSCALLS.get(),u=SYSCALLS.get(),A=a;return FS.llseek(r,A,u),HEAP32[n>>2]=r.position,r.getdents&&A===0&&u===0&&(r.getdents=null),0}catch(p){return(typeof FS>"u"||!(p instanceof FS.ErrnoError))&&abort(p),-p.errno}}function ___syscall146(t,e){SYSCALLS.varargs=e;try{var r=SYSCALLS.get(),o=SYSCALLS.get(),a=SYSCALLS.get(),n=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(E,I){var v=___syscall146.buffers[E];assert(v),I===0||I===10?((E===1?Module.print:Module.printErr)(UTF8ArrayToString(v,0)),v.length=0):v.push(I)});for(var u=0;u>2],p=HEAP32[o+(u*8+4)>>2],h=0;h"u"||!(E instanceof FS.ErrnoError))&&abort(E),-E.errno}}function __nbind_finish(){for(var t=0,e=_nbind.BindClass.list;tt.pageSize/2||e>t.pageSize-r){var o=_nbind.typeNameTbl.NBind.proto;return o.lalloc(e)}else return HEAPU32[t.usedPtr]=r+e,t.rootPtr+r},t.lreset=function(e,r){var o=HEAPU32[t.pagePtr];if(o){var a=_nbind.typeNameTbl.NBind.proto;a.lreset(e,r)}else HEAPU32[t.usedPtr]=e},t}();_nbind.Pool=Pool;function constructType(t,e){var r=t==10240?_nbind.makeTypeNameTbl[e.name]||_nbind.BindType:_nbind.makeTypeKindTbl[t],o=new r(e);return typeIdTbl[e.id]=o,_nbind.typeNameTbl[e.name]=o,o}_nbind.constructType=constructType;function getType(t){return typeIdTbl[t]}_nbind.getType=getType;function queryType(t){var e=HEAPU8[t],r=_nbind.structureList[e][1];t/=4,r<0&&(++t,r=HEAPU32[t]+1);var o=Array.prototype.slice.call(HEAPU32.subarray(t+1,t+1+r));return e==9&&(o=[o[0],o.slice(1)]),{paramList:o,placeholderFlag:e}}_nbind.queryType=queryType;function getTypes(t,e){return t.map(function(r){return typeof r=="number"?_nbind.getComplexType(r,constructType,getType,queryType,e):_nbind.typeNameTbl[r]})}_nbind.getTypes=getTypes;function readTypeIdList(t,e){return Array.prototype.slice.call(HEAPU32,t/4,t/4+e)}_nbind.readTypeIdList=readTypeIdList;function readAsciiString(t){for(var e=t;HEAPU8[e++];);return String.fromCharCode.apply("",HEAPU8.subarray(t,e-1))}_nbind.readAsciiString=readAsciiString;function readPolicyList(t){var e={};if(t)for(;;){var r=HEAPU32[t/4];if(!r)break;e[readAsciiString(r)]=!0,t+=4}return e}_nbind.readPolicyList=readPolicyList;function getDynCall(t,e){var r={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},o=t.map(function(n){return r[n.name]||"i"}).join(""),a=Module["dynCall_"+o];if(!a)throw new Error("dynCall_"+o+" not found for "+e+"("+t.map(function(n){return n.name}).join(", ")+")");return a}_nbind.getDynCall=getDynCall;function addMethod(t,e,r,o){var a=t[e];t.hasOwnProperty(e)&&a?((a.arity||a.arity===0)&&(a=_nbind.makeOverloader(a,a.arity),t[e]=a),a.addMethod(r,o)):(r.arity=o,t[e]=r)}_nbind.addMethod=addMethod;function throwError(t){throw new Error(t)}_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.heap=HEAPU32,r.ptrSize=4,r}return e.prototype.needsWireRead=function(r){return!!this.wireRead||!!this.makeWireRead},e.prototype.needsWireWrite=function(r){return!!this.wireWrite||!!this.makeWireWrite},e}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(t){__extends(e,t);function e(r){var o=t.call(this,r)||this,a=r.flags&32?{32:HEAPF32,64:HEAPF64}:r.flags&8?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return o.heap=a[r.ptrSize*8],o.ptrSize=r.ptrSize,o}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="number")return a;throw new Error("Type mismatch")}},e}(BindType);_nbind.PrimitiveType=PrimitiveType;function pushCString(t,e){if(t==null){if(e&&e.Nullable)return 0;throw new Error("Type mismatch")}if(e&&e.Strict){if(typeof t!="string")throw new Error("Type mismatch")}else t=t.toString();var r=Module.lengthBytesUTF8(t)+1,o=_nbind.Pool.lalloc(r);return Module.stringToUTF8Array(t,HEAPU8,o,r),o}_nbind.pushCString=pushCString;function popCString(t){return t===0?null:Module.Pointer_stringify(t)}_nbind.popCString=popCString;var CStringType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=popCString,r.wireWrite=pushCString,r.readResources=[_nbind.resources.pool],r.writeResources=[_nbind.resources.pool],r}return e.prototype.makeWireWrite=function(r,o){return function(a){return pushCString(a,o)}},e}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(t){__extends(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.wireRead=function(o){return!!o},r}return e.prototype.needsWireWrite=function(r){return!!r&&!!r.Strict},e.prototype.makeWireRead=function(r){return"!!("+r+")"},e.prototype.makeWireWrite=function(r,o){return o&&o.Strict&&function(a){if(typeof a=="boolean")return a;throw new Error("Type mismatch")}||r},e}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function t(){}return t.prototype.persist=function(){this.__nbindState|=1},t}();_nbind.Wrapper=Wrapper;function makeBound(t,e){var r=function(o){__extends(a,o);function a(n,u,A,p){var h=o.call(this)||this;if(!(h instanceof a))return new(Function.prototype.bind.apply(a,Array.prototype.concat.apply([null],arguments)));var E=u,I=A,v=p;if(n!==_nbind.ptrMarker){var b=h.__nbindConstructor.apply(h,arguments);E=4608,v=HEAPU32[b/4],I=HEAPU32[b/4+1]}var C={configurable:!0,enumerable:!1,value:null,writable:!1},T={__nbindFlags:E,__nbindPtr:I};v&&(T.__nbindShared=v,_nbind.mark(h));for(var L=0,U=Object.keys(T);L>=1;var r=_nbind.valueList[t];return _nbind.valueList[t]=firstFreeValue,firstFreeValue=t,r}else{if(e)return _nbind.popShared(t,e);throw new Error("Invalid value slot "+t)}}_nbind.popValue=popValue;var valueBase=18446744073709552e3;function push64(t){return typeof t=="number"?t:pushValue(t)*4096+valueBase}function pop64(t){return t=3?u=Buffer.from(n):u=new Buffer(n),u.copy(o)}else getBuffer(o).set(n)}}_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var t=0,e=dirtyList;t>2]=DYNAMIC_BASE,staticSealed=!0;function invoke_viiiii(t,e,r,o,a,n){try{Module.dynCall_viiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_vif(t,e,r){try{Module.dynCall_vif(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_vid(t,e,r){try{Module.dynCall_vid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_fiff(t,e,r,o){try{return Module.dynCall_fiff(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_vi(t,e){try{Module.dynCall_vi(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_vii(t,e,r){try{Module.dynCall_vii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_ii(t,e){try{return Module.dynCall_ii(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_viddi(t,e,r,o,a){try{Module.dynCall_viddi(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_vidd(t,e,r,o){try{Module.dynCall_vidd(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_iiii(t,e,r,o){try{return Module.dynCall_iiii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_diii(t,e,r,o){try{return Module.dynCall_diii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_di(t,e){try{return Module.dynCall_di(t,e)}catch(r){if(typeof r!="number"&&r!=="longjmp")throw r;Module.setThrew(1,0)}}function invoke_iid(t,e,r){try{return Module.dynCall_iid(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_iii(t,e,r){try{return Module.dynCall_iii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiddi(t,e,r,o,a,n){try{Module.dynCall_viiddi(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiiiii(t,e,r,o,a,n,u){try{Module.dynCall_viiiiii(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_dii(t,e,r){try{return Module.dynCall_dii(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_i(t){try{return Module.dynCall_i(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_iiiiii(t,e,r,o,a,n){try{return Module.dynCall_iiiiii(t,e,r,o,a,n)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viiid(t,e,r,o,a){try{Module.dynCall_viiid(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}function invoke_viififi(t,e,r,o,a,n,u){try{Module.dynCall_viififi(t,e,r,o,a,n,u)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_viii(t,e,r,o){try{Module.dynCall_viii(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_v(t){try{Module.dynCall_v(t)}catch(e){if(typeof e!="number"&&e!=="longjmp")throw e;Module.setThrew(1,0)}}function invoke_viid(t,e,r,o){try{Module.dynCall_viid(t,e,r,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_idd(t,e,r){try{return Module.dynCall_idd(t,e,r)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viiii(t,e,r,o,a){try{Module.dynCall_viiii(t,e,r,o,a)}catch(n){if(typeof n!="number"&&n!=="longjmp")throw n;Module.setThrew(1,0)}}Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:1/0},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(t,e,r){var o=new t.Int8Array(r),a=new t.Int16Array(r),n=new t.Int32Array(r),u=new t.Uint8Array(r),A=new t.Uint16Array(r),p=new t.Uint32Array(r),h=new t.Float32Array(r),E=new t.Float64Array(r),I=e.DYNAMICTOP_PTR|0,v=e.tempDoublePtr|0,b=e.ABORT|0,C=e.STACKTOP|0,T=e.STACK_MAX|0,L=e.cttz_i8|0,U=e.___dso_handle|0,J=0,te=0,le=0,pe=0,Ae=t.NaN,ye=t.Infinity,ae=0,we=0,Pe=0,g=0,Ee=0,De=0,ce=t.Math.floor,ne=t.Math.abs,ee=t.Math.sqrt,Ie=t.Math.pow,ke=t.Math.cos,ht=t.Math.sin,H=t.Math.tan,lt=t.Math.acos,Re=t.Math.asin,Qe=t.Math.atan,be=t.Math.atan2,_e=t.Math.exp,Te=t.Math.log,Je=t.Math.ceil,He=t.Math.imul,x=t.Math.min,w=t.Math.max,S=t.Math.clz32,y=t.Math.fround,F=e.abort,z=e.assert,X=e.enlargeMemory,Z=e.getTotalMemory,ie=e.abortOnCannotGrowMemory,Se=e.invoke_viiiii,Ne=e.invoke_vif,ot=e.invoke_vid,dt=e.invoke_fiff,jt=e.invoke_vi,$t=e.invoke_vii,xt=e.invoke_ii,an=e.invoke_viddi,Qr=e.invoke_vidd,mr=e.invoke_iiii,xr=e.invoke_diii,Wr=e.invoke_di,Vn=e.invoke_iid,Ns=e.invoke_iii,Ri=e.invoke_viiddi,ps=e.invoke_viiiiii,io=e.invoke_dii,Si=e.invoke_i,Ls=e.invoke_iiiiii,so=e.invoke_viiid,cc=e.invoke_viififi,cu=e.invoke_viii,ap=e.invoke_v,lp=e.invoke_viid,Ms=e.invoke_idd,Dn=e.invoke_viiii,oo=e._emscripten_asm_const_iiiii,Os=e._emscripten_asm_const_iiidddddd,ml=e._emscripten_asm_const_iiiid,yl=e.__nbind_reference_external,ao=e._emscripten_asm_const_iiiiiiii,Kn=e._removeAccessorPrefix,Mn=e._typeModule,Ni=e.__nbind_register_pool,On=e.__decorate,_i=e._llvm_stackrestore,tr=e.___cxa_atexit,Me=e.__extends,ii=e.__nbind_get_value_object,Oa=e.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,hr=e._emscripten_set_main_loop_timing,uc=e.__nbind_register_primitive,uu=e.__nbind_register_type,Ac=e._emscripten_memcpy_big,El=e.__nbind_register_function,vA=e.___setErrNo,Au=e.__nbind_register_class,Ce=e.__nbind_finish,Tt=e._abort,fc=e._nbind_value,Hi=e._llvm_stacksave,fu=e.___syscall54,Yt=e._defineHidden,Cl=e._emscripten_set_main_loop,DA=e._emscripten_get_now,cp=e.__nbind_register_callback_signature,pc=e._emscripten_asm_const_iiiiii,PA=e.__nbind_free_external,Qn=e._emscripten_asm_const_iiii,hi=e._emscripten_asm_const_iiididi,hc=e.___syscall6,SA=e._atexit,sa=e.___syscall140,Li=e.___syscall146,_o=y(0);let Ze=y(0);function lo(s){s=s|0;var l=0;return l=C,C=C+s|0,C=C+15&-16,l|0}function gc(){return C|0}function pu(s){s=s|0,C=s}function ji(s,l){s=s|0,l=l|0,C=s,T=l}function hu(s,l){s=s|0,l=l|0,J||(J=s,te=l)}function xA(s){s=s|0,De=s}function Ua(){return De|0}function dc(){var s=0,l=0;Dr(8104,8,400)|0,Dr(8504,408,540)|0,s=9044,l=s+44|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));o[9088]=0,o[9089]=1,n[2273]=0,n[2274]=948,n[2275]=948,tr(17,8104,U|0)|0}function hs(s){s=s|0,ft(s+948|0)}function _t(s){return s=y(s),((Du(s)|0)&2147483647)>>>0>2139095040|0}function Fn(s,l,c){s=s|0,l=l|0,c=c|0;e:do if(n[s+(l<<3)+4>>2]|0)s=s+(l<<3)|0;else{if((l|2|0)==3&&n[s+60>>2]|0){s=s+56|0;break}switch(l|0){case 0:case 2:case 4:case 5:{if(n[s+52>>2]|0){s=s+48|0;break e}break}default:}if(n[s+68>>2]|0){s=s+64|0;break}else{s=(l|1|0)==5?948:c;break}}while(0);return s|0}function Ci(s){s=s|0;var l=0;return l=pD(1e3)|0,oa(s,(l|0)!=0,2456),n[2276]=(n[2276]|0)+1,Dr(l|0,8104,1e3)|0,o[s+2>>0]|0&&(n[l+4>>2]=2,n[l+12>>2]=4),n[l+976>>2]=s,l|0}function oa(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,yg(s,5,3197,f)),C=d}function co(){return Ci(956)|0}function Us(s){s=s|0;var l=0;return l=Vt(1e3)|0,aa(l,s),oa(n[s+976>>2]|0,1,2456),n[2276]=(n[2276]|0)+1,n[l+944>>2]=0,l|0}function aa(s,l){s=s|0,l=l|0;var c=0;Dr(s|0,l|0,948)|0,Fm(s+948|0,l+948|0),c=s+960|0,s=l+960|0,l=c+40|0;do n[c>>2]=n[s>>2],c=c+4|0,s=s+4|0;while((c|0)<(l|0))}function la(s){s=s|0;var l=0,c=0,f=0,d=0;if(l=s+944|0,c=n[l>>2]|0,c|0&&(Ho(c+948|0,s)|0,n[l>>2]=0),c=wi(s)|0,c|0){l=0;do n[(gs(s,l)|0)+944>>2]=0,l=l+1|0;while((l|0)!=(c|0))}c=s+948|0,f=n[c>>2]|0,d=s+952|0,l=n[d>>2]|0,(l|0)!=(f|0)&&(n[d>>2]=l+(~((l+-4-f|0)>>>2)<<2)),ds(c),hD(s),n[2276]=(n[2276]|0)+-1}function Ho(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0;f=n[s>>2]|0,k=s+4|0,c=n[k>>2]|0,m=c;e:do if((f|0)==(c|0))d=f,B=4;else for(s=f;;){if((n[s>>2]|0)==(l|0)){d=s,B=4;break e}if(s=s+4|0,(s|0)==(c|0)){s=0;break}}while(0);return(B|0)==4&&((d|0)!=(c|0)?(f=d+4|0,s=m-f|0,l=s>>2,l&&(Mw(d|0,f|0,s|0)|0,c=n[k>>2]|0),s=d+(l<<2)|0,(c|0)==(s|0)||(n[k>>2]=c+(~((c+-4-s|0)>>>2)<<2)),s=1):s=0),s|0}function wi(s){return s=s|0,(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2|0}function gs(s,l){s=s|0,l=l|0;var c=0;return c=n[s+948>>2]|0,(n[s+952>>2]|0)-c>>2>>>0>l>>>0?s=n[c+(l<<2)>>2]|0:s=0,s|0}function ds(s){s=s|0;var l=0,c=0,f=0,d=0;f=C,C=C+32|0,l=f,d=n[s>>2]|0,c=(n[s+4>>2]|0)-d|0,((n[s+8>>2]|0)-d|0)>>>0>c>>>0&&(d=c>>2,wp(l,d,d,s+8|0),Ig(s,l),UA(l)),C=f}function ms(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0;O=wi(s)|0;do if(O|0){if((n[(gs(s,0)|0)+944>>2]|0)==(s|0)){if(!(Ho(s+948|0,l)|0))break;Dr(l+400|0,8504,540)|0,n[l+944>>2]=0,Le(s);break}B=n[(n[s+976>>2]|0)+12>>2]|0,k=s+948|0,Q=(B|0)==0,c=0,m=0;do f=n[(n[k>>2]|0)+(m<<2)>>2]|0,(f|0)==(l|0)?Le(s):(d=Us(f)|0,n[(n[k>>2]|0)+(c<<2)>>2]=d,n[d+944>>2]=s,Q||LT[B&15](f,d,s,c),c=c+1|0),m=m+1|0;while((m|0)!=(O|0));if(c>>>0>>0){Q=s+948|0,k=s+952|0,B=c,c=n[k>>2]|0;do m=(n[Q>>2]|0)+(B<<2)|0,f=m+4|0,d=c-f|0,l=d>>2,l&&(Mw(m|0,f|0,d|0)|0,c=n[k>>2]|0),d=c,f=m+(l<<2)|0,(d|0)!=(f|0)&&(c=d+(~((d+-4-f|0)>>>2)<<2)|0,n[k>>2]=c),B=B+1|0;while((B|0)!=(O|0))}}while(0)}function _s(s){s=s|0;var l=0,c=0,f=0,d=0;Un(s,(wi(s)|0)==0,2491),Un(s,(n[s+944>>2]|0)==0,2545),l=s+948|0,c=n[l>>2]|0,f=s+952|0,d=n[f>>2]|0,(d|0)!=(c|0)&&(n[f>>2]=d+(~((d+-4-c|0)>>>2)<<2)),ds(l),l=s+976|0,c=n[l>>2]|0,Dr(s|0,8104,1e3)|0,o[c+2>>0]|0&&(n[s+4>>2]=2,n[s+12>>2]=4),n[l>>2]=c}function Un(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;d=C,C=C+16|0,f=d,l||(n[f>>2]=c,Ao(s,5,3197,f)),C=d}function Pn(){return n[2276]|0}function ys(){var s=0;return s=pD(20)|0,We((s|0)!=0,2592),n[2277]=(n[2277]|0)+1,n[s>>2]=n[239],n[s+4>>2]=n[240],n[s+8>>2]=n[241],n[s+12>>2]=n[242],n[s+16>>2]=n[243],s|0}function We(s,l){s=s|0,l=l|0;var c=0,f=0;f=C,C=C+16|0,c=f,s||(n[c>>2]=l,Ao(0,5,3197,c)),C=f}function tt(s){s=s|0,hD(s),n[2277]=(n[2277]|0)+-1}function It(s,l){s=s|0,l=l|0;var c=0;l?(Un(s,(wi(s)|0)==0,2629),c=1):(c=0,l=0),n[s+964>>2]=l,n[s+988>>2]=c}function nr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+8|0,d=f+4|0,B=f,n[d>>2]=l,Un(s,(n[l+944>>2]|0)==0,2709),Un(s,(n[s+964>>2]|0)==0,2763),$(s),l=s+948|0,n[B>>2]=(n[l>>2]|0)+(c<<2),n[m>>2]=n[B>>2],me(l,m,d)|0,n[(n[d>>2]|0)+944>>2]=s,Le(s),C=f}function $(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;if(c=wi(s)|0,c|0&&(n[(gs(s,0)|0)+944>>2]|0)!=(s|0)){f=n[(n[s+976>>2]|0)+12>>2]|0,d=s+948|0,m=(f|0)==0,l=0;do B=n[(n[d>>2]|0)+(l<<2)>>2]|0,k=Us(B)|0,n[(n[d>>2]|0)+(l<<2)>>2]=k,n[k+944>>2]=s,m||LT[f&15](B,k,s,l),l=l+1|0;while((l|0)!=(c|0))}}function me(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0;et=C,C=C+64|0,q=et+52|0,k=et+48|0,se=et+28|0,Ge=et+24|0,Oe=et+20|0,Fe=et,f=n[s>>2]|0,m=f,l=f+((n[l>>2]|0)-m>>2<<2)|0,f=s+4|0,d=n[f>>2]|0,B=s+8|0;do if(d>>>0<(n[B>>2]|0)>>>0){if((l|0)==(d|0)){n[l>>2]=n[c>>2],n[f>>2]=(n[f>>2]|0)+4;break}_A(s,l,d,l+4|0),l>>>0<=c>>>0&&(c=(n[f>>2]|0)>>>0>c>>>0?c+4|0:c),n[l>>2]=n[c>>2]}else{f=(d-m>>2)+1|0,d=N(s)|0,d>>>0>>0&&zr(s),M=n[s>>2]|0,O=(n[B>>2]|0)-M|0,m=O>>1,wp(Fe,O>>2>>>0>>1>>>0?m>>>0>>0?f:m:d,l-M>>2,s+8|0),M=Fe+8|0,f=n[M>>2]|0,m=Fe+12|0,O=n[m>>2]|0,B=O,Q=f;do if((f|0)==(O|0)){if(O=Fe+4|0,f=n[O>>2]|0,Xe=n[Fe>>2]|0,d=Xe,f>>>0<=Xe>>>0){f=B-d>>1,f=(f|0)==0?1:f,wp(se,f,f>>>2,n[Fe+16>>2]|0),n[Ge>>2]=n[O>>2],n[Oe>>2]=n[M>>2],n[k>>2]=n[Ge>>2],n[q>>2]=n[Oe>>2],vw(se,k,q),f=n[Fe>>2]|0,n[Fe>>2]=n[se>>2],n[se>>2]=f,f=se+4|0,Xe=n[O>>2]|0,n[O>>2]=n[f>>2],n[f>>2]=Xe,f=se+8|0,Xe=n[M>>2]|0,n[M>>2]=n[f>>2],n[f>>2]=Xe,f=se+12|0,Xe=n[m>>2]|0,n[m>>2]=n[f>>2],n[f>>2]=Xe,UA(se),f=n[M>>2]|0;break}m=f,B=((m-d>>2)+1|0)/-2|0,k=f+(B<<2)|0,d=Q-m|0,m=d>>2,m&&(Mw(k|0,f|0,d|0)|0,f=n[O>>2]|0),Xe=k+(m<<2)|0,n[M>>2]=Xe,n[O>>2]=f+(B<<2),f=Xe}while(0);n[f>>2]=n[c>>2],n[M>>2]=(n[M>>2]|0)+4,l=Bg(s,Fe,l)|0,UA(Fe)}while(0);return C=et,l|0}function Le(s){s=s|0;var l=0;do{if(l=s+984|0,o[l>>0]|0)break;o[l>>0]=1,h[s+504>>2]=y(Ae),s=n[s+944>>2]|0}while((s|0)!=0)}function ft(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function pt(s){return s=s|0,n[s+944>>2]|0}function Rt(s){s=s|0,Un(s,(n[s+964>>2]|0)!=0,2832),Le(s)}function er(s){return s=s|0,(o[s+984>>0]|0)!=0|0}function Zr(s,l){s=s|0,l=l|0,LUe(s,l,400)|0&&(Dr(s|0,l|0,400)|0,Le(s))}function qi(s){s=s|0;var l=Ze;return l=y(h[s+44>>2]),s=_t(l)|0,y(s?y(0):l)}function es(s){s=s|0;var l=Ze;return l=y(h[s+48>>2]),_t(l)|0&&(l=o[(n[s+976>>2]|0)+2>>0]|0?y(1):y(0)),y(l)}function xi(s,l){s=s|0,l=l|0,n[s+980>>2]=l}function jo(s){return s=s|0,n[s+980>>2]|0}function bA(s,l){s=s|0,l=l|0;var c=0;c=s+4|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function kA(s){return s=s|0,n[s+4>>2]|0}function up(s,l){s=s|0,l=l|0;var c=0;c=s+8|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function ng(s){return s=s|0,n[s+8>>2]|0}function gu(s,l){s=s|0,l=l|0;var c=0;c=s+12|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function ig(s){return s=s|0,n[s+12>>2]|0}function du(s,l){s=s|0,l=l|0;var c=0;c=s+16|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function uo(s){return s=s|0,n[s+16>>2]|0}function QA(s,l){s=s|0,l=l|0;var c=0;c=s+20|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function mc(s){return s=s|0,n[s+20>>2]|0}function ca(s,l){s=s|0,l=l|0;var c=0;c=s+24|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function sg(s){return s=s|0,n[s+24>>2]|0}function yc(s,l){s=s|0,l=l|0;var c=0;c=s+28|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function Pm(s){return s=s|0,n[s+28>>2]|0}function og(s,l){s=s|0,l=l|0;var c=0;c=s+32|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function $n(s){return s=s|0,n[s+32>>2]|0}function Ap(s,l){s=s|0,l=l|0;var c=0;c=s+36|0,(n[c>>2]|0)!=(l|0)&&(n[c>>2]=l,Le(s))}function ag(s){return s=s|0,n[s+36>>2]|0}function FA(s,l){s=s|0,l=y(l);var c=0;c=s+40|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Hs(s,l){s=s|0,l=y(l);var c=0;c=s+44|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function mu(s,l){s=s|0,l=y(l);var c=0;c=s+48|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Ha(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+52|0,d=s+56|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Gi(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+52|0,c=s+56|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function ua(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+52|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function yu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Es(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+132+(l<<3)|0,l=s+132+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Ec(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+132+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Cc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function G(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+60+(l<<3)|0,l=s+60+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function Dt(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+60+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function wl(s,l){s=s|0,l=l|0;var c=0;c=s+60+(l<<3)+4|0,(n[c>>2]|0)!=3&&(h[s+60+(l<<3)>>2]=y(Ae),n[c>>2]=3,Le(s))}function bi(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function wc(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=m?0:2,d=s+204+(l<<3)|0,l=s+204+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function ct(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=l+204+(c<<3)|0,l=n[f+4>>2]|0,c=s,n[c>>2]=n[f>>2],n[c+4>>2]=l}function Eu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0,m=0;m=_t(c)|0,f=(m^1)&1,d=s+276+(l<<3)|0,l=s+276+(l<<3)+4|0,m|y(h[d>>2])==c&&(n[l>>2]|0)==(f|0)||(h[d>>2]=c,n[l>>2]=f,Le(s))}function lg(s,l){return s=s|0,l=l|0,y(h[s+276+(l<<3)>>2])}function mw(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+348|0,d=s+352|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function TA(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+348|0,c=s+352|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function fp(s){s=s|0;var l=0;l=s+352|0,(n[l>>2]|0)!=3&&(h[s+348>>2]=y(Ae),n[l>>2]=3,Le(s))}function Br(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+348|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Cs(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+356|0,d=s+360|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function cg(s,l){s=s|0,l=y(l);var c=0,f=0;f=s+356|0,c=s+360|0,y(h[f>>2])==l&&(n[c>>2]|0)==2||(h[f>>2]=l,f=_t(l)|0,n[c>>2]=f?3:2,Le(s))}function ug(s){s=s|0;var l=0;l=s+360|0,(n[l>>2]|0)!=3&&(h[s+356>>2]=y(Ae),n[l>>2]=3,Le(s))}function Ag(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+356|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function pp(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Ic(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+364|0,d=s+368|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function Ct(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+364|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Sm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function fg(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+372|0,d=s+376|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function pg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+372|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Cu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function xm(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+380|0,d=s+384|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function hg(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+380|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function wu(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=(m^1)&1,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function yw(s,l){s=s|0,l=y(l);var c=0,f=0,d=0,m=0;m=_t(l)|0,c=m?0:2,f=s+388|0,d=s+392|0,m|y(h[f>>2])==l&&(n[d>>2]|0)==(c|0)||(h[f>>2]=l,n[d>>2]=c,Le(s))}function bm(s,l){s=s|0,l=l|0;var c=0,f=0;f=l+388|0,c=n[f+4>>2]|0,l=s,n[l>>2]=n[f>>2],n[l+4>>2]=c}function Aa(s,l){s=s|0,l=y(l);var c=0;c=s+396|0,y(h[c>>2])!=l&&(h[c>>2]=l,Le(s))}function Bc(s){return s=s|0,y(h[s+396>>2])}function Il(s){return s=s|0,y(h[s+400>>2])}function Iu(s){return s=s|0,y(h[s+404>>2])}function gg(s){return s=s|0,y(h[s+408>>2])}function RA(s){return s=s|0,y(h[s+412>>2])}function hp(s){return s=s|0,y(h[s+416>>2])}function ja(s){return s=s|0,y(h[s+420>>2])}function dg(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+424+(l<<2)>>2])}function gp(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+448+(l<<2)>>2])}function qo(s,l){switch(s=s|0,l=l|0,Un(s,(l|0)<6,2918),l|0){case 0:{l=(n[s+496>>2]|0)==2?5:4;break}case 2:{l=(n[s+496>>2]|0)==2?4:5;break}default:}return y(h[s+472+(l<<2)>>2])}function ws(s,l){s=s|0,l=l|0;var c=0,f=Ze;return c=n[s+4>>2]|0,(c|0)==(n[l+4>>2]|0)?c?(f=y(h[s>>2]),s=y(ne(y(f-y(h[l>>2]))))>2]=0,n[f+4>>2]=0,n[f+8>>2]=0,Oa(f|0,s|0,l|0,0),Ao(s,3,(o[f+11>>0]|0)<0?n[f>>2]|0:f,c),s3e(f),C=c}function Go(s,l,c,f){s=y(s),l=y(l),c=c|0,f=f|0;var d=Ze;s=y(s*l),d=y(kT(s,y(1)));do if(Ii(d,y(0))|0)s=y(s-d);else{if(s=y(s-d),Ii(d,y(1))|0){s=y(s+y(1));break}if(c){s=y(s+y(1));break}f||(d>y(.5)?d=y(1):(f=Ii(d,y(.5))|0,d=y(f?1:0)),s=y(s+d))}while(0);return y(s/l)}function NA(s,l,c,f,d,m,B,k,Q,O,M,q,se){s=s|0,l=y(l),c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,k=y(k),Q=y(Q),O=y(O),M=y(M),q=y(q),se=se|0;var Ge=0,Oe=Ze,Fe=Ze,et=Ze,Xe=Ze,at=Ze,Ue=Ze;return Q>2]),Oe!=y(0))?(et=y(Go(l,Oe,0,0)),Xe=y(Go(f,Oe,0,0)),Fe=y(Go(m,Oe,0,0)),Oe=y(Go(k,Oe,0,0))):(Fe=m,et=l,Oe=k,Xe=f),(d|0)==(s|0)?Ge=Ii(Fe,et)|0:Ge=0,(B|0)==(c|0)?se=Ii(Oe,Xe)|0:se=0,!Ge&&(at=y(l-M),!(dp(s,at,Q)|0))&&!(mp(s,at,d,Q)|0)?Ge=mg(s,at,d,m,Q)|0:Ge=1,!se&&(Ue=y(f-q),!(dp(c,Ue,O)|0))&&!(mp(c,Ue,B,O)|0)?se=mg(c,Ue,B,k,O)|0:se=1,se=Ge&se),se|0}function dp(s,l,c){return s=s|0,l=y(l),c=y(c),(s|0)==1?s=Ii(l,c)|0:s=0,s|0}function mp(s,l,c,f){return s=s|0,l=y(l),c=c|0,f=y(f),(s|0)==2&(c|0)==0?l>=f?s=1:s=Ii(l,f)|0:s=0,s|0}function mg(s,l,c,f,d){return s=s|0,l=y(l),c=c|0,f=y(f),d=y(d),(s|0)==2&(c|0)==2&f>l?d<=l?s=1:s=Ii(l,d)|0:s=0,s|0}function fa(s,l,c,f,d,m,B,k,Q,O,M){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,O=O|0,M=M|0;var q=0,se=0,Ge=0,Oe=0,Fe=Ze,et=Ze,Xe=0,at=0,Ue=0,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0,bn=Ze,go=Ze,mo=Ze,yo=0,ya=0;ir=C,C=C+160|0,Xt=ir+152|0,or=ir+120|0,Or=ir+104|0,Ue=ir+72|0,Oe=ir+56|0,Lt=ir+8|0,at=ir,qe=(n[2279]|0)+1|0,n[2279]=qe,Pr=s+984|0,(o[Pr>>0]|0)!=0&&(n[s+512>>2]|0)!=(n[2278]|0)?Xe=4:(n[s+516>>2]|0)==(f|0)?Nr=0:Xe=4,(Xe|0)==4&&(n[s+520>>2]=0,n[s+924>>2]=-1,n[s+928>>2]=-1,h[s+932>>2]=y(-1),h[s+936>>2]=y(-1),Nr=1);e:do if(n[s+964>>2]|0)if(Fe=y(ln(s,2,B)),et=y(ln(s,0,B)),q=s+916|0,mo=y(h[q>>2]),go=y(h[s+920>>2]),bn=y(h[s+932>>2]),NA(d,l,m,c,n[s+924>>2]|0,mo,n[s+928>>2]|0,go,bn,y(h[s+936>>2]),Fe,et,M)|0)Xe=22;else if(Ge=n[s+520>>2]|0,!Ge)Xe=21;else for(se=0;;){if(q=s+524+(se*24|0)|0,bn=y(h[q>>2]),go=y(h[s+524+(se*24|0)+4>>2]),mo=y(h[s+524+(se*24|0)+16>>2]),NA(d,l,m,c,n[s+524+(se*24|0)+8>>2]|0,bn,n[s+524+(se*24|0)+12>>2]|0,go,mo,y(h[s+524+(se*24|0)+20>>2]),Fe,et,M)|0){Xe=22;break e}if(se=se+1|0,se>>>0>=Ge>>>0){Xe=21;break}}else{if(Q){if(q=s+916|0,!(Ii(y(h[q>>2]),l)|0)){Xe=21;break}if(!(Ii(y(h[s+920>>2]),c)|0)){Xe=21;break}if((n[s+924>>2]|0)!=(d|0)){Xe=21;break}q=(n[s+928>>2]|0)==(m|0)?q:0,Xe=22;break}if(Ge=n[s+520>>2]|0,!Ge)Xe=21;else for(se=0;;){if(q=s+524+(se*24|0)|0,Ii(y(h[q>>2]),l)|0&&Ii(y(h[s+524+(se*24|0)+4>>2]),c)|0&&(n[s+524+(se*24|0)+8>>2]|0)==(d|0)&&(n[s+524+(se*24|0)+12>>2]|0)==(m|0)){Xe=22;break e}if(se=se+1|0,se>>>0>=Ge>>>0){Xe=21;break}}}while(0);do if((Xe|0)==21)o[11697]|0?(q=0,Xe=28):(q=0,Xe=31);else if((Xe|0)==22){if(se=(o[11697]|0)!=0,!((q|0)!=0&(Nr^1)))if(se){Xe=28;break}else{Xe=31;break}Oe=q+16|0,n[s+908>>2]=n[Oe>>2],Ge=q+20|0,n[s+912>>2]=n[Ge>>2],(o[11698]|0)==0|se^1||(n[at>>2]=LA(qe)|0,n[at+4>>2]=qe,Ao(s,4,2972,at),se=n[s+972>>2]|0,se|0&&ef[se&127](s),d=qa(d,Q)|0,m=qa(m,Q)|0,ya=+y(h[Oe>>2]),yo=+y(h[Ge>>2]),n[Lt>>2]=d,n[Lt+4>>2]=m,E[Lt+8>>3]=+l,E[Lt+16>>3]=+c,E[Lt+24>>3]=ya,E[Lt+32>>3]=yo,n[Lt+40>>2]=O,Ao(s,4,2989,Lt))}while(0);return(Xe|0)==28&&(se=LA(qe)|0,n[Oe>>2]=se,n[Oe+4>>2]=qe,n[Oe+8>>2]=Nr?3047:11699,Ao(s,4,3038,Oe),se=n[s+972>>2]|0,se|0&&ef[se&127](s),Lt=qa(d,Q)|0,Xe=qa(m,Q)|0,n[Ue>>2]=Lt,n[Ue+4>>2]=Xe,E[Ue+8>>3]=+l,E[Ue+16>>3]=+c,n[Ue+24>>2]=O,Ao(s,4,3049,Ue),Xe=31),(Xe|0)==31&&(si(s,l,c,f,d,m,B,k,Q,M),o[11697]|0&&(se=n[2279]|0,Lt=LA(se)|0,n[Or>>2]=Lt,n[Or+4>>2]=se,n[Or+8>>2]=Nr?3047:11699,Ao(s,4,3083,Or),se=n[s+972>>2]|0,se|0&&ef[se&127](s),Lt=qa(d,Q)|0,Or=qa(m,Q)|0,yo=+y(h[s+908>>2]),ya=+y(h[s+912>>2]),n[or>>2]=Lt,n[or+4>>2]=Or,E[or+8>>3]=yo,E[or+16>>3]=ya,n[or+24>>2]=O,Ao(s,4,3092,or)),n[s+516>>2]=f,q||(se=s+520|0,q=n[se>>2]|0,(q|0)==16&&(o[11697]|0&&Ao(s,4,3124,Xt),n[se>>2]=0,q=0),Q?q=s+916|0:(n[se>>2]=q+1,q=s+524+(q*24|0)|0),h[q>>2]=l,h[q+4>>2]=c,n[q+8>>2]=d,n[q+12>>2]=m,n[q+16>>2]=n[s+908>>2],n[q+20>>2]=n[s+912>>2],q=0)),Q&&(n[s+416>>2]=n[s+908>>2],n[s+420>>2]=n[s+912>>2],o[s+985>>0]=1,o[Pr>>0]=0),n[2279]=(n[2279]|0)+-1,n[s+512>>2]=n[2278],C=ir,Nr|(q|0)==0|0}function ln(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(V(s,l,c)),y(f+y(re(s,l,c)))}function Ao(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=C,C=C+16|0,d=m,n[d>>2]=f,s?f=n[s+976>>2]|0:f=0,Eg(f,s,l,c,d),C=m}function LA(s){return s=s|0,(s>>>0>60?3201:3201+(60-s)|0)|0}function qa(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+32|0,c=d+12|0,f=d,n[c>>2]=n[254],n[c+4>>2]=n[255],n[c+8>>2]=n[256],n[f>>2]=n[257],n[f+4>>2]=n[258],n[f+8>>2]=n[259],(s|0)>2?s=11699:s=n[(l?f:c)+(s<<2)>>2]|0,C=d,s|0}function si(s,l,c,f,d,m,B,k,Q,O){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=m|0,B=y(B),k=y(k),Q=Q|0,O=O|0;var M=0,q=0,se=0,Ge=0,Oe=Ze,Fe=Ze,et=Ze,Xe=Ze,at=Ze,Ue=Ze,qe=Ze,Lt=0,Or=0,or=0,Xt=Ze,Pr=Ze,Nr=0,ir=Ze,bn=0,go=0,mo=0,yo=0,ya=0,Qp=0,Fp=0,xl=0,Tp=0,Fu=0,Tu=0,Rp=0,Np=0,Lp=0,Xr=0,bl=0,Mp=0,bc=0,Op=Ze,Up=Ze,Ru=Ze,Nu=Ze,kc=Ze,qs=0,za=0,Wo=0,kl=0,rf=0,nf=Ze,Lu=Ze,sf=Ze,of=Ze,Gs=Ze,vs=Ze,Ql=0,Tn=Ze,af=Ze,Eo=Ze,Qc=Ze,Co=Ze,Fc=Ze,lf=0,cf=0,Tc=Ze,Ys=Ze,Fl=0,uf=0,Af=0,ff=0,br=Ze,Jn=0,Ds=0,wo=0,Ws=0,Tr=0,ur=0,Tl=0,Jt=Ze,pf=0,li=0;Tl=C,C=C+16|0,qs=Tl+12|0,za=Tl+8|0,Wo=Tl+4|0,kl=Tl,Un(s,(d|0)==0|(_t(l)|0)^1,3326),Un(s,(m|0)==0|(_t(c)|0)^1,3406),Ds=mt(s,f)|0,n[s+496>>2]=Ds,Tr=fr(2,Ds)|0,ur=fr(0,Ds)|0,h[s+440>>2]=y(V(s,Tr,B)),h[s+444>>2]=y(re(s,Tr,B)),h[s+428>>2]=y(V(s,ur,B)),h[s+436>>2]=y(re(s,ur,B)),h[s+464>>2]=y(Cr(s,Tr)),h[s+468>>2]=y(yn(s,Tr)),h[s+452>>2]=y(Cr(s,ur)),h[s+460>>2]=y(yn(s,ur)),h[s+488>>2]=y(oi(s,Tr,B)),h[s+492>>2]=y(Mi(s,Tr,B)),h[s+476>>2]=y(oi(s,ur,B)),h[s+484>>2]=y(Mi(s,ur,B));do if(n[s+964>>2]|0)wg(s,l,c,d,m,B,k);else{if(wo=s+948|0,Ws=(n[s+952>>2]|0)-(n[wo>>2]|0)>>2,!Ws){Gv(s,l,c,d,m,B,k);break}if(!Q&&Yv(s,l,c,d,m,B,k)|0)break;$(s),bl=s+508|0,o[bl>>0]=0,Tr=fr(n[s+4>>2]|0,Ds)|0,ur=Cw(Tr,Ds)|0,Jn=he(Tr)|0,Mp=n[s+8>>2]|0,uf=s+28|0,bc=(n[uf>>2]|0)!=0,Co=Jn?B:k,Tc=Jn?k:B,Op=y(Ep(s,Tr,B)),Up=y(ww(s,Tr,B)),Oe=y(Ep(s,ur,B)),Fc=y(En(s,Tr,B)),Ys=y(En(s,ur,B)),or=Jn?d:m,Fl=Jn?m:d,br=Jn?Fc:Ys,at=Jn?Ys:Fc,Qc=y(ln(s,2,B)),Xe=y(ln(s,0,B)),Fe=y(y(Gr(s+364|0,B))-br),et=y(y(Gr(s+380|0,B))-br),Ue=y(y(Gr(s+372|0,k))-at),qe=y(y(Gr(s+388|0,k))-at),Ru=Jn?Fe:Ue,Nu=Jn?et:qe,Qc=y(l-Qc),l=y(Qc-br),_t(l)|0?br=l:br=y(_n(y(Tg(l,et)),Fe)),af=y(c-Xe),l=y(af-at),_t(l)|0?Eo=l:Eo=y(_n(y(Tg(l,qe)),Ue)),Fe=Jn?br:Eo,Tn=Jn?Eo:br;e:do if((or|0)==1)for(f=0,q=0;;){if(M=gs(s,q)|0,!f)y(rs(M))>y(0)&&y(js(M))>y(0)?f=M:f=0;else if(Tm(M)|0){Ge=0;break e}if(q=q+1|0,q>>>0>=Ws>>>0){Ge=f;break}}else Ge=0;while(0);Lt=Ge+500|0,Or=Ge+504|0,f=0,M=0,l=y(0),se=0;do{if(q=n[(n[wo>>2]|0)+(se<<2)>>2]|0,(n[q+36>>2]|0)==1)Bu(q),o[q+985>>0]=1,o[q+984>>0]=0;else{Bl(q),Q&&yp(q,mt(q,Ds)|0,Fe,Tn,br);do if((n[q+24>>2]|0)!=1)if((q|0)==(Ge|0)){n[Lt>>2]=n[2278],h[Or>>2]=y(0);break}else{Rm(s,q,br,d,Eo,br,Eo,m,Ds,O);break}else M|0&&(n[M+960>>2]=q),n[q+960>>2]=0,M=q,f=(f|0)==0?q:f;while(0);vs=y(h[q+504>>2]),l=y(l+y(vs+y(ln(q,Tr,br))))}se=se+1|0}while((se|0)!=(Ws|0));for(mo=l>Fe,Ql=bc&((or|0)==2&mo)?1:or,bn=(Fl|0)==1,ya=bn&(Q^1),Qp=(Ql|0)==1,Fp=(Ql|0)==2,xl=976+(Tr<<2)|0,Tp=(Fl|2|0)==2,Lp=bn&(bc^1),Fu=1040+(ur<<2)|0,Tu=1040+(Tr<<2)|0,Rp=976+(ur<<2)|0,Np=(Fl|0)!=1,mo=bc&((or|0)!=0&mo),go=s+976|0,bn=bn^1,l=Fe,Nr=0,yo=0,vs=y(0),kc=y(0);;){e:do if(Nr>>>0>>0)for(Or=n[wo>>2]|0,se=0,qe=y(0),Ue=y(0),et=y(0),Fe=y(0),q=0,M=0,Ge=Nr;;){if(Lt=n[Or+(Ge<<2)>>2]|0,(n[Lt+36>>2]|0)!=1&&(n[Lt+940>>2]=yo,(n[Lt+24>>2]|0)!=1)){if(Xe=y(ln(Lt,Tr,br)),Xr=n[xl>>2]|0,c=y(Gr(Lt+380+(Xr<<3)|0,Co)),at=y(h[Lt+504>>2]),c=y(Tg(c,at)),c=y(_n(y(Gr(Lt+364+(Xr<<3)|0,Co)),c)),bc&(se|0)!=0&y(Xe+y(Ue+c))>l){m=se,Xe=qe,or=Ge;break e}Xe=y(Xe+c),c=y(Ue+Xe),Xe=y(qe+Xe),Tm(Lt)|0&&(et=y(et+y(rs(Lt))),Fe=y(Fe-y(at*y(js(Lt))))),M|0&&(n[M+960>>2]=Lt),n[Lt+960>>2]=0,se=se+1|0,M=Lt,q=(q|0)==0?Lt:q}else Xe=qe,c=Ue;if(Ge=Ge+1|0,Ge>>>0>>0)qe=Xe,Ue=c;else{m=se,or=Ge;break}}else m=0,Xe=y(0),et=y(0),Fe=y(0),q=0,or=Nr;while(0);Xr=et>y(0)&ety(0)&FeNu&((_t(Nu)|0)^1))l=Nu,Xr=51;else if(o[(n[go>>2]|0)+3>>0]|0)Xr=51;else{if(Xt!=y(0)&&y(rs(s))!=y(0)){Xr=53;break}l=Xe,Xr=53}while(0);if((Xr|0)==51&&(Xr=0,_t(l)|0?Xr=53:(Pr=y(l-Xe),ir=l)),(Xr|0)==53&&(Xr=0,Xe>2]|0,Ge=Pry(0),Ue=y(Pr/Xt),et=y(0),Xe=y(0),l=y(0),M=q;do c=y(Gr(M+380+(se<<3)|0,Co)),Fe=y(Gr(M+364+(se<<3)|0,Co)),Fe=y(Tg(c,y(_n(Fe,y(h[M+504>>2]))))),Ge?(c=y(Fe*y(js(M))),c!=y(-0)&&(Jt=y(Fe-y(at*c)),nf=y(Bi(M,Tr,Jt,ir,br)),Jt!=nf)&&(et=y(et-y(nf-Fe)),l=y(l+c))):Lt&&(Lu=y(rs(M)),Lu!=y(0))&&(Jt=y(Fe+y(Ue*Lu)),sf=y(Bi(M,Tr,Jt,ir,br)),Jt!=sf)&&(et=y(et-y(sf-Fe)),Xe=y(Xe-Lu)),M=n[M+960>>2]|0;while((M|0)!=0);if(l=y(qe+l),Fe=y(Pr+et),rf)l=y(0);else{at=y(Xt+Xe),Ge=n[xl>>2]|0,Lt=Fey(0),at=y(Fe/at),l=y(0);do{Jt=y(Gr(q+380+(Ge<<3)|0,Co)),et=y(Gr(q+364+(Ge<<3)|0,Co)),et=y(Tg(Jt,y(_n(et,y(h[q+504>>2]))))),Lt?(Jt=y(et*y(js(q))),Fe=y(-Jt),Jt!=y(-0)?(Jt=y(Ue*Fe),Fe=y(Bi(q,Tr,y(et+(Or?Fe:Jt)),ir,br))):Fe=et):se&&(of=y(rs(q)),of!=y(0))?Fe=y(Bi(q,Tr,y(et+y(at*of)),ir,br)):Fe=et,l=y(l-y(Fe-et)),Xe=y(ln(q,Tr,br)),c=y(ln(q,ur,br)),Fe=y(Fe+Xe),h[za>>2]=Fe,n[kl>>2]=1,et=y(h[q+396>>2]);e:do if(_t(et)|0){M=_t(Tn)|0;do if(!M){if(mo|(ts(q,ur,Tn)|0|bn)||(ha(s,q)|0)!=4||(n[(vl(q,ur)|0)+4>>2]|0)==3||(n[(Pc(q,ur)|0)+4>>2]|0)==3)break;h[qs>>2]=Tn,n[Wo>>2]=1;break e}while(0);if(ts(q,ur,Tn)|0){M=n[q+992+(n[Rp>>2]<<2)>>2]|0,Jt=y(c+y(Gr(M,Tn))),h[qs>>2]=Jt,M=Np&(n[M+4>>2]|0)==2,n[Wo>>2]=((_t(Jt)|0|M)^1)&1;break}else{h[qs>>2]=Tn,n[Wo>>2]=M?0:2;break}}else Jt=y(Fe-Xe),Xt=y(Jt/et),Jt=y(et*Jt),n[Wo>>2]=1,h[qs>>2]=y(c+(Jn?Xt:Jt));while(0);yr(q,Tr,ir,br,kl,za),yr(q,ur,Tn,br,Wo,qs);do if(!(ts(q,ur,Tn)|0)&&(ha(s,q)|0)==4){if((n[(vl(q,ur)|0)+4>>2]|0)==3){M=0;break}M=(n[(Pc(q,ur)|0)+4>>2]|0)!=3}else M=0;while(0);Jt=y(h[za>>2]),Xt=y(h[qs>>2]),pf=n[kl>>2]|0,li=n[Wo>>2]|0,fa(q,Jn?Jt:Xt,Jn?Xt:Jt,Ds,Jn?pf:li,Jn?li:pf,br,Eo,Q&(M^1),3488,O)|0,o[bl>>0]=o[bl>>0]|o[q+508>>0],q=n[q+960>>2]|0}while((q|0)!=0)}}else l=y(0);if(l=y(Pr+l),li=l>0]=li|u[bl>>0],Fp&l>y(0)?(M=n[xl>>2]|0,(n[s+364+(M<<3)+4>>2]|0)!=0&&(Gs=y(Gr(s+364+(M<<3)|0,Co)),Gs>=y(0))?Fe=y(_n(y(0),y(Gs-y(ir-l)))):Fe=y(0)):Fe=l,Lt=Nr>>>0>>0,Lt){Ge=n[wo>>2]|0,se=Nr,M=0;do q=n[Ge+(se<<2)>>2]|0,n[q+24>>2]|0||(M=((n[(vl(q,Tr)|0)+4>>2]|0)==3&1)+M|0,M=M+((n[(Pc(q,Tr)|0)+4>>2]|0)==3&1)|0),se=se+1|0;while((se|0)!=(or|0));M?(Xe=y(0),c=y(0)):Xr=101}else Xr=101;e:do if((Xr|0)==101)switch(Xr=0,Mp|0){case 1:{M=0,Xe=y(Fe*y(.5)),c=y(0);break e}case 2:{M=0,Xe=Fe,c=y(0);break e}case 3:{if(m>>>0<=1){M=0,Xe=y(0),c=y(0);break e}c=y((m+-1|0)>>>0),M=0,Xe=y(0),c=y(y(_n(Fe,y(0)))/c);break e}case 5:{c=y(Fe/y((m+1|0)>>>0)),M=0,Xe=c;break e}case 4:{c=y(Fe/y(m>>>0)),M=0,Xe=y(c*y(.5));break e}default:{M=0,Xe=y(0),c=y(0);break e}}while(0);if(l=y(Op+Xe),Lt){et=y(Fe/y(M|0)),se=n[wo>>2]|0,q=Nr,Fe=y(0);do{M=n[se+(q<<2)>>2]|0;e:do if((n[M+36>>2]|0)!=1){switch(n[M+24>>2]|0){case 1:{if(gi(M,Tr)|0){if(!Q)break e;Jt=y(Mr(M,Tr,ir)),Jt=y(Jt+y(Cr(s,Tr))),Jt=y(Jt+y(V(M,Tr,br))),h[M+400+(n[Tu>>2]<<2)>>2]=Jt;break e}break}case 0:if(li=(n[(vl(M,Tr)|0)+4>>2]|0)==3,Jt=y(et+l),l=li?Jt:l,Q&&(li=M+400+(n[Tu>>2]<<2)|0,h[li>>2]=y(l+y(h[li>>2]))),li=(n[(Pc(M,Tr)|0)+4>>2]|0)==3,Jt=y(et+l),l=li?Jt:l,ya){Jt=y(c+y(ln(M,Tr,br))),Fe=Tn,l=y(l+y(Jt+y(h[M+504>>2])));break e}else{l=y(l+y(c+y(ns(M,Tr,br)))),Fe=y(_n(Fe,y(ns(M,ur,br))));break e}default:}Q&&(Jt=y(Xe+y(Cr(s,Tr))),li=M+400+(n[Tu>>2]<<2)|0,h[li>>2]=y(Jt+y(h[li>>2])))}while(0);q=q+1|0}while((q|0)!=(or|0))}else Fe=y(0);if(c=y(Up+l),Tp?Xe=y(y(Bi(s,ur,y(Ys+Fe),Tc,B))-Ys):Xe=Tn,et=y(y(Bi(s,ur,y(Ys+(Lp?Tn:Fe)),Tc,B))-Ys),Lt&Q){q=Nr;do{se=n[(n[wo>>2]|0)+(q<<2)>>2]|0;do if((n[se+36>>2]|0)!=1){if((n[se+24>>2]|0)==1){if(gi(se,ur)|0){if(Jt=y(Mr(se,ur,Tn)),Jt=y(Jt+y(Cr(s,ur))),Jt=y(Jt+y(V(se,ur,br))),M=n[Fu>>2]|0,h[se+400+(M<<2)>>2]=Jt,!(_t(Jt)|0))break}else M=n[Fu>>2]|0;Jt=y(Cr(s,ur)),h[se+400+(M<<2)>>2]=y(Jt+y(V(se,ur,br)));break}M=ha(s,se)|0;do if((M|0)==4){if((n[(vl(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if((n[(Pc(se,ur)|0)+4>>2]|0)==3){Xr=139;break}if(ts(se,ur,Tn)|0){l=Oe;break}pf=n[se+908+(n[xl>>2]<<2)>>2]|0,n[qs>>2]=pf,l=y(h[se+396>>2]),li=_t(l)|0,Fe=(n[v>>2]=pf,y(h[v>>2])),li?l=et:(Pr=y(ln(se,ur,br)),Jt=y(Fe/l),l=y(l*Fe),l=y(Pr+(Jn?Jt:l))),h[za>>2]=l,h[qs>>2]=y(y(ln(se,Tr,br))+Fe),n[Wo>>2]=1,n[kl>>2]=1,yr(se,Tr,ir,br,Wo,qs),yr(se,ur,Tn,br,kl,za),l=y(h[qs>>2]),Pr=y(h[za>>2]),Jt=Jn?l:Pr,l=Jn?Pr:l,li=((_t(Jt)|0)^1)&1,fa(se,Jt,l,Ds,li,((_t(l)|0)^1)&1,br,Eo,1,3493,O)|0,l=Oe}else Xr=139;while(0);e:do if((Xr|0)==139){Xr=0,l=y(Xe-y(ns(se,ur,br)));do if((n[(vl(se,ur)|0)+4>>2]|0)==3){if((n[(Pc(se,ur)|0)+4>>2]|0)!=3)break;l=y(Oe+y(_n(y(0),y(l*y(.5)))));break e}while(0);if((n[(Pc(se,ur)|0)+4>>2]|0)==3){l=Oe;break}if((n[(vl(se,ur)|0)+4>>2]|0)==3){l=y(Oe+y(_n(y(0),l)));break}switch(M|0){case 1:{l=Oe;break e}case 2:{l=y(Oe+y(l*y(.5)));break e}default:{l=y(Oe+l);break e}}}while(0);Jt=y(vs+l),li=se+400+(n[Fu>>2]<<2)|0,h[li>>2]=y(Jt+y(h[li>>2]))}while(0);q=q+1|0}while((q|0)!=(or|0))}if(vs=y(vs+et),kc=y(_n(kc,c)),m=yo+1|0,or>>>0>=Ws>>>0)break;l=ir,Nr=or,yo=m}do if(Q){if(M=m>>>0>1,!M&&!(Yi(s)|0))break;if(!(_t(Tn)|0)){l=y(Tn-vs);e:do switch(n[s+12>>2]|0){case 3:{Oe=y(Oe+l),Ue=y(0);break}case 2:{Oe=y(Oe+y(l*y(.5))),Ue=y(0);break}case 4:{Tn>vs?Ue=y(l/y(m>>>0)):Ue=y(0);break}case 7:if(Tn>vs){Oe=y(Oe+y(l/y(m<<1>>>0))),Ue=y(l/y(m>>>0)),Ue=M?Ue:y(0);break e}else{Oe=y(Oe+y(l*y(.5))),Ue=y(0);break e}case 6:{Ue=y(l/y(yo>>>0)),Ue=Tn>vs&M?Ue:y(0);break}default:Ue=y(0)}while(0);if(m|0)for(Lt=1040+(ur<<2)|0,Or=976+(ur<<2)|0,Ge=0,q=0;;){e:do if(q>>>0>>0)for(Fe=y(0),et=y(0),l=y(0),se=q;;){M=n[(n[wo>>2]|0)+(se<<2)>>2]|0;do if((n[M+36>>2]|0)!=1&&(n[M+24>>2]|0)==0){if((n[M+940>>2]|0)!=(Ge|0))break e;if(Nm(M,ur)|0&&(Jt=y(h[M+908+(n[Or>>2]<<2)>>2]),l=y(_n(l,y(Jt+y(ln(M,ur,br)))))),(ha(s,M)|0)!=5)break;Gs=y(Ya(M)),Gs=y(Gs+y(V(M,0,br))),Jt=y(h[M+912>>2]),Jt=y(y(Jt+y(ln(M,0,br)))-Gs),Gs=y(_n(et,Gs)),Jt=y(_n(Fe,Jt)),Fe=Jt,et=Gs,l=y(_n(l,y(Gs+Jt)))}while(0);if(M=se+1|0,M>>>0>>0)se=M;else{se=M;break}}else et=y(0),l=y(0),se=q;while(0);if(at=y(Ue+l),c=Oe,Oe=y(Oe+at),q>>>0>>0){Xe=y(c+et),M=q;do{q=n[(n[wo>>2]|0)+(M<<2)>>2]|0;e:do if((n[q+36>>2]|0)!=1&&(n[q+24>>2]|0)==0)switch(ha(s,q)|0){case 1:{Jt=y(c+y(V(q,ur,br))),h[q+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 3:{Jt=y(y(Oe-y(re(q,ur,br)))-y(h[q+908+(n[Or>>2]<<2)>>2])),h[q+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 2:{Jt=y(c+y(y(at-y(h[q+908+(n[Or>>2]<<2)>>2]))*y(.5))),h[q+400+(n[Lt>>2]<<2)>>2]=Jt;break e}case 4:{if(Jt=y(c+y(V(q,ur,br))),h[q+400+(n[Lt>>2]<<2)>>2]=Jt,ts(q,ur,Tn)|0||(Jn?(Fe=y(h[q+908>>2]),l=y(Fe+y(ln(q,Tr,br))),et=at):(et=y(h[q+912>>2]),et=y(et+y(ln(q,ur,br))),l=at,Fe=y(h[q+908>>2])),Ii(l,Fe)|0&&Ii(et,y(h[q+912>>2]))|0))break e;fa(q,l,et,Ds,1,1,br,Eo,1,3501,O)|0;break e}case 5:{h[q+404>>2]=y(y(Xe-y(Ya(q)))+y(Mr(q,0,Tn)));break e}default:break e}while(0);M=M+1|0}while((M|0)!=(se|0))}if(Ge=Ge+1|0,(Ge|0)==(m|0))break;q=se}}}while(0);if(h[s+908>>2]=y(Bi(s,2,Qc,B,B)),h[s+912>>2]=y(Bi(s,0,af,k,B)),(Ql|0)!=0&&(lf=n[s+32>>2]|0,cf=(Ql|0)==2,!(cf&(lf|0)!=2))?cf&(lf|0)==2&&(l=y(Fc+ir),l=y(_n(y(Tg(l,y(MA(s,Tr,kc,Co)))),Fc)),Xr=198):(l=y(Bi(s,Tr,kc,Co,B)),Xr=198),(Xr|0)==198&&(h[s+908+(n[976+(Tr<<2)>>2]<<2)>>2]=l),(Fl|0)!=0&&(Af=n[s+32>>2]|0,ff=(Fl|0)==2,!(ff&(Af|0)!=2))?ff&(Af|0)==2&&(l=y(Ys+Tn),l=y(_n(y(Tg(l,y(MA(s,ur,y(Ys+vs),Tc)))),Ys)),Xr=204):(l=y(Bi(s,ur,y(Ys+vs),Tc,B)),Xr=204),(Xr|0)==204&&(h[s+908+(n[976+(ur<<2)>>2]<<2)>>2]=l),Q){if((n[uf>>2]|0)==2){q=976+(ur<<2)|0,se=1040+(ur<<2)|0,M=0;do Ge=gs(s,M)|0,n[Ge+24>>2]|0||(pf=n[q>>2]|0,Jt=y(h[s+908+(pf<<2)>>2]),li=Ge+400+(n[se>>2]<<2)|0,Jt=y(Jt-y(h[li>>2])),h[li>>2]=y(Jt-y(h[Ge+908+(pf<<2)>>2]))),M=M+1|0;while((M|0)!=(Ws|0))}if(f|0){M=Jn?Ql:d;do Lm(s,f,br,M,Eo,Ds,O),f=n[f+960>>2]|0;while((f|0)!=0)}if(M=(Tr|2|0)==3,q=(ur|2|0)==3,M|q){f=0;do se=n[(n[wo>>2]|0)+(f<<2)>>2]|0,(n[se+36>>2]|0)!=1&&(M&&Cp(s,se,Tr),q&&Cp(s,se,ur)),f=f+1|0;while((f|0)!=(Ws|0))}}}while(0);C=Tl}function pa(s,l){s=s|0,l=y(l);var c=0;oa(s,l>=y(0),3147),c=l==y(0),h[s+4>>2]=c?y(0):l}function vc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=f|0;var d=Ze,m=Ze,B=0,k=0,Q=0;n[2278]=(n[2278]|0)+1,Bl(s),ts(s,2,l)|0?(d=y(Gr(n[s+992>>2]|0,l)),Q=1,d=y(d+y(ln(s,2,l)))):(d=y(Gr(s+380|0,l)),d>=y(0)?Q=2:(Q=((_t(l)|0)^1)&1,d=l)),ts(s,0,c)|0?(m=y(Gr(n[s+996>>2]|0,c)),k=1,m=y(m+y(ln(s,0,l)))):(m=y(Gr(s+388|0,c)),m>=y(0)?k=2:(k=((_t(c)|0)^1)&1,m=c)),B=s+976|0,fa(s,d,m,f,Q,k,l,c,1,3189,n[B>>2]|0)|0&&(yp(s,n[s+496>>2]|0,l,c,l),Dc(s,y(h[(n[B>>2]|0)+4>>2]),y(0),y(0)),o[11696]|0)&&km(s,7)}function Bl(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;k=C,C=C+32|0,B=k+24|0,m=k+16|0,f=k+8|0,d=k,c=0;do l=s+380+(c<<3)|0,(n[s+380+(c<<3)+4>>2]|0)!=0&&(Q=l,O=n[Q+4>>2]|0,M=f,n[M>>2]=n[Q>>2],n[M+4>>2]=O,M=s+364+(c<<3)|0,O=n[M+4>>2]|0,Q=d,n[Q>>2]=n[M>>2],n[Q+4>>2]=O,n[m>>2]=n[f>>2],n[m+4>>2]=n[f+4>>2],n[B>>2]=n[d>>2],n[B+4>>2]=n[d+4>>2],ws(m,B)|0)||(l=s+348+(c<<3)|0),n[s+992+(c<<2)>>2]=l,c=c+1|0;while((c|0)!=2);C=k}function ts(s,l,c){s=s|0,l=l|0,c=y(c);var f=0;switch(s=n[s+992+(n[976+(l<<2)>>2]<<2)>>2]|0,n[s+4>>2]|0){case 0:case 3:{s=0;break}case 1:{y(h[s>>2])>2])>2]|0){case 2:{l=y(y(y(h[s>>2])*l)/y(100));break}case 1:{l=y(h[s>>2]);break}default:l=y(Ae)}return y(l)}function yp(s,l,c,f,d){s=s|0,l=l|0,c=y(c),f=y(f),d=y(d);var m=0,B=Ze;l=n[s+944>>2]|0?l:1,m=fr(n[s+4>>2]|0,l)|0,l=Cw(m,l)|0,c=y(Mm(s,m,c)),f=y(Mm(s,l,f)),B=y(c+y(V(s,m,d))),h[s+400+(n[1040+(m<<2)>>2]<<2)>>2]=B,c=y(c+y(re(s,m,d))),h[s+400+(n[1e3+(m<<2)>>2]<<2)>>2]=c,c=y(f+y(V(s,l,d))),h[s+400+(n[1040+(l<<2)>>2]<<2)>>2]=c,d=y(f+y(re(s,l,d))),h[s+400+(n[1e3+(l<<2)>>2]<<2)>>2]=d}function Dc(s,l,c,f){s=s|0,l=y(l),c=y(c),f=y(f);var d=0,m=0,B=Ze,k=Ze,Q=0,O=0,M=Ze,q=0,se=Ze,Ge=Ze,Oe=Ze,Fe=Ze;if(l!=y(0)&&(d=s+400|0,Fe=y(h[d>>2]),m=s+404|0,Oe=y(h[m>>2]),q=s+416|0,Ge=y(h[q>>2]),O=s+420|0,B=y(h[O>>2]),se=y(Fe+c),M=y(Oe+f),f=y(se+Ge),k=y(M+B),Q=(n[s+988>>2]|0)==1,h[d>>2]=y(Go(Fe,l,0,Q)),h[m>>2]=y(Go(Oe,l,0,Q)),c=y(kT(y(Ge*l),y(1))),Ii(c,y(0))|0?m=0:m=(Ii(c,y(1))|0)^1,c=y(kT(y(B*l),y(1))),Ii(c,y(0))|0?d=0:d=(Ii(c,y(1))|0)^1,Fe=y(Go(f,l,Q&m,Q&(m^1))),h[q>>2]=y(Fe-y(Go(se,l,0,Q))),Fe=y(Go(k,l,Q&d,Q&(d^1))),h[O>>2]=y(Fe-y(Go(M,l,0,Q))),m=(n[s+952>>2]|0)-(n[s+948>>2]|0)>>2,m|0)){d=0;do Dc(gs(s,d)|0,l,se,M),d=d+1|0;while((d|0)!=(m|0))}}function Ew(s,l,c,f,d){switch(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,c|0){case 5:case 0:{s=a7(n[489]|0,f,d)|0;break}default:s=t3e(f,d)|0}return s|0}function yg(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;d=C,C=C+16|0,m=d,n[m>>2]=f,Eg(s,0,l,c,m),C=d}function Eg(s,l,c,f,d){if(s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,s=s|0?s:956,x7[n[s+8>>2]&1](s,l,c,f,d)|0,(c|0)==5)Tt();else return}function Ga(s,l,c){s=s|0,l=l|0,c=c|0,o[s+l>>0]=c&1}function Fm(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(Cg(s,f),Qt(s,n[l>>2]|0,n[c>>2]|0,f))}function Cg(s,l){s=s|0,l=l|0;var c=0;if((N(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Tt();else{c=Vt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function Qt(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function N(s){return s=s|0,1073741823}function V(s,l,c){return s=s|0,l=l|0,c=y(c),he(l)|0&&(n[s+96>>2]|0)!=0?s=s+92|0:s=Fn(s+60|0,n[1040+(l<<2)>>2]|0,992)|0,y(ze(s,c))}function re(s,l,c){return s=s|0,l=l|0,c=y(c),he(l)|0&&(n[s+104>>2]|0)!=0?s=s+100|0:s=Fn(s+60|0,n[1e3+(l<<2)>>2]|0,992)|0,y(ze(s,c))}function he(s){return s=s|0,(s|1|0)==3|0}function ze(s,l){return s=s|0,l=y(l),(n[s+4>>2]|0)==3?l=y(0):l=y(Gr(s,l)),y(l)}function mt(s,l){return s=s|0,l=l|0,s=n[s>>2]|0,((s|0)==0?(l|0)>1?l:1:s)|0}function fr(s,l){s=s|0,l=l|0;var c=0;e:do if((l|0)==2){switch(s|0){case 2:{s=3;break e}case 3:break;default:{c=4;break e}}s=2}else c=4;while(0);return s|0}function Cr(s,l){s=s|0,l=l|0;var c=Ze;return he(l)|0&&(n[s+312>>2]|0)!=0&&(c=y(h[s+308>>2]),c>=y(0))||(c=y(_n(y(h[(Fn(s+276|0,n[1040+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function yn(s,l){s=s|0,l=l|0;var c=Ze;return he(l)|0&&(n[s+320>>2]|0)!=0&&(c=y(h[s+316>>2]),c>=y(0))||(c=y(_n(y(h[(Fn(s+276|0,n[1e3+(l<<2)>>2]|0,992)|0)>>2]),y(0)))),y(c)}function oi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return he(l)|0&&(n[s+240>>2]|0)!=0&&(f=y(Gr(s+236|0,c)),f>=y(0))||(f=y(_n(y(Gr(Fn(s+204|0,n[1040+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function Mi(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return he(l)|0&&(n[s+248>>2]|0)!=0&&(f=y(Gr(s+244|0,c)),f>=y(0))||(f=y(_n(y(Gr(Fn(s+204|0,n[1e3+(l<<2)>>2]|0,992)|0,c)),y(0)))),y(f)}function wg(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,Q=Ze,O=Ze,M=Ze,q=Ze,se=Ze,Ge=0,Oe=0,Fe=0;Fe=C,C=C+16|0,Ge=Fe,Oe=s+964|0,Un(s,(n[Oe>>2]|0)!=0,3519),k=y(En(s,2,l)),Q=y(En(s,0,l)),O=y(ln(s,2,l)),M=y(ln(s,0,l)),_t(l)|0?q=l:q=y(_n(y(0),y(y(l-O)-k))),_t(c)|0?se=c:se=y(_n(y(0),y(y(c-M)-Q))),(f|0)==1&(d|0)==1?(h[s+908>>2]=y(Bi(s,2,y(l-O),m,m)),l=y(Bi(s,0,y(c-M),B,m))):(b7[n[Oe>>2]&1](Ge,s,q,f,se,d),q=y(k+y(h[Ge>>2])),se=y(l-O),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?q:se,m,m)),se=y(Q+y(h[Ge+4>>2])),l=y(c-M),l=y(Bi(s,0,(d|2|0)==2?se:l,B,m))),h[s+912>>2]=l,C=Fe}function Gv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=Ze,Q=Ze,O=Ze,M=Ze;O=y(En(s,2,m)),k=y(En(s,0,m)),M=y(ln(s,2,m)),Q=y(ln(s,0,m)),l=y(l-M),h[s+908>>2]=y(Bi(s,2,(f|2|0)==2?O:l,m,m)),c=y(c-Q),h[s+912>>2]=y(Bi(s,0,(d|2|0)==2?k:c,B,m))}function Yv(s,l,c,f,d,m,B){s=s|0,l=y(l),c=y(c),f=f|0,d=d|0,m=y(m),B=y(B);var k=0,Q=Ze,O=Ze;return k=(f|0)==2,!(l<=y(0)&k)&&!(c<=y(0)&(d|0)==2)&&!((f|0)==1&(d|0)==1)?s=0:(Q=y(ln(s,0,m)),O=y(ln(s,2,m)),k=l>2]=y(Bi(s,2,k?y(0):l,m,m)),l=y(c-Q),k=c>2]=y(Bi(s,0,k?y(0):l,B,m)),s=1),s|0}function Cw(s,l){return s=s|0,l=l|0,OA(s)|0?s=fr(2,l)|0:s=0,s|0}function Ep(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(oi(s,l,c)),y(c+y(Cr(s,l)))}function ww(s,l,c){return s=s|0,l=l|0,c=y(c),c=y(Mi(s,l,c)),y(c+y(yn(s,l)))}function En(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(Ep(s,l,c)),y(f+y(ww(s,l,c)))}function Tm(s){return s=s|0,n[s+24>>2]|0?s=0:y(rs(s))!=y(0)?s=1:s=y(js(s))!=y(0),s|0}function rs(s){s=s|0;var l=Ze;if(n[s+944>>2]|0){if(l=y(h[s+44>>2]),_t(l)|0)return l=y(h[s+40>>2]),s=l>y(0)&((_t(l)|0)^1),y(s?l:y(0))}else l=y(0);return y(l)}function js(s){s=s|0;var l=Ze,c=0,f=Ze;do if(n[s+944>>2]|0){if(l=y(h[s+48>>2]),_t(l)|0){if(c=o[(n[s+976>>2]|0)+2>>0]|0,c<<24>>24==0&&(f=y(h[s+40>>2]),f>24?y(1):y(0)}}else l=y(0);while(0);return y(l)}function Bu(s){s=s|0;var l=0,c=0;if(zm(s+400|0,0,540)|0,o[s+985>>0]=1,$(s),c=wi(s)|0,c|0){l=s+948|0,s=0;do Bu(n[(n[l>>2]|0)+(s<<2)>>2]|0),s=s+1|0;while((s|0)!=(c|0))}}function Rm(s,l,c,f,d,m,B,k,Q,O){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=y(m),B=y(B),k=k|0,Q=Q|0,O=O|0;var M=0,q=Ze,se=0,Ge=0,Oe=Ze,Fe=Ze,et=0,Xe=Ze,at=0,Ue=Ze,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0,bn=0,go=0;bn=C,C=C+16|0,Or=bn+12|0,or=bn+8|0,Xt=bn+4|0,Pr=bn,ir=fr(n[s+4>>2]|0,Q)|0,qe=he(ir)|0,q=y(Gr(Iw(l)|0,qe?m:B)),Lt=ts(l,2,m)|0,Nr=ts(l,0,B)|0;do if(!(_t(q)|0)&&!(_t(qe?c:d)|0)){if(M=l+504|0,!(_t(y(h[M>>2]))|0)&&(!(Bw(n[l+976>>2]|0,0)|0)||(n[l+500>>2]|0)==(n[2278]|0)))break;h[M>>2]=y(_n(q,y(En(l,ir,m))))}else se=7;while(0);do if((se|0)==7){if(at=qe^1,!(at|Lt^1)){B=y(Gr(n[l+992>>2]|0,m)),h[l+504>>2]=y(_n(B,y(En(l,2,m))));break}if(!(qe|Nr^1)){B=y(Gr(n[l+996>>2]|0,B)),h[l+504>>2]=y(_n(B,y(En(l,0,m))));break}h[Or>>2]=y(Ae),h[or>>2]=y(Ae),n[Xt>>2]=0,n[Pr>>2]=0,Xe=y(ln(l,2,m)),Ue=y(ln(l,0,m)),Lt?(Oe=y(Xe+y(Gr(n[l+992>>2]|0,m))),h[Or>>2]=Oe,n[Xt>>2]=1,Ge=1):(Ge=0,Oe=y(Ae)),Nr?(q=y(Ue+y(Gr(n[l+996>>2]|0,B))),h[or>>2]=q,n[Pr>>2]=1,M=1):(M=0,q=y(Ae)),se=n[s+32>>2]|0,qe&(se|0)==2?se=2:_t(Oe)|0&&!(_t(c)|0)&&(h[Or>>2]=c,n[Xt>>2]=2,Ge=2,Oe=c),!((se|0)==2&at)&&_t(q)|0&&!(_t(d)|0)&&(h[or>>2]=d,n[Pr>>2]=2,M=2,q=d),Fe=y(h[l+396>>2]),et=_t(Fe)|0;do if(et)se=Ge;else{if((Ge|0)==1&at){h[or>>2]=y(y(Oe-Xe)/Fe),n[Pr>>2]=1,M=1,se=1;break}qe&(M|0)==1?(h[Or>>2]=y(Fe*y(q-Ue)),n[Xt>>2]=1,M=1,se=1):se=Ge}while(0);go=_t(c)|0,Ge=(ha(s,l)|0)!=4,!(qe|Lt|((f|0)!=1|go)|(Ge|(se|0)==1))&&(h[Or>>2]=c,n[Xt>>2]=1,!et)&&(h[or>>2]=y(y(c-Xe)/Fe),n[Pr>>2]=1,M=1),!(Nr|at|((k|0)!=1|(_t(d)|0))|(Ge|(M|0)==1))&&(h[or>>2]=d,n[Pr>>2]=1,!et)&&(h[Or>>2]=y(Fe*y(d-Ue)),n[Xt>>2]=1),yr(l,2,m,m,Xt,Or),yr(l,0,B,m,Pr,or),c=y(h[Or>>2]),d=y(h[or>>2]),fa(l,c,d,Q,n[Xt>>2]|0,n[Pr>>2]|0,m,B,0,3565,O)|0,B=y(h[l+908+(n[976+(ir<<2)>>2]<<2)>>2]),h[l+504>>2]=y(_n(B,y(En(l,ir,m))))}while(0);n[l+500>>2]=n[2278],C=bn}function Bi(s,l,c,f,d){return s=s|0,l=l|0,c=y(c),f=y(f),d=y(d),f=y(MA(s,l,c,f)),y(_n(f,y(En(s,l,d))))}function ha(s,l){return s=s|0,l=l|0,l=l+20|0,l=n[((n[l>>2]|0)==0?s+16|0:l)>>2]|0,(l|0)==5&&OA(n[s+4>>2]|0)|0&&(l=1),l|0}function vl(s,l){return s=s|0,l=l|0,he(l)|0&&(n[s+96>>2]|0)!=0?l=4:l=n[1040+(l<<2)>>2]|0,s+60+(l<<3)|0}function Pc(s,l){return s=s|0,l=l|0,he(l)|0&&(n[s+104>>2]|0)!=0?l=5:l=n[1e3+(l<<2)>>2]|0,s+60+(l<<3)|0}function yr(s,l,c,f,d,m){switch(s=s|0,l=l|0,c=y(c),f=y(f),d=d|0,m=m|0,c=y(Gr(s+380+(n[976+(l<<2)>>2]<<3)|0,c)),c=y(c+y(ln(s,l,f))),n[d>>2]|0){case 2:case 1:{d=_t(c)|0,f=y(h[m>>2]),h[m>>2]=d|f>2]=2,h[m>>2]=c);break}default:}}function gi(s,l){return s=s|0,l=l|0,s=s+132|0,he(l)|0&&(n[(Fn(s,4,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Fn(s,n[1040+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function Mr(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,he(l)|0&&(f=Fn(s,4,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Fn(s,n[1040+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(Gr(f,c))),y(c)}function ns(s,l,c){s=s|0,l=l|0,c=y(c);var f=Ze;return f=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),f=y(f+y(V(s,l,c))),y(f+y(re(s,l,c)))}function Yi(s){s=s|0;var l=0,c=0,f=0;e:do if(OA(n[s+4>>2]|0)|0)l=0;else if((n[s+16>>2]|0)!=5)if(c=wi(s)|0,!c)l=0;else for(l=0;;){if(f=gs(s,l)|0,(n[f+24>>2]|0)==0&&(n[f+20>>2]|0)==5){l=1;break e}if(l=l+1|0,l>>>0>=c>>>0){l=0;break}}else l=1;while(0);return l|0}function Nm(s,l){s=s|0,l=l|0;var c=Ze;return c=y(h[s+908+(n[976+(l<<2)>>2]<<2)>>2]),c>=y(0)&((_t(c)|0)^1)|0}function Ya(s){s=s|0;var l=Ze,c=0,f=0,d=0,m=0,B=0,k=0,Q=Ze;if(c=n[s+968>>2]|0,c)Q=y(h[s+908>>2]),l=y(h[s+912>>2]),l=y(v7[c&0](s,Q,l)),Un(s,(_t(l)|0)^1,3573);else{m=wi(s)|0;do if(m|0){for(c=0,d=0;;){if(f=gs(s,d)|0,n[f+940>>2]|0){B=8;break}if((n[f+24>>2]|0)!=1)if(k=(ha(s,f)|0)==5,k){c=f;break}else c=(c|0)==0?f:c;if(d=d+1|0,d>>>0>=m>>>0){B=8;break}}if((B|0)==8&&!c)break;return l=y(Ya(c)),y(l+y(h[c+404>>2]))}while(0);l=y(h[s+912>>2])}return y(l)}function MA(s,l,c,f){s=s|0,l=l|0,c=y(c),f=y(f);var d=Ze,m=0;return OA(l)|0?(l=1,m=3):he(l)|0?(l=0,m=3):(f=y(Ae),d=y(Ae)),(m|0)==3&&(d=y(Gr(s+364+(l<<3)|0,f)),f=y(Gr(s+380+(l<<3)|0,f))),m=f=y(0)&((_t(f)|0)^1)),c=m?f:c,m=d>=y(0)&((_t(d)|0)^1)&c>2]|0,m)|0,Oe=Cw(et,m)|0,Fe=he(et)|0,q=y(ln(l,2,c)),se=y(ln(l,0,c)),ts(l,2,c)|0?k=y(q+y(Gr(n[l+992>>2]|0,c))):gi(l,2)|0&&sr(l,2)|0?(k=y(h[s+908>>2]),Q=y(Cr(s,2)),Q=y(k-y(Q+y(yn(s,2)))),k=y(Mr(l,2,c)),k=y(Bi(l,2,y(Q-y(k+y(vu(l,2,c)))),c,c))):k=y(Ae),ts(l,0,d)|0?Q=y(se+y(Gr(n[l+996>>2]|0,d))):gi(l,0)|0&&sr(l,0)|0?(Q=y(h[s+912>>2]),at=y(Cr(s,0)),at=y(Q-y(at+y(yn(s,0)))),Q=y(Mr(l,0,d)),Q=y(Bi(l,0,y(at-y(Q+y(vu(l,0,d)))),d,c))):Q=y(Ae),O=_t(k)|0,M=_t(Q)|0;do if(O^M&&(Ge=y(h[l+396>>2]),!(_t(Ge)|0)))if(O){k=y(q+y(y(Q-se)*Ge));break}else{at=y(se+y(y(k-q)/Ge)),Q=M?at:Q;break}while(0);M=_t(k)|0,O=_t(Q)|0,M|O&&(Ue=(M^1)&1,f=c>y(0)&((f|0)!=0&M),k=Fe?k:f?c:k,fa(l,k,Q,m,Fe?Ue:f?2:Ue,M&(O^1)&1,k,Q,0,3623,B)|0,k=y(h[l+908>>2]),k=y(k+y(ln(l,2,c))),Q=y(h[l+912>>2]),Q=y(Q+y(ln(l,0,c)))),fa(l,k,Q,m,1,1,k,Q,1,3635,B)|0,sr(l,et)|0&&!(gi(l,et)|0)?(Ue=n[976+(et<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),at=y(at-y(yn(s,et))),at=y(at-y(re(l,et,c))),at=y(at-y(vu(l,et,Fe?c:d))),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=at):Xe=21;do if((Xe|0)==21){if(!(gi(l,et)|0)&&(n[s+8>>2]|0)==1){Ue=n[976+(et<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(y(at-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=at;break}!(gi(l,et)|0)&&(n[s+8>>2]|0)==2&&(Ue=n[976+(et<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(et<<2)>>2]<<2)>>2]=at)}while(0);sr(l,Oe)|0&&!(gi(l,Oe)|0)?(Ue=n[976+(Oe<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),at=y(at-y(yn(s,Oe))),at=y(at-y(re(l,Oe,c))),at=y(at-y(vu(l,Oe,Fe?d:c))),h[l+400+(n[1040+(Oe<<2)>>2]<<2)>>2]=at):Xe=30;do if((Xe|0)==30&&!(gi(l,Oe)|0)){if((ha(s,l)|0)==2){Ue=n[976+(Oe<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(y(at-y(h[l+908+(Ue<<2)>>2]))*y(.5)),h[l+400+(n[1040+(Oe<<2)>>2]<<2)>>2]=at;break}Ue=(ha(s,l)|0)==3,Ue^(n[s+28>>2]|0)==2&&(Ue=n[976+(Oe<<2)>>2]|0,at=y(h[s+908+(Ue<<2)>>2]),at=y(at-y(h[l+908+(Ue<<2)>>2])),h[l+400+(n[1040+(Oe<<2)>>2]<<2)>>2]=at)}while(0)}function Cp(s,l,c){s=s|0,l=l|0,c=c|0;var f=Ze,d=0;d=n[976+(c<<2)>>2]|0,f=y(h[l+908+(d<<2)>>2]),f=y(y(h[s+908+(d<<2)>>2])-f),f=y(f-y(h[l+400+(n[1040+(c<<2)>>2]<<2)>>2])),h[l+400+(n[1e3+(c<<2)>>2]<<2)>>2]=f}function OA(s){return s=s|0,(s|1|0)==1|0}function Iw(s){s=s|0;var l=Ze;switch(n[s+56>>2]|0){case 0:case 3:{l=y(h[s+40>>2]),l>y(0)&((_t(l)|0)^1)?s=o[(n[s+976>>2]|0)+2>>0]|0?1056:992:s=1056;break}default:s=s+52|0}return s|0}function Bw(s,l){return s=s|0,l=l|0,(o[s+l>>0]|0)!=0|0}function sr(s,l){return s=s|0,l=l|0,s=s+132|0,he(l)|0&&(n[(Fn(s,5,948)|0)+4>>2]|0)!=0?s=1:s=(n[(Fn(s,n[1e3+(l<<2)>>2]|0,948)|0)+4>>2]|0)!=0,s|0}function vu(s,l,c){s=s|0,l=l|0,c=y(c);var f=0,d=0;return s=s+132|0,he(l)|0&&(f=Fn(s,5,948)|0,(n[f+4>>2]|0)!=0)?d=4:(f=Fn(s,n[1e3+(l<<2)>>2]|0,948)|0,n[f+4>>2]|0?d=4:c=y(0)),(d|0)==4&&(c=y(Gr(f,c))),y(c)}function Mm(s,l,c){return s=s|0,l=l|0,c=y(c),gi(s,l)|0?c=y(Mr(s,l,c)):c=y(-y(vu(s,l,c))),y(c)}function Du(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function wp(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Vt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function Ig(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function UA(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function _A(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;if(B=s+4|0,k=n[B>>2]|0,d=k-f|0,m=d>>2,s=l+(m<<2)|0,s>>>0>>0){f=k;do n[f>>2]=n[s>>2],s=s+4|0,f=(n[B>>2]|0)+4|0,n[B>>2]=f;while(s>>>0>>0)}m|0&&Mw(k+(0-m<<2)|0,l|0,d|0)|0}function Bg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return k=l+4|0,Q=n[k>>2]|0,d=n[s>>2]|0,B=c,m=B-d|0,f=Q+(0-(m>>2)<<2)|0,n[k>>2]=f,(m|0)>0&&Dr(f|0,d|0,m|0)|0,d=s+4|0,m=l+8|0,f=(n[d>>2]|0)-B|0,(f|0)>0&&(Dr(n[m>>2]|0,c|0,f|0)|0,n[m>>2]=(n[m>>2]|0)+(f>>>2<<2)),B=n[s>>2]|0,n[s>>2]=n[k>>2],n[k>>2]=B,B=n[d>>2]|0,n[d>>2]=n[m>>2],n[m>>2]=B,B=s+8|0,c=l+12|0,s=n[B>>2]|0,n[B>>2]=n[c>>2],n[c>>2]=s,n[l>>2]=n[k>>2],Q|0}function vw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(B=n[l>>2]|0,m=n[c>>2]|0,(B|0)!=(m|0)){d=s+8|0,c=((m+-4-B|0)>>>2)+1|0,s=B,f=n[d>>2]|0;do n[f>>2]=n[s>>2],f=(n[d>>2]|0)+4|0,n[d>>2]=f,s=s+4|0;while((s|0)!=(m|0));n[l>>2]=B+(c<<2)}}function Om(){dc()}function ga(){var s=0;return s=Vt(4)|0,HA(s),s|0}function HA(s){s=s|0,n[s>>2]=ys()|0}function Sc(s){s=s|0,s|0&&(vg(s),gt(s))}function vg(s){s=s|0,tt(n[s>>2]|0)}function Um(s,l,c){s=s|0,l=l|0,c=c|0,Ga(n[s>>2]|0,l,c)}function fo(s,l){s=s|0,l=y(l),pa(n[s>>2]|0,l)}function Wv(s,l){return s=s|0,l=l|0,Bw(n[s>>2]|0,l)|0}function Dw(){var s=0;return s=Vt(8)|0,Vv(s,0),s|0}function Vv(s,l){s=s|0,l=l|0,l?l=Ci(n[l>>2]|0)|0:l=co()|0,n[s>>2]=l,n[s+4>>2]=0,xi(l,s)}function pF(s){s=s|0;var l=0;return l=Vt(8)|0,Vv(l,s),l|0}function Kv(s){s=s|0,s|0&&(Pu(s),gt(s))}function Pu(s){s=s|0;var l=0;la(n[s>>2]|0),l=s+4|0,s=n[l>>2]|0,n[l>>2]=0,s|0&&(jA(s),gt(s))}function jA(s){s=s|0,qA(s)}function qA(s){s=s|0,s=n[s>>2]|0,s|0&&PA(s|0)}function Pw(s){return s=s|0,jo(s)|0}function _m(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(jA(l),gt(l)),_s(n[s>>2]|0)}function hF(s,l){s=s|0,l=l|0,Zr(n[s>>2]|0,n[l>>2]|0)}function gF(s,l){s=s|0,l=l|0,ca(n[s>>2]|0,l)}function Jv(s,l,c){s=s|0,l=l|0,c=+c,yu(n[s>>2]|0,l,y(c))}function zv(s,l,c){s=s|0,l=l|0,c=+c,Es(n[s>>2]|0,l,y(c))}function Sw(s,l){s=s|0,l=l|0,gu(n[s>>2]|0,l)}function Su(s,l){s=s|0,l=l|0,du(n[s>>2]|0,l)}function dF(s,l){s=s|0,l=l|0,QA(n[s>>2]|0,l)}function mF(s,l){s=s|0,l=l|0,bA(n[s>>2]|0,l)}function Ip(s,l){s=s|0,l=l|0,yc(n[s>>2]|0,l)}function yF(s,l){s=s|0,l=l|0,up(n[s>>2]|0,l)}function Xv(s,l,c){s=s|0,l=l|0,c=+c,Cc(n[s>>2]|0,l,y(c))}function GA(s,l,c){s=s|0,l=l|0,c=+c,G(n[s>>2]|0,l,y(c))}function EF(s,l){s=s|0,l=l|0,wl(n[s>>2]|0,l)}function CF(s,l){s=s|0,l=l|0,og(n[s>>2]|0,l)}function Zv(s,l){s=s|0,l=l|0,Ap(n[s>>2]|0,l)}function xw(s,l){s=s|0,l=+l,FA(n[s>>2]|0,y(l))}function bw(s,l){s=s|0,l=+l,Ha(n[s>>2]|0,y(l))}function wF(s,l){s=s|0,l=+l,Gi(n[s>>2]|0,y(l))}function IF(s,l){s=s|0,l=+l,Hs(n[s>>2]|0,y(l))}function Dl(s,l){s=s|0,l=+l,mu(n[s>>2]|0,y(l))}function kw(s,l){s=s|0,l=+l,mw(n[s>>2]|0,y(l))}function BF(s,l){s=s|0,l=+l,TA(n[s>>2]|0,y(l))}function YA(s){s=s|0,fp(n[s>>2]|0)}function Hm(s,l){s=s|0,l=+l,Cs(n[s>>2]|0,y(l))}function xu(s,l){s=s|0,l=+l,cg(n[s>>2]|0,y(l))}function Qw(s){s=s|0,ug(n[s>>2]|0)}function Fw(s,l){s=s|0,l=+l,pp(n[s>>2]|0,y(l))}function vF(s,l){s=s|0,l=+l,Ic(n[s>>2]|0,y(l))}function $v(s,l){s=s|0,l=+l,Sm(n[s>>2]|0,y(l))}function WA(s,l){s=s|0,l=+l,fg(n[s>>2]|0,y(l))}function eD(s,l){s=s|0,l=+l,Cu(n[s>>2]|0,y(l))}function jm(s,l){s=s|0,l=+l,xm(n[s>>2]|0,y(l))}function tD(s,l){s=s|0,l=+l,wu(n[s>>2]|0,y(l))}function rD(s,l){s=s|0,l=+l,yw(n[s>>2]|0,y(l))}function qm(s,l){s=s|0,l=+l,Aa(n[s>>2]|0,y(l))}function nD(s,l,c){s=s|0,l=l|0,c=+c,Eu(n[s>>2]|0,l,y(c))}function DF(s,l,c){s=s|0,l=l|0,c=+c,bi(n[s>>2]|0,l,y(c))}function P(s,l,c){s=s|0,l=l|0,c=+c,wc(n[s>>2]|0,l,y(c))}function D(s){return s=s|0,sg(n[s>>2]|0)|0}function R(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Ec(d,n[l>>2]|0,c),j(s,d),C=f}function j(s,l){s=s|0,l=l|0,Y(s,n[l+4>>2]|0,+y(h[l>>2]))}function Y(s,l,c){s=s|0,l=l|0,c=+c,n[s>>2]=l,E[s+8>>3]=c}function fe(s){return s=s|0,ig(n[s>>2]|0)|0}function ve(s){return s=s|0,uo(n[s>>2]|0)|0}function vt(s){return s=s|0,mc(n[s>>2]|0)|0}function wt(s){return s=s|0,kA(n[s>>2]|0)|0}function bt(s){return s=s|0,Pm(n[s>>2]|0)|0}function _r(s){return s=s|0,ng(n[s>>2]|0)|0}function is(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Dt(d,n[l>>2]|0,c),j(s,d),C=f}function di(s){return s=s|0,$n(n[s>>2]|0)|0}function po(s){return s=s|0,ag(n[s>>2]|0)|0}function VA(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,ua(f,n[l>>2]|0),j(s,f),C=c}function Yo(s){return s=s|0,+ +y(qi(n[s>>2]|0))}function rt(s){return s=s|0,+ +y(es(n[s>>2]|0))}function Ke(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Br(f,n[l>>2]|0),j(s,f),C=c}function At(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Ag(f,n[l>>2]|0),j(s,f),C=c}function Wt(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,Ct(f,n[l>>2]|0),j(s,f),C=c}function vr(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,pg(f,n[l>>2]|0),j(s,f),C=c}function Sn(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,hg(f,n[l>>2]|0),j(s,f),C=c}function Fr(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,bm(f,n[l>>2]|0),j(s,f),C=c}function xn(s){return s=s|0,+ +y(Bc(n[s>>2]|0))}function ai(s,l){return s=s|0,l=l|0,+ +y(lg(n[s>>2]|0,l))}function en(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,ct(d,n[l>>2]|0,c),j(s,d),C=f}function ho(s,l,c){s=s|0,l=l|0,c=c|0,nr(n[s>>2]|0,n[l>>2]|0,c)}function PF(s,l){s=s|0,l=l|0,ms(n[s>>2]|0,n[l>>2]|0)}function sve(s){return s=s|0,wi(n[s>>2]|0)|0}function ove(s){return s=s|0,s=pt(n[s>>2]|0)|0,s?s=Pw(s)|0:s=0,s|0}function ave(s,l){return s=s|0,l=l|0,s=gs(n[s>>2]|0,l)|0,s?s=Pw(s)|0:s=0,s|0}function lve(s,l){s=s|0,l=l|0;var c=0,f=0;f=Vt(4)|0,$G(f,l),c=s+4|0,l=n[c>>2]|0,n[c>>2]=f,l|0&&(jA(l),gt(l)),It(n[s>>2]|0,1)}function $G(s,l){s=s|0,l=l|0,Cve(s,l)}function cve(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,uve(k,jo(l)|0,+c,f,+d,m),h[s>>2]=y(+E[k>>3]),h[s+4>>2]=y(+E[k+8>>3]),C=B}function uve(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0,k=0,Q=0,O=0,M=0;B=C,C=C+32|0,M=B+8|0,O=B+20|0,Q=B,k=B+16|0,E[M>>3]=c,n[O>>2]=f,E[Q>>3]=d,n[k>>2]=m,Ave(s,n[l+4>>2]|0,M,O,Q,k),C=B}function Ave(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0;B=C,C=C+16|0,k=B,Va(k),l=da(l)|0,fve(s,l,+E[c>>3],n[f>>2]|0,+E[d>>3],n[m>>2]|0),Ka(k),C=B}function da(s){return s=s|0,n[s>>2]|0}function fve(s,l,c,f,d,m){s=s|0,l=l|0,c=+c,f=f|0,d=+d,m=m|0;var B=0;B=Pl(pve()|0)|0,c=+KA(c),f=SF(f)|0,d=+KA(d),hve(s,hi(0,B|0,l|0,+c,f|0,+d,SF(m)|0)|0)}function pve(){var s=0;return o[7608]|0||(yve(9120),s=7608,n[s>>2]=1,n[s+4>>2]=0),9120}function Pl(s){return s=s|0,n[s+8>>2]|0}function KA(s){return s=+s,+ +xF(s)}function SF(s){return s=s|0,t5(s)|0}function hve(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=l,f&1?(gve(c,0),ii(f|0,c|0)|0,dve(s,c),mve(c)):(n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]),C=d}function gve(s,l){s=s|0,l=l|0,e5(s,l),n[s+8>>2]=0,o[s+24>>0]=0}function dve(s,l){s=s|0,l=l|0,l=l+8|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2]}function mve(s){s=s|0,o[s+24>>0]=0}function e5(s,l){s=s|0,l=l|0,n[s>>2]=l}function t5(s){return s=s|0,s|0}function xF(s){return s=+s,+s}function yve(s){s=s|0,Sl(s,Eve()|0,4)}function Eve(){return 1064}function Sl(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=cp(l|0,c+1|0)|0}function Cve(s,l){s=s|0,l=l|0,l=n[l>>2]|0,n[s>>2]=l,yl(l|0)}function wve(s){s=s|0;var l=0,c=0;c=s+4|0,l=n[c>>2]|0,n[c>>2]=0,l|0&&(jA(l),gt(l)),It(n[s>>2]|0,0)}function Ive(s){s=s|0,Rt(n[s>>2]|0)}function Bve(s){return s=s|0,er(n[s>>2]|0)|0}function vve(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,vc(n[s>>2]|0,y(l),y(c),f)}function Dve(s){return s=s|0,+ +y(Il(n[s>>2]|0))}function Pve(s){return s=s|0,+ +y(gg(n[s>>2]|0))}function Sve(s){return s=s|0,+ +y(Iu(n[s>>2]|0))}function xve(s){return s=s|0,+ +y(RA(n[s>>2]|0))}function bve(s){return s=s|0,+ +y(hp(n[s>>2]|0))}function kve(s){return s=s|0,+ +y(ja(n[s>>2]|0))}function Qve(s,l){s=s|0,l=l|0,E[s>>3]=+y(Il(n[l>>2]|0)),E[s+8>>3]=+y(gg(n[l>>2]|0)),E[s+16>>3]=+y(Iu(n[l>>2]|0)),E[s+24>>3]=+y(RA(n[l>>2]|0)),E[s+32>>3]=+y(hp(n[l>>2]|0)),E[s+40>>3]=+y(ja(n[l>>2]|0))}function Fve(s,l){return s=s|0,l=l|0,+ +y(dg(n[s>>2]|0,l))}function Tve(s,l){return s=s|0,l=l|0,+ +y(gp(n[s>>2]|0,l))}function Rve(s,l){return s=s|0,l=l|0,+ +y(qo(n[s>>2]|0,l))}function Nve(){return Pn()|0}function Lve(){Mve(),Ove(),Uve(),_ve(),Hve(),jve()}function Mve(){HNe(11713,4938,1)}function Ove(){oNe(10448)}function Uve(){HRe(10408)}function _ve(){uRe(10324)}function Hve(){yFe(10096)}function jve(){qve(9132)}function qve(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0,bn=0,go=0,mo=0,yo=0,ya=0,Qp=0,Fp=0,xl=0,Tp=0,Fu=0,Tu=0,Rp=0,Np=0,Lp=0,Xr=0,bl=0,Mp=0,bc=0,Op=0,Up=0,Ru=0,Nu=0,kc=0,qs=0,za=0,Wo=0,kl=0,rf=0,nf=0,Lu=0,sf=0,of=0,Gs=0,vs=0,Ql=0,Tn=0,af=0,Eo=0,Qc=0,Co=0,Fc=0,lf=0,cf=0,Tc=0,Ys=0,Fl=0,uf=0,Af=0,ff=0,br=0,Jn=0,Ds=0,wo=0,Ws=0,Tr=0,ur=0,Tl=0;l=C,C=C+672|0,c=l+656|0,Tl=l+648|0,ur=l+640|0,Tr=l+632|0,Ws=l+624|0,wo=l+616|0,Ds=l+608|0,Jn=l+600|0,br=l+592|0,ff=l+584|0,Af=l+576|0,uf=l+568|0,Fl=l+560|0,Ys=l+552|0,Tc=l+544|0,cf=l+536|0,lf=l+528|0,Fc=l+520|0,Co=l+512|0,Qc=l+504|0,Eo=l+496|0,af=l+488|0,Tn=l+480|0,Ql=l+472|0,vs=l+464|0,Gs=l+456|0,of=l+448|0,sf=l+440|0,Lu=l+432|0,nf=l+424|0,rf=l+416|0,kl=l+408|0,Wo=l+400|0,za=l+392|0,qs=l+384|0,kc=l+376|0,Nu=l+368|0,Ru=l+360|0,Up=l+352|0,Op=l+344|0,bc=l+336|0,Mp=l+328|0,bl=l+320|0,Xr=l+312|0,Lp=l+304|0,Np=l+296|0,Rp=l+288|0,Tu=l+280|0,Fu=l+272|0,Tp=l+264|0,xl=l+256|0,Fp=l+248|0,Qp=l+240|0,ya=l+232|0,yo=l+224|0,mo=l+216|0,go=l+208|0,bn=l+200|0,ir=l+192|0,Nr=l+184|0,Pr=l+176|0,Xt=l+168|0,or=l+160|0,Or=l+152|0,Lt=l+144|0,qe=l+136|0,Ue=l+128|0,at=l+120|0,Xe=l+112|0,et=l+104|0,Fe=l+96|0,Oe=l+88|0,Ge=l+80|0,se=l+72|0,q=l+64|0,M=l+56|0,O=l+48|0,Q=l+40|0,k=l+32|0,B=l+24|0,m=l+16|0,d=l+8|0,f=l,Gve(s,3646),Yve(s,3651,2)|0,Wve(s,3665,2)|0,Vve(s,3682,18)|0,n[Tl>>2]=19,n[Tl+4>>2]=0,n[c>>2]=n[Tl>>2],n[c+4>>2]=n[Tl+4>>2],Tw(s,3690,c)|0,n[ur>>2]=1,n[ur+4>>2]=0,n[c>>2]=n[ur>>2],n[c+4>>2]=n[ur+4>>2],Kve(s,3696,c)|0,n[Tr>>2]=2,n[Tr+4>>2]=0,n[c>>2]=n[Tr>>2],n[c+4>>2]=n[Tr+4>>2],bu(s,3706,c)|0,n[Ws>>2]=1,n[Ws+4>>2]=0,n[c>>2]=n[Ws>>2],n[c+4>>2]=n[Ws+4>>2],Dg(s,3722,c)|0,n[wo>>2]=2,n[wo+4>>2]=0,n[c>>2]=n[wo>>2],n[c+4>>2]=n[wo+4>>2],Dg(s,3734,c)|0,n[Ds>>2]=3,n[Ds+4>>2]=0,n[c>>2]=n[Ds>>2],n[c+4>>2]=n[Ds+4>>2],bu(s,3753,c)|0,n[Jn>>2]=4,n[Jn+4>>2]=0,n[c>>2]=n[Jn>>2],n[c+4>>2]=n[Jn+4>>2],bu(s,3769,c)|0,n[br>>2]=5,n[br+4>>2]=0,n[c>>2]=n[br>>2],n[c+4>>2]=n[br+4>>2],bu(s,3783,c)|0,n[ff>>2]=6,n[ff+4>>2]=0,n[c>>2]=n[ff>>2],n[c+4>>2]=n[ff+4>>2],bu(s,3796,c)|0,n[Af>>2]=7,n[Af+4>>2]=0,n[c>>2]=n[Af>>2],n[c+4>>2]=n[Af+4>>2],bu(s,3813,c)|0,n[uf>>2]=8,n[uf+4>>2]=0,n[c>>2]=n[uf>>2],n[c+4>>2]=n[uf+4>>2],bu(s,3825,c)|0,n[Fl>>2]=3,n[Fl+4>>2]=0,n[c>>2]=n[Fl>>2],n[c+4>>2]=n[Fl+4>>2],Dg(s,3843,c)|0,n[Ys>>2]=4,n[Ys+4>>2]=0,n[c>>2]=n[Ys>>2],n[c+4>>2]=n[Ys+4>>2],Dg(s,3853,c)|0,n[Tc>>2]=9,n[Tc+4>>2]=0,n[c>>2]=n[Tc>>2],n[c+4>>2]=n[Tc+4>>2],bu(s,3870,c)|0,n[cf>>2]=10,n[cf+4>>2]=0,n[c>>2]=n[cf>>2],n[c+4>>2]=n[cf+4>>2],bu(s,3884,c)|0,n[lf>>2]=11,n[lf+4>>2]=0,n[c>>2]=n[lf>>2],n[c+4>>2]=n[lf+4>>2],bu(s,3896,c)|0,n[Fc>>2]=1,n[Fc+4>>2]=0,n[c>>2]=n[Fc>>2],n[c+4>>2]=n[Fc+4>>2],Is(s,3907,c)|0,n[Co>>2]=2,n[Co+4>>2]=0,n[c>>2]=n[Co>>2],n[c+4>>2]=n[Co+4>>2],Is(s,3915,c)|0,n[Qc>>2]=3,n[Qc+4>>2]=0,n[c>>2]=n[Qc>>2],n[c+4>>2]=n[Qc+4>>2],Is(s,3928,c)|0,n[Eo>>2]=4,n[Eo+4>>2]=0,n[c>>2]=n[Eo>>2],n[c+4>>2]=n[Eo+4>>2],Is(s,3948,c)|0,n[af>>2]=5,n[af+4>>2]=0,n[c>>2]=n[af>>2],n[c+4>>2]=n[af+4>>2],Is(s,3960,c)|0,n[Tn>>2]=6,n[Tn+4>>2]=0,n[c>>2]=n[Tn>>2],n[c+4>>2]=n[Tn+4>>2],Is(s,3974,c)|0,n[Ql>>2]=7,n[Ql+4>>2]=0,n[c>>2]=n[Ql>>2],n[c+4>>2]=n[Ql+4>>2],Is(s,3983,c)|0,n[vs>>2]=20,n[vs+4>>2]=0,n[c>>2]=n[vs>>2],n[c+4>>2]=n[vs+4>>2],Tw(s,3999,c)|0,n[Gs>>2]=8,n[Gs+4>>2]=0,n[c>>2]=n[Gs>>2],n[c+4>>2]=n[Gs+4>>2],Is(s,4012,c)|0,n[of>>2]=9,n[of+4>>2]=0,n[c>>2]=n[of>>2],n[c+4>>2]=n[of+4>>2],Is(s,4022,c)|0,n[sf>>2]=21,n[sf+4>>2]=0,n[c>>2]=n[sf>>2],n[c+4>>2]=n[sf+4>>2],Tw(s,4039,c)|0,n[Lu>>2]=10,n[Lu+4>>2]=0,n[c>>2]=n[Lu>>2],n[c+4>>2]=n[Lu+4>>2],Is(s,4053,c)|0,n[nf>>2]=11,n[nf+4>>2]=0,n[c>>2]=n[nf>>2],n[c+4>>2]=n[nf+4>>2],Is(s,4065,c)|0,n[rf>>2]=12,n[rf+4>>2]=0,n[c>>2]=n[rf>>2],n[c+4>>2]=n[rf+4>>2],Is(s,4084,c)|0,n[kl>>2]=13,n[kl+4>>2]=0,n[c>>2]=n[kl>>2],n[c+4>>2]=n[kl+4>>2],Is(s,4097,c)|0,n[Wo>>2]=14,n[Wo+4>>2]=0,n[c>>2]=n[Wo>>2],n[c+4>>2]=n[Wo+4>>2],Is(s,4117,c)|0,n[za>>2]=15,n[za+4>>2]=0,n[c>>2]=n[za>>2],n[c+4>>2]=n[za+4>>2],Is(s,4129,c)|0,n[qs>>2]=16,n[qs+4>>2]=0,n[c>>2]=n[qs>>2],n[c+4>>2]=n[qs+4>>2],Is(s,4148,c)|0,n[kc>>2]=17,n[kc+4>>2]=0,n[c>>2]=n[kc>>2],n[c+4>>2]=n[kc+4>>2],Is(s,4161,c)|0,n[Nu>>2]=18,n[Nu+4>>2]=0,n[c>>2]=n[Nu>>2],n[c+4>>2]=n[Nu+4>>2],Is(s,4181,c)|0,n[Ru>>2]=5,n[Ru+4>>2]=0,n[c>>2]=n[Ru>>2],n[c+4>>2]=n[Ru+4>>2],Dg(s,4196,c)|0,n[Up>>2]=6,n[Up+4>>2]=0,n[c>>2]=n[Up>>2],n[c+4>>2]=n[Up+4>>2],Dg(s,4206,c)|0,n[Op>>2]=7,n[Op+4>>2]=0,n[c>>2]=n[Op>>2],n[c+4>>2]=n[Op+4>>2],Dg(s,4217,c)|0,n[bc>>2]=3,n[bc+4>>2]=0,n[c>>2]=n[bc>>2],n[c+4>>2]=n[bc+4>>2],JA(s,4235,c)|0,n[Mp>>2]=1,n[Mp+4>>2]=0,n[c>>2]=n[Mp>>2],n[c+4>>2]=n[Mp+4>>2],bF(s,4251,c)|0,n[bl>>2]=4,n[bl+4>>2]=0,n[c>>2]=n[bl>>2],n[c+4>>2]=n[bl+4>>2],JA(s,4263,c)|0,n[Xr>>2]=5,n[Xr+4>>2]=0,n[c>>2]=n[Xr>>2],n[c+4>>2]=n[Xr+4>>2],JA(s,4279,c)|0,n[Lp>>2]=6,n[Lp+4>>2]=0,n[c>>2]=n[Lp>>2],n[c+4>>2]=n[Lp+4>>2],JA(s,4293,c)|0,n[Np>>2]=7,n[Np+4>>2]=0,n[c>>2]=n[Np>>2],n[c+4>>2]=n[Np+4>>2],JA(s,4306,c)|0,n[Rp>>2]=8,n[Rp+4>>2]=0,n[c>>2]=n[Rp>>2],n[c+4>>2]=n[Rp+4>>2],JA(s,4323,c)|0,n[Tu>>2]=9,n[Tu+4>>2]=0,n[c>>2]=n[Tu>>2],n[c+4>>2]=n[Tu+4>>2],JA(s,4335,c)|0,n[Fu>>2]=2,n[Fu+4>>2]=0,n[c>>2]=n[Fu>>2],n[c+4>>2]=n[Fu+4>>2],bF(s,4353,c)|0,n[Tp>>2]=12,n[Tp+4>>2]=0,n[c>>2]=n[Tp>>2],n[c+4>>2]=n[Tp+4>>2],Pg(s,4363,c)|0,n[xl>>2]=1,n[xl+4>>2]=0,n[c>>2]=n[xl>>2],n[c+4>>2]=n[xl+4>>2],zA(s,4376,c)|0,n[Fp>>2]=2,n[Fp+4>>2]=0,n[c>>2]=n[Fp>>2],n[c+4>>2]=n[Fp+4>>2],zA(s,4388,c)|0,n[Qp>>2]=13,n[Qp+4>>2]=0,n[c>>2]=n[Qp>>2],n[c+4>>2]=n[Qp+4>>2],Pg(s,4402,c)|0,n[ya>>2]=14,n[ya+4>>2]=0,n[c>>2]=n[ya>>2],n[c+4>>2]=n[ya+4>>2],Pg(s,4411,c)|0,n[yo>>2]=15,n[yo+4>>2]=0,n[c>>2]=n[yo>>2],n[c+4>>2]=n[yo+4>>2],Pg(s,4421,c)|0,n[mo>>2]=16,n[mo+4>>2]=0,n[c>>2]=n[mo>>2],n[c+4>>2]=n[mo+4>>2],Pg(s,4433,c)|0,n[go>>2]=17,n[go+4>>2]=0,n[c>>2]=n[go>>2],n[c+4>>2]=n[go+4>>2],Pg(s,4446,c)|0,n[bn>>2]=18,n[bn+4>>2]=0,n[c>>2]=n[bn>>2],n[c+4>>2]=n[bn+4>>2],Pg(s,4458,c)|0,n[ir>>2]=3,n[ir+4>>2]=0,n[c>>2]=n[ir>>2],n[c+4>>2]=n[ir+4>>2],zA(s,4471,c)|0,n[Nr>>2]=1,n[Nr+4>>2]=0,n[c>>2]=n[Nr>>2],n[c+4>>2]=n[Nr+4>>2],iD(s,4486,c)|0,n[Pr>>2]=10,n[Pr+4>>2]=0,n[c>>2]=n[Pr>>2],n[c+4>>2]=n[Pr+4>>2],JA(s,4496,c)|0,n[Xt>>2]=11,n[Xt+4>>2]=0,n[c>>2]=n[Xt>>2],n[c+4>>2]=n[Xt+4>>2],JA(s,4508,c)|0,n[or>>2]=3,n[or+4>>2]=0,n[c>>2]=n[or>>2],n[c+4>>2]=n[or+4>>2],bF(s,4519,c)|0,n[Or>>2]=4,n[Or+4>>2]=0,n[c>>2]=n[Or>>2],n[c+4>>2]=n[Or+4>>2],Jve(s,4530,c)|0,n[Lt>>2]=19,n[Lt+4>>2]=0,n[c>>2]=n[Lt>>2],n[c+4>>2]=n[Lt+4>>2],zve(s,4542,c)|0,n[qe>>2]=12,n[qe+4>>2]=0,n[c>>2]=n[qe>>2],n[c+4>>2]=n[qe+4>>2],Xve(s,4554,c)|0,n[Ue>>2]=13,n[Ue+4>>2]=0,n[c>>2]=n[Ue>>2],n[c+4>>2]=n[Ue+4>>2],Zve(s,4568,c)|0,n[at>>2]=2,n[at+4>>2]=0,n[c>>2]=n[at>>2],n[c+4>>2]=n[at+4>>2],$ve(s,4578,c)|0,n[Xe>>2]=20,n[Xe+4>>2]=0,n[c>>2]=n[Xe>>2],n[c+4>>2]=n[Xe+4>>2],eDe(s,4587,c)|0,n[et>>2]=22,n[et+4>>2]=0,n[c>>2]=n[et>>2],n[c+4>>2]=n[et+4>>2],Tw(s,4602,c)|0,n[Fe>>2]=23,n[Fe+4>>2]=0,n[c>>2]=n[Fe>>2],n[c+4>>2]=n[Fe+4>>2],Tw(s,4619,c)|0,n[Oe>>2]=14,n[Oe+4>>2]=0,n[c>>2]=n[Oe>>2],n[c+4>>2]=n[Oe+4>>2],tDe(s,4629,c)|0,n[Ge>>2]=1,n[Ge+4>>2]=0,n[c>>2]=n[Ge>>2],n[c+4>>2]=n[Ge+4>>2],rDe(s,4637,c)|0,n[se>>2]=4,n[se+4>>2]=0,n[c>>2]=n[se>>2],n[c+4>>2]=n[se+4>>2],zA(s,4653,c)|0,n[q>>2]=5,n[q+4>>2]=0,n[c>>2]=n[q>>2],n[c+4>>2]=n[q+4>>2],zA(s,4669,c)|0,n[M>>2]=6,n[M+4>>2]=0,n[c>>2]=n[M>>2],n[c+4>>2]=n[M+4>>2],zA(s,4686,c)|0,n[O>>2]=7,n[O+4>>2]=0,n[c>>2]=n[O>>2],n[c+4>>2]=n[O+4>>2],zA(s,4701,c)|0,n[Q>>2]=8,n[Q+4>>2]=0,n[c>>2]=n[Q>>2],n[c+4>>2]=n[Q+4>>2],zA(s,4719,c)|0,n[k>>2]=9,n[k+4>>2]=0,n[c>>2]=n[k>>2],n[c+4>>2]=n[k+4>>2],zA(s,4736,c)|0,n[B>>2]=21,n[B+4>>2]=0,n[c>>2]=n[B>>2],n[c+4>>2]=n[B+4>>2],nDe(s,4754,c)|0,n[m>>2]=2,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],iD(s,4772,c)|0,n[d>>2]=3,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],iD(s,4790,c)|0,n[f>>2]=4,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],iD(s,4808,c)|0,C=l}function Gve(s,l){s=s|0,l=l|0;var c=0;c=cFe()|0,n[s>>2]=c,uFe(c,l),xp(n[s>>2]|0)}function Yve(s,l,c){return s=s|0,l=l|0,c=c|0,JQe(s,pn(l)|0,c,0),s|0}function Wve(s,l,c){return s=s|0,l=l|0,c=c|0,TQe(s,pn(l)|0,c,0),s|0}function Vve(s,l,c){return s=s|0,l=l|0,c=c|0,EQe(s,pn(l)|0,c,0),s|0}function Tw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],nQe(s,l,d),C=f,s|0}function Kve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Oke(s,l,d),C=f,s|0}function bu(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Ike(s,l,d),C=f,s|0}function Dg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],oke(s,l,d),C=f,s|0}function Is(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Gbe(s,l,d),C=f,s|0}function JA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],xbe(s,l,d),C=f,s|0}function bF(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],fbe(s,l,d),C=f,s|0}function Pg(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Oxe(s,l,d),C=f,s|0}function zA(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Ixe(s,l,d),C=f,s|0}function iD(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],oxe(s,l,d),C=f,s|0}function Jve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],GSe(s,l,d),C=f,s|0}function zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],xSe(s,l,d),C=f,s|0}function Xve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],pSe(s,l,d),C=f,s|0}function Zve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ZPe(s,l,d),C=f,s|0}function $ve(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],NPe(s,l,d),C=f,s|0}function eDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],yPe(s,l,d),C=f,s|0}function tDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rPe(s,l,d),C=f,s|0}function rDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ODe(s,l,d),C=f,s|0}function nDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],iDe(s,l,d),C=f,s|0}function iDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],sDe(s,c,d,1),C=f}function pn(s){return s=s|0,s|0}function sDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=kF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=oDe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,aDe(m,f)|0,f),C=d}function kF(){var s=0,l=0;if(o[7616]|0||(i5(9136),tr(24,9136,U|0)|0,l=7616,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9136)|0)){s=9136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));i5(9136)}return 9136}function oDe(s){return s=s|0,0}function aDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=kF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],n5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(uDe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function hn(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0;B=C,C=C+32|0,se=B+24|0,q=B+20|0,Q=B+16|0,M=B+12|0,O=B+8|0,k=B+4|0,Ge=B,n[q>>2]=l,n[Q>>2]=c,n[M>>2]=f,n[O>>2]=d,n[k>>2]=m,m=s+28|0,n[Ge>>2]=n[m>>2],n[se>>2]=n[Ge>>2],lDe(s+24|0,se,q,M,O,Q,k)|0,n[m>>2]=n[n[m>>2]>>2],C=B}function lDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,s=cDe(l)|0,l=Vt(24)|0,r5(l+4|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0,n[B>>2]|0),n[l>>2]=n[s>>2],n[s>>2]=l,l|0}function cDe(s){return s=s|0,n[s>>2]|0}function r5(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function gr(s,l){return s=s|0,l=l|0,l|s|0}function n5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function uDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ADe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,fDe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],n5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,pDe(s,k),hDe(k),C=O;return}}function ADe(s){return s=s|0,357913941}function fDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function pDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function i5(s){s=s|0,mDe(s)}function gDe(s){s=s|0,dDe(s+24|0)}function Rr(s){return s=s|0,n[s>>2]|0}function dDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function mDe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,3,l,yDe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Vr(){return 9228}function yDe(){return 1140}function EDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=CDe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=wDe(l,f)|0,C=c,l|0}function Kr(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,n[s>>2]=l,n[s+4>>2]=c,n[s+8>>2]=f,n[s+12>>2]=d,n[s+16>>2]=m}function CDe(s){return s=s|0,(n[(kF()|0)+24>>2]|0)+(s*12|0)|0}function wDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+48|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),tf[c&31](f,s),f=IDe(f)|0,C=d,f|0}function IDe(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=QF(s5()|0)|0,f?(FF(l,f),TF(c,l),BDe(s,c),s=RF(l)|0):s=vDe(s)|0,C=d,s|0}function s5(){var s=0;return o[7632]|0||(RDe(9184),tr(25,9184,U|0)|0,s=7632,n[s>>2]=1,n[s+4>>2]=0),9184}function QF(s){return s=s|0,n[s+36>>2]|0}function FF(s,l){s=s|0,l=l|0,n[s>>2]=l,n[s+4>>2]=s,n[s+8>>2]=0}function TF(s,l){s=s|0,l=l|0,n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=0}function BDe(s,l){s=s|0,l=l|0,xDe(l,s,s+8|0,s+16|0,s+24|0,s+32|0,s+40|0)|0}function RF(s){return s=s|0,n[(n[s+4>>2]|0)+8>>2]|0}function vDe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;Q=C,C=C+16|0,c=Q+4|0,f=Q,d=Wa(8)|0,m=d,B=Vt(48)|0,k=B,l=k+48|0;do n[k>>2]=n[s>>2],k=k+4|0,s=s+4|0;while((k|0)<(l|0));return l=m+4|0,n[l>>2]=B,k=Vt(8)|0,B=n[l>>2]|0,n[f>>2]=0,n[c>>2]=n[f>>2],o5(k,B,c),n[d>>2]=k,C=Q,m|0}function o5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1092,n[c+12>>2]=l,n[s+4>>2]=c}function DDe(s){s=s|0,Jm(s),gt(s)}function PDe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function SDe(s){s=s|0,gt(s)}function xDe(s,l,c,f,d,m,B){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,m=bDe(n[s>>2]|0,l,c,f,d,m,B)|0,B=s+4|0,n[(n[B>>2]|0)+8>>2]=m,n[(n[B>>2]|0)+8>>2]|0}function bDe(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0;var k=0,Q=0;return k=C,C=C+16|0,Q=k,Va(Q),s=da(s)|0,B=kDe(s,+E[l>>3],+E[c>>3],+E[f>>3],+E[d>>3],+E[m>>3],+E[B>>3])|0,Ka(Q),C=k,B|0}function kDe(s,l,c,f,d,m,B){s=s|0,l=+l,c=+c,f=+f,d=+d,m=+m,B=+B;var k=0;return k=Pl(QDe()|0)|0,l=+KA(l),c=+KA(c),f=+KA(f),d=+KA(d),m=+KA(m),Os(0,k|0,s|0,+l,+c,+f,+d,+m,+ +KA(B))|0}function QDe(){var s=0;return o[7624]|0||(FDe(9172),s=7624,n[s>>2]=1,n[s+4>>2]=0),9172}function FDe(s){s=s|0,Sl(s,TDe()|0,6)}function TDe(){return 1112}function RDe(s){s=s|0,Bp(s)}function NDe(s){s=s|0,a5(s+24|0),l5(s+16|0)}function a5(s){s=s|0,MDe(s)}function l5(s){s=s|0,LDe(s)}function LDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function MDe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function Bp(s){s=s|0;var l=0;n[s+16>>2]=0,n[s+20>>2]=0,l=s+24|0,n[l>>2]=0,n[s+28>>2]=l,n[s+36>>2]=0,o[s+40>>0]=0,o[s+41>>0]=0}function ODe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],UDe(s,c,d,0),C=f}function UDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=NF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=_De(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,HDe(m,f)|0,f),C=d}function NF(){var s=0,l=0;if(o[7640]|0||(u5(9232),tr(26,9232,U|0)|0,l=7640,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9232)|0)){s=9232,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));u5(9232)}return 9232}function _De(s){return s=s|0,0}function HDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=NF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],c5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jDe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function c5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jDe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=qDe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,GDe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],c5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,YDe(s,k),WDe(k),C=O;return}}function qDe(s){return s=s|0,357913941}function GDe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function YDe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function WDe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function u5(s){s=s|0,JDe(s)}function VDe(s){s=s|0,KDe(s+24|0)}function KDe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function JDe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,1,l,zDe()|0,3),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function zDe(){return 1144}function XDe(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+16|0,B=m+8|0,k=m,Q=ZDe(s)|0,s=n[Q+4>>2]|0,n[k>>2]=n[Q>>2],n[k+4>>2]=s,n[B>>2]=n[k>>2],n[B+4>>2]=n[k+4>>2],$De(l,B,c,f,d),C=m}function ZDe(s){return s=s|0,(n[(NF()|0)+24>>2]|0)+(s*12|0)|0}function $De(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0;var m=0,B=0,k=0,Q=0,O=0;O=C,C=C+16|0,B=O+2|0,k=O+1|0,Q=O,m=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(m=n[(n[s>>2]|0)+m>>2]|0),ku(B,c),c=+Qu(B,c),ku(k,f),f=+Qu(k,f),XA(Q,d),Q=ZA(Q,d)|0,D7[m&1](s,c,f,Q),C=O}function ku(s,l){s=s|0,l=+l}function Qu(s,l){return s=s|0,l=+l,+ +tPe(l)}function XA(s,l){s=s|0,l=l|0}function ZA(s,l){return s=s|0,l=l|0,ePe(l)|0}function ePe(s){return s=s|0,s|0}function tPe(s){return s=+s,+s}function rPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],nPe(s,c,d,1),C=f}function nPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=LF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=iPe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,sPe(m,f)|0,f),C=d}function LF(){var s=0,l=0;if(o[7648]|0||(f5(9268),tr(27,9268,U|0)|0,l=7648,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9268)|0)){s=9268,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));f5(9268)}return 9268}function iPe(s){return s=s|0,0}function sPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=LF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],A5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(oPe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function A5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function oPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=aPe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,lPe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],A5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,cPe(s,k),uPe(k),C=O;return}}function aPe(s){return s=s|0,357913941}function lPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function cPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function uPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function f5(s){s=s|0,pPe(s)}function APe(s){s=s|0,fPe(s+24|0)}function fPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function pPe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,4,l,hPe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function hPe(){return 1160}function gPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=dPe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=mPe(l,f)|0,C=c,l|0}function dPe(s){return s=s|0,(n[(LF()|0)+24>>2]|0)+(s*12|0)|0}function mPe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),p5(Ng[c&31](s)|0)|0}function p5(s){return s=s|0,s&1|0}function yPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],EPe(s,c,d,0),C=f}function EPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=MF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=CPe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,wPe(m,f)|0,f),C=d}function MF(){var s=0,l=0;if(o[7656]|0||(g5(9304),tr(28,9304,U|0)|0,l=7656,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9304)|0)){s=9304,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));g5(9304)}return 9304}function CPe(s){return s=s|0,0}function wPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=MF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],h5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(IPe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function h5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function IPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=BPe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,vPe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],h5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,DPe(s,k),PPe(k),C=O;return}}function BPe(s){return s=s|0,357913941}function vPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function DPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function PPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function g5(s){s=s|0,bPe(s)}function SPe(s){s=s|0,xPe(s+24|0)}function xPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function bPe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,5,l,kPe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function kPe(){return 1164}function QPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=FPe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],TPe(l,d,c),C=f}function FPe(s){return s=s|0,(n[(MF()|0)+24>>2]|0)+(s*12|0)|0}function TPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),vp(d,c),c=Dp(d,c)|0,tf[f&31](s,c),Pp(d),C=m}function vp(s,l){s=s|0,l=l|0,RPe(s,l)}function Dp(s,l){return s=s|0,l=l|0,s|0}function Pp(s){s=s|0,jA(s)}function RPe(s,l){s=s|0,l=l|0,OF(s,l)}function OF(s,l){s=s|0,l=l|0,n[s>>2]=l}function NPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],LPe(s,c,d,0),C=f}function LPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=UF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=MPe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,OPe(m,f)|0,f),C=d}function UF(){var s=0,l=0;if(o[7664]|0||(m5(9340),tr(29,9340,U|0)|0,l=7664,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9340)|0)){s=9340,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));m5(9340)}return 9340}function MPe(s){return s=s|0,0}function OPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=UF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],d5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(UPe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function d5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function UPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=_Pe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,HPe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],d5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,jPe(s,k),qPe(k),C=O;return}}function _Pe(s){return s=s|0,357913941}function HPe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function jPe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function qPe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function m5(s){s=s|0,WPe(s)}function GPe(s){s=s|0,YPe(s+24|0)}function YPe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function WPe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,4,l,VPe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VPe(){return 1180}function KPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=JPe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=zPe(l,d,c)|0,C=f,c|0}function JPe(s){return s=s|0,(n[(UF()|0)+24>>2]|0)+(s*12|0)|0}function zPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),Sg(d,c),d=xg(d,c)|0,d=sD(NT[f&15](s,d)|0)|0,C=m,d|0}function Sg(s,l){s=s|0,l=l|0}function xg(s,l){return s=s|0,l=l|0,XPe(l)|0}function sD(s){return s=s|0,s|0}function XPe(s){return s=s|0,s|0}function ZPe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],$Pe(s,c,d,0),C=f}function $Pe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=_F()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=eSe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,tSe(m,f)|0,f),C=d}function _F(){var s=0,l=0;if(o[7672]|0||(E5(9376),tr(30,9376,U|0)|0,l=7672,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9376)|0)){s=9376,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));E5(9376)}return 9376}function eSe(s){return s=s|0,0}function tSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=_F()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],y5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(rSe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function y5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function rSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=nSe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,iSe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],y5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,sSe(s,k),oSe(k),C=O;return}}function nSe(s){return s=s|0,357913941}function iSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function sSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function oSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function E5(s){s=s|0,cSe(s)}function aSe(s){s=s|0,lSe(s+24|0)}function lSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function cSe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,5,l,C5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function C5(){return 1196}function uSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=ASe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=fSe(l,f)|0,C=c,l|0}function ASe(s){return s=s|0,(n[(_F()|0)+24>>2]|0)+(s*12|0)|0}function fSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),sD(Ng[c&31](s)|0)|0}function pSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],hSe(s,c,d,1),C=f}function hSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=HF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=gSe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,dSe(m,f)|0,f),C=d}function HF(){var s=0,l=0;if(o[7680]|0||(I5(9412),tr(31,9412,U|0)|0,l=7680,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9412)|0)){s=9412,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));I5(9412)}return 9412}function gSe(s){return s=s|0,0}function dSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=HF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],w5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(mSe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function w5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function mSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ySe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,ESe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],w5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,CSe(s,k),wSe(k),C=O;return}}function ySe(s){return s=s|0,357913941}function ESe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function CSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function wSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function I5(s){s=s|0,vSe(s)}function ISe(s){s=s|0,BSe(s+24|0)}function BSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function vSe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,6,l,B5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function B5(){return 1200}function DSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=PSe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=SSe(l,f)|0,C=c,l|0}function PSe(s){return s=s|0,(n[(HF()|0)+24>>2]|0)+(s*12|0)|0}function SSe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),oD(Ng[c&31](s)|0)|0}function oD(s){return s=s|0,s|0}function xSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],bSe(s,c,d,0),C=f}function bSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=jF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=kSe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,QSe(m,f)|0,f),C=d}function jF(){var s=0,l=0;if(o[7688]|0||(D5(9448),tr(32,9448,U|0)|0,l=7688,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9448)|0)){s=9448,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));D5(9448)}return 9448}function kSe(s){return s=s|0,0}function QSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=jF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],v5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(FSe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function v5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function FSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=TSe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,RSe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],v5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,NSe(s,k),LSe(k),C=O;return}}function TSe(s){return s=s|0,357913941}function RSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function NSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function LSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function D5(s){s=s|0,USe(s)}function MSe(s){s=s|0,OSe(s+24|0)}function OSe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function USe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,6,l,P5()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function P5(){return 1204}function _Se(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=HSe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],jSe(l,d,c),C=f}function HSe(s){return s=s|0,(n[(jF()|0)+24>>2]|0)+(s*12|0)|0}function jSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),qF(d,c),d=GF(d,c)|0,tf[f&31](s,d),C=m}function qF(s,l){s=s|0,l=l|0}function GF(s,l){return s=s|0,l=l|0,qSe(l)|0}function qSe(s){return s=s|0,s|0}function GSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],YSe(s,c,d,0),C=f}function YSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=YF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=WSe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,VSe(m,f)|0,f),C=d}function YF(){var s=0,l=0;if(o[7696]|0||(x5(9484),tr(33,9484,U|0)|0,l=7696,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9484)|0)){s=9484,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));x5(9484)}return 9484}function WSe(s){return s=s|0,0}function VSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=YF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],S5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(KSe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function S5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function KSe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=JSe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,zSe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],S5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,XSe(s,k),ZSe(k),C=O;return}}function JSe(s){return s=s|0,357913941}function zSe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function XSe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function ZSe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function x5(s){s=s|0,txe(s)}function $Se(s){s=s|0,exe(s+24|0)}function exe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function txe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,1,l,rxe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function rxe(){return 1212}function nxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=ixe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],sxe(l,m,c,f),C=d}function ixe(s){return s=s|0,(n[(YF()|0)+24>>2]|0)+(s*12|0)|0}function sxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),qF(m,c),m=GF(m,c)|0,Sg(B,f),B=xg(B,f)|0,_w[d&15](s,m,B),C=k}function oxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],axe(s,c,d,1),C=f}function axe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=WF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=lxe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,cxe(m,f)|0,f),C=d}function WF(){var s=0,l=0;if(o[7704]|0||(k5(9520),tr(34,9520,U|0)|0,l=7704,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9520)|0)){s=9520,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));k5(9520)}return 9520}function lxe(s){return s=s|0,0}function cxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=WF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],b5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(uxe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function b5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function uxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Axe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,fxe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],b5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,pxe(s,k),hxe(k),C=O;return}}function Axe(s){return s=s|0,357913941}function fxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function pxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function k5(s){s=s|0,mxe(s)}function gxe(s){s=s|0,dxe(s+24|0)}function dxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function mxe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,1,l,yxe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yxe(){return 1224}function Exe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;return d=C,C=C+16|0,m=d+8|0,B=d,k=Cxe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],f=+wxe(l,m,c),C=d,+f}function Cxe(s){return s=s|0,(n[(WF()|0)+24>>2]|0)+(s*12|0)|0}function wxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,B=+xF(+S7[f&7](s,d)),C=m,+B}function Ixe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Bxe(s,c,d,1),C=f}function Bxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=VF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=vxe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Dxe(m,f)|0,f),C=d}function VF(){var s=0,l=0;if(o[7712]|0||(F5(9556),tr(35,9556,U|0)|0,l=7712,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9556)|0)){s=9556,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));F5(9556)}return 9556}function vxe(s){return s=s|0,0}function Dxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=VF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Q5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Pxe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function Q5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Pxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Sxe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,xxe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],Q5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,bxe(s,k),kxe(k),C=O;return}}function Sxe(s){return s=s|0,357913941}function xxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function bxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function kxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function F5(s){s=s|0,Txe(s)}function Qxe(s){s=s|0,Fxe(s+24|0)}function Fxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Txe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,5,l,Rxe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Rxe(){return 1232}function Nxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=Lxe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=+Mxe(l,d),C=f,+c}function Lxe(s){return s=s|0,(n[(VF()|0)+24>>2]|0)+(s*12|0)|0}function Mxe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),+ +xF(+P7[c&15](s))}function Oxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Uxe(s,c,d,1),C=f}function Uxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=KF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=_xe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Hxe(m,f)|0,f),C=d}function KF(){var s=0,l=0;if(o[7720]|0||(R5(9592),tr(36,9592,U|0)|0,l=7720,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9592)|0)){s=9592,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));R5(9592)}return 9592}function _xe(s){return s=s|0,0}function Hxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=KF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],T5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jxe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function T5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jxe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=qxe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,Gxe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],T5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Yxe(s,k),Wxe(k),C=O;return}}function qxe(s){return s=s|0,357913941}function Gxe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Yxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Wxe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function R5(s){s=s|0,Jxe(s)}function Vxe(s){s=s|0,Kxe(s+24|0)}function Kxe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Jxe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,7,l,zxe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function zxe(){return 1276}function Xxe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=Zxe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=$xe(l,f)|0,C=c,l|0}function Zxe(s){return s=s|0,(n[(KF()|0)+24>>2]|0)+(s*12|0)|0}function $xe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;return d=C,C=C+16|0,f=d,c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),tf[c&31](f,s),f=N5(f)|0,C=d,f|0}function N5(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=QF(L5()|0)|0,f?(FF(l,f),TF(c,l),ebe(s,c),s=RF(l)|0):s=tbe(s)|0,C=d,s|0}function L5(){var s=0;return o[7736]|0||(Abe(9640),tr(25,9640,U|0)|0,s=7736,n[s>>2]=1,n[s+4>>2]=0),9640}function ebe(s,l){s=s|0,l=l|0,sbe(l,s,s+8|0)|0}function tbe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Vt(16)|0,n[k>>2]=n[s>>2],n[k+4>>2]=n[s+4>>2],n[k+8>>2]=n[s+8>>2],n[k+12>>2]=n[s+12>>2],m=l+4|0,n[m>>2]=k,s=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],JF(s,m,d),n[f>>2]=s,C=c,l|0}function JF(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1244,n[c+12>>2]=l,n[s+4>>2]=c}function rbe(s){s=s|0,Jm(s),gt(s)}function nbe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function ibe(s){s=s|0,gt(s)}function sbe(s,l,c){return s=s|0,l=l|0,c=c|0,l=obe(n[s>>2]|0,l,c)|0,c=s+4|0,n[(n[c>>2]|0)+8>>2]=l,n[(n[c>>2]|0)+8>>2]|0}function obe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return f=C,C=C+16|0,d=f,Va(d),s=da(s)|0,c=abe(s,n[l>>2]|0,+E[c>>3])|0,Ka(d),C=f,c|0}function abe(s,l,c){s=s|0,l=l|0,c=+c;var f=0;return f=Pl(lbe()|0)|0,l=SF(l)|0,ml(0,f|0,s|0,l|0,+ +KA(c))|0}function lbe(){var s=0;return o[7728]|0||(cbe(9628),s=7728,n[s>>2]=1,n[s+4>>2]=0),9628}function cbe(s){s=s|0,Sl(s,ube()|0,2)}function ube(){return 1264}function Abe(s){s=s|0,Bp(s)}function fbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],pbe(s,c,d,1),C=f}function pbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=zF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=hbe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,gbe(m,f)|0,f),C=d}function zF(){var s=0,l=0;if(o[7744]|0||(O5(9684),tr(37,9684,U|0)|0,l=7744,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9684)|0)){s=9684,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));O5(9684)}return 9684}function hbe(s){return s=s|0,0}function gbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=zF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],M5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(dbe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function M5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function dbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=mbe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,ybe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],M5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Ebe(s,k),Cbe(k),C=O;return}}function mbe(s){return s=s|0,357913941}function ybe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Ebe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Cbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function O5(s){s=s|0,Bbe(s)}function wbe(s){s=s|0,Ibe(s+24|0)}function Ibe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Bbe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,5,l,vbe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function vbe(){return 1280}function Dbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=Pbe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=Sbe(l,d,c)|0,C=f,c|0}function Pbe(s){return s=s|0,(n[(zF()|0)+24>>2]|0)+(s*12|0)|0}function Sbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return B=C,C=C+32|0,d=B,m=B+16|0,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(m,c),m=ZA(m,c)|0,_w[f&15](d,s,m),m=N5(d)|0,C=B,m|0}function xbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],bbe(s,c,d,1),C=f}function bbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=XF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=kbe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Qbe(m,f)|0,f),C=d}function XF(){var s=0,l=0;if(o[7752]|0||(_5(9720),tr(38,9720,U|0)|0,l=7752,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9720)|0)){s=9720,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));_5(9720)}return 9720}function kbe(s){return s=s|0,0}function Qbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=XF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],U5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Fbe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function U5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Fbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Tbe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,Rbe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],U5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Nbe(s,k),Lbe(k),C=O;return}}function Tbe(s){return s=s|0,357913941}function Rbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Nbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Lbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function _5(s){s=s|0,Ube(s)}function Mbe(s){s=s|0,Obe(s+24|0)}function Obe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Ube(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,8,l,_be()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function _be(){return 1288}function Hbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;return c=C,C=C+16|0,f=c+8|0,d=c,m=jbe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],l=qbe(l,f)|0,C=c,l|0}function jbe(s){return s=s|0,(n[(XF()|0)+24>>2]|0)+(s*12|0)|0}function qbe(s,l){s=s|0,l=l|0;var c=0;return c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),t5(Ng[c&31](s)|0)|0}function Gbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Ybe(s,c,d,0),C=f}function Ybe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=ZF()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=Wbe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Vbe(m,f)|0,f),C=d}function ZF(){var s=0,l=0;if(o[7760]|0||(j5(9756),tr(39,9756,U|0)|0,l=7760,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9756)|0)){s=9756,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));j5(9756)}return 9756}function Wbe(s){return s=s|0,0}function Vbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=ZF()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],H5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Kbe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function H5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Kbe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Jbe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,zbe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],H5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Xbe(s,k),Zbe(k),C=O;return}}function Jbe(s){return s=s|0,357913941}function zbe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Xbe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Zbe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function j5(s){s=s|0,tke(s)}function $be(s){s=s|0,eke(s+24|0)}function eke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function tke(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,8,l,rke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function rke(){return 1292}function nke(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=ike(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ske(l,d,c),C=f}function ike(s){return s=s|0,(n[(ZF()|0)+24>>2]|0)+(s*12|0)|0}function ske(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),ku(d,c),c=+Qu(d,c),B7[f&31](s,c),C=m}function oke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],ake(s,c,d,0),C=f}function ake(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=$F()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=lke(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,cke(m,f)|0,f),C=d}function $F(){var s=0,l=0;if(o[7768]|0||(G5(9792),tr(40,9792,U|0)|0,l=7768,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9792)|0)){s=9792,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));G5(9792)}return 9792}function lke(s){return s=s|0,0}function cke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=$F()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],q5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(uke(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function q5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function uke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Ake(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,fke(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],q5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,pke(s,k),hke(k),C=O;return}}function Ake(s){return s=s|0,357913941}function fke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function pke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function G5(s){s=s|0,mke(s)}function gke(s){s=s|0,dke(s+24|0)}function dke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function mke(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,1,l,yke()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yke(){return 1300}function Eke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=Cke(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],wke(l,m,c,f),C=d}function Cke(s){return s=s|0,(n[($F()|0)+24>>2]|0)+(s*12|0)|0}function wke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),XA(m,c),m=ZA(m,c)|0,ku(B,f),f=+Qu(B,f),Q7[d&15](s,m,f),C=k}function Ike(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Bke(s,c,d,0),C=f}function Bke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=eT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=vke(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Dke(m,f)|0,f),C=d}function eT(){var s=0,l=0;if(o[7776]|0||(W5(9828),tr(41,9828,U|0)|0,l=7776,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9828)|0)){s=9828,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));W5(9828)}return 9828}function vke(s){return s=s|0,0}function Dke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=eT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],Y5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(Pke(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function Y5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function Pke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=Ske(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,xke(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],Y5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,bke(s,k),kke(k),C=O;return}}function Ske(s){return s=s|0,357913941}function xke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function bke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function kke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function W5(s){s=s|0,Tke(s)}function Qke(s){s=s|0,Fke(s+24|0)}function Fke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Tke(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,7,l,Rke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function Rke(){return 1312}function Nke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=Lke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Mke(l,d,c),C=f}function Lke(s){return s=s|0,(n[(eT()|0)+24>>2]|0)+(s*12|0)|0}function Mke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,tf[f&31](s,d),C=m}function Oke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],Uke(s,c,d,0),C=f}function Uke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=tT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=_ke(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,Hke(m,f)|0,f),C=d}function tT(){var s=0,l=0;if(o[7784]|0||(K5(9864),tr(42,9864,U|0)|0,l=7784,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9864)|0)){s=9864,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));K5(9864)}return 9864}function _ke(s){return s=s|0,0}function Hke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=tT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],V5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(jke(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function V5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function jke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=qke(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,Gke(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],V5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,Yke(s,k),Wke(k),C=O;return}}function qke(s){return s=s|0,357913941}function Gke(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function Yke(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function Wke(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function K5(s){s=s|0,Jke(s)}function Vke(s){s=s|0,Kke(s+24|0)}function Kke(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function Jke(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,8,l,zke()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function zke(){return 1320}function Xke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=Zke(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],$ke(l,d,c),C=f}function Zke(s){return s=s|0,(n[(tT()|0)+24>>2]|0)+(s*12|0)|0}function $ke(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),eQe(d,c),d=tQe(d,c)|0,tf[f&31](s,d),C=m}function eQe(s,l){s=s|0,l=l|0}function tQe(s,l){return s=s|0,l=l|0,rQe(l)|0}function rQe(s){return s=s|0,s|0}function nQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],iQe(s,c,d,0),C=f}function iQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=rT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=sQe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,oQe(m,f)|0,f),C=d}function rT(){var s=0,l=0;if(o[7792]|0||(z5(9900),tr(43,9900,U|0)|0,l=7792,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9900)|0)){s=9900,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));z5(9900)}return 9900}function sQe(s){return s=s|0,0}function oQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=rT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],J5(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(aQe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function J5(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function aQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=lQe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,cQe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],J5(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,uQe(s,k),AQe(k),C=O;return}}function lQe(s){return s=s|0,357913941}function cQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function uQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function AQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function z5(s){s=s|0,hQe(s)}function fQe(s){s=s|0,pQe(s+24|0)}function pQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function hQe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,22,l,gQe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function gQe(){return 1344}function dQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0;c=C,C=C+16|0,f=c+8|0,d=c,m=mQe(s)|0,s=n[m+4>>2]|0,n[d>>2]=n[m>>2],n[d+4>>2]=s,n[f>>2]=n[d>>2],n[f+4>>2]=n[d+4>>2],yQe(l,f),C=c}function mQe(s){return s=s|0,(n[(rT()|0)+24>>2]|0)+(s*12|0)|0}function yQe(s,l){s=s|0,l=l|0;var c=0;c=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(c=n[(n[s>>2]|0)+c>>2]|0),ef[c&127](s)}function EQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=nT()|0,s=CQe(c)|0,hn(m,l,d,s,wQe(c,f)|0,f)}function nT(){var s=0,l=0;if(o[7800]|0||(Z5(9936),tr(44,9936,U|0)|0,l=7800,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9936)|0)){s=9936,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));Z5(9936)}return 9936}function CQe(s){return s=s|0,s|0}function wQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=nT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(X5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(IQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function X5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function IQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=BQe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,vQe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,X5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,DQe(s,d),PQe(d),C=k;return}}function BQe(s){return s=s|0,536870911}function vQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function DQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function PQe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function Z5(s){s=s|0,bQe(s)}function SQe(s){s=s|0,xQe(s+24|0)}function xQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function bQe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,23,l,P5()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function kQe(s,l){s=s|0,l=l|0,FQe(n[(QQe(s)|0)>>2]|0,l)}function QQe(s){return s=s|0,(n[(nT()|0)+24>>2]|0)+(s<<3)|0}function FQe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,qF(f,l),l=GF(f,l)|0,ef[s&127](l),C=c}function TQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=iT()|0,s=RQe(c)|0,hn(m,l,d,s,NQe(c,f)|0,f)}function iT(){var s=0,l=0;if(o[7808]|0||(e9(9972),tr(45,9972,U|0)|0,l=7808,n[l>>2]=1,n[l+4>>2]=0),!(Rr(9972)|0)){s=9972,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));e9(9972)}return 9972}function RQe(s){return s=s|0,s|0}function NQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=iT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?($5(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(LQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function $5(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function LQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=MQe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,OQe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,$5(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,UQe(s,d),_Qe(d),C=k;return}}function MQe(s){return s=s|0,536870911}function OQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function UQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function _Qe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function e9(s){s=s|0,qQe(s)}function HQe(s){s=s|0,jQe(s+24|0)}function jQe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function qQe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,9,l,GQe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function GQe(){return 1348}function YQe(s,l){return s=s|0,l=l|0,VQe(n[(WQe(s)|0)>>2]|0,l)|0}function WQe(s){return s=s|0,(n[(iT()|0)+24>>2]|0)+(s<<3)|0}function VQe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,t9(f,l),l=r9(f,l)|0,l=sD(Ng[s&31](l)|0)|0,C=c,l|0}function t9(s,l){s=s|0,l=l|0}function r9(s,l){return s=s|0,l=l|0,KQe(l)|0}function KQe(s){return s=s|0,s|0}function JQe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=sT()|0,s=zQe(c)|0,hn(m,l,d,s,XQe(c,f)|0,f)}function sT(){var s=0,l=0;if(o[7816]|0||(i9(10008),tr(46,10008,U|0)|0,l=7816,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10008)|0)){s=10008,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));i9(10008)}return 10008}function zQe(s){return s=s|0,s|0}function XQe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=sT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(n9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(ZQe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function n9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function ZQe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=$Qe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,eFe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,n9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,tFe(s,d),rFe(d),C=k;return}}function $Qe(s){return s=s|0,536870911}function eFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function tFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function rFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function i9(s){s=s|0,sFe(s)}function nFe(s){s=s|0,iFe(s+24|0)}function iFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function sFe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,15,l,C5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function oFe(s){return s=s|0,lFe(n[(aFe(s)|0)>>2]|0)|0}function aFe(s){return s=s|0,(n[(sT()|0)+24>>2]|0)+(s<<3)|0}function lFe(s){return s=s|0,sD(CD[s&7]()|0)|0}function cFe(){var s=0;return o[7832]|0||(mFe(10052),tr(25,10052,U|0)|0,s=7832,n[s>>2]=1,n[s+4>>2]=0),10052}function uFe(s,l){s=s|0,l=l|0,n[s>>2]=AFe()|0,n[s+4>>2]=fFe()|0,n[s+12>>2]=l,n[s+8>>2]=pFe()|0,n[s+32>>2]=2}function AFe(){return 11709}function fFe(){return 1188}function pFe(){return aD()|0}function hFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(gFe(c),gt(c)):l|0&&(Pu(l),gt(l))}function Sp(s,l){return s=s|0,l=l|0,l&s|0}function gFe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function aD(){var s=0;return o[7824]|0||(n[2511]=dFe()|0,n[2512]=0,s=7824,n[s>>2]=1,n[s+4>>2]=0),10044}function dFe(){return 0}function mFe(s){s=s|0,Bp(s)}function yFe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0;l=C,C=C+32|0,c=l+24|0,m=l+16|0,d=l+8|0,f=l,EFe(s,4827),CFe(s,4834,3)|0,wFe(s,3682,47)|0,n[m>>2]=9,n[m+4>>2]=0,n[c>>2]=n[m>>2],n[c+4>>2]=n[m+4>>2],IFe(s,4841,c)|0,n[d>>2]=1,n[d+4>>2]=0,n[c>>2]=n[d>>2],n[c+4>>2]=n[d+4>>2],BFe(s,4871,c)|0,n[f>>2]=10,n[f+4>>2]=0,n[c>>2]=n[f>>2],n[c+4>>2]=n[f+4>>2],vFe(s,4891,c)|0,C=l}function EFe(s,l){s=s|0,l=l|0;var c=0;c=rRe()|0,n[s>>2]=c,nRe(c,l),xp(n[s>>2]|0)}function CFe(s,l,c){return s=s|0,l=l|0,c=c|0,_Te(s,pn(l)|0,c,0),s|0}function wFe(s,l,c){return s=s|0,l=l|0,c=c|0,DTe(s,pn(l)|0,c,0),s|0}function IFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],oTe(s,l,d),C=f,s|0}function BFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],HFe(s,l,d),C=f,s|0}function vFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=n[c+4>>2]|0,n[m>>2]=n[c>>2],n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],DFe(s,l,d),C=f,s|0}function DFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],PFe(s,c,d,1),C=f}function PFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=oT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=SFe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,xFe(m,f)|0,f),C=d}function oT(){var s=0,l=0;if(o[7840]|0||(o9(10100),tr(48,10100,U|0)|0,l=7840,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10100)|0)){s=10100,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));o9(10100)}return 10100}function SFe(s){return s=s|0,0}function xFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=oT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],s9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(bFe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function s9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function bFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=kFe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,QFe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],s9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,FFe(s,k),TFe(k),C=O;return}}function kFe(s){return s=s|0,357913941}function QFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function FFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function TFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function o9(s){s=s|0,LFe(s)}function RFe(s){s=s|0,NFe(s+24|0)}function NFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function LFe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,6,l,MFe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function MFe(){return 1364}function OFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;return f=C,C=C+16|0,d=f+8|0,m=f,B=UFe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],c=_Fe(l,d,c)|0,C=f,c|0}function UFe(s){return s=s|0,(n[(oT()|0)+24>>2]|0)+(s*12|0)|0}function _Fe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),XA(d,c),d=ZA(d,c)|0,d=p5(NT[f&15](s,d)|0)|0,C=m,d|0}function HFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],jFe(s,c,d,0),C=f}function jFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=aT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=qFe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,GFe(m,f)|0,f),C=d}function aT(){var s=0,l=0;if(o[7848]|0||(l9(10136),tr(49,10136,U|0)|0,l=7848,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10136)|0)){s=10136,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));l9(10136)}return 10136}function qFe(s){return s=s|0,0}function GFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=aT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],a9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(YFe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function a9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function YFe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=WFe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,VFe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],a9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,KFe(s,k),JFe(k),C=O;return}}function WFe(s){return s=s|0,357913941}function VFe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function KFe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function JFe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function l9(s){s=s|0,ZFe(s)}function zFe(s){s=s|0,XFe(s+24|0)}function XFe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function ZFe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,9,l,$Fe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function $Fe(){return 1372}function eTe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,d=f+8|0,m=f,B=tTe(s)|0,s=n[B+4>>2]|0,n[m>>2]=n[B>>2],n[m+4>>2]=s,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],rTe(l,d,c),C=f}function tTe(s){return s=s|0,(n[(aT()|0)+24>>2]|0)+(s*12|0)|0}function rTe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=Ze;m=C,C=C+16|0,d=m,f=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(f=n[(n[s>>2]|0)+f>>2]|0),nTe(d,c),B=y(iTe(d,c)),I7[f&1](s,B),C=m}function nTe(s,l){s=s|0,l=+l}function iTe(s,l){return s=s|0,l=+l,y(sTe(l))}function sTe(s){return s=+s,y(s)}function oTe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,d=f+8|0,m=f,k=n[c>>2]|0,B=n[c+4>>2]|0,c=pn(l)|0,n[m>>2]=k,n[m+4>>2]=B,n[d>>2]=n[m>>2],n[d+4>>2]=n[m+4>>2],aTe(s,c,d,0),C=f}function aTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0,Q=0,O=0,M=0;d=C,C=C+32|0,m=d+16|0,M=d+8|0,k=d,O=n[c>>2]|0,Q=n[c+4>>2]|0,B=n[s>>2]|0,s=lT()|0,n[M>>2]=O,n[M+4>>2]=Q,n[m>>2]=n[M>>2],n[m+4>>2]=n[M+4>>2],c=lTe(m)|0,n[k>>2]=O,n[k+4>>2]=Q,n[m>>2]=n[k>>2],n[m+4>>2]=n[k+4>>2],hn(B,l,s,c,cTe(m,f)|0,f),C=d}function lT(){var s=0,l=0;if(o[7856]|0||(u9(10172),tr(50,10172,U|0)|0,l=7856,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10172)|0)){s=10172,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));u9(10172)}return 10172}function lTe(s){return s=s|0,0}function cTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0;return M=C,C=C+32|0,d=M+24|0,B=M+16|0,k=M,Q=M+8|0,m=n[s>>2]|0,f=n[s+4>>2]|0,n[k>>2]=m,n[k+4>>2]=f,q=lT()|0,O=q+24|0,s=gr(l,4)|0,n[Q>>2]=s,l=q+28|0,c=n[l>>2]|0,c>>>0<(n[q+32>>2]|0)>>>0?(n[B>>2]=m,n[B+4>>2]=f,n[d>>2]=n[B>>2],n[d+4>>2]=n[B+4>>2],c9(c,d,s),s=(n[l>>2]|0)+12|0,n[l>>2]=s):(uTe(O,k,Q),s=n[l>>2]|0),C=M,((s-(n[O>>2]|0)|0)/12|0)+-1|0}function c9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=n[l+4>>2]|0,n[s>>2]=n[l>>2],n[s+4>>2]=f,n[s+8>>2]=c}function uTe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;if(O=C,C=C+48|0,f=O+32|0,B=O+24|0,k=O,Q=s+4|0,d=(((n[Q>>2]|0)-(n[s>>2]|0)|0)/12|0)+1|0,m=ATe(s)|0,m>>>0>>0)zr(s);else{M=n[s>>2]|0,se=((n[s+8>>2]|0)-M|0)/12|0,q=se<<1,fTe(k,se>>>0>>1>>>0?q>>>0>>0?d:q:m,((n[Q>>2]|0)-M|0)/12|0,s+8|0),Q=k+8|0,m=n[Q>>2]|0,d=n[l+4>>2]|0,c=n[c>>2]|0,n[B>>2]=n[l>>2],n[B+4>>2]=d,n[f>>2]=n[B>>2],n[f+4>>2]=n[B+4>>2],c9(m,f,c),n[Q>>2]=(n[Q>>2]|0)+12,pTe(s,k),hTe(k),C=O;return}}function ATe(s){return s=s|0,357913941}function fTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>357913941)Tt();else{d=Vt(l*12|0)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c*12|0)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l*12|0)}function pTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(((d|0)/-12|0)*12|0)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function hTe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~(((f+-12-l|0)>>>0)/12|0)*12|0)),s=n[s>>2]|0,s|0&>(s)}function u9(s){s=s|0,mTe(s)}function gTe(s){s=s|0,dTe(s+24|0)}function dTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~(((l+-12-f|0)>>>0)/12|0)*12|0)),gt(c))}function mTe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,2,3,l,yTe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yTe(){return 1380}function ETe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+8|0,B=d,k=CTe(s)|0,s=n[k+4>>2]|0,n[B>>2]=n[k>>2],n[B+4>>2]=s,n[m>>2]=n[B>>2],n[m+4>>2]=n[B+4>>2],wTe(l,m,c,f),C=d}function CTe(s){return s=s|0,(n[(lT()|0)+24>>2]|0)+(s*12|0)|0}function wTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;k=C,C=C+16|0,m=k+1|0,B=k,d=n[l>>2]|0,l=n[l+4>>2]|0,s=s+(l>>1)|0,l&1&&(d=n[(n[s>>2]|0)+d>>2]|0),XA(m,c),m=ZA(m,c)|0,ITe(B,f),B=BTe(B,f)|0,_w[d&15](s,m,B),C=k}function ITe(s,l){s=s|0,l=l|0}function BTe(s,l){return s=s|0,l=l|0,vTe(l)|0}function vTe(s){return s=s|0,(s|0)!=0|0}function DTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=cT()|0,s=PTe(c)|0,hn(m,l,d,s,STe(c,f)|0,f)}function cT(){var s=0,l=0;if(o[7864]|0||(f9(10208),tr(51,10208,U|0)|0,l=7864,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10208)|0)){s=10208,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));f9(10208)}return 10208}function PTe(s){return s=s|0,s|0}function STe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=cT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(A9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(xTe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function A9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function xTe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=bTe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,kTe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,A9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,QTe(s,d),FTe(d),C=k;return}}function bTe(s){return s=s|0,536870911}function kTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function QTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function FTe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function f9(s){s=s|0,NTe(s)}function TTe(s){s=s|0,RTe(s+24|0)}function RTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function NTe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,24,l,LTe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function LTe(){return 1392}function MTe(s,l){s=s|0,l=l|0,UTe(n[(OTe(s)|0)>>2]|0,l)}function OTe(s){return s=s|0,(n[(cT()|0)+24>>2]|0)+(s<<3)|0}function UTe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,t9(f,l),l=r9(f,l)|0,ef[s&127](l),C=c}function _Te(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=uT()|0,s=HTe(c)|0,hn(m,l,d,s,jTe(c,f)|0,f)}function uT(){var s=0,l=0;if(o[7872]|0||(h9(10244),tr(52,10244,U|0)|0,l=7872,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10244)|0)){s=10244,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));h9(10244)}return 10244}function HTe(s){return s=s|0,s|0}function jTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=uT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(p9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(qTe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function p9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function qTe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=GTe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,YTe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,p9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,WTe(s,d),VTe(d),C=k;return}}function GTe(s){return s=s|0,536870911}function YTe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function WTe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function VTe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function h9(s){s=s|0,zTe(s)}function KTe(s){s=s|0,JTe(s+24|0)}function JTe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function zTe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,16,l,XTe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function XTe(){return 1400}function ZTe(s){return s=s|0,eRe(n[($Te(s)|0)>>2]|0)|0}function $Te(s){return s=s|0,(n[(uT()|0)+24>>2]|0)+(s<<3)|0}function eRe(s){return s=s|0,tRe(CD[s&7]()|0)|0}function tRe(s){return s=s|0,s|0}function rRe(){var s=0;return o[7880]|0||(cRe(10280),tr(25,10280,U|0)|0,s=7880,n[s>>2]=1,n[s+4>>2]=0),10280}function nRe(s,l){s=s|0,l=l|0,n[s>>2]=iRe()|0,n[s+4>>2]=sRe()|0,n[s+12>>2]=l,n[s+8>>2]=oRe()|0,n[s+32>>2]=4}function iRe(){return 11711}function sRe(){return 1356}function oRe(){return aD()|0}function aRe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(lRe(c),gt(c)):l|0&&(vg(l),gt(l))}function lRe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function cRe(s){s=s|0,Bp(s)}function uRe(s){s=s|0,ARe(s,4920),fRe(s)|0,pRe(s)|0}function ARe(s,l){s=s|0,l=l|0;var c=0;c=L5()|0,n[s>>2]=c,RRe(c,l),xp(n[s>>2]|0)}function fRe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,vRe()|0),s|0}function pRe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,hRe()|0),s|0}function hRe(){var s=0;return o[7888]|0||(g9(10328),tr(53,10328,U|0)|0,s=7888,n[s>>2]=1,n[s+4>>2]=0),Rr(10328)|0||g9(10328),10328}function bg(s,l){s=s|0,l=l|0,hn(s,0,l,0,0,0)}function g9(s){s=s|0,mRe(s),kg(s,10)}function gRe(s){s=s|0,dRe(s+24|0)}function dRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function mRe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,1,l,wRe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function yRe(s,l,c){s=s|0,l=l|0,c=+c,ERe(s,l,c)}function kg(s,l){s=s|0,l=l|0,n[s+20>>2]=l}function ERe(s,l,c){s=s|0,l=l|0,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+16|0,m=f+8|0,k=f+13|0,d=f,B=f+12|0,XA(k,l),n[m>>2]=ZA(k,l)|0,ku(B,c),E[d>>3]=+Qu(B,c),CRe(s,m,d),C=f}function CRe(s,l,c){s=s|0,l=l|0,c=c|0,Y(s+8|0,n[l>>2]|0,+E[c>>3]),o[s+24>>0]=1}function wRe(){return 1404}function IRe(s,l){return s=s|0,l=+l,BRe(s,l)|0}function BRe(s,l){s=s|0,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,m=f+4|0,B=f+8|0,k=f,d=Wa(8)|0,c=d,Q=Vt(16)|0,XA(m,s),s=ZA(m,s)|0,ku(B,l),Y(Q,s,+Qu(B,l)),B=c+4|0,n[B>>2]=Q,s=Vt(8)|0,B=n[B>>2]|0,n[k>>2]=0,n[m>>2]=n[k>>2],JF(s,B,m),n[d>>2]=s,C=f,c|0}function vRe(){var s=0;return o[7896]|0||(d9(10364),tr(54,10364,U|0)|0,s=7896,n[s>>2]=1,n[s+4>>2]=0),Rr(10364)|0||d9(10364),10364}function d9(s){s=s|0,SRe(s),kg(s,55)}function DRe(s){s=s|0,PRe(s+24|0)}function PRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function SRe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,4,l,QRe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function xRe(s){s=s|0,bRe(s)}function bRe(s){s=s|0,kRe(s)}function kRe(s){s=s|0,m9(s+8|0),o[s+24>>0]=1}function m9(s){s=s|0,n[s>>2]=0,E[s+8>>3]=0}function QRe(){return 1424}function FRe(){return TRe()|0}function TRe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,f=Vt(16)|0,m9(f),m=s+4|0,n[m>>2]=f,f=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],JF(f,m,d),n[c>>2]=f,C=l,s|0}function RRe(s,l){s=s|0,l=l|0,n[s>>2]=NRe()|0,n[s+4>>2]=LRe()|0,n[s+12>>2]=l,n[s+8>>2]=MRe()|0,n[s+32>>2]=5}function NRe(){return 11710}function LRe(){return 1416}function MRe(){return lD()|0}function ORe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(URe(c),gt(c)):l|0&>(l)}function URe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function lD(){var s=0;return o[7904]|0||(n[2600]=_Re()|0,n[2601]=0,s=7904,n[s>>2]=1,n[s+4>>2]=0),10400}function _Re(){return n[357]|0}function HRe(s){s=s|0,jRe(s,4926),qRe(s)|0}function jRe(s,l){s=s|0,l=l|0;var c=0;c=s5()|0,n[s>>2]=c,eNe(c,l),xp(n[s>>2]|0)}function qRe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,GRe()|0),s|0}function GRe(){var s=0;return o[7912]|0||(y9(10412),tr(56,10412,U|0)|0,s=7912,n[s>>2]=1,n[s+4>>2]=0),Rr(10412)|0||y9(10412),10412}function y9(s){s=s|0,VRe(s),kg(s,57)}function YRe(s){s=s|0,WRe(s+24|0)}function WRe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function VRe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,5,l,XRe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function KRe(s){s=s|0,JRe(s)}function JRe(s){s=s|0,zRe(s)}function zRe(s){s=s|0;var l=0,c=0;l=s+8|0,c=l+48|0;do n[l>>2]=0,l=l+4|0;while((l|0)<(c|0));o[s+56>>0]=1}function XRe(){return 1432}function ZRe(){return $Re()|0}function $Re(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0;B=C,C=C+16|0,s=B+4|0,l=B,c=Wa(8)|0,f=c,d=Vt(48)|0,m=d,k=m+48|0;do n[m>>2]=0,m=m+4|0;while((m|0)<(k|0));return m=f+4|0,n[m>>2]=d,k=Vt(8)|0,m=n[m>>2]|0,n[l>>2]=0,n[s>>2]=n[l>>2],o5(k,m,s),n[c>>2]=k,C=B,f|0}function eNe(s,l){s=s|0,l=l|0,n[s>>2]=tNe()|0,n[s+4>>2]=rNe()|0,n[s+12>>2]=l,n[s+8>>2]=nNe()|0,n[s+32>>2]=6}function tNe(){return 11704}function rNe(){return 1436}function nNe(){return lD()|0}function iNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(sNe(c),gt(c)):l|0&>(l)}function sNe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function oNe(s){s=s|0,aNe(s,4933),lNe(s)|0,cNe(s)|0}function aNe(s,l){s=s|0,l=l|0;var c=0;c=TNe()|0,n[s>>2]=c,RNe(c,l),xp(n[s>>2]|0)}function lNe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,BNe()|0),s|0}function cNe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,uNe()|0),s|0}function uNe(){var s=0;return o[7920]|0||(E9(10452),tr(58,10452,U|0)|0,s=7920,n[s>>2]=1,n[s+4>>2]=0),Rr(10452)|0||E9(10452),10452}function E9(s){s=s|0,pNe(s),kg(s,1)}function ANe(s){s=s|0,fNe(s+24|0)}function fNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function pNe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,1,l,mNe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function hNe(s,l,c){s=s|0,l=+l,c=+c,gNe(s,l,c)}function gNe(s,l,c){s=s|0,l=+l,c=+c;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,m=f+8|0,k=f+17|0,d=f,B=f+16|0,ku(k,l),E[m>>3]=+Qu(k,l),ku(B,c),E[d>>3]=+Qu(B,c),dNe(s,m,d),C=f}function dNe(s,l,c){s=s|0,l=l|0,c=c|0,C9(s+8|0,+E[l>>3],+E[c>>3]),o[s+24>>0]=1}function C9(s,l,c){s=s|0,l=+l,c=+c,E[s>>3]=l,E[s+8>>3]=c}function mNe(){return 1472}function yNe(s,l){return s=+s,l=+l,ENe(s,l)|0}function ENe(s,l){s=+s,l=+l;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+16|0,B=f+4|0,k=f+8|0,Q=f,d=Wa(8)|0,c=d,m=Vt(16)|0,ku(B,s),s=+Qu(B,s),ku(k,l),C9(m,s,+Qu(k,l)),k=c+4|0,n[k>>2]=m,m=Vt(8)|0,k=n[k>>2]|0,n[Q>>2]=0,n[B>>2]=n[Q>>2],w9(m,k,B),n[d>>2]=m,C=f,c|0}function w9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1452,n[c+12>>2]=l,n[s+4>>2]=c}function CNe(s){s=s|0,Jm(s),gt(s)}function wNe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function INe(s){s=s|0,gt(s)}function BNe(){var s=0;return o[7928]|0||(I9(10488),tr(59,10488,U|0)|0,s=7928,n[s>>2]=1,n[s+4>>2]=0),Rr(10488)|0||I9(10488),10488}function I9(s){s=s|0,PNe(s),kg(s,60)}function vNe(s){s=s|0,DNe(s+24|0)}function DNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function PNe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,6,l,kNe()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function SNe(s){s=s|0,xNe(s)}function xNe(s){s=s|0,bNe(s)}function bNe(s){s=s|0,B9(s+8|0),o[s+24>>0]=1}function B9(s){s=s|0,n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,n[s+12>>2]=0}function kNe(){return 1492}function QNe(){return FNe()|0}function FNe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,f=Vt(16)|0,B9(f),m=s+4|0,n[m>>2]=f,f=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],w9(f,m,d),n[c>>2]=f,C=l,s|0}function TNe(){var s=0;return o[7936]|0||(_Ne(10524),tr(25,10524,U|0)|0,s=7936,n[s>>2]=1,n[s+4>>2]=0),10524}function RNe(s,l){s=s|0,l=l|0,n[s>>2]=NNe()|0,n[s+4>>2]=LNe()|0,n[s+12>>2]=l,n[s+8>>2]=MNe()|0,n[s+32>>2]=7}function NNe(){return 11700}function LNe(){return 1484}function MNe(){return lD()|0}function ONe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(UNe(c),gt(c)):l|0&>(l)}function UNe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function _Ne(s){s=s|0,Bp(s)}function HNe(s,l,c){s=s|0,l=l|0,c=c|0,s=pn(l)|0,l=jNe(c)|0,c=qNe(c,0)|0,ELe(s,l,c,AT()|0,0)}function jNe(s){return s=s|0,s|0}function qNe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=AT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(D9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(zNe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function AT(){var s=0,l=0;if(o[7944]|0||(v9(10568),tr(61,10568,U|0)|0,l=7944,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10568)|0)){s=10568,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));v9(10568)}return 10568}function v9(s){s=s|0,WNe(s)}function GNe(s){s=s|0,YNe(s+24|0)}function YNe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function WNe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,17,l,B5()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function VNe(s){return s=s|0,JNe(n[(KNe(s)|0)>>2]|0)|0}function KNe(s){return s=s|0,(n[(AT()|0)+24>>2]|0)+(s<<3)|0}function JNe(s){return s=s|0,oD(CD[s&7]()|0)|0}function D9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function zNe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=XNe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,ZNe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,D9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,$Ne(s,d),eLe(d),C=k;return}}function XNe(s){return s=s|0,536870911}function ZNe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function $Ne(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function eLe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function tLe(){rLe()}function rLe(){nLe(10604)}function nLe(s){s=s|0,iLe(s,4955)}function iLe(s,l){s=s|0,l=l|0;var c=0;c=sLe()|0,n[s>>2]=c,oLe(c,l),xp(n[s>>2]|0)}function sLe(){var s=0;return o[7952]|0||(gLe(10612),tr(25,10612,U|0)|0,s=7952,n[s>>2]=1,n[s+4>>2]=0),10612}function oLe(s,l){s=s|0,l=l|0,n[s>>2]=uLe()|0,n[s+4>>2]=ALe()|0,n[s+12>>2]=l,n[s+8>>2]=fLe()|0,n[s+32>>2]=8}function xp(s){s=s|0;var l=0,c=0;l=C,C=C+16|0,c=l,Gm()|0,n[c>>2]=s,aLe(10608,c),C=l}function Gm(){return o[11714]|0||(n[2652]=0,tr(62,10608,U|0)|0,o[11714]=1),10608}function aLe(s,l){s=s|0,l=l|0;var c=0;c=Vt(8)|0,n[c+4>>2]=n[l>>2],n[c>>2]=n[s>>2],n[s>>2]=c}function lLe(s){s=s|0,cLe(s)}function cLe(s){s=s|0;var l=0,c=0;if(l=n[s>>2]|0,l|0)do c=l,l=n[l>>2]|0,gt(c);while((l|0)!=0);n[s>>2]=0}function uLe(){return 11715}function ALe(){return 1496}function fLe(){return aD()|0}function pLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(hLe(c),gt(c)):l|0&>(l)}function hLe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function gLe(s){s=s|0,Bp(s)}function dLe(s,l){s=s|0,l=l|0;var c=0,f=0;Gm()|0,c=n[2652]|0;e:do if(c|0){for(;f=n[c+4>>2]|0,!(f|0&&(o7(fT(f)|0,s)|0)==0);)if(c=n[c>>2]|0,!c)break e;mLe(f,l)}while(0)}function fT(s){return s=s|0,n[s+12>>2]|0}function mLe(s,l){s=s|0,l=l|0;var c=0;s=s+36|0,c=n[s>>2]|0,c|0&&(jA(c),gt(c)),c=Vt(4)|0,$G(c,l),n[s>>2]=c}function pT(){return o[11716]|0||(n[2664]=0,tr(63,10656,U|0)|0,o[11716]=1),10656}function P9(){var s=0;return o[11717]|0?s=n[2665]|0:(yLe(),n[2665]=1504,o[11717]=1,s=1504),s|0}function yLe(){o[11740]|0||(o[11718]=gr(gr(8,0)|0,0)|0,o[11719]=gr(gr(0,0)|0,0)|0,o[11720]=gr(gr(0,16)|0,0)|0,o[11721]=gr(gr(8,0)|0,0)|0,o[11722]=gr(gr(0,0)|0,0)|0,o[11723]=gr(gr(8,0)|0,0)|0,o[11724]=gr(gr(0,0)|0,0)|0,o[11725]=gr(gr(8,0)|0,0)|0,o[11726]=gr(gr(0,0)|0,0)|0,o[11727]=gr(gr(8,0)|0,0)|0,o[11728]=gr(gr(0,0)|0,0)|0,o[11729]=gr(gr(0,0)|0,32)|0,o[11730]=gr(gr(0,0)|0,32)|0,o[11740]=1)}function S9(){return 1572}function ELe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0,M=0;m=C,C=C+32|0,M=m+16|0,O=m+12|0,Q=m+8|0,k=m+4|0,B=m,n[M>>2]=s,n[O>>2]=l,n[Q>>2]=c,n[k>>2]=f,n[B>>2]=d,pT()|0,CLe(10656,M,O,Q,k,B),C=m}function CLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0;B=Vt(24)|0,r5(B+4|0,n[l>>2]|0,n[c>>2]|0,n[f>>2]|0,n[d>>2]|0,n[m>>2]|0),n[B>>2]=n[s>>2],n[s>>2]=B}function x9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0;if(at=C,C=C+32|0,Oe=at+20|0,Fe=at+8|0,et=at+4|0,Xe=at,l=n[l>>2]|0,l|0){Ge=Oe+4|0,Q=Oe+8|0,O=Fe+4|0,M=Fe+8|0,q=Fe+8|0,se=Oe+8|0;do{if(B=l+4|0,k=hT(B)|0,k|0){if(d=Rw(k)|0,n[Oe>>2]=0,n[Ge>>2]=0,n[Q>>2]=0,f=(Nw(k)|0)+1|0,wLe(Oe,f),f|0)for(;f=f+-1|0,xc(Fe,n[d>>2]|0),m=n[Ge>>2]|0,m>>>0<(n[se>>2]|0)>>>0?(n[m>>2]=n[Fe>>2],n[Ge>>2]=(n[Ge>>2]|0)+4):gT(Oe,Fe),f;)d=d+4|0;f=Lw(k)|0,n[Fe>>2]=0,n[O>>2]=0,n[M>>2]=0;e:do if(n[f>>2]|0)for(d=0,m=0;;){if((d|0)==(m|0)?ILe(Fe,f):(n[d>>2]=n[f>>2],n[O>>2]=(n[O>>2]|0)+4),f=f+4|0,!(n[f>>2]|0))break e;d=n[O>>2]|0,m=n[q>>2]|0}while(0);n[et>>2]=cD(B)|0,n[Xe>>2]=Rr(k)|0,BLe(c,s,et,Xe,Oe,Fe),dT(Fe),$A(Oe)}l=n[l>>2]|0}while((l|0)!=0)}C=at}function hT(s){return s=s|0,n[s+12>>2]|0}function Rw(s){return s=s|0,n[s+12>>2]|0}function Nw(s){return s=s|0,n[s+16>>2]|0}function wLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+32|0,c=d,f=n[s>>2]|0,(n[s+8>>2]|0)-f>>2>>>0>>0&&(L9(c,l,(n[s+4>>2]|0)-f>>2,s+8|0),M9(s,c),O9(c)),C=d}function gT(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=N9(s)|0,m>>>0>>0)zr(s);else{k=n[s>>2]|0,O=(n[s+8>>2]|0)-k|0,Q=O>>1,L9(c,O>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,M9(s,c),O9(c),C=B;return}}function Lw(s){return s=s|0,n[s+8>>2]|0}function ILe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0;if(B=C,C=C+32|0,c=B,f=s+4|0,d=((n[f>>2]|0)-(n[s>>2]|0)>>2)+1|0,m=R9(s)|0,m>>>0>>0)zr(s);else{k=n[s>>2]|0,O=(n[s+8>>2]|0)-k|0,Q=O>>1,jLe(c,O>>2>>>0>>1>>>0?Q>>>0>>0?d:Q:m,(n[f>>2]|0)-k>>2,s+8|0),m=c+8|0,n[n[m>>2]>>2]=n[l>>2],n[m>>2]=(n[m>>2]|0)+4,qLe(s,c),GLe(c),C=B;return}}function cD(s){return s=s|0,n[s>>2]|0}function BLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,vLe(s,l,c,f,d,m)}function dT(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function $A(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-4-f|0)>>>2)<<2)),gt(c))}function vLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0;B=C,C=C+48|0,M=B+40|0,k=B+32|0,q=B+24|0,Q=B+12|0,O=B,Va(k),s=da(s)|0,n[q>>2]=n[l>>2],c=n[c>>2]|0,f=n[f>>2]|0,mT(Q,d),DLe(O,m),n[M>>2]=n[q>>2],PLe(s,M,c,f,Q,O),dT(O),$A(Q),Ka(k),C=B}function mT(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(_Le(s,f),HLe(s,n[l>>2]|0,n[c>>2]|0,f))}function DLe(s,l){s=s|0,l=l|0;var c=0,f=0;n[s>>2]=0,n[s+4>>2]=0,n[s+8>>2]=0,c=l+4|0,f=(n[c>>2]|0)-(n[l>>2]|0)>>2,f|0&&(OLe(s,f),ULe(s,n[l>>2]|0,n[c>>2]|0,f))}function PLe(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0;B=C,C=C+32|0,M=B+28|0,q=B+24|0,k=B+12|0,Q=B,O=Pl(SLe()|0)|0,n[q>>2]=n[l>>2],n[M>>2]=n[q>>2],l=Qg(M)|0,c=b9(c)|0,f=yT(f)|0,n[k>>2]=n[d>>2],M=d+4|0,n[k+4>>2]=n[M>>2],q=d+8|0,n[k+8>>2]=n[q>>2],n[q>>2]=0,n[M>>2]=0,n[d>>2]=0,d=ET(k)|0,n[Q>>2]=n[m>>2],M=m+4|0,n[Q+4>>2]=n[M>>2],q=m+8|0,n[Q+8>>2]=n[q>>2],n[q>>2]=0,n[M>>2]=0,n[m>>2]=0,ao(0,O|0,s|0,l|0,c|0,f|0,d|0,xLe(Q)|0)|0,dT(Q),$A(k),C=B}function SLe(){var s=0;return o[7968]|0||(LLe(10708),s=7968,n[s>>2]=1,n[s+4>>2]=0),10708}function Qg(s){return s=s|0,Q9(s)|0}function b9(s){return s=s|0,k9(s)|0}function yT(s){return s=s|0,oD(s)|0}function ET(s){return s=s|0,kLe(s)|0}function xLe(s){return s=s|0,bLe(s)|0}function bLe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Wa(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=k9(n[(n[s>>2]|0)+(l<<2)>>2]|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function k9(s){return s=s|0,s|0}function kLe(s){s=s|0;var l=0,c=0,f=0;if(f=(n[s+4>>2]|0)-(n[s>>2]|0)|0,c=f>>2,f=Wa(f+4|0)|0,n[f>>2]=c,c|0){l=0;do n[f+4+(l<<2)>>2]=Q9((n[s>>2]|0)+(l<<2)|0)|0,l=l+1|0;while((l|0)!=(c|0))}return f|0}function Q9(s){s=s|0;var l=0,c=0,f=0,d=0;return d=C,C=C+32|0,l=d+12|0,c=d,f=QF(F9()|0)|0,f?(FF(l,f),TF(c,l),fUe(s,c),s=RF(l)|0):s=QLe(s)|0,C=d,s|0}function F9(){var s=0;return o[7960]|0||(NLe(10664),tr(25,10664,U|0)|0,s=7960,n[s>>2]=1,n[s+4>>2]=0),10664}function QLe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Vt(4)|0,n[k>>2]=n[s>>2],m=l+4|0,n[m>>2]=k,s=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],T9(s,m,d),n[f>>2]=s,C=c,l|0}function T9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1656,n[c+12>>2]=l,n[s+4>>2]=c}function FLe(s){s=s|0,Jm(s),gt(s)}function TLe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function RLe(s){s=s|0,gt(s)}function NLe(s){s=s|0,Bp(s)}function LLe(s){s=s|0,Sl(s,MLe()|0,5)}function MLe(){return 1676}function OLe(s,l){s=s|0,l=l|0;var c=0;if((R9(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Tt();else{c=Vt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function ULe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function R9(s){return s=s|0,1073741823}function _Le(s,l){s=s|0,l=l|0;var c=0;if((N9(s)|0)>>>0>>0&&zr(s),l>>>0>1073741823)Tt();else{c=Vt(l<<2)|0,n[s+4>>2]=c,n[s>>2]=c,n[s+8>>2]=c+(l<<2);return}}function HLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,f=s+4|0,s=c-l|0,(s|0)>0&&(Dr(n[f>>2]|0,l|0,s|0)|0,n[f>>2]=(n[f>>2]|0)+(s>>>2<<2))}function N9(s){return s=s|0,1073741823}function jLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Vt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function qLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function GLe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function L9(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>1073741823)Tt();else{d=Vt(l<<2)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<2)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<2)}function M9(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>2)<<2)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function O9(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-4-l|0)>>>2)<<2)),s=n[s>>2]|0,s|0&>(s)}function YLe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0;if(Fe=C,C=C+32|0,M=Fe+20|0,q=Fe+12|0,O=Fe+16|0,se=Fe+4|0,Ge=Fe,Oe=Fe+8|0,k=P9()|0,m=n[k>>2]|0,B=n[m>>2]|0,B|0)for(Q=n[k+8>>2]|0,k=n[k+4>>2]|0;xc(M,B),WLe(s,M,k,Q),m=m+4|0,B=n[m>>2]|0,B;)Q=Q+1|0,k=k+1|0;if(m=S9()|0,B=n[m>>2]|0,B|0)do xc(M,B),n[q>>2]=n[m+4>>2],VLe(l,M,q),m=m+8|0,B=n[m>>2]|0;while((B|0)!=0);if(m=n[(Gm()|0)>>2]|0,m|0)do l=n[m+4>>2]|0,xc(M,n[(Ym(l)|0)>>2]|0),n[q>>2]=fT(l)|0,KLe(c,M,q),m=n[m>>2]|0;while((m|0)!=0);if(xc(O,0),m=pT()|0,n[M>>2]=n[O>>2],x9(M,m,d),m=n[(Gm()|0)>>2]|0,m|0){s=M+4|0,l=M+8|0,c=M+8|0;do{if(Q=n[m+4>>2]|0,xc(q,n[(Ym(Q)|0)>>2]|0),JLe(se,U9(Q)|0),B=n[se>>2]|0,B|0){n[M>>2]=0,n[s>>2]=0,n[l>>2]=0;do xc(Ge,n[(Ym(n[B+4>>2]|0)|0)>>2]|0),k=n[s>>2]|0,k>>>0<(n[c>>2]|0)>>>0?(n[k>>2]=n[Ge>>2],n[s>>2]=(n[s>>2]|0)+4):gT(M,Ge),B=n[B>>2]|0;while((B|0)!=0);zLe(f,q,M),$A(M)}n[Oe>>2]=n[q>>2],O=_9(Q)|0,n[M>>2]=n[Oe>>2],x9(M,O,d),l5(se),m=n[m>>2]|0}while((m|0)!=0)}C=Fe}function WLe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,lMe(s,l,c,f)}function VLe(s,l,c){s=s|0,l=l|0,c=c|0,aMe(s,l,c)}function Ym(s){return s=s|0,s|0}function KLe(s,l,c){s=s|0,l=l|0,c=c|0,nMe(s,l,c)}function U9(s){return s=s|0,s+16|0}function JLe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(m=C,C=C+16|0,d=m+8|0,c=m,n[s>>2]=0,f=n[l>>2]|0,n[d>>2]=f,n[c>>2]=s,c=rMe(c)|0,f|0){if(f=Vt(12)|0,B=(H9(d)|0)+4|0,s=n[B+4>>2]|0,l=f+4|0,n[l>>2]=n[B>>2],n[l+4>>2]=s,l=n[n[d>>2]>>2]|0,n[d>>2]=l,!l)s=f;else for(l=f;s=Vt(12)|0,Q=(H9(d)|0)+4|0,k=n[Q+4>>2]|0,B=s+4|0,n[B>>2]=n[Q>>2],n[B+4>>2]=k,n[l>>2]=s,B=n[n[d>>2]>>2]|0,n[d>>2]=B,B;)l=s;n[s>>2]=n[c>>2],n[c>>2]=f}C=m}function zLe(s,l,c){s=s|0,l=l|0,c=c|0,XLe(s,l,c)}function _9(s){return s=s|0,s+24|0}function XLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+24|0,d=f+16|0,k=f+12|0,m=f,Va(d),s=da(s)|0,n[k>>2]=n[l>>2],mT(m,c),n[B>>2]=n[k>>2],ZLe(s,B,m),$A(m),Ka(d),C=f}function ZLe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=C,C=C+32|0,B=f+16|0,k=f+12|0,d=f,m=Pl($Le()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=Qg(B)|0,n[d>>2]=n[c>>2],B=c+4|0,n[d+4>>2]=n[B>>2],k=c+8|0,n[d+8>>2]=n[k>>2],n[k>>2]=0,n[B>>2]=0,n[c>>2]=0,oo(0,m|0,s|0,l|0,ET(d)|0)|0,$A(d),C=f}function $Le(){var s=0;return o[7976]|0||(eMe(10720),s=7976,n[s>>2]=1,n[s+4>>2]=0),10720}function eMe(s){s=s|0,Sl(s,tMe()|0,2)}function tMe(){return 1732}function rMe(s){return s=s|0,n[s>>2]|0}function H9(s){return s=s|0,n[s>>2]|0}function nMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,Va(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],j9(s,m,c),Ka(d),C=f}function j9(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+16|0,m=f+4|0,B=f,d=Pl(iMe()|0)|0,n[B>>2]=n[l>>2],n[m>>2]=n[B>>2],l=Qg(m)|0,oo(0,d|0,s|0,l|0,b9(c)|0)|0,C=f}function iMe(){var s=0;return o[7984]|0||(sMe(10732),s=7984,n[s>>2]=1,n[s+4>>2]=0),10732}function sMe(s){s=s|0,Sl(s,oMe()|0,2)}function oMe(){return 1744}function aMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;f=C,C=C+32|0,m=f+16|0,d=f+8|0,B=f,Va(d),s=da(s)|0,n[B>>2]=n[l>>2],c=n[c>>2]|0,n[m>>2]=n[B>>2],j9(s,m,c),Ka(d),C=f}function lMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,Va(m),s=da(s)|0,n[k>>2]=n[l>>2],c=o[c>>0]|0,f=o[f>>0]|0,n[B>>2]=n[k>>2],cMe(s,B,c,f),Ka(m),C=d}function cMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,B=d+4|0,k=d,m=Pl(uMe()|0)|0,n[k>>2]=n[l>>2],n[B>>2]=n[k>>2],l=Qg(B)|0,c=Wm(c)|0,pc(0,m|0,s|0,l|0,c|0,Wm(f)|0)|0,C=d}function uMe(){var s=0;return o[7992]|0||(fMe(10744),s=7992,n[s>>2]=1,n[s+4>>2]=0),10744}function Wm(s){return s=s|0,AMe(s)|0}function AMe(s){return s=s|0,s&255|0}function fMe(s){s=s|0,Sl(s,pMe()|0,3)}function pMe(){return 1756}function hMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;switch(se=C,C=C+32|0,k=se+8|0,Q=se+4|0,O=se+20|0,M=se,OF(s,0),f=AUe(l)|0,n[k>>2]=0,q=k+4|0,n[q>>2]=0,n[k+8>>2]=0,f<<24>>24){case 0:{o[O>>0]=0,gMe(Q,c,O),uD(s,Q)|0,qA(Q);break}case 8:{q=DT(l)|0,o[O>>0]=8,xc(M,n[q+4>>2]|0),dMe(Q,c,O,M,q+8|0),uD(s,Q)|0,qA(Q);break}case 9:{if(m=DT(l)|0,l=n[m+4>>2]|0,l|0)for(B=k+8|0,d=m+12|0;l=l+-1|0,xc(Q,n[d>>2]|0),f=n[q>>2]|0,f>>>0<(n[B>>2]|0)>>>0?(n[f>>2]=n[Q>>2],n[q>>2]=(n[q>>2]|0)+4):gT(k,Q),l;)d=d+4|0;o[O>>0]=9,xc(M,n[m+8>>2]|0),mMe(Q,c,O,M,k),uD(s,Q)|0,qA(Q);break}default:q=DT(l)|0,o[O>>0]=f,xc(M,n[q+4>>2]|0),yMe(Q,c,O,M),uD(s,Q)|0,qA(Q)}$A(k),C=se}function gMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;f=C,C=C+16|0,d=f,Va(d),l=da(l)|0,QMe(s,l,o[c>>0]|0),Ka(d),C=f}function uD(s,l){s=s|0,l=l|0;var c=0;return c=n[s>>2]|0,c|0&&PA(c|0),n[s>>2]=n[l>>2],n[l>>2]=0,s|0}function dMe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+32|0,k=m+16|0,B=m+8|0,Q=m,Va(B),l=da(l)|0,c=o[c>>0]|0,n[Q>>2]=n[f>>2],d=n[d>>2]|0,n[k>>2]=n[Q>>2],SMe(s,l,c,k,d),Ka(B),C=m}function mMe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0;m=C,C=C+32|0,Q=m+24|0,B=m+16|0,O=m+12|0,k=m,Va(B),l=da(l)|0,c=o[c>>0]|0,n[O>>2]=n[f>>2],mT(k,d),n[Q>>2]=n[O>>2],BMe(s,l,c,Q,k),$A(k),Ka(B),C=m}function yMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+32|0,B=d+16|0,m=d+8|0,k=d,Va(m),l=da(l)|0,c=o[c>>0]|0,n[k>>2]=n[f>>2],n[B>>2]=n[k>>2],EMe(s,l,c,B),Ka(m),C=d}function EMe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0,B=0,k=0;d=C,C=C+16|0,m=d+4|0,k=d,B=Pl(CMe()|0)|0,c=Wm(c)|0,n[k>>2]=n[f>>2],n[m>>2]=n[k>>2],AD(s,oo(0,B|0,l|0,c|0,Qg(m)|0)|0),C=d}function CMe(){var s=0;return o[8e3]|0||(wMe(10756),s=8e3,n[s>>2]=1,n[s+4>>2]=0),10756}function AD(s,l){s=s|0,l=l|0,OF(s,l)}function wMe(s){s=s|0,Sl(s,IMe()|0,2)}function IMe(){return 1772}function BMe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0;m=C,C=C+32|0,Q=m+16|0,O=m+12|0,B=m,k=Pl(vMe()|0)|0,c=Wm(c)|0,n[O>>2]=n[f>>2],n[Q>>2]=n[O>>2],f=Qg(Q)|0,n[B>>2]=n[d>>2],Q=d+4|0,n[B+4>>2]=n[Q>>2],O=d+8|0,n[B+8>>2]=n[O>>2],n[O>>2]=0,n[Q>>2]=0,n[d>>2]=0,AD(s,pc(0,k|0,l|0,c|0,f|0,ET(B)|0)|0),$A(B),C=m}function vMe(){var s=0;return o[8008]|0||(DMe(10768),s=8008,n[s>>2]=1,n[s+4>>2]=0),10768}function DMe(s){s=s|0,Sl(s,PMe()|0,3)}function PMe(){return 1784}function SMe(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0;m=C,C=C+16|0,k=m+4|0,Q=m,B=Pl(xMe()|0)|0,c=Wm(c)|0,n[Q>>2]=n[f>>2],n[k>>2]=n[Q>>2],f=Qg(k)|0,AD(s,pc(0,B|0,l|0,c|0,f|0,yT(d)|0)|0),C=m}function xMe(){var s=0;return o[8016]|0||(bMe(10780),s=8016,n[s>>2]=1,n[s+4>>2]=0),10780}function bMe(s){s=s|0,Sl(s,kMe()|0,3)}function kMe(){return 1800}function QMe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;f=Pl(FMe()|0)|0,AD(s,Qn(0,f|0,l|0,Wm(c)|0)|0)}function FMe(){var s=0;return o[8024]|0||(TMe(10792),s=8024,n[s>>2]=1,n[s+4>>2]=0),10792}function TMe(s){s=s|0,Sl(s,RMe()|0,1)}function RMe(){return 1816}function NMe(){LMe(),MMe(),OMe()}function LMe(){n[2702]=d7(65536)|0}function MMe(){iOe(10856)}function OMe(){UMe(10816)}function UMe(s){s=s|0,_Me(s,5044),HMe(s)|0}function _Me(s,l){s=s|0,l=l|0;var c=0;c=F9()|0,n[s>>2]=c,ZMe(c,l),xp(n[s>>2]|0)}function HMe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,jMe()|0),s|0}function jMe(){var s=0;return o[8032]|0||(q9(10820),tr(64,10820,U|0)|0,s=8032,n[s>>2]=1,n[s+4>>2]=0),Rr(10820)|0||q9(10820),10820}function q9(s){s=s|0,YMe(s),kg(s,25)}function qMe(s){s=s|0,GMe(s+24|0)}function GMe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function YMe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,18,l,JMe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function WMe(s,l){s=s|0,l=l|0,VMe(s,l)}function VMe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;c=C,C=C+16|0,f=c,d=c+4|0,Sg(d,l),n[f>>2]=xg(d,l)|0,KMe(s,f),C=c}function KMe(s,l){s=s|0,l=l|0,G9(s+4|0,n[l>>2]|0),o[s+8>>0]=1}function G9(s,l){s=s|0,l=l|0,n[s>>2]=l}function JMe(){return 1824}function zMe(s){return s=s|0,XMe(s)|0}function XMe(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0;return c=C,C=C+16|0,d=c+4|0,B=c,f=Wa(8)|0,l=f,k=Vt(4)|0,Sg(d,s),G9(k,xg(d,s)|0),m=l+4|0,n[m>>2]=k,s=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],T9(s,m,d),n[f>>2]=s,C=c,l|0}function Wa(s){s=s|0;var l=0,c=0;return s=s+7&-8,s>>>0<=32768&&(l=n[2701]|0,s>>>0<=(65536-l|0)>>>0)?(c=(n[2702]|0)+l|0,n[2701]=l+s,s=c):(s=d7(s+8|0)|0,n[s>>2]=n[2703],n[2703]=s,s=s+8|0),s|0}function ZMe(s,l){s=s|0,l=l|0,n[s>>2]=$Me()|0,n[s+4>>2]=eOe()|0,n[s+12>>2]=l,n[s+8>>2]=tOe()|0,n[s+32>>2]=9}function $Me(){return 11744}function eOe(){return 1832}function tOe(){return lD()|0}function rOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(nOe(c),gt(c)):l|0&>(l)}function nOe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function iOe(s){s=s|0,sOe(s,5052),oOe(s)|0,aOe(s,5058,26)|0,lOe(s,5069,1)|0,cOe(s,5077,10)|0,uOe(s,5087,19)|0,AOe(s,5094,27)|0}function sOe(s,l){s=s|0,l=l|0;var c=0;c=nUe()|0,n[s>>2]=c,iUe(c,l),xp(n[s>>2]|0)}function oOe(s){s=s|0;var l=0;return l=n[s>>2]|0,bg(l,q4e()|0),s|0}function aOe(s,l,c){return s=s|0,l=l|0,c=c|0,D4e(s,pn(l)|0,c,0),s|0}function lOe(s,l,c){return s=s|0,l=l|0,c=c|0,u4e(s,pn(l)|0,c,0),s|0}function cOe(s,l,c){return s=s|0,l=l|0,c=c|0,jOe(s,pn(l)|0,c,0),s|0}function uOe(s,l,c){return s=s|0,l=l|0,c=c|0,SOe(s,pn(l)|0,c,0),s|0}function Y9(s,l){s=s|0,l=l|0;var c=0,f=0;e:for(;;){for(c=n[2703]|0;;){if((c|0)==(l|0))break e;if(f=n[c>>2]|0,n[2703]=f,!c)c=f;else break}gt(c)}n[2701]=s}function AOe(s,l,c){return s=s|0,l=l|0,c=c|0,fOe(s,pn(l)|0,c,0),s|0}function fOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=CT()|0,s=pOe(c)|0,hn(m,l,d,s,hOe(c,f)|0,f)}function CT(){var s=0,l=0;if(o[8040]|0||(V9(10860),tr(65,10860,U|0)|0,l=8040,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10860)|0)){s=10860,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));V9(10860)}return 10860}function pOe(s){return s=s|0,s|0}function hOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=CT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(W9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(gOe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function W9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function gOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=dOe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,mOe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,W9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,yOe(s,d),EOe(d),C=k;return}}function dOe(s){return s=s|0,536870911}function mOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function yOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function EOe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function V9(s){s=s|0,IOe(s)}function COe(s){s=s|0,wOe(s+24|0)}function wOe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function IOe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,11,l,BOe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function BOe(){return 1840}function vOe(s,l,c){s=s|0,l=l|0,c=c|0,POe(n[(DOe(s)|0)>>2]|0,l,c)}function DOe(s){return s=s|0,(n[(CT()|0)+24>>2]|0)+(s<<3)|0}function POe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+1|0,d=f,Sg(m,l),l=xg(m,l)|0,Sg(d,c),c=xg(d,c)|0,tf[s&31](l,c),C=f}function SOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=wT()|0,s=xOe(c)|0,hn(m,l,d,s,bOe(c,f)|0,f)}function wT(){var s=0,l=0;if(o[8048]|0||(J9(10896),tr(66,10896,U|0)|0,l=8048,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10896)|0)){s=10896,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));J9(10896)}return 10896}function xOe(s){return s=s|0,s|0}function bOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=wT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(K9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(kOe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function K9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function kOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=QOe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,FOe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,K9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,TOe(s,d),ROe(d),C=k;return}}function QOe(s){return s=s|0,536870911}function FOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function TOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function ROe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function J9(s){s=s|0,MOe(s)}function NOe(s){s=s|0,LOe(s+24|0)}function LOe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function MOe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,11,l,OOe()|0,1),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function OOe(){return 1852}function UOe(s,l){return s=s|0,l=l|0,HOe(n[(_Oe(s)|0)>>2]|0,l)|0}function _Oe(s){return s=s|0,(n[(wT()|0)+24>>2]|0)+(s<<3)|0}function HOe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,Sg(f,l),l=xg(f,l)|0,l=oD(Ng[s&31](l)|0)|0,C=c,l|0}function jOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=IT()|0,s=qOe(c)|0,hn(m,l,d,s,GOe(c,f)|0,f)}function IT(){var s=0,l=0;if(o[8056]|0||(X9(10932),tr(67,10932,U|0)|0,l=8056,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10932)|0)){s=10932,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));X9(10932)}return 10932}function qOe(s){return s=s|0,s|0}function GOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=IT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(z9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(YOe(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function z9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function YOe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=WOe(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,VOe(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,z9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,KOe(s,d),JOe(d),C=k;return}}function WOe(s){return s=s|0,536870911}function VOe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function KOe(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function JOe(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function X9(s){s=s|0,ZOe(s)}function zOe(s){s=s|0,XOe(s+24|0)}function XOe(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function ZOe(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,7,l,$Oe()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function $Oe(){return 1860}function e4e(s,l,c){return s=s|0,l=l|0,c=c|0,r4e(n[(t4e(s)|0)>>2]|0,l,c)|0}function t4e(s){return s=s|0,(n[(IT()|0)+24>>2]|0)+(s<<3)|0}function r4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0;return f=C,C=C+32|0,B=f+12|0,m=f+8|0,k=f,Q=f+16|0,d=f+4|0,n4e(Q,l),i4e(k,Q,l),vp(d,c),c=Dp(d,c)|0,n[B>>2]=n[k>>2],_w[s&15](m,B,c),c=s4e(m)|0,qA(m),Pp(d),C=f,c|0}function n4e(s,l){s=s|0,l=l|0}function i4e(s,l,c){s=s|0,l=l|0,c=c|0,o4e(s,c)}function s4e(s){return s=s|0,da(s)|0}function o4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0;d=C,C=C+16|0,c=d,f=l,f&1?(a4e(c,0),ii(f|0,c|0)|0,l4e(s,c),c4e(c)):n[s>>2]=n[l>>2],C=d}function a4e(s,l){s=s|0,l=l|0,e5(s,l),n[s+4>>2]=0,o[s+8>>0]=0}function l4e(s,l){s=s|0,l=l|0,n[s>>2]=n[l+4>>2]}function c4e(s){s=s|0,o[s+8>>0]=0}function u4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=BT()|0,s=A4e(c)|0,hn(m,l,d,s,f4e(c,f)|0,f)}function BT(){var s=0,l=0;if(o[8064]|0||($9(10968),tr(68,10968,U|0)|0,l=8064,n[l>>2]=1,n[l+4>>2]=0),!(Rr(10968)|0)){s=10968,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));$9(10968)}return 10968}function A4e(s){return s=s|0,s|0}function f4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=BT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(Z9(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(p4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function Z9(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function p4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=h4e(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,g4e(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,Z9(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,d4e(s,d),m4e(d),C=k;return}}function h4e(s){return s=s|0,536870911}function g4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function d4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function m4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function $9(s){s=s|0,C4e(s)}function y4e(s){s=s|0,E4e(s+24|0)}function E4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function C4e(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,1,l,w4e()|0,5),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function w4e(){return 1872}function I4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,v4e(n[(B4e(s)|0)>>2]|0,l,c,f,d,m)}function B4e(s){return s=s|0,(n[(BT()|0)+24>>2]|0)+(s<<3)|0}function v4e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0;B=C,C=C+32|0,k=B+16|0,Q=B+12|0,O=B+8|0,M=B+4|0,q=B,vp(k,l),l=Dp(k,l)|0,vp(Q,c),c=Dp(Q,c)|0,vp(O,f),f=Dp(O,f)|0,vp(M,d),d=Dp(M,d)|0,vp(q,m),m=Dp(q,m)|0,w7[s&1](l,c,f,d,m),Pp(q),Pp(M),Pp(O),Pp(Q),Pp(k),C=B}function D4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;m=n[s>>2]|0,d=vT()|0,s=P4e(c)|0,hn(m,l,d,s,S4e(c,f)|0,f)}function vT(){var s=0,l=0;if(o[8072]|0||(t7(11004),tr(69,11004,U|0)|0,l=8072,n[l>>2]=1,n[l+4>>2]=0),!(Rr(11004)|0)){s=11004,l=s+36|0;do n[s>>2]=0,s=s+4|0;while((s|0)<(l|0));t7(11004)}return 11004}function P4e(s){return s=s|0,s|0}function S4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0,k=0,Q=0;return k=C,C=C+16|0,d=k,m=k+4|0,n[d>>2]=s,Q=vT()|0,B=Q+24|0,l=gr(l,4)|0,n[m>>2]=l,c=Q+28|0,f=n[c>>2]|0,f>>>0<(n[Q+32>>2]|0)>>>0?(e7(f,s,l),l=(n[c>>2]|0)+8|0,n[c>>2]=l):(x4e(B,d,m),l=n[c>>2]|0),C=k,(l-(n[B>>2]|0)>>3)+-1|0}function e7(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,n[s+4>>2]=c}function x4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0;if(k=C,C=C+32|0,d=k,m=s+4|0,B=((n[m>>2]|0)-(n[s>>2]|0)>>3)+1|0,f=b4e(s)|0,f>>>0>>0)zr(s);else{Q=n[s>>2]|0,M=(n[s+8>>2]|0)-Q|0,O=M>>2,k4e(d,M>>3>>>0>>1>>>0?O>>>0>>0?B:O:f,(n[m>>2]|0)-Q>>3,s+8|0),B=d+8|0,e7(n[B>>2]|0,n[l>>2]|0,n[c>>2]|0),n[B>>2]=(n[B>>2]|0)+8,Q4e(s,d),F4e(d),C=k;return}}function b4e(s){return s=s|0,536870911}function k4e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0;n[s+12>>2]=0,n[s+16>>2]=f;do if(l)if(l>>>0>536870911)Tt();else{d=Vt(l<<3)|0;break}else d=0;while(0);n[s>>2]=d,f=d+(c<<3)|0,n[s+8>>2]=f,n[s+4>>2]=f,n[s+12>>2]=d+(l<<3)}function Q4e(s,l){s=s|0,l=l|0;var c=0,f=0,d=0,m=0,B=0;f=n[s>>2]|0,B=s+4|0,m=l+4|0,d=(n[B>>2]|0)-f|0,c=(n[m>>2]|0)+(0-(d>>3)<<3)|0,n[m>>2]=c,(d|0)>0?(Dr(c|0,f|0,d|0)|0,f=m,c=n[m>>2]|0):f=m,m=n[s>>2]|0,n[s>>2]=c,n[f>>2]=m,m=l+8|0,d=n[B>>2]|0,n[B>>2]=n[m>>2],n[m>>2]=d,m=s+8|0,B=l+12|0,s=n[m>>2]|0,n[m>>2]=n[B>>2],n[B>>2]=s,n[l>>2]=n[f>>2]}function F4e(s){s=s|0;var l=0,c=0,f=0;l=n[s+4>>2]|0,c=s+8|0,f=n[c>>2]|0,(f|0)!=(l|0)&&(n[c>>2]=f+(~((f+-8-l|0)>>>3)<<3)),s=n[s>>2]|0,s|0&>(s)}function t7(s){s=s|0,N4e(s)}function T4e(s){s=s|0,R4e(s+24|0)}function R4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function N4e(s){s=s|0;var l=0;l=Vr()|0,Kr(s,1,12,l,L4e()|0,2),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function L4e(){return 1896}function M4e(s,l,c){s=s|0,l=l|0,c=c|0,U4e(n[(O4e(s)|0)>>2]|0,l,c)}function O4e(s){return s=s|0,(n[(vT()|0)+24>>2]|0)+(s<<3)|0}function U4e(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;f=C,C=C+16|0,m=f+4|0,d=f,_4e(m,l),l=H4e(m,l)|0,vp(d,c),c=Dp(d,c)|0,tf[s&31](l,c),Pp(d),C=f}function _4e(s,l){s=s|0,l=l|0}function H4e(s,l){return s=s|0,l=l|0,j4e(l)|0}function j4e(s){return s=s|0,s|0}function q4e(){var s=0;return o[8080]|0||(r7(11040),tr(70,11040,U|0)|0,s=8080,n[s>>2]=1,n[s+4>>2]=0),Rr(11040)|0||r7(11040),11040}function r7(s){s=s|0,W4e(s),kg(s,71)}function G4e(s){s=s|0,Y4e(s+24|0)}function Y4e(s){s=s|0;var l=0,c=0,f=0;c=n[s>>2]|0,f=c,c|0&&(s=s+4|0,l=n[s>>2]|0,(l|0)!=(c|0)&&(n[s>>2]=l+(~((l+-8-f|0)>>>3)<<3)),gt(c))}function W4e(s){s=s|0;var l=0;l=Vr()|0,Kr(s,5,7,l,z4e()|0,0),n[s+24>>2]=0,n[s+28>>2]=0,n[s+32>>2]=0}function V4e(s){s=s|0,K4e(s)}function K4e(s){s=s|0,J4e(s)}function J4e(s){s=s|0,o[s+8>>0]=1}function z4e(){return 1936}function X4e(){return Z4e()|0}function Z4e(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0;return l=C,C=C+16|0,d=l+4|0,B=l,c=Wa(8)|0,s=c,m=s+4|0,n[m>>2]=Vt(1)|0,f=Vt(8)|0,m=n[m>>2]|0,n[B>>2]=0,n[d>>2]=n[B>>2],$4e(f,m,d),n[c>>2]=f,C=l,s|0}function $4e(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]=l,c=Vt(16)|0,n[c+4>>2]=0,n[c+8>>2]=0,n[c>>2]=1916,n[c+12>>2]=l,n[s+4>>2]=c}function eUe(s){s=s|0,Jm(s),gt(s)}function tUe(s){s=s|0,s=n[s+12>>2]|0,s|0&>(s)}function rUe(s){s=s|0,gt(s)}function nUe(){var s=0;return o[8088]|0||(uUe(11076),tr(25,11076,U|0)|0,s=8088,n[s>>2]=1,n[s+4>>2]=0),11076}function iUe(s,l){s=s|0,l=l|0,n[s>>2]=sUe()|0,n[s+4>>2]=oUe()|0,n[s+12>>2]=l,n[s+8>>2]=aUe()|0,n[s+32>>2]=10}function sUe(){return 11745}function oUe(){return 1940}function aUe(){return aD()|0}function lUe(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,(Sp(f,896)|0)==512?c|0&&(cUe(c),gt(c)):l|0&>(l)}function cUe(s){s=s|0,s=n[s+4>>2]|0,s|0&&bp(s)}function uUe(s){s=s|0,Bp(s)}function xc(s,l){s=s|0,l=l|0,n[s>>2]=l}function DT(s){return s=s|0,n[s>>2]|0}function AUe(s){return s=s|0,o[n[s>>2]>>0]|0}function fUe(s,l){s=s|0,l=l|0;var c=0,f=0;c=C,C=C+16|0,f=c,n[f>>2]=n[s>>2],pUe(l,f)|0,C=c}function pUe(s,l){s=s|0,l=l|0;var c=0;return c=hUe(n[s>>2]|0,l)|0,l=s+4|0,n[(n[l>>2]|0)+8>>2]=c,n[(n[l>>2]|0)+8>>2]|0}function hUe(s,l){s=s|0,l=l|0;var c=0,f=0;return c=C,C=C+16|0,f=c,Va(f),s=da(s)|0,l=gUe(s,n[l>>2]|0)|0,Ka(f),C=c,l|0}function Va(s){s=s|0,n[s>>2]=n[2701],n[s+4>>2]=n[2703]}function gUe(s,l){s=s|0,l=l|0;var c=0;return c=Pl(dUe()|0)|0,Qn(0,c|0,s|0,yT(l)|0)|0}function Ka(s){s=s|0,Y9(n[s>>2]|0,n[s+4>>2]|0)}function dUe(){var s=0;return o[8096]|0||(mUe(11120),s=8096,n[s>>2]=1,n[s+4>>2]=0),11120}function mUe(s){s=s|0,Sl(s,yUe()|0,1)}function yUe(){return 1948}function EUe(){CUe()}function CUe(){var s=0,l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0;if(Oe=C,C=C+16|0,M=Oe+4|0,q=Oe,Ni(65536,10804,n[2702]|0,10812),c=P9()|0,l=n[c>>2]|0,s=n[l>>2]|0,s|0)for(f=n[c+8>>2]|0,c=n[c+4>>2]|0;uc(s|0,u[c>>0]|0|0,o[f>>0]|0),l=l+4|0,s=n[l>>2]|0,s;)f=f+1|0,c=c+1|0;if(s=S9()|0,l=n[s>>2]|0,l|0)do uu(l|0,n[s+4>>2]|0),s=s+8|0,l=n[s>>2]|0;while((l|0)!=0);uu(wUe()|0,5167),O=Gm()|0,s=n[O>>2]|0;e:do if(s|0){do IUe(n[s+4>>2]|0),s=n[s>>2]|0;while((s|0)!=0);if(s=n[O>>2]|0,s|0){Q=O;do{for(;d=s,s=n[s>>2]|0,d=n[d+4>>2]|0,!!(BUe(d)|0);)if(n[q>>2]=Q,n[M>>2]=n[q>>2],vUe(O,M)|0,!s)break e;if(DUe(d),Q=n[Q>>2]|0,l=n7(d)|0,m=Hi()|0,B=C,C=C+((1*(l<<2)|0)+15&-16)|0,k=C,C=C+((1*(l<<2)|0)+15&-16)|0,l=n[(U9(d)|0)>>2]|0,l|0)for(c=B,f=k;n[c>>2]=n[(Ym(n[l+4>>2]|0)|0)>>2],n[f>>2]=n[l+8>>2],l=n[l>>2]|0,l;)c=c+4|0,f=f+4|0;Fe=Ym(d)|0,l=PUe(d)|0,c=n7(d)|0,f=SUe(d)|0,Au(Fe|0,l|0,B|0,k|0,c|0,f|0,fT(d)|0),_i(m|0)}while((s|0)!=0)}}while(0);if(s=n[(pT()|0)>>2]|0,s|0)do Fe=s+4|0,O=hT(Fe)|0,d=Lw(O)|0,m=Rw(O)|0,B=(Nw(O)|0)+1|0,k=fD(O)|0,Q=i7(Fe)|0,O=Rr(O)|0,M=cD(Fe)|0,q=PT(Fe)|0,El(0,d|0,m|0,B|0,k|0,Q|0,O|0,M|0,q|0,ST(Fe)|0),s=n[s>>2]|0;while((s|0)!=0);s=n[(Gm()|0)>>2]|0;e:do if(s|0){t:for(;;){if(l=n[s+4>>2]|0,l|0&&(se=n[(Ym(l)|0)>>2]|0,Ge=n[(_9(l)|0)>>2]|0,Ge|0)){c=Ge;do{l=c+4|0,f=hT(l)|0;r:do if(f|0)switch(Rr(f)|0){case 0:break t;case 4:case 3:case 2:{k=Lw(f)|0,Q=Rw(f)|0,O=(Nw(f)|0)+1|0,M=fD(f)|0,q=Rr(f)|0,Fe=cD(l)|0,El(se|0,k|0,Q|0,O|0,M|0,0,q|0,Fe|0,PT(l)|0,ST(l)|0);break r}case 1:{B=Lw(f)|0,k=Rw(f)|0,Q=(Nw(f)|0)+1|0,O=fD(f)|0,M=i7(l)|0,q=Rr(f)|0,Fe=cD(l)|0,El(se|0,B|0,k|0,Q|0,O|0,M|0,q|0,Fe|0,PT(l)|0,ST(l)|0);break r}case 5:{O=Lw(f)|0,M=Rw(f)|0,q=(Nw(f)|0)+1|0,Fe=fD(f)|0,El(se|0,O|0,M|0,q|0,Fe|0,xUe(f)|0,Rr(f)|0,0,0,0);break r}default:break r}while(0);c=n[c>>2]|0}while((c|0)!=0)}if(s=n[s>>2]|0,!s)break e}Tt()}while(0);Ce(),C=Oe}function wUe(){return 11703}function IUe(s){s=s|0,o[s+40>>0]=0}function BUe(s){return s=s|0,(o[s+40>>0]|0)!=0|0}function vUe(s,l){return s=s|0,l=l|0,l=bUe(l)|0,s=n[l>>2]|0,n[l>>2]=n[s>>2],gt(s),n[l>>2]|0}function DUe(s){s=s|0,o[s+40>>0]=1}function n7(s){return s=s|0,n[s+20>>2]|0}function PUe(s){return s=s|0,n[s+8>>2]|0}function SUe(s){return s=s|0,n[s+32>>2]|0}function fD(s){return s=s|0,n[s+4>>2]|0}function i7(s){return s=s|0,n[s+4>>2]|0}function PT(s){return s=s|0,n[s+8>>2]|0}function ST(s){return s=s|0,n[s+16>>2]|0}function xUe(s){return s=s|0,n[s+20>>2]|0}function bUe(s){return s=s|0,n[s>>2]|0}function pD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Lt=0;Lt=C,C=C+16|0,se=Lt;do if(s>>>0<245){if(O=s>>>0<11?16:s+11&-8,s=O>>>3,q=n[2783]|0,c=q>>>s,c&3|0)return l=(c&1^1)+s|0,s=11172+(l<<1<<2)|0,c=s+8|0,f=n[c>>2]|0,d=f+8|0,m=n[d>>2]|0,(s|0)==(m|0)?n[2783]=q&~(1<>2]=s,n[c>>2]=m),qe=l<<3,n[f+4>>2]=qe|3,qe=f+qe+4|0,n[qe>>2]=n[qe>>2]|1,qe=d,C=Lt,qe|0;if(M=n[2785]|0,O>>>0>M>>>0){if(c|0)return l=2<>>12&16,l=l>>>B,c=l>>>5&8,l=l>>>c,d=l>>>2&4,l=l>>>d,s=l>>>1&2,l=l>>>s,f=l>>>1&1,f=(c|B|d|s|f)+(l>>>f)|0,l=11172+(f<<1<<2)|0,s=l+8|0,d=n[s>>2]|0,B=d+8|0,c=n[B>>2]|0,(l|0)==(c|0)?(s=q&~(1<>2]=l,n[s>>2]=c,s=q),m=(f<<3)-O|0,n[d+4>>2]=O|3,f=d+O|0,n[f+4>>2]=m|1,n[f+m>>2]=m,M|0&&(d=n[2788]|0,l=M>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=d,n[l+12>>2]=d,n[d+8>>2]=l,n[d+12>>2]=c),n[2785]=m,n[2788]=f,qe=B,C=Lt,qe|0;if(k=n[2784]|0,k){if(c=(k&0-k)+-1|0,B=c>>>12&16,c=c>>>B,m=c>>>5&8,c=c>>>m,Q=c>>>2&4,c=c>>>Q,f=c>>>1&2,c=c>>>f,s=c>>>1&1,s=n[11436+((m|B|Q|f|s)+(c>>>s)<<2)>>2]|0,c=(n[s+4>>2]&-8)-O|0,f=n[s+16+(((n[s+16>>2]|0)==0&1)<<2)>>2]|0,!f)Q=s,m=c;else{do B=(n[f+4>>2]&-8)-O|0,Q=B>>>0>>0,c=Q?B:c,s=Q?f:s,f=n[f+16+(((n[f+16>>2]|0)==0&1)<<2)>>2]|0;while((f|0)!=0);Q=s,m=c}if(B=Q+O|0,Q>>>0>>0){d=n[Q+24>>2]|0,l=n[Q+12>>2]|0;do if((l|0)==(Q|0)){if(s=Q+20|0,l=n[s>>2]|0,!l&&(s=Q+16|0,l=n[s>>2]|0,!l)){c=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0,c=l}else c=n[Q+8>>2]|0,n[c+12>>2]=l,n[l+8>>2]=c,c=l;while(0);do if(d|0){if(l=n[Q+28>>2]|0,s=11436+(l<<2)|0,(Q|0)==(n[s>>2]|0)){if(n[s>>2]=c,!c){n[2784]=k&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=d,l=n[Q+16>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),l=n[Q+20>>2]|0,l|0&&(n[c+20>>2]=l,n[l+24>>2]=c)}while(0);return m>>>0<16?(qe=m+O|0,n[Q+4>>2]=qe|3,qe=Q+qe+4|0,n[qe>>2]=n[qe>>2]|1):(n[Q+4>>2]=O|3,n[B+4>>2]=m|1,n[B+m>>2]=m,M|0&&(f=n[2788]|0,l=M>>>3,c=11172+(l<<1<<2)|0,l=1<>2]|0):(n[2783]=q|l,l=c,s=c+8|0),n[s>>2]=f,n[l+12>>2]=f,n[f+8>>2]=l,n[f+12>>2]=c),n[2785]=m,n[2788]=B),qe=Q+8|0,C=Lt,qe|0}else q=O}else q=O}else q=O}else if(s>>>0<=4294967231)if(s=s+11|0,O=s&-8,Q=n[2784]|0,Q){f=0-O|0,s=s>>>8,s?O>>>0>16777215?k=31:(q=(s+1048320|0)>>>16&8,Ue=s<>>16&4,Ue=Ue<>>16&2,k=14-(M|q|k)+(Ue<>>15)|0,k=O>>>(k+7|0)&1|k<<1):k=0,c=n[11436+(k<<2)>>2]|0;e:do if(!c)c=0,s=0,Ue=57;else for(s=0,B=O<<((k|0)==31?0:25-(k>>>1)|0),m=0;;){if(d=(n[c+4>>2]&-8)-O|0,d>>>0>>0)if(d)s=c,f=d;else{s=c,f=0,d=c,Ue=61;break e}if(d=n[c+20>>2]|0,c=n[c+16+(B>>>31<<2)>>2]|0,m=(d|0)==0|(d|0)==(c|0)?m:d,d=(c|0)==0,d){c=m,Ue=57;break}else B=B<<((d^1)&1)}while(0);if((Ue|0)==57){if((c|0)==0&(s|0)==0){if(s=2<>>12&16,q=q>>>B,m=q>>>5&8,q=q>>>m,k=q>>>2&4,q=q>>>k,M=q>>>1&2,q=q>>>M,c=q>>>1&1,s=0,c=n[11436+((m|B|k|M|c)+(q>>>c)<<2)>>2]|0}c?(d=c,Ue=61):(k=s,B=f)}if((Ue|0)==61)for(;;)if(Ue=0,c=(n[d+4>>2]&-8)-O|0,q=c>>>0>>0,c=q?c:f,s=q?d:s,d=n[d+16+(((n[d+16>>2]|0)==0&1)<<2)>>2]|0,d)f=c,Ue=61;else{k=s,B=c;break}if((k|0)!=0&&B>>>0<((n[2785]|0)-O|0)>>>0){if(m=k+O|0,k>>>0>=m>>>0)return qe=0,C=Lt,qe|0;d=n[k+24>>2]|0,l=n[k+12>>2]|0;do if((l|0)==(k|0)){if(s=k+20|0,l=n[s>>2]|0,!l&&(s=k+16|0,l=n[s>>2]|0,!l)){l=0;break}for(;;){if(c=l+20|0,f=n[c>>2]|0,f|0){l=f,s=c;continue}if(c=l+16|0,f=n[c>>2]|0,f)l=f,s=c;else break}n[s>>2]=0}else qe=n[k+8>>2]|0,n[qe+12>>2]=l,n[l+8>>2]=qe;while(0);do if(d){if(s=n[k+28>>2]|0,c=11436+(s<<2)|0,(k|0)==(n[c>>2]|0)){if(n[c>>2]=l,!l){f=Q&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=l,!l){f=Q;break}n[l+24>>2]=d,s=n[k+16>>2]|0,s|0&&(n[l+16>>2]=s,n[s+24>>2]=l),s=n[k+20>>2]|0,s&&(n[l+20>>2]=s,n[s+24>>2]=l),f=Q}else f=Q;while(0);do if(B>>>0>=16){if(n[k+4>>2]=O|3,n[m+4>>2]=B|1,n[m+B>>2]=B,l=B>>>3,B>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=m,n[l+12>>2]=m,n[m+8>>2]=l,n[m+12>>2]=c;break}if(l=B>>>8,l?B>>>0>16777215?l=31:(Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,l=14-(at|Ue|l)+(qe<>>15)|0,l=B>>>(l+7|0)&1|l<<1):l=0,c=11436+(l<<2)|0,n[m+28>>2]=l,s=m+16|0,n[s+4>>2]=0,n[s>>2]=0,s=1<>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}for(s=B<<((l|0)==31?0:25-(l>>>1)|0),c=n[c>>2]|0;;){if((n[c+4>>2]&-8|0)==(B|0)){Ue=97;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=96;break}}if((Ue|0)==96){n[f>>2]=m,n[m+24>>2]=c,n[m+12>>2]=m,n[m+8>>2]=m;break}else if((Ue|0)==97){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=m,n[Ue>>2]=m,n[m+8>>2]=qe,n[m+12>>2]=c,n[m+24>>2]=0;break}}else qe=B+O|0,n[k+4>>2]=qe|3,qe=k+qe+4|0,n[qe>>2]=n[qe>>2]|1;while(0);return qe=k+8|0,C=Lt,qe|0}else q=O}else q=O;else q=-1;while(0);if(c=n[2785]|0,c>>>0>=q>>>0)return l=c-q|0,s=n[2788]|0,l>>>0>15?(qe=s+q|0,n[2788]=qe,n[2785]=l,n[qe+4>>2]=l|1,n[qe+l>>2]=l,n[s+4>>2]=q|3):(n[2785]=0,n[2788]=0,n[s+4>>2]=c|3,qe=s+c+4|0,n[qe>>2]=n[qe>>2]|1),qe=s+8|0,C=Lt,qe|0;if(B=n[2786]|0,B>>>0>q>>>0)return at=B-q|0,n[2786]=at,qe=n[2789]|0,Ue=qe+q|0,n[2789]=Ue,n[Ue+4>>2]=at|1,n[qe+4>>2]=q|3,qe=qe+8|0,C=Lt,qe|0;if(n[2901]|0?s=n[2903]|0:(n[2903]=4096,n[2902]=4096,n[2904]=-1,n[2905]=-1,n[2906]=0,n[2894]=0,s=se&-16^1431655768,n[se>>2]=s,n[2901]=s,s=4096),k=q+48|0,Q=q+47|0,m=s+Q|0,d=0-s|0,O=m&d,O>>>0<=q>>>0||(s=n[2893]|0,s|0&&(M=n[2891]|0,se=M+O|0,se>>>0<=M>>>0|se>>>0>s>>>0)))return qe=0,C=Lt,qe|0;e:do if(n[2894]&4)l=0,Ue=133;else{c=n[2789]|0;t:do if(c){for(f=11580;s=n[f>>2]|0,!(s>>>0<=c>>>0&&(Fe=f+4|0,(s+(n[Fe>>2]|0)|0)>>>0>c>>>0));)if(s=n[f+8>>2]|0,s)f=s;else{Ue=118;break t}if(l=m-B&d,l>>>0<2147483647)if(s=kp(l|0)|0,(s|0)==((n[f>>2]|0)+(n[Fe>>2]|0)|0)){if((s|0)!=-1){B=l,m=s,Ue=135;break e}}else f=s,Ue=126;else l=0}else Ue=118;while(0);do if((Ue|0)==118)if(c=kp(0)|0,(c|0)!=-1&&(l=c,Ge=n[2902]|0,Oe=Ge+-1|0,l=((Oe&l|0)==0?0:(Oe+l&0-Ge)-l|0)+O|0,Ge=n[2891]|0,Oe=l+Ge|0,l>>>0>q>>>0&l>>>0<2147483647)){if(Fe=n[2893]|0,Fe|0&&Oe>>>0<=Ge>>>0|Oe>>>0>Fe>>>0){l=0;break}if(s=kp(l|0)|0,(s|0)==(c|0)){B=l,m=c,Ue=135;break e}else f=s,Ue=126}else l=0;while(0);do if((Ue|0)==126){if(c=0-l|0,!(k>>>0>l>>>0&(l>>>0<2147483647&(f|0)!=-1)))if((f|0)==-1){l=0;break}else{B=l,m=f,Ue=135;break e}if(s=n[2903]|0,s=Q-l+s&0-s,s>>>0>=2147483647){B=l,m=f,Ue=135;break e}if((kp(s|0)|0)==-1){kp(c|0)|0,l=0;break}else{B=s+l|0,m=f,Ue=135;break e}}while(0);n[2894]=n[2894]|4,Ue=133}while(0);if((Ue|0)==133&&O>>>0<2147483647&&(at=kp(O|0)|0,Fe=kp(0)|0,et=Fe-at|0,Xe=et>>>0>(q+40|0)>>>0,!((at|0)==-1|Xe^1|at>>>0>>0&((at|0)!=-1&(Fe|0)!=-1)^1))&&(B=Xe?et:l,m=at,Ue=135),(Ue|0)==135){l=(n[2891]|0)+B|0,n[2891]=l,l>>>0>(n[2892]|0)>>>0&&(n[2892]=l),Q=n[2789]|0;do if(Q){for(l=11580;;){if(s=n[l>>2]|0,c=l+4|0,f=n[c>>2]|0,(m|0)==(s+f|0)){Ue=145;break}if(d=n[l+8>>2]|0,d)l=d;else break}if((Ue|0)==145&&(n[l+12>>2]&8|0)==0&&Q>>>0>>0&Q>>>0>=s>>>0){n[c>>2]=f+B,qe=Q+8|0,qe=(qe&7|0)==0?0:0-qe&7,Ue=Q+qe|0,qe=(n[2786]|0)+(B-qe)|0,n[2789]=Ue,n[2786]=qe,n[Ue+4>>2]=qe|1,n[Ue+qe+4>>2]=40,n[2790]=n[2905];break}for(m>>>0<(n[2787]|0)>>>0&&(n[2787]=m),c=m+B|0,l=11580;;){if((n[l>>2]|0)==(c|0)){Ue=153;break}if(s=n[l+8>>2]|0,s)l=s;else break}if((Ue|0)==153&&(n[l+12>>2]&8|0)==0){n[l>>2]=m,M=l+4|0,n[M>>2]=(n[M>>2]|0)+B,M=m+8|0,M=m+((M&7|0)==0?0:0-M&7)|0,l=c+8|0,l=c+((l&7|0)==0?0:0-l&7)|0,O=M+q|0,k=l-M-q|0,n[M+4>>2]=q|3;do if((l|0)!=(Q|0)){if((l|0)==(n[2788]|0)){qe=(n[2785]|0)+k|0,n[2785]=qe,n[2788]=O,n[O+4>>2]=qe|1,n[O+qe>>2]=qe;break}if(s=n[l+4>>2]|0,(s&3|0)==1){B=s&-8,f=s>>>3;e:do if(s>>>0<256)if(s=n[l+8>>2]|0,c=n[l+12>>2]|0,(c|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=c,n[c+8>>2]=s;break}else{m=n[l+24>>2]|0,s=n[l+12>>2]|0;do if((s|0)==(l|0)){if(f=l+16|0,c=f+4|0,s=n[c>>2]|0,!s)if(s=n[f>>2]|0,s)c=f;else{s=0;break}for(;;){if(f=s+20|0,d=n[f>>2]|0,d|0){s=d,c=f;continue}if(f=s+16|0,d=n[f>>2]|0,d)s=d,c=f;else break}n[c>>2]=0}else qe=n[l+8>>2]|0,n[qe+12>>2]=s,n[s+8>>2]=qe;while(0);if(!m)break;c=n[l+28>>2]|0,f=11436+(c<<2)|0;do if((l|0)!=(n[f>>2]|0)){if(n[m+16+(((n[m+16>>2]|0)!=(l|0)&1)<<2)>>2]=s,!s)break e}else{if(n[f>>2]=s,s|0)break;n[2784]=n[2784]&~(1<>2]=m,c=l+16|0,f=n[c>>2]|0,f|0&&(n[s+16>>2]=f,n[f+24>>2]=s),c=n[c+4>>2]|0,!c)break;n[s+20>>2]=c,n[c+24>>2]=s}while(0);l=l+B|0,d=B+k|0}else d=k;if(l=l+4|0,n[l>>2]=n[l>>2]&-2,n[O+4>>2]=d|1,n[O+d>>2]=d,l=d>>>3,d>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=O,n[l+12>>2]=O,n[O+8>>2]=l,n[O+12>>2]=c;break}l=d>>>8;do if(!l)l=0;else{if(d>>>0>16777215){l=31;break}Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,l=14-(at|Ue|l)+(qe<>>15)|0,l=d>>>(l+7|0)&1|l<<1}while(0);if(f=11436+(l<<2)|0,n[O+28>>2]=l,s=O+16|0,n[s+4>>2]=0,n[s>>2]=0,s=n[2784]|0,c=1<>2]=O,n[O+24>>2]=f,n[O+12>>2]=O,n[O+8>>2]=O;break}for(s=d<<((l|0)==31?0:25-(l>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){Ue=194;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=193;break}}if((Ue|0)==193){n[f>>2]=O,n[O+24>>2]=c,n[O+12>>2]=O,n[O+8>>2]=O;break}else if((Ue|0)==194){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=O,n[Ue>>2]=O,n[O+8>>2]=qe,n[O+12>>2]=c,n[O+24>>2]=0;break}}else qe=(n[2786]|0)+k|0,n[2786]=qe,n[2789]=O,n[O+4>>2]=qe|1;while(0);return qe=M+8|0,C=Lt,qe|0}for(l=11580;s=n[l>>2]|0,!(s>>>0<=Q>>>0&&(qe=s+(n[l+4>>2]|0)|0,qe>>>0>Q>>>0));)l=n[l+8>>2]|0;d=qe+-47|0,s=d+8|0,s=d+((s&7|0)==0?0:0-s&7)|0,d=Q+16|0,s=s>>>0>>0?Q:s,l=s+8|0,c=m+8|0,c=(c&7|0)==0?0:0-c&7,Ue=m+c|0,c=B+-40-c|0,n[2789]=Ue,n[2786]=c,n[Ue+4>>2]=c|1,n[Ue+c+4>>2]=40,n[2790]=n[2905],c=s+4|0,n[c>>2]=27,n[l>>2]=n[2895],n[l+4>>2]=n[2896],n[l+8>>2]=n[2897],n[l+12>>2]=n[2898],n[2895]=m,n[2896]=B,n[2898]=0,n[2897]=l,l=s+24|0;do Ue=l,l=l+4|0,n[l>>2]=7;while((Ue+8|0)>>>0>>0);if((s|0)!=(Q|0)){if(m=s-Q|0,n[c>>2]=n[c>>2]&-2,n[Q+4>>2]=m|1,n[s>>2]=m,l=m>>>3,m>>>0<256){c=11172+(l<<1<<2)|0,s=n[2783]|0,l=1<>2]|0):(n[2783]=s|l,l=c,s=c+8|0),n[s>>2]=Q,n[l+12>>2]=Q,n[Q+8>>2]=l,n[Q+12>>2]=c;break}if(l=m>>>8,l?m>>>0>16777215?c=31:(Ue=(l+1048320|0)>>>16&8,qe=l<>>16&4,qe=qe<>>16&2,c=14-(at|Ue|c)+(qe<>>15)|0,c=m>>>(c+7|0)&1|c<<1):c=0,f=11436+(c<<2)|0,n[Q+28>>2]=c,n[Q+20>>2]=0,n[d>>2]=0,l=n[2784]|0,s=1<>2]=Q,n[Q+24>>2]=f,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}for(s=m<<((c|0)==31?0:25-(c>>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(m|0)){Ue=216;break}if(f=c+16+(s>>>31<<2)|0,l=n[f>>2]|0,l)s=s<<1,c=l;else{Ue=215;break}}if((Ue|0)==215){n[f>>2]=Q,n[Q+24>>2]=c,n[Q+12>>2]=Q,n[Q+8>>2]=Q;break}else if((Ue|0)==216){Ue=c+8|0,qe=n[Ue>>2]|0,n[qe+12>>2]=Q,n[Ue>>2]=Q,n[Q+8>>2]=qe,n[Q+12>>2]=c,n[Q+24>>2]=0;break}}}else{qe=n[2787]|0,(qe|0)==0|m>>>0>>0&&(n[2787]=m),n[2895]=m,n[2896]=B,n[2898]=0,n[2792]=n[2901],n[2791]=-1,l=0;do qe=11172+(l<<1<<2)|0,n[qe+12>>2]=qe,n[qe+8>>2]=qe,l=l+1|0;while((l|0)!=32);qe=m+8|0,qe=(qe&7|0)==0?0:0-qe&7,Ue=m+qe|0,qe=B+-40-qe|0,n[2789]=Ue,n[2786]=qe,n[Ue+4>>2]=qe|1,n[Ue+qe+4>>2]=40,n[2790]=n[2905]}while(0);if(l=n[2786]|0,l>>>0>q>>>0)return at=l-q|0,n[2786]=at,qe=n[2789]|0,Ue=qe+q|0,n[2789]=Ue,n[Ue+4>>2]=at|1,n[qe+4>>2]=q|3,qe=qe+8|0,C=Lt,qe|0}return n[(Vm()|0)>>2]=12,qe=0,C=Lt,qe|0}function hD(s){s=s|0;var l=0,c=0,f=0,d=0,m=0,B=0,k=0,Q=0;if(!!s){c=s+-8|0,d=n[2787]|0,s=n[s+-4>>2]|0,l=s&-8,Q=c+l|0;do if(s&1)k=c,B=c;else{if(f=n[c>>2]|0,!(s&3)||(B=c+(0-f)|0,m=f+l|0,B>>>0>>0))return;if((B|0)==(n[2788]|0)){if(s=Q+4|0,l=n[s>>2]|0,(l&3|0)!=3){k=B,l=m;break}n[2785]=m,n[s>>2]=l&-2,n[B+4>>2]=m|1,n[B+m>>2]=m;return}if(c=f>>>3,f>>>0<256)if(s=n[B+8>>2]|0,l=n[B+12>>2]|0,(l|0)==(s|0)){n[2783]=n[2783]&~(1<>2]=l,n[l+8>>2]=s,k=B,l=m;break}d=n[B+24>>2]|0,s=n[B+12>>2]|0;do if((s|0)==(B|0)){if(c=B+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{s=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0}else k=n[B+8>>2]|0,n[k+12>>2]=s,n[s+8>>2]=k;while(0);if(d){if(l=n[B+28>>2]|0,c=11436+(l<<2)|0,(B|0)==(n[c>>2]|0)){if(n[c>>2]=s,!s){n[2784]=n[2784]&~(1<>2]|0)!=(B|0)&1)<<2)>>2]=s,!s){k=B,l=m;break}n[s+24>>2]=d,l=B+16|0,c=n[l>>2]|0,c|0&&(n[s+16>>2]=c,n[c+24>>2]=s),l=n[l+4>>2]|0,l?(n[s+20>>2]=l,n[l+24>>2]=s,k=B,l=m):(k=B,l=m)}else k=B,l=m}while(0);if(!(B>>>0>=Q>>>0)&&(s=Q+4|0,f=n[s>>2]|0,!!(f&1))){if(f&2)n[s>>2]=f&-2,n[k+4>>2]=l|1,n[B+l>>2]=l,d=l;else{if(s=n[2788]|0,(Q|0)==(n[2789]|0)){if(Q=(n[2786]|0)+l|0,n[2786]=Q,n[2789]=k,n[k+4>>2]=Q|1,(k|0)!=(s|0))return;n[2788]=0,n[2785]=0;return}if((Q|0)==(s|0)){Q=(n[2785]|0)+l|0,n[2785]=Q,n[2788]=B,n[k+4>>2]=Q|1,n[B+Q>>2]=Q;return}d=(f&-8)+l|0,c=f>>>3;do if(f>>>0<256)if(l=n[Q+8>>2]|0,s=n[Q+12>>2]|0,(s|0)==(l|0)){n[2783]=n[2783]&~(1<>2]=s,n[s+8>>2]=l;break}else{m=n[Q+24>>2]|0,s=n[Q+12>>2]|0;do if((s|0)==(Q|0)){if(c=Q+16|0,l=c+4|0,s=n[l>>2]|0,!s)if(s=n[c>>2]|0,s)l=c;else{c=0;break}for(;;){if(c=s+20|0,f=n[c>>2]|0,f|0){s=f,l=c;continue}if(c=s+16|0,f=n[c>>2]|0,f)s=f,l=c;else break}n[l>>2]=0,c=s}else c=n[Q+8>>2]|0,n[c+12>>2]=s,n[s+8>>2]=c,c=s;while(0);if(m|0){if(s=n[Q+28>>2]|0,l=11436+(s<<2)|0,(Q|0)==(n[l>>2]|0)){if(n[l>>2]=c,!c){n[2784]=n[2784]&~(1<>2]|0)!=(Q|0)&1)<<2)>>2]=c,!c)break;n[c+24>>2]=m,s=Q+16|0,l=n[s>>2]|0,l|0&&(n[c+16>>2]=l,n[l+24>>2]=c),s=n[s+4>>2]|0,s|0&&(n[c+20>>2]=s,n[s+24>>2]=c)}}while(0);if(n[k+4>>2]=d|1,n[B+d>>2]=d,(k|0)==(n[2788]|0)){n[2785]=d;return}}if(s=d>>>3,d>>>0<256){c=11172+(s<<1<<2)|0,l=n[2783]|0,s=1<>2]|0):(n[2783]=l|s,s=c,l=c+8|0),n[l>>2]=k,n[s+12>>2]=k,n[k+8>>2]=s,n[k+12>>2]=c;return}s=d>>>8,s?d>>>0>16777215?s=31:(B=(s+1048320|0)>>>16&8,Q=s<>>16&4,Q=Q<>>16&2,s=14-(m|B|s)+(Q<>>15)|0,s=d>>>(s+7|0)&1|s<<1):s=0,f=11436+(s<<2)|0,n[k+28>>2]=s,n[k+20>>2]=0,n[k+16>>2]=0,l=n[2784]|0,c=1<>>1)|0),c=n[f>>2]|0;;){if((n[c+4>>2]&-8|0)==(d|0)){s=73;break}if(f=c+16+(l>>>31<<2)|0,s=n[f>>2]|0,s)l=l<<1,c=s;else{s=72;break}}if((s|0)==72){n[f>>2]=k,n[k+24>>2]=c,n[k+12>>2]=k,n[k+8>>2]=k;break}else if((s|0)==73){B=c+8|0,Q=n[B>>2]|0,n[Q+12>>2]=k,n[B>>2]=k,n[k+8>>2]=Q,n[k+12>>2]=c,n[k+24>>2]=0;break}}else n[2784]=l|c,n[f>>2]=k,n[k+24>>2]=f,n[k+12>>2]=k,n[k+8>>2]=k;while(0);if(Q=(n[2791]|0)+-1|0,n[2791]=Q,!Q)s=11588;else return;for(;s=n[s>>2]|0,s;)s=s+8|0;n[2791]=-1}}}function kUe(){return 11628}function QUe(s){s=s|0;var l=0,c=0;return l=C,C=C+16|0,c=l,n[c>>2]=RUe(n[s+60>>2]|0)|0,s=gD(hc(6,c|0)|0)|0,C=l,s|0}function s7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0;q=C,C=C+48|0,O=q+16|0,m=q,d=q+32|0,k=s+28|0,f=n[k>>2]|0,n[d>>2]=f,Q=s+20|0,f=(n[Q>>2]|0)-f|0,n[d+4>>2]=f,n[d+8>>2]=l,n[d+12>>2]=c,f=f+c|0,B=s+60|0,n[m>>2]=n[B>>2],n[m+4>>2]=d,n[m+8>>2]=2,m=gD(Li(146,m|0)|0)|0;e:do if((f|0)!=(m|0)){for(l=2;!((m|0)<0);)if(f=f-m|0,Ge=n[d+4>>2]|0,se=m>>>0>Ge>>>0,d=se?d+8|0:d,l=(se<<31>>31)+l|0,Ge=m-(se?Ge:0)|0,n[d>>2]=(n[d>>2]|0)+Ge,se=d+4|0,n[se>>2]=(n[se>>2]|0)-Ge,n[O>>2]=n[B>>2],n[O+4>>2]=d,n[O+8>>2]=l,m=gD(Li(146,O|0)|0)|0,(f|0)==(m|0)){M=3;break e}n[s+16>>2]=0,n[k>>2]=0,n[Q>>2]=0,n[s>>2]=n[s>>2]|32,(l|0)==2?c=0:c=c-(n[d+4>>2]|0)|0}else M=3;while(0);return(M|0)==3&&(Ge=n[s+44>>2]|0,n[s+16>>2]=Ge+(n[s+48>>2]|0),n[k>>2]=Ge,n[Q>>2]=Ge),C=q,c|0}function FUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;return d=C,C=C+32|0,m=d,f=d+20|0,n[m>>2]=n[s+60>>2],n[m+4>>2]=0,n[m+8>>2]=l,n[m+12>>2]=f,n[m+16>>2]=c,(gD(sa(140,m|0)|0)|0)<0?(n[f>>2]=-1,s=-1):s=n[f>>2]|0,C=d,s|0}function gD(s){return s=s|0,s>>>0>4294963200&&(n[(Vm()|0)>>2]=0-s,s=-1),s|0}function Vm(){return(TUe()|0)+64|0}function TUe(){return xT()|0}function xT(){return 2084}function RUe(s){return s=s|0,s|0}function NUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;return d=C,C=C+32|0,f=d,n[s+36>>2]=1,(n[s>>2]&64|0)==0&&(n[f>>2]=n[s+60>>2],n[f+4>>2]=21523,n[f+8>>2]=d+16,fu(54,f|0)|0)&&(o[s+75>>0]=-1),f=s7(s,l,c)|0,C=d,f|0}function o7(s,l){s=s|0,l=l|0;var c=0,f=0;if(c=o[s>>0]|0,f=o[l>>0]|0,c<<24>>24==0||c<<24>>24!=f<<24>>24)s=f;else{do s=s+1|0,l=l+1|0,c=o[s>>0]|0,f=o[l>>0]|0;while(!(c<<24>>24==0||c<<24>>24!=f<<24>>24));s=f}return(c&255)-(s&255)|0}function LUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0;e:do if(!c)s=0;else{for(;f=o[s>>0]|0,d=o[l>>0]|0,f<<24>>24==d<<24>>24;)if(c=c+-1|0,c)s=s+1|0,l=l+1|0;else{s=0;break e}s=(f&255)-(d&255)|0}while(0);return s|0}function a7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0;Fe=C,C=C+224|0,M=Fe+120|0,q=Fe+80|0,Ge=Fe,Oe=Fe+136|0,f=q,d=f+40|0;do n[f>>2]=0,f=f+4|0;while((f|0)<(d|0));return n[M>>2]=n[c>>2],(bT(0,l,M,Ge,q)|0)<0?c=-1:((n[s+76>>2]|0)>-1?se=MUe(s)|0:se=0,c=n[s>>2]|0,O=c&32,(o[s+74>>0]|0)<1&&(n[s>>2]=c&-33),f=s+48|0,n[f>>2]|0?c=bT(s,l,M,Ge,q)|0:(d=s+44|0,m=n[d>>2]|0,n[d>>2]=Oe,B=s+28|0,n[B>>2]=Oe,k=s+20|0,n[k>>2]=Oe,n[f>>2]=80,Q=s+16|0,n[Q>>2]=Oe+80,c=bT(s,l,M,Ge,q)|0,m&&(ED[n[s+36>>2]&7](s,0,0)|0,c=(n[k>>2]|0)==0?-1:c,n[d>>2]=m,n[f>>2]=0,n[Q>>2]=0,n[B>>2]=0,n[k>>2]=0)),f=n[s>>2]|0,n[s>>2]=f|O,se|0&&OUe(s),c=(f&32|0)==0?c:-1),C=Fe,c|0}function bT(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0;ir=C,C=C+64|0,or=ir+16|0,Xt=ir,Lt=ir+24|0,Pr=ir+8|0,Nr=ir+20|0,n[or>>2]=l,at=(s|0)!=0,Ue=Lt+40|0,qe=Ue,Lt=Lt+39|0,Or=Pr+4|0,B=0,m=0,M=0;e:for(;;){do if((m|0)>-1)if((B|0)>(2147483647-m|0)){n[(Vm()|0)>>2]=75,m=-1;break}else{m=B+m|0;break}while(0);if(B=o[l>>0]|0,B<<24>>24)k=l;else{Xe=87;break}t:for(;;){switch(B<<24>>24){case 37:{B=k,Xe=9;break t}case 0:{B=k;break t}default:}et=k+1|0,n[or>>2]=et,B=o[et>>0]|0,k=et}t:do if((Xe|0)==9)for(;;){if(Xe=0,(o[k+1>>0]|0)!=37)break t;if(B=B+1|0,k=k+2|0,n[or>>2]=k,(o[k>>0]|0)==37)Xe=9;else break}while(0);if(B=B-l|0,at&&ss(s,l,B),B|0){l=k;continue}Q=k+1|0,B=(o[Q>>0]|0)+-48|0,B>>>0<10?(et=(o[k+2>>0]|0)==36,Fe=et?B:-1,M=et?1:M,Q=et?k+3|0:Q):Fe=-1,n[or>>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0;t:do if(k>>>0<32)for(O=0,q=B;;){if(B=1<>2]=Q,B=o[Q>>0]|0,k=(B<<24>>24)+-32|0,k>>>0>=32)break;q=B}else O=0;while(0);if(B<<24>>24==42){if(k=Q+1|0,B=(o[k>>0]|0)+-48|0,B>>>0<10&&(o[Q+2>>0]|0)==36)n[d+(B<<2)>>2]=10,B=n[f+((o[k>>0]|0)+-48<<3)>>2]|0,M=1,Q=Q+3|0;else{if(M|0){m=-1;break}at?(M=(n[c>>2]|0)+(4-1)&~(4-1),B=n[M>>2]|0,n[c>>2]=M+4,M=0,Q=k):(B=0,M=0,Q=k)}n[or>>2]=Q,et=(B|0)<0,B=et?0-B|0:B,O=et?O|8192:O}else{if(B=l7(or)|0,(B|0)<0){m=-1;break}Q=n[or>>2]|0}do if((o[Q>>0]|0)==46){if((o[Q+1>>0]|0)!=42){n[or>>2]=Q+1,k=l7(or)|0,Q=n[or>>2]|0;break}if(q=Q+2|0,k=(o[q>>0]|0)+-48|0,k>>>0<10&&(o[Q+3>>0]|0)==36){n[d+(k<<2)>>2]=10,k=n[f+((o[q>>0]|0)+-48<<3)>>2]|0,Q=Q+4|0,n[or>>2]=Q;break}if(M|0){m=-1;break e}at?(et=(n[c>>2]|0)+(4-1)&~(4-1),k=n[et>>2]|0,n[c>>2]=et+4):k=0,n[or>>2]=q,Q=q}else k=-1;while(0);for(Oe=0;;){if(((o[Q>>0]|0)+-65|0)>>>0>57){m=-1;break e}if(et=Q+1|0,n[or>>2]=et,q=o[(o[Q>>0]|0)+-65+(5178+(Oe*58|0))>>0]|0,se=q&255,(se+-1|0)>>>0<8)Oe=se,Q=et;else break}if(!(q<<24>>24)){m=-1;break}Ge=(Fe|0)>-1;do if(q<<24>>24==19)if(Ge){m=-1;break e}else Xe=49;else{if(Ge){n[d+(Fe<<2)>>2]=se,Ge=f+(Fe<<3)|0,Fe=n[Ge+4>>2]|0,Xe=Xt,n[Xe>>2]=n[Ge>>2],n[Xe+4>>2]=Fe,Xe=49;break}if(!at){m=0;break e}c7(Xt,se,c)}while(0);if((Xe|0)==49&&(Xe=0,!at)){B=0,l=et;continue}Q=o[Q>>0]|0,Q=(Oe|0)!=0&(Q&15|0)==3?Q&-33:Q,Ge=O&-65537,Fe=(O&8192|0)==0?O:Ge;t:do switch(Q|0){case 110:switch((Oe&255)<<24>>24){case 0:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 1:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 2:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}case 3:{a[n[Xt>>2]>>1]=m,B=0,l=et;continue e}case 4:{o[n[Xt>>2]>>0]=m,B=0,l=et;continue e}case 6:{n[n[Xt>>2]>>2]=m,B=0,l=et;continue e}case 7:{B=n[Xt>>2]|0,n[B>>2]=m,n[B+4>>2]=((m|0)<0)<<31>>31,B=0,l=et;continue e}default:{B=0,l=et;continue e}}case 112:{Q=120,k=k>>>0>8?k:8,l=Fe|8,Xe=61;break}case 88:case 120:{l=Fe,Xe=61;break}case 111:{Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,se=_Ue(l,Q,Ue)|0,Ge=qe-se|0,O=0,q=5642,k=(Fe&8|0)==0|(k|0)>(Ge|0)?k:Ge+1|0,Ge=Fe,Xe=67;break}case 105:case 100:if(Q=Xt,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,(Q|0)<0){l=dD(0,0,l|0,Q|0)|0,Q=De,O=Xt,n[O>>2]=l,n[O+4>>2]=Q,O=1,q=5642,Xe=66;break t}else{O=(Fe&2049|0)!=0&1,q=(Fe&2048|0)==0?(Fe&1|0)==0?5642:5644:5643,Xe=66;break t}case 117:{Q=Xt,O=0,q=5642,l=n[Q>>2]|0,Q=n[Q+4>>2]|0,Xe=66;break}case 99:{o[Lt>>0]=n[Xt>>2],l=Lt,O=0,q=5642,se=Ue,Q=1,k=Ge;break}case 109:{Q=HUe(n[(Vm()|0)>>2]|0)|0,Xe=71;break}case 115:{Q=n[Xt>>2]|0,Q=Q|0?Q:5652,Xe=71;break}case 67:{n[Pr>>2]=n[Xt>>2],n[Or>>2]=0,n[Xt>>2]=Pr,se=-1,Q=Pr,Xe=75;break}case 83:{l=n[Xt>>2]|0,k?(se=k,Q=l,Xe=75):(Bs(s,32,B,0,Fe),l=0,Xe=84);break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{B=qUe(s,+E[Xt>>3],B,k,Fe,Q)|0,l=et;continue e}default:O=0,q=5642,se=Ue,Q=k,k=Fe}while(0);t:do if((Xe|0)==61)Fe=Xt,Oe=n[Fe>>2]|0,Fe=n[Fe+4>>2]|0,se=UUe(Oe,Fe,Ue,Q&32)|0,q=(l&8|0)==0|(Oe|0)==0&(Fe|0)==0,O=q?0:2,q=q?5642:5642+(Q>>4)|0,Ge=l,l=Oe,Q=Fe,Xe=67;else if((Xe|0)==66)se=Km(l,Q,Ue)|0,Ge=Fe,Xe=67;else if((Xe|0)==71)Xe=0,Fe=jUe(Q,0,k)|0,Oe=(Fe|0)==0,l=Q,O=0,q=5642,se=Oe?Q+k|0:Fe,Q=Oe?k:Fe-Q|0,k=Ge;else if((Xe|0)==75){for(Xe=0,q=Q,l=0,k=0;O=n[q>>2]|0,!(!O||(k=u7(Nr,O)|0,(k|0)<0|k>>>0>(se-l|0)>>>0));)if(l=k+l|0,se>>>0>l>>>0)q=q+4|0;else break;if((k|0)<0){m=-1;break e}if(Bs(s,32,B,l,Fe),!l)l=0,Xe=84;else for(O=0;;){if(k=n[Q>>2]|0,!k){Xe=84;break t}if(k=u7(Nr,k)|0,O=k+O|0,(O|0)>(l|0)){Xe=84;break t}if(ss(s,Nr,k),O>>>0>=l>>>0){Xe=84;break}else Q=Q+4|0}}while(0);if((Xe|0)==67)Xe=0,Q=(l|0)!=0|(Q|0)!=0,Fe=(k|0)!=0|Q,Q=((Q^1)&1)+(qe-se)|0,l=Fe?se:Ue,se=Ue,Q=Fe?(k|0)>(Q|0)?k:Q:k,k=(k|0)>-1?Ge&-65537:Ge;else if((Xe|0)==84){Xe=0,Bs(s,32,B,l,Fe^8192),B=(B|0)>(l|0)?B:l,l=et;continue}Oe=se-l|0,Ge=(Q|0)<(Oe|0)?Oe:Q,Fe=Ge+O|0,B=(B|0)<(Fe|0)?Fe:B,Bs(s,32,B,Fe,k),ss(s,q,O),Bs(s,48,B,Fe,k^65536),Bs(s,48,Ge,Oe,0),ss(s,l,Oe),Bs(s,32,B,Fe,k^8192),l=et}e:do if((Xe|0)==87&&!s)if(!M)m=0;else{for(m=1;l=n[d+(m<<2)>>2]|0,!!l;)if(c7(f+(m<<3)|0,l,c),m=m+1|0,(m|0)>=10){m=1;break e}for(;;){if(n[d+(m<<2)>>2]|0){m=-1;break e}if(m=m+1|0,(m|0)>=10){m=1;break}}}while(0);return C=ir,m|0}function MUe(s){return s=s|0,0}function OUe(s){s=s|0}function ss(s,l,c){s=s|0,l=l|0,c=c|0,n[s>>2]&32||ZUe(l,c,s)|0}function l7(s){s=s|0;var l=0,c=0,f=0;if(c=n[s>>2]|0,f=(o[c>>0]|0)+-48|0,f>>>0<10){l=0;do l=f+(l*10|0)|0,c=c+1|0,n[s>>2]=c,f=(o[c>>0]|0)+-48|0;while(f>>>0<10)}else l=0;return l|0}function c7(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;e:do if(l>>>0<=20)do switch(l|0){case 9:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,n[s>>2]=l;break e}case 10:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=((l|0)<0)<<31>>31;break e}case 11:{f=(n[c>>2]|0)+(4-1)&~(4-1),l=n[f>>2]|0,n[c>>2]=f+4,f=s,n[f>>2]=l,n[f+4>>2]=0;break e}case 12:{f=(n[c>>2]|0)+(8-1)&~(8-1),l=f,d=n[l>>2]|0,l=n[l+4>>2]|0,n[c>>2]=f+8,f=s,n[f>>2]=d,n[f+4>>2]=l;break e}case 13:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&65535)<<16>>16,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 14:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&65535,n[d+4>>2]=0;break e}case 15:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,f=(f&255)<<24>>24,d=s,n[d>>2]=f,n[d+4>>2]=((f|0)<0)<<31>>31;break e}case 16:{d=(n[c>>2]|0)+(4-1)&~(4-1),f=n[d>>2]|0,n[c>>2]=d+4,d=s,n[d>>2]=f&255,n[d+4>>2]=0;break e}case 17:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}case 18:{d=(n[c>>2]|0)+(8-1)&~(8-1),m=+E[d>>3],n[c>>2]=d+8,E[s>>3]=m;break e}default:break e}while(0);while(0)}function UUe(s,l,c,f){if(s=s|0,l=l|0,c=c|0,f=f|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=u[5694+(s&15)>>0]|0|f,s=mD(s|0,l|0,4)|0,l=De;while(!((s|0)==0&(l|0)==0));return c|0}function _Ue(s,l,c){if(s=s|0,l=l|0,c=c|0,!((s|0)==0&(l|0)==0))do c=c+-1|0,o[c>>0]=s&7|48,s=mD(s|0,l|0,3)|0,l=De;while(!((s|0)==0&(l|0)==0));return c|0}function Km(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if(l>>>0>0|(l|0)==0&s>>>0>4294967295){for(;f=TT(s|0,l|0,10,0)|0,c=c+-1|0,o[c>>0]=f&255|48,f=s,s=FT(s|0,l|0,10,0)|0,l>>>0>9|(l|0)==9&f>>>0>4294967295;)l=De;l=s}else l=s;if(l)for(;c=c+-1|0,o[c>>0]=(l>>>0)%10|0|48,!(l>>>0<10);)l=(l>>>0)/10|0;return c|0}function HUe(s){return s=s|0,KUe(s,n[(VUe()|0)+188>>2]|0)|0}function jUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;m=l&255,f=(c|0)!=0;e:do if(f&(s&3|0)!=0)for(d=l&255;;){if((o[s>>0]|0)==d<<24>>24){B=6;break e}if(s=s+1|0,c=c+-1|0,f=(c|0)!=0,!(f&(s&3|0)!=0)){B=5;break}}else B=5;while(0);(B|0)==5&&(f?B=6:c=0);e:do if((B|0)==6&&(d=l&255,(o[s>>0]|0)!=d<<24>>24)){f=He(m,16843009)|0;t:do if(c>>>0>3){for(;m=n[s>>2]^f,!((m&-2139062144^-2139062144)&m+-16843009|0);)if(s=s+4|0,c=c+-4|0,c>>>0<=3){B=11;break t}}else B=11;while(0);if((B|0)==11&&!c){c=0;break}for(;;){if((o[s>>0]|0)==d<<24>>24)break e;if(s=s+1|0,c=c+-1|0,!c){c=0;break}}}while(0);return(c|0?s:0)|0}function Bs(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0;if(B=C,C=C+256|0,m=B,(c|0)>(f|0)&(d&73728|0)==0){if(d=c-f|0,zm(m|0,l|0,(d>>>0<256?d:256)|0)|0,d>>>0>255){l=c-f|0;do ss(s,m,256),d=d+-256|0;while(d>>>0>255);d=l&255}ss(s,m,d)}C=B}function u7(s,l){return s=s|0,l=l|0,s?s=YUe(s,l,0)|0:s=0,s|0}function qUe(s,l,c,f,d,m){s=s|0,l=+l,c=c|0,f=f|0,d=d|0,m=m|0;var B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0,Fe=0,et=0,Xe=0,at=0,Ue=0,qe=0,Lt=0,Or=0,or=0,Xt=0,Pr=0,Nr=0,ir=0,bn=0;bn=C,C=C+560|0,Q=bn+8|0,et=bn,ir=bn+524|0,Nr=ir,O=bn+512|0,n[et>>2]=0,Pr=O+12|0,A7(l)|0,(De|0)<0?(l=-l,or=1,Or=5659):(or=(d&2049|0)!=0&1,Or=(d&2048|0)==0?(d&1|0)==0?5660:5665:5662),A7(l)|0,Xt=De&2146435072;do if(Xt>>>0<2146435072|(Xt|0)==2146435072&0<0){if(Ge=+GUe(l,et)*2,B=Ge!=0,B&&(n[et>>2]=(n[et>>2]|0)+-1),at=m|32,(at|0)==97){Oe=m&32,se=(Oe|0)==0?Or:Or+9|0,q=or|2,B=12-f|0;do if(f>>>0>11|(B|0)==0)l=Ge;else{l=8;do B=B+-1|0,l=l*16;while((B|0)!=0);if((o[se>>0]|0)==45){l=-(l+(-Ge-l));break}else{l=Ge+l-l;break}}while(0);k=n[et>>2]|0,B=(k|0)<0?0-k|0:k,B=Km(B,((B|0)<0)<<31>>31,Pr)|0,(B|0)==(Pr|0)&&(B=O+11|0,o[B>>0]=48),o[B+-1>>0]=(k>>31&2)+43,M=B+-2|0,o[M>>0]=m+15,O=(f|0)<1,Q=(d&8|0)==0,B=ir;do Xt=~~l,k=B+1|0,o[B>>0]=u[5694+Xt>>0]|Oe,l=(l-+(Xt|0))*16,(k-Nr|0)==1&&!(Q&(O&l==0))?(o[k>>0]=46,B=B+2|0):B=k;while(l!=0);Xt=B-Nr|0,Nr=Pr-M|0,Pr=(f|0)!=0&(Xt+-2|0)<(f|0)?f+2|0:Xt,B=Nr+q+Pr|0,Bs(s,32,c,B,d),ss(s,se,q),Bs(s,48,c,B,d^65536),ss(s,ir,Xt),Bs(s,48,Pr-Xt|0,0,0),ss(s,M,Nr),Bs(s,32,c,B,d^8192);break}k=(f|0)<0?6:f,B?(B=(n[et>>2]|0)+-28|0,n[et>>2]=B,l=Ge*268435456):(l=Ge,B=n[et>>2]|0),Xt=(B|0)<0?Q:Q+288|0,Q=Xt;do qe=~~l>>>0,n[Q>>2]=qe,Q=Q+4|0,l=(l-+(qe>>>0))*1e9;while(l!=0);if((B|0)>0)for(O=Xt,q=Q;;){if(M=(B|0)<29?B:29,B=q+-4|0,B>>>0>=O>>>0){Q=0;do Ue=m7(n[B>>2]|0,0,M|0)|0,Ue=QT(Ue|0,De|0,Q|0,0)|0,qe=De,Xe=TT(Ue|0,qe|0,1e9,0)|0,n[B>>2]=Xe,Q=FT(Ue|0,qe|0,1e9,0)|0,B=B+-4|0;while(B>>>0>=O>>>0);Q&&(O=O+-4|0,n[O>>2]=Q)}for(Q=q;!(Q>>>0<=O>>>0);)if(B=Q+-4|0,!(n[B>>2]|0))Q=B;else break;if(B=(n[et>>2]|0)-M|0,n[et>>2]=B,(B|0)>0)q=Q;else break}else O=Xt;if((B|0)<0){f=((k+25|0)/9|0)+1|0,Fe=(at|0)==102;do{if(Oe=0-B|0,Oe=(Oe|0)<9?Oe:9,O>>>0>>0){M=(1<>>Oe,se=0,B=O;do qe=n[B>>2]|0,n[B>>2]=(qe>>>Oe)+se,se=He(qe&M,q)|0,B=B+4|0;while(B>>>0>>0);B=(n[O>>2]|0)==0?O+4|0:O,se?(n[Q>>2]=se,O=B,B=Q+4|0):(O=B,B=Q)}else O=(n[O>>2]|0)==0?O+4|0:O,B=Q;Q=Fe?Xt:O,Q=(B-Q>>2|0)>(f|0)?Q+(f<<2)|0:B,B=(n[et>>2]|0)+Oe|0,n[et>>2]=B}while((B|0)<0);B=O,f=Q}else B=O,f=Q;if(qe=Xt,B>>>0>>0){if(Q=(qe-B>>2)*9|0,M=n[B>>2]|0,M>>>0>=10){O=10;do O=O*10|0,Q=Q+1|0;while(M>>>0>=O>>>0)}}else Q=0;if(Fe=(at|0)==103,Xe=(k|0)!=0,O=k-((at|0)!=102?Q:0)+((Xe&Fe)<<31>>31)|0,(O|0)<(((f-qe>>2)*9|0)+-9|0)){if(O=O+9216|0,Oe=Xt+4+(((O|0)/9|0)+-1024<<2)|0,O=((O|0)%9|0)+1|0,(O|0)<9){M=10;do M=M*10|0,O=O+1|0;while((O|0)!=9)}else M=10;if(q=n[Oe>>2]|0,se=(q>>>0)%(M>>>0)|0,O=(Oe+4|0)==(f|0),O&(se|0)==0)O=Oe;else if(Ge=(((q>>>0)/(M>>>0)|0)&1|0)==0?9007199254740992:9007199254740994,Ue=(M|0)/2|0,l=se>>>0>>0?.5:O&(se|0)==(Ue|0)?1:1.5,or&&(Ue=(o[Or>>0]|0)==45,l=Ue?-l:l,Ge=Ue?-Ge:Ge),O=q-se|0,n[Oe>>2]=O,Ge+l!=Ge){if(Ue=O+M|0,n[Oe>>2]=Ue,Ue>>>0>999999999)for(Q=Oe;O=Q+-4|0,n[Q>>2]=0,O>>>0>>0&&(B=B+-4|0,n[B>>2]=0),Ue=(n[O>>2]|0)+1|0,n[O>>2]=Ue,Ue>>>0>999999999;)Q=O;else O=Oe;if(Q=(qe-B>>2)*9|0,q=n[B>>2]|0,q>>>0>=10){M=10;do M=M*10|0,Q=Q+1|0;while(q>>>0>=M>>>0)}}else O=Oe;O=O+4|0,O=f>>>0>O>>>0?O:f,Ue=B}else O=f,Ue=B;for(at=O;;){if(at>>>0<=Ue>>>0){et=0;break}if(B=at+-4|0,!(n[B>>2]|0))at=B;else{et=1;break}}f=0-Q|0;do if(Fe)if(B=((Xe^1)&1)+k|0,(B|0)>(Q|0)&(Q|0)>-5?(M=m+-1|0,k=B+-1-Q|0):(M=m+-2|0,k=B+-1|0),B=d&8,B)Oe=B;else{if(et&&(Lt=n[at+-4>>2]|0,(Lt|0)!=0))if((Lt>>>0)%10|0)O=0;else{O=0,B=10;do B=B*10|0,O=O+1|0;while(!((Lt>>>0)%(B>>>0)|0|0))}else O=9;if(B=((at-qe>>2)*9|0)+-9|0,(M|32|0)==102){Oe=B-O|0,Oe=(Oe|0)>0?Oe:0,k=(k|0)<(Oe|0)?k:Oe,Oe=0;break}else{Oe=B+Q-O|0,Oe=(Oe|0)>0?Oe:0,k=(k|0)<(Oe|0)?k:Oe,Oe=0;break}}else M=m,Oe=d&8;while(0);if(Fe=k|Oe,q=(Fe|0)!=0&1,se=(M|32|0)==102,se)Xe=0,B=(Q|0)>0?Q:0;else{if(B=(Q|0)<0?f:Q,B=Km(B,((B|0)<0)<<31>>31,Pr)|0,O=Pr,(O-B|0)<2)do B=B+-1|0,o[B>>0]=48;while((O-B|0)<2);o[B+-1>>0]=(Q>>31&2)+43,B=B+-2|0,o[B>>0]=M,Xe=B,B=O-B|0}if(B=or+1+k+q+B|0,Bs(s,32,c,B,d),ss(s,Or,or),Bs(s,48,c,B,d^65536),se){M=Ue>>>0>Xt>>>0?Xt:Ue,Oe=ir+9|0,q=Oe,se=ir+8|0,O=M;do{if(Q=Km(n[O>>2]|0,0,Oe)|0,(O|0)==(M|0))(Q|0)==(Oe|0)&&(o[se>>0]=48,Q=se);else if(Q>>>0>ir>>>0){zm(ir|0,48,Q-Nr|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}ss(s,Q,q-Q|0),O=O+4|0}while(O>>>0<=Xt>>>0);if(Fe|0&&ss(s,5710,1),O>>>0>>0&(k|0)>0)for(;;){if(Q=Km(n[O>>2]|0,0,Oe)|0,Q>>>0>ir>>>0){zm(ir|0,48,Q-Nr|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}if(ss(s,Q,(k|0)<9?k:9),O=O+4|0,Q=k+-9|0,O>>>0>>0&(k|0)>9)k=Q;else{k=Q;break}}Bs(s,48,k+9|0,9,0)}else{if(Fe=et?at:Ue+4|0,(k|0)>-1){et=ir+9|0,Oe=(Oe|0)==0,f=et,q=0-Nr|0,se=ir+8|0,M=Ue;do{Q=Km(n[M>>2]|0,0,et)|0,(Q|0)==(et|0)&&(o[se>>0]=48,Q=se);do if((M|0)==(Ue|0)){if(O=Q+1|0,ss(s,Q,1),Oe&(k|0)<1){Q=O;break}ss(s,5710,1),Q=O}else{if(Q>>>0<=ir>>>0)break;zm(ir|0,48,Q+q|0)|0;do Q=Q+-1|0;while(Q>>>0>ir>>>0)}while(0);Nr=f-Q|0,ss(s,Q,(k|0)>(Nr|0)?Nr:k),k=k-Nr|0,M=M+4|0}while(M>>>0>>0&(k|0)>-1)}Bs(s,48,k+18|0,18,0),ss(s,Xe,Pr-Xe|0)}Bs(s,32,c,B,d^8192)}else ir=(m&32|0)!=0,B=or+3|0,Bs(s,32,c,B,d&-65537),ss(s,Or,or),ss(s,l!=l|!1?ir?5686:5690:ir?5678:5682,3),Bs(s,32,c,B,d^8192);while(0);return C=bn,((B|0)<(c|0)?c:B)|0}function A7(s){s=+s;var l=0;return E[v>>3]=s,l=n[v>>2]|0,De=n[v+4>>2]|0,l|0}function GUe(s,l){return s=+s,l=l|0,+ +f7(s,l)}function f7(s,l){s=+s,l=l|0;var c=0,f=0,d=0;switch(E[v>>3]=s,c=n[v>>2]|0,f=n[v+4>>2]|0,d=mD(c|0,f|0,52)|0,d&2047){case 0:{s!=0?(s=+f7(s*18446744073709552e3,l),c=(n[l>>2]|0)+-64|0):c=0,n[l>>2]=c;break}case 2047:break;default:n[l>>2]=(d&2047)+-1022,n[v>>2]=c,n[v+4>>2]=f&-2146435073|1071644672,s=+E[v>>3]}return+s}function YUe(s,l,c){s=s|0,l=l|0,c=c|0;do if(s){if(l>>>0<128){o[s>>0]=l,s=1;break}if(!(n[n[(WUe()|0)+188>>2]>>2]|0))if((l&-128|0)==57216){o[s>>0]=l,s=1;break}else{n[(Vm()|0)>>2]=84,s=-1;break}if(l>>>0<2048){o[s>>0]=l>>>6|192,o[s+1>>0]=l&63|128,s=2;break}if(l>>>0<55296|(l&-8192|0)==57344){o[s>>0]=l>>>12|224,o[s+1>>0]=l>>>6&63|128,o[s+2>>0]=l&63|128,s=3;break}if((l+-65536|0)>>>0<1048576){o[s>>0]=l>>>18|240,o[s+1>>0]=l>>>12&63|128,o[s+2>>0]=l>>>6&63|128,o[s+3>>0]=l&63|128,s=4;break}else{n[(Vm()|0)>>2]=84,s=-1;break}}else s=1;while(0);return s|0}function WUe(){return xT()|0}function VUe(){return xT()|0}function KUe(s,l){s=s|0,l=l|0;var c=0,f=0;for(f=0;;){if((u[5712+f>>0]|0)==(s|0)){s=2;break}if(c=f+1|0,(c|0)==87){c=5800,f=87,s=5;break}else f=c}if((s|0)==2&&(f?(c=5800,s=5):c=5800),(s|0)==5)for(;;){do s=c,c=c+1|0;while((o[s>>0]|0)!=0);if(f=f+-1|0,f)s=5;else break}return JUe(c,n[l+20>>2]|0)|0}function JUe(s,l){return s=s|0,l=l|0,zUe(s,l)|0}function zUe(s,l){return s=s|0,l=l|0,l?l=XUe(n[l>>2]|0,n[l+4>>2]|0,s)|0:l=0,(l|0?l:s)|0}function XUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0;se=(n[s>>2]|0)+1794895138|0,m=Fg(n[s+8>>2]|0,se)|0,f=Fg(n[s+12>>2]|0,se)|0,d=Fg(n[s+16>>2]|0,se)|0;e:do if(m>>>0>>2>>>0&&(q=l-(m<<2)|0,f>>>0>>0&d>>>0>>0)&&((d|f)&3|0)==0){for(q=f>>>2,M=d>>>2,O=0;;){if(k=m>>>1,Q=O+k|0,B=Q<<1,d=B+q|0,f=Fg(n[s+(d<<2)>>2]|0,se)|0,d=Fg(n[s+(d+1<<2)>>2]|0,se)|0,!(d>>>0>>0&f>>>0<(l-d|0)>>>0)){f=0;break e}if(o[s+(d+f)>>0]|0){f=0;break e}if(f=o7(c,s+d|0)|0,!f)break;if(f=(f|0)<0,(m|0)==1){f=0;break e}else O=f?O:Q,m=f?k:m-k|0}f=B+M|0,d=Fg(n[s+(f<<2)>>2]|0,se)|0,f=Fg(n[s+(f+1<<2)>>2]|0,se)|0,f>>>0>>0&d>>>0<(l-f|0)>>>0?f=(o[s+(f+d)>>0]|0)==0?s+f|0:0:f=0}else f=0;while(0);return f|0}function Fg(s,l){s=s|0,l=l|0;var c=0;return c=C7(s|0)|0,((l|0)==0?s:c)|0}function ZUe(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0,k=0;f=c+16|0,d=n[f>>2]|0,d?m=5:$Ue(c)|0?f=0:(d=n[f>>2]|0,m=5);e:do if((m|0)==5){if(k=c+20|0,B=n[k>>2]|0,f=B,(d-B|0)>>>0>>0){f=ED[n[c+36>>2]&7](c,s,l)|0;break}t:do if((o[c+75>>0]|0)>-1){for(B=l;;){if(!B){m=0,d=s;break t}if(d=B+-1|0,(o[s+d>>0]|0)==10)break;B=d}if(f=ED[n[c+36>>2]&7](c,s,B)|0,f>>>0>>0)break e;m=B,d=s+B|0,l=l-B|0,f=n[k>>2]|0}else m=0,d=s;while(0);Dr(f|0,d|0,l|0)|0,n[k>>2]=(n[k>>2]|0)+l,f=m+l|0}while(0);return f|0}function $Ue(s){s=s|0;var l=0,c=0;return l=s+74|0,c=o[l>>0]|0,o[l>>0]=c+255|c,l=n[s>>2]|0,l&8?(n[s>>2]=l|32,s=-1):(n[s+8>>2]=0,n[s+4>>2]=0,c=n[s+44>>2]|0,n[s+28>>2]=c,n[s+20>>2]=c,n[s+16>>2]=c+(n[s+48>>2]|0),s=0),s|0}function _n(s,l){s=y(s),l=y(l);var c=0,f=0;c=p7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=p7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?l:s;break}else{s=s>2]=s,n[v>>2]|0|0}function Tg(s,l){s=y(s),l=y(l);var c=0,f=0;c=h7(s)|0;do if((c&2147483647)>>>0<=2139095040){if(f=h7(l)|0,(f&2147483647)>>>0<=2139095040)if((f^c|0)<0){s=(c|0)<0?s:l;break}else{s=s>2]=s,n[v>>2]|0|0}function kT(s,l){s=y(s),l=y(l);var c=0,f=0,d=0,m=0,B=0,k=0,Q=0,O=0;m=(h[v>>2]=s,n[v>>2]|0),k=(h[v>>2]=l,n[v>>2]|0),c=m>>>23&255,B=k>>>23&255,Q=m&-2147483648,d=k<<1;e:do if((d|0)!=0&&!((c|0)==255|((e3e(l)|0)&2147483647)>>>0>2139095040)){if(f=m<<1,f>>>0<=d>>>0)return l=y(s*y(0)),y((f|0)==(d|0)?l:s);if(c)f=m&8388607|8388608;else{if(c=m<<9,(c|0)>-1){f=c,c=0;do c=c+-1|0,f=f<<1;while((f|0)>-1)}else c=0;f=m<<1-c}if(B)k=k&8388607|8388608;else{if(m=k<<9,(m|0)>-1){d=0;do d=d+-1|0,m=m<<1;while((m|0)>-1)}else d=0;B=d,k=k<<1-d}d=f-k|0,m=(d|0)>-1;t:do if((c|0)>(B|0)){for(;;){if(m)if(d)f=d;else break;if(f=f<<1,c=c+-1|0,d=f-k|0,m=(d|0)>-1,(c|0)<=(B|0))break t}l=y(s*y(0));break e}while(0);if(m)if(d)f=d;else{l=y(s*y(0));break}if(f>>>0<8388608)do f=f<<1,c=c+-1|0;while(f>>>0<8388608);(c|0)>0?c=f+-8388608|c<<23:c=f>>>(1-c|0),l=(n[v>>2]=c|Q,y(h[v>>2]))}else O=3;while(0);return(O|0)==3&&(l=y(s*l),l=y(l/l)),y(l)}function e3e(s){return s=y(s),h[v>>2]=s,n[v>>2]|0|0}function t3e(s,l){return s=s|0,l=l|0,a7(n[582]|0,s,l)|0}function zr(s){s=s|0,Tt()}function Jm(s){s=s|0}function r3e(s,l){return s=s|0,l=l|0,0}function n3e(s){return s=s|0,(g7(s+4|0)|0)==-1?(ef[n[(n[s>>2]|0)+8>>2]&127](s),s=1):s=0,s|0}function g7(s){s=s|0;var l=0;return l=n[s>>2]|0,n[s>>2]=l+-1,l+-1|0}function bp(s){s=s|0,n3e(s)|0&&i3e(s)}function i3e(s){s=s|0;var l=0;l=s+8|0,(n[l>>2]|0)!=0&&(g7(l)|0)!=-1||ef[n[(n[s>>2]|0)+16>>2]&127](s)}function Vt(s){s=s|0;var l=0;for(l=(s|0)==0?1:s;s=pD(l)|0,!(s|0);){if(s=o3e()|0,!s){s=0;break}k7[s&0]()}return s|0}function d7(s){return s=s|0,Vt(s)|0}function gt(s){s=s|0,hD(s)}function s3e(s){s=s|0,(o[s+11>>0]|0)<0&>(n[s>>2]|0)}function o3e(){var s=0;return s=n[2923]|0,n[2923]=s+0,s|0}function a3e(){}function dD(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,f=l-f-(c>>>0>s>>>0|0)>>>0,De=f,s-c>>>0|0|0}function QT(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,c=s+c>>>0,De=l+f+(c>>>0>>0|0)>>>0,c|0|0}function zm(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0,B=0;if(m=s+c|0,l=l&255,(c|0)>=67){for(;s&3;)o[s>>0]=l,s=s+1|0;for(f=m&-4|0,d=f-64|0,B=l|l<<8|l<<16|l<<24;(s|0)<=(d|0);)n[s>>2]=B,n[s+4>>2]=B,n[s+8>>2]=B,n[s+12>>2]=B,n[s+16>>2]=B,n[s+20>>2]=B,n[s+24>>2]=B,n[s+28>>2]=B,n[s+32>>2]=B,n[s+36>>2]=B,n[s+40>>2]=B,n[s+44>>2]=B,n[s+48>>2]=B,n[s+52>>2]=B,n[s+56>>2]=B,n[s+60>>2]=B,s=s+64|0;for(;(s|0)<(f|0);)n[s>>2]=B,s=s+4|0}for(;(s|0)<(m|0);)o[s>>0]=l,s=s+1|0;return m-c|0}function m7(s,l,c){return s=s|0,l=l|0,c=c|0,(c|0)<32?(De=l<>>32-c,s<>>c,s>>>c|(l&(1<>>c-32|0)}function Dr(s,l,c){s=s|0,l=l|0,c=c|0;var f=0,d=0,m=0;if((c|0)>=8192)return Ac(s|0,l|0,c|0)|0;if(m=s|0,d=s+c|0,(s&3)==(l&3)){for(;s&3;){if(!c)return m|0;o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0,c=c-1|0}for(c=d&-4|0,f=c-64|0;(s|0)<=(f|0);)n[s>>2]=n[l>>2],n[s+4>>2]=n[l+4>>2],n[s+8>>2]=n[l+8>>2],n[s+12>>2]=n[l+12>>2],n[s+16>>2]=n[l+16>>2],n[s+20>>2]=n[l+20>>2],n[s+24>>2]=n[l+24>>2],n[s+28>>2]=n[l+28>>2],n[s+32>>2]=n[l+32>>2],n[s+36>>2]=n[l+36>>2],n[s+40>>2]=n[l+40>>2],n[s+44>>2]=n[l+44>>2],n[s+48>>2]=n[l+48>>2],n[s+52>>2]=n[l+52>>2],n[s+56>>2]=n[l+56>>2],n[s+60>>2]=n[l+60>>2],s=s+64|0,l=l+64|0;for(;(s|0)<(c|0);)n[s>>2]=n[l>>2],s=s+4|0,l=l+4|0}else for(c=d-4|0;(s|0)<(c|0);)o[s>>0]=o[l>>0]|0,o[s+1>>0]=o[l+1>>0]|0,o[s+2>>0]=o[l+2>>0]|0,o[s+3>>0]=o[l+3>>0]|0,s=s+4|0,l=l+4|0;for(;(s|0)<(d|0);)o[s>>0]=o[l>>0]|0,s=s+1|0,l=l+1|0;return m|0}function y7(s){s=s|0;var l=0;return l=o[L+(s&255)>>0]|0,(l|0)<8?l|0:(l=o[L+(s>>8&255)>>0]|0,(l|0)<8?l+8|0:(l=o[L+(s>>16&255)>>0]|0,(l|0)<8?l+16|0:(o[L+(s>>>24)>>0]|0)+24|0))}function E7(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0;var m=0,B=0,k=0,Q=0,O=0,M=0,q=0,se=0,Ge=0,Oe=0;if(M=s,Q=l,O=Q,B=c,se=f,k=se,!O)return m=(d|0)!=0,k?m?(n[d>>2]=s|0,n[d+4>>2]=l&0,se=0,d=0,De=se,d|0):(se=0,d=0,De=se,d|0):(m&&(n[d>>2]=(M>>>0)%(B>>>0),n[d+4>>2]=0),se=0,d=(M>>>0)/(B>>>0)>>>0,De=se,d|0);m=(k|0)==0;do if(B){if(!m){if(m=(S(k|0)|0)-(S(O|0)|0)|0,m>>>0<=31){q=m+1|0,k=31-m|0,l=m-31>>31,B=q,s=M>>>(q>>>0)&l|O<>>(q>>>0)&l,m=0,k=M<>2]=s|0,n[d+4>>2]=Q|l&0,se=0,d=0,De=se,d|0):(se=0,d=0,De=se,d|0)}if(m=B-1|0,m&B|0){k=(S(B|0)|0)+33-(S(O|0)|0)|0,Oe=64-k|0,q=32-k|0,Q=q>>31,Ge=k-32|0,l=Ge>>31,B=k,s=q-1>>31&O>>>(Ge>>>0)|(O<>>(k>>>0))&l,l=l&O>>>(k>>>0),m=M<>>(Ge>>>0))&Q|M<>31;break}return d|0&&(n[d>>2]=m&M,n[d+4>>2]=0),(B|0)==1?(Ge=Q|l&0,Oe=s|0|0,De=Ge,Oe|0):(Oe=y7(B|0)|0,Ge=O>>>(Oe>>>0)|0,Oe=O<<32-Oe|M>>>(Oe>>>0)|0,De=Ge,Oe|0)}else{if(m)return d|0&&(n[d>>2]=(O>>>0)%(B>>>0),n[d+4>>2]=0),Ge=0,Oe=(O>>>0)/(B>>>0)>>>0,De=Ge,Oe|0;if(!M)return d|0&&(n[d>>2]=0,n[d+4>>2]=(O>>>0)%(k>>>0)),Ge=0,Oe=(O>>>0)/(k>>>0)>>>0,De=Ge,Oe|0;if(m=k-1|0,!(m&k))return d|0&&(n[d>>2]=s|0,n[d+4>>2]=m&O|l&0),Ge=0,Oe=O>>>((y7(k|0)|0)>>>0),De=Ge,Oe|0;if(m=(S(k|0)|0)-(S(O|0)|0)|0,m>>>0<=30){l=m+1|0,k=31-m|0,B=l,s=O<>>(l>>>0),l=O>>>(l>>>0),m=0,k=M<>2]=s|0,n[d+4>>2]=Q|l&0,Ge=0,Oe=0,De=Ge,Oe|0):(Ge=0,Oe=0,De=Ge,Oe|0)}while(0);if(!B)O=k,Q=0,k=0;else{q=c|0|0,M=se|f&0,O=QT(q|0,M|0,-1,-1)|0,c=De,Q=k,k=0;do f=Q,Q=m>>>31|Q<<1,m=k|m<<1,f=s<<1|f>>>31|0,se=s>>>31|l<<1|0,dD(O|0,c|0,f|0,se|0)|0,Oe=De,Ge=Oe>>31|((Oe|0)<0?-1:0)<<1,k=Ge&1,s=dD(f|0,se|0,Ge&q|0,(((Oe|0)<0?-1:0)>>31|((Oe|0)<0?-1:0)<<1)&M|0)|0,l=De,B=B-1|0;while((B|0)!=0);O=Q,Q=0}return B=0,d|0&&(n[d>>2]=s,n[d+4>>2]=l),Ge=(m|0)>>>31|(O|B)<<1|(B<<1|m>>>31)&0|Q,Oe=(m<<1|0>>>31)&-2|k,De=Ge,Oe|0}function FT(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,E7(s,l,c,f,0)|0}function kp(s){s=s|0;var l=0,c=0;return c=s+15&-16|0,l=n[I>>2]|0,s=l+c|0,(c|0)>0&(s|0)<(l|0)|(s|0)<0?(ie()|0,vA(12),-1):(n[I>>2]=s,(s|0)>(Z()|0)&&(X()|0)==0?(n[I>>2]=l,vA(12),-1):l|0)}function Mw(s,l,c){s=s|0,l=l|0,c=c|0;var f=0;if((l|0)<(s|0)&(s|0)<(l+c|0)){for(f=s,l=l+c|0,s=s+c|0;(c|0)>0;)s=s-1|0,l=l-1|0,c=c-1|0,o[s>>0]=o[l>>0]|0;s=f}else Dr(s,l,c)|0;return s|0}function TT(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0;var d=0,m=0;return m=C,C=C+16|0,d=m|0,E7(s,l,c,f,d)|0,C=m,De=n[d+4>>2]|0,n[d>>2]|0|0}function C7(s){return s=s|0,(s&255)<<24|(s>>8&255)<<16|(s>>16&255)<<8|s>>>24|0}function l3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,w7[s&1](l|0,c|0,f|0,d|0,m|0)}function c3e(s,l,c){s=s|0,l=l|0,c=y(c),I7[s&1](l|0,y(c))}function u3e(s,l,c){s=s|0,l=l|0,c=+c,B7[s&31](l|0,+c)}function A3e(s,l,c,f){return s=s|0,l=l|0,c=y(c),f=y(f),y(v7[s&0](l|0,y(c),y(f)))}function f3e(s,l){s=s|0,l=l|0,ef[s&127](l|0)}function p3e(s,l,c){s=s|0,l=l|0,c=c|0,tf[s&31](l|0,c|0)}function h3e(s,l){return s=s|0,l=l|0,Ng[s&31](l|0)|0}function g3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,D7[s&1](l|0,+c,+f,d|0)}function d3e(s,l,c,f){s=s|0,l=l|0,c=+c,f=+f,z3e[s&1](l|0,+c,+f)}function m3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,ED[s&7](l|0,c|0,f|0)|0}function y3e(s,l,c,f){return s=s|0,l=l|0,c=c|0,f=f|0,+X3e[s&1](l|0,c|0,f|0)}function E3e(s,l){return s=s|0,l=l|0,+P7[s&15](l|0)}function C3e(s,l,c){return s=s|0,l=l|0,c=+c,Z3e[s&1](l|0,+c)|0}function w3e(s,l,c){return s=s|0,l=l|0,c=c|0,NT[s&15](l|0,c|0)|0}function I3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=+f,d=+d,m=m|0,$3e[s&1](l|0,c|0,+f,+d,m|0)}function B3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,B=B|0,e_e[s&1](l|0,c|0,f|0,d|0,m|0,B|0)}function v3e(s,l,c){return s=s|0,l=l|0,c=c|0,+S7[s&7](l|0,c|0)}function D3e(s){return s=s|0,CD[s&7]()|0}function P3e(s,l,c,f,d,m){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,x7[s&1](l|0,c|0,f|0,d|0,m|0)|0}function S3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=+d,t_e[s&1](l|0,c|0,f|0,+d)}function x3e(s,l,c,f,d,m,B){s=s|0,l=l|0,c=c|0,f=y(f),d=d|0,m=y(m),B=B|0,b7[s&1](l|0,c|0,y(f),d|0,y(m),B|0)}function b3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,_w[s&15](l|0,c|0,f|0)}function k3e(s){s=s|0,k7[s&0]()}function Q3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,Q7[s&15](l|0,c|0,+f)}function F3e(s,l,c){return s=s|0,l=+l,c=+c,r_e[s&1](+l,+c)|0}function T3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,LT[s&15](l|0,c|0,f|0,d|0)}function R3e(s,l,c,f,d){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,F(0)}function N3e(s,l){s=s|0,l=y(l),F(1)}function ma(s,l){s=s|0,l=+l,F(2)}function L3e(s,l,c){return s=s|0,l=y(l),c=y(c),F(3),Ze}function Er(s){s=s|0,F(4)}function Ow(s,l){s=s|0,l=l|0,F(5)}function Ja(s){return s=s|0,F(6),0}function M3e(s,l,c,f){s=s|0,l=+l,c=+c,f=f|0,F(7)}function O3e(s,l,c){s=s|0,l=+l,c=+c,F(8)}function U3e(s,l,c){return s=s|0,l=l|0,c=c|0,F(9),0}function _3e(s,l,c){return s=s|0,l=l|0,c=c|0,F(10),0}function Rg(s){return s=s|0,F(11),0}function H3e(s,l){return s=s|0,l=+l,F(12),0}function Uw(s,l){return s=s|0,l=l|0,F(13),0}function j3e(s,l,c,f,d){s=s|0,l=l|0,c=+c,f=+f,d=d|0,F(14)}function q3e(s,l,c,f,d,m){s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,m=m|0,F(15)}function RT(s,l){return s=s|0,l=l|0,F(16),0}function G3e(){return F(17),0}function Y3e(s,l,c,f,d){return s=s|0,l=l|0,c=c|0,f=f|0,d=d|0,F(18),0}function W3e(s,l,c,f){s=s|0,l=l|0,c=c|0,f=+f,F(19)}function V3e(s,l,c,f,d,m){s=s|0,l=l|0,c=y(c),f=f|0,d=y(d),m=m|0,F(20)}function yD(s,l,c){s=s|0,l=l|0,c=c|0,F(21)}function K3e(){F(22)}function Xm(s,l,c){s=s|0,l=l|0,c=+c,F(23)}function J3e(s,l){return s=+s,l=+l,F(24),0}function Zm(s,l,c,f){s=s|0,l=l|0,c=c|0,f=f|0,F(25)}var w7=[R3e,YLe],I7=[N3e,fo],B7=[ma,xw,bw,wF,IF,Dl,kw,BF,Hm,xu,Fw,vF,$v,WA,eD,jm,tD,rD,qm,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma,ma],v7=[L3e],ef=[Er,Jm,DDe,PDe,SDe,rbe,nbe,ibe,CNe,wNe,INe,FLe,TLe,RLe,eUe,tUe,rUe,hs,Kv,_m,YA,Qw,wve,Ive,gDe,NDe,VDe,APe,SPe,GPe,aSe,ISe,MSe,$Se,gxe,Qxe,Vxe,wbe,Mbe,$be,gke,Qke,Vke,fQe,SQe,HQe,nFe,Sc,RFe,zFe,gTe,TTe,KTe,gRe,DRe,xRe,YRe,KRe,ANe,vNe,SNe,GNe,lLe,a5,qMe,COe,NOe,zOe,y4e,T4e,G4e,V4e,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er,Er],tf=[Ow,hF,gF,Sw,Su,dF,mF,Ip,yF,EF,CF,Zv,VA,Ke,At,Wt,vr,Sn,Fr,PF,lve,Qve,dQe,kQe,MTe,WMe,dLe,Y9,Ow,Ow,Ow,Ow],Ng=[Ja,QUe,pF,D,fe,ve,vt,wt,bt,_r,di,po,sve,ove,Bve,oFe,ZTe,VNe,zMe,Wa,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja,Ja],D7=[M3e,vve],z3e=[O3e,hNe],ED=[U3e,s7,FUe,NUe,KPe,Dbe,OFe,e4e],X3e=[_3e,Exe],P7=[Rg,Yo,rt,xn,Dve,Pve,Sve,xve,bve,kve,Rg,Rg,Rg,Rg,Rg,Rg],Z3e=[H3e,IRe],NT=[Uw,r3e,ave,EDe,gPe,uSe,DSe,Xxe,Hbe,YQe,Wv,UOe,Uw,Uw,Uw,Uw],$3e=[j3e,XDe],e_e=[q3e,I4e],S7=[RT,ai,Fve,Tve,Rve,Nxe,RT,RT],CD=[G3e,Nve,Dw,ga,FRe,ZRe,QNe,X4e],x7=[Y3e,Ew],t_e=[W3e,Eke],b7=[V3e,cve],_w=[yD,R,is,en,ho,QPe,_Se,Nke,Xke,Um,hMe,vOe,M4e,yD,yD,yD],k7=[K3e],Q7=[Xm,Jv,zv,Xv,GA,nD,DF,P,nke,eTe,yRe,Xm,Xm,Xm,Xm,Xm],r_e=[J3e,yNe],LT=[Zm,nxe,hFe,ETe,aRe,ORe,iNe,ONe,pLe,rOe,lUe,Zm,Zm,Zm,Zm,Zm];return{_llvm_bswap_i32:C7,dynCall_idd:F3e,dynCall_i:D3e,_i64Subtract:dD,___udivdi3:FT,dynCall_vif:c3e,setThrew:hu,dynCall_viii:b3e,_bitshift64Lshr:mD,_bitshift64Shl:m7,dynCall_vi:f3e,dynCall_viiddi:I3e,dynCall_diii:y3e,dynCall_iii:w3e,_memset:zm,_sbrk:kp,_memcpy:Dr,__GLOBAL__sub_I_Yoga_cpp:Om,dynCall_vii:p3e,___uremdi3:TT,dynCall_vid:u3e,stackAlloc:lo,_nbind_init:EUe,getTempRet0:Ua,dynCall_di:E3e,dynCall_iid:C3e,setTempRet0:xA,_i64Add:QT,dynCall_fiff:A3e,dynCall_iiii:m3e,_emscripten_get_global_libc:kUe,dynCall_viid:Q3e,dynCall_viiid:S3e,dynCall_viififi:x3e,dynCall_ii:h3e,__GLOBAL__sub_I_Binding_cc:NMe,dynCall_viiii:T3e,dynCall_iiiiii:P3e,stackSave:gc,dynCall_viiiii:l3e,__GLOBAL__sub_I_nbind_cc:Lve,dynCall_vidd:d3e,_free:hD,runPostSets:a3e,dynCall_viiiiii:B3e,establishStackSpace:ji,_memmove:Mw,stackRestore:pu,_malloc:pD,__GLOBAL__sub_I_common_cc:tLe,dynCall_viddi:g3e,dynCall_dii:v3e,dynCall_v:k3e}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm;function ExitStatus(t){this.name="ExitStatus",this.message="Program terminated with exit("+t+")",this.status=t}ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function t(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=t)},Module.callMain=Module.callMain=function t(e){e=e||[],ensureInitRuntime();var r=e.length+1;function o(){for(var p=0;p<4-1;p++)a.push(0)}var a=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];o();for(var n=0;n0||(preRun(),runDependencies>0)||Module.calledRun)return;function e(){Module.calledRun||(Module.calledRun=!0,!ABORT&&(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(t),postRun()))}Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),e()},1)):e()}Module.run=Module.run=run;function exit(t,e){e&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=t,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(t)),ENVIRONMENT_IS_NODE&&process.exit(t),Module.quit(t,new ExitStatus(t)))}Module.exit=Module.exit=exit;var abortDecorators=[];function abort(t){Module.onAbort&&Module.onAbort(t),t!==void 0?(Module.print(t),Module.printErr(t),t=JSON.stringify(t)):t="",ABORT=!0,EXITSTATUS=1;var e=` +If this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.`,r="abort("+t+") at "+stackTrace()+e;throw abortDecorators&&abortDecorators.forEach(function(o){r=o(r,t)}),r}if(Module.abort=Module.abort=abort,Module.preInit)for(typeof Module.preInit=="function"&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()})});var om=_((wVt,OEe)=>{"use strict";var Jyt=LEe(),zyt=MEe(),Q6=!1,F6=null;zyt({},function(t,e){if(!Q6){if(Q6=!0,t)throw t;F6=e}});if(!Q6)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");OEe.exports=Jyt(F6.bind,F6.lib)});var R6=_((IVt,T6)=>{"use strict";var UEe=t=>Number.isNaN(t)?!1:t>=4352&&(t<=4447||t===9001||t===9002||11904<=t&&t<=12871&&t!==12351||12880<=t&&t<=19903||19968<=t&&t<=42182||43360<=t&&t<=43388||44032<=t&&t<=55203||63744<=t&&t<=64255||65040<=t&&t<=65049||65072<=t&&t<=65131||65281<=t&&t<=65376||65504<=t&&t<=65510||110592<=t&&t<=110593||127488<=t&&t<=127569||131072<=t&&t<=262141);T6.exports=UEe;T6.exports.default=UEe});var HEe=_((BVt,_Ee)=>{"use strict";_Ee.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var Jk=_((vVt,N6)=>{"use strict";var Xyt=MP(),Zyt=R6(),$yt=HEe(),jEe=t=>{if(typeof t!="string"||t.length===0||(t=Xyt(t),t.length===0))return 0;t=t.replace($yt()," ");let e=0;for(let r=0;r=127&&o<=159||o>=768&&o<=879||(o>65535&&r++,e+=Zyt(o)?2:1)}return e};N6.exports=jEe;N6.exports.default=jEe});var M6=_((DVt,L6)=>{"use strict";var eEt=Jk(),qEe=t=>{let e=0;for(let r of t.split(` +`))e=Math.max(e,eEt(r));return e};L6.exports=qEe;L6.exports.default=qEe});var GEe=_(lB=>{"use strict";var tEt=lB&&lB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(lB,"__esModule",{value:!0});var rEt=tEt(M6()),O6={};lB.default=t=>{if(t.length===0)return{width:0,height:0};if(O6[t])return O6[t];let e=rEt.default(t),r=t.split(` +`).length;return O6[t]={width:e,height:r},{width:e,height:r}}});var YEe=_(cB=>{"use strict";var nEt=cB&&cB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(cB,"__esModule",{value:!0});var dn=nEt(om()),iEt=(t,e)=>{"position"in e&&t.setPositionType(e.position==="absolute"?dn.default.POSITION_TYPE_ABSOLUTE:dn.default.POSITION_TYPE_RELATIVE)},sEt=(t,e)=>{"marginLeft"in e&&t.setMargin(dn.default.EDGE_START,e.marginLeft||0),"marginRight"in e&&t.setMargin(dn.default.EDGE_END,e.marginRight||0),"marginTop"in e&&t.setMargin(dn.default.EDGE_TOP,e.marginTop||0),"marginBottom"in e&&t.setMargin(dn.default.EDGE_BOTTOM,e.marginBottom||0)},oEt=(t,e)=>{"paddingLeft"in e&&t.setPadding(dn.default.EDGE_LEFT,e.paddingLeft||0),"paddingRight"in e&&t.setPadding(dn.default.EDGE_RIGHT,e.paddingRight||0),"paddingTop"in e&&t.setPadding(dn.default.EDGE_TOP,e.paddingTop||0),"paddingBottom"in e&&t.setPadding(dn.default.EDGE_BOTTOM,e.paddingBottom||0)},aEt=(t,e)=>{var r;"flexGrow"in e&&t.setFlexGrow((r=e.flexGrow)!==null&&r!==void 0?r:0),"flexShrink"in e&&t.setFlexShrink(typeof e.flexShrink=="number"?e.flexShrink:1),"flexDirection"in e&&(e.flexDirection==="row"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_ROW),e.flexDirection==="row-reverse"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_ROW_REVERSE),e.flexDirection==="column"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_COLUMN),e.flexDirection==="column-reverse"&&t.setFlexDirection(dn.default.FLEX_DIRECTION_COLUMN_REVERSE)),"flexBasis"in e&&(typeof e.flexBasis=="number"?t.setFlexBasis(e.flexBasis):typeof e.flexBasis=="string"?t.setFlexBasisPercent(Number.parseInt(e.flexBasis,10)):t.setFlexBasis(NaN)),"alignItems"in e&&((e.alignItems==="stretch"||!e.alignItems)&&t.setAlignItems(dn.default.ALIGN_STRETCH),e.alignItems==="flex-start"&&t.setAlignItems(dn.default.ALIGN_FLEX_START),e.alignItems==="center"&&t.setAlignItems(dn.default.ALIGN_CENTER),e.alignItems==="flex-end"&&t.setAlignItems(dn.default.ALIGN_FLEX_END)),"alignSelf"in e&&((e.alignSelf==="auto"||!e.alignSelf)&&t.setAlignSelf(dn.default.ALIGN_AUTO),e.alignSelf==="flex-start"&&t.setAlignSelf(dn.default.ALIGN_FLEX_START),e.alignSelf==="center"&&t.setAlignSelf(dn.default.ALIGN_CENTER),e.alignSelf==="flex-end"&&t.setAlignSelf(dn.default.ALIGN_FLEX_END)),"justifyContent"in e&&((e.justifyContent==="flex-start"||!e.justifyContent)&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_START),e.justifyContent==="center"&&t.setJustifyContent(dn.default.JUSTIFY_CENTER),e.justifyContent==="flex-end"&&t.setJustifyContent(dn.default.JUSTIFY_FLEX_END),e.justifyContent==="space-between"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_BETWEEN),e.justifyContent==="space-around"&&t.setJustifyContent(dn.default.JUSTIFY_SPACE_AROUND))},lEt=(t,e)=>{var r,o;"width"in e&&(typeof e.width=="number"?t.setWidth(e.width):typeof e.width=="string"?t.setWidthPercent(Number.parseInt(e.width,10)):t.setWidthAuto()),"height"in e&&(typeof e.height=="number"?t.setHeight(e.height):typeof e.height=="string"?t.setHeightPercent(Number.parseInt(e.height,10)):t.setHeightAuto()),"minWidth"in e&&(typeof e.minWidth=="string"?t.setMinWidthPercent(Number.parseInt(e.minWidth,10)):t.setMinWidth((r=e.minWidth)!==null&&r!==void 0?r:0)),"minHeight"in e&&(typeof e.minHeight=="string"?t.setMinHeightPercent(Number.parseInt(e.minHeight,10)):t.setMinHeight((o=e.minHeight)!==null&&o!==void 0?o:0))},cEt=(t,e)=>{"display"in e&&t.setDisplay(e.display==="flex"?dn.default.DISPLAY_FLEX:dn.default.DISPLAY_NONE)},uEt=(t,e)=>{if("borderStyle"in e){let r=typeof e.borderStyle=="string"?1:0;t.setBorder(dn.default.EDGE_TOP,r),t.setBorder(dn.default.EDGE_BOTTOM,r),t.setBorder(dn.default.EDGE_LEFT,r),t.setBorder(dn.default.EDGE_RIGHT,r)}};cB.default=(t,e={})=>{iEt(t,e),sEt(t,e),oEt(t,e),aEt(t,e),lEt(t,e),cEt(t,e),uEt(t,e)}});var KEe=_((xVt,VEe)=>{"use strict";var uB=Jk(),AEt=MP(),fEt=vI(),_6=new Set(["\x1B","\x9B"]),pEt=39,WEe=t=>`${_6.values().next().value}[${t}m`,hEt=t=>t.split(" ").map(e=>uB(e)),U6=(t,e,r)=>{let o=[...e],a=!1,n=uB(AEt(t[t.length-1]));for(let[u,A]of o.entries()){let p=uB(A);if(n+p<=r?t[t.length-1]+=A:(t.push(A),n=0),_6.has(A))a=!0;else if(a&&A==="m"){a=!1;continue}a||(n+=p,n===r&&u0&&t.length>1&&(t[t.length-2]+=t.pop())},gEt=t=>{let e=t.split(" "),r=e.length;for(;r>0&&!(uB(e[r-1])>0);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},dEt=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let o="",a="",n,u=hEt(t),A=[""];for(let[p,h]of t.split(" ").entries()){r.trim!==!1&&(A[A.length-1]=A[A.length-1].trimLeft());let E=uB(A[A.length-1]);if(p!==0&&(E>=e&&(r.wordWrap===!1||r.trim===!1)&&(A.push(""),E=0),(E>0||r.trim===!1)&&(A[A.length-1]+=" ",E++)),r.hard&&u[p]>e){let I=e-E,v=1+Math.floor((u[p]-I-1)/e);Math.floor((u[p]-1)/e)e&&E>0&&u[p]>0){if(r.wordWrap===!1&&Ee&&r.wordWrap===!1){U6(A,h,e);continue}A[A.length-1]+=h}r.trim!==!1&&(A=A.map(gEt)),o=A.join(` +`);for(let[p,h]of[...o].entries()){if(a+=h,_6.has(h)){let I=parseFloat(/\d[^m]*/.exec(o.slice(p,p+4)));n=I===pEt?null:I}let E=fEt.codes.get(Number(n));n&&E&&(o[p+1]===` +`?a+=WEe(E):h===` +`&&(a+=WEe(n)))}return a};VEe.exports=(t,e,r)=>String(t).normalize().replace(/\r\n/g,` +`).split(` +`).map(o=>dEt(o,e,r)).join(` +`)});var XEe=_((bVt,zEe)=>{"use strict";var JEe="[\uD800-\uDBFF][\uDC00-\uDFFF]",mEt=t=>t&&t.exact?new RegExp(`^${JEe}$`):new RegExp(JEe,"g");zEe.exports=mEt});var H6=_((kVt,tCe)=>{"use strict";var yEt=R6(),EEt=XEe(),ZEe=vI(),eCe=["\x1B","\x9B"],zk=t=>`${eCe[0]}[${t}m`,$Ee=(t,e,r)=>{let o=[];t=[...t];for(let a of t){let n=a;a.match(";")&&(a=a.split(";")[0][0]+"0");let u=ZEe.codes.get(parseInt(a,10));if(u){let A=t.indexOf(u.toString());A>=0?t.splice(A,1):o.push(zk(e?u:n))}else if(e){o.push(zk(0));break}else o.push(zk(n))}if(e&&(o=o.filter((a,n)=>o.indexOf(a)===n),r!==void 0)){let a=zk(ZEe.codes.get(parseInt(r,10)));o=o.reduce((n,u)=>u===a?[u,...n]:[...n,u],[])}return o.join("")};tCe.exports=(t,e,r)=>{let o=[...t.normalize()],a=[];r=typeof r=="number"?r:o.length;let n=!1,u,A=0,p="";for(let[h,E]of o.entries()){let I=!1;if(eCe.includes(E)){let v=/\d[^m]*/.exec(t.slice(h,h+18));u=v&&v.length>0?v[0]:void 0,Ae&&A<=r)p+=E;else if(A===e&&!n&&u!==void 0)p=$Ee(a);else if(A>=r){p+=$Ee(a,!0,u);break}}return p}});var nCe=_((QVt,rCe)=>{"use strict";var y0=H6(),CEt=Jk();function Xk(t,e,r){if(t.charAt(e)===" ")return e;for(let o=1;o<=3;o++)if(r){if(t.charAt(e+o)===" ")return e+o}else if(t.charAt(e-o)===" ")return e-o;return e}rCe.exports=(t,e,r)=>{r={position:"end",preferTruncationOnSpace:!1,...r};let{position:o,space:a,preferTruncationOnSpace:n}=r,u="\u2026",A=1;if(typeof t!="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof t}`);if(typeof e!="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof e}`);if(e<1)return"";if(e===1)return u;let p=CEt(t);if(p<=e)return t;if(o==="start"){if(n){let h=Xk(t,p-e+1,!0);return u+y0(t,h,p).trim()}return a===!0&&(u+=" ",A=2),u+y0(t,p-e+A,p)}if(o==="middle"){a===!0&&(u=" "+u+" ",A=3);let h=Math.floor(e/2);if(n){let E=Xk(t,h),I=Xk(t,p-(e-h)+1,!0);return y0(t,0,E)+u+y0(t,I,p).trim()}return y0(t,0,h)+u+y0(t,p-(e-h)+A,p)}if(o==="end"){if(n){let h=Xk(t,e-1);return y0(t,0,h)+u}return a===!0&&(u=" "+u,A=2),y0(t,0,e-A)+u}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${o}`)}});var q6=_(AB=>{"use strict";var iCe=AB&&AB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(AB,"__esModule",{value:!0});var wEt=iCe(KEe()),IEt=iCe(nCe()),j6={};AB.default=(t,e,r)=>{let o=t+String(e)+String(r);if(j6[o])return j6[o];let a=t;if(r==="wrap"&&(a=wEt.default(t,e,{trim:!1,hard:!0})),r.startsWith("truncate")){let n="end";r==="truncate-middle"&&(n="middle"),r==="truncate-start"&&(n="start"),a=IEt.default(t,e,{position:n})}return j6[o]=a,a}});var Y6=_(G6=>{"use strict";Object.defineProperty(G6,"__esModule",{value:!0});var sCe=t=>{let e="";if(t.childNodes.length>0)for(let r of t.childNodes){let o="";r.nodeName==="#text"?o=r.nodeValue:((r.nodeName==="ink-text"||r.nodeName==="ink-virtual-text")&&(o=sCe(r)),o.length>0&&typeof r.internal_transform=="function"&&(o=r.internal_transform(o))),e+=o}return e};G6.default=sCe});var W6=_(pi=>{"use strict";var fB=pi&&pi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pi,"__esModule",{value:!0});pi.setTextNodeValue=pi.createTextNode=pi.setStyle=pi.setAttribute=pi.removeChildNode=pi.insertBeforeNode=pi.appendChildNode=pi.createNode=pi.TEXT_NAME=void 0;var BEt=fB(om()),oCe=fB(GEe()),vEt=fB(YEe()),DEt=fB(q6()),PEt=fB(Y6());pi.TEXT_NAME="#text";pi.createNode=t=>{var e;let r={nodeName:t,style:{},attributes:{},childNodes:[],parentNode:null,yogaNode:t==="ink-virtual-text"?void 0:BEt.default.Node.create()};return t==="ink-text"&&((e=r.yogaNode)===null||e===void 0||e.setMeasureFunc(SEt.bind(null,r))),r};pi.appendChildNode=(t,e)=>{var r;e.parentNode&&pi.removeChildNode(e.parentNode,e),e.parentNode=t,t.childNodes.push(e),e.yogaNode&&((r=t.yogaNode)===null||r===void 0||r.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Zk(t)};pi.insertBeforeNode=(t,e,r)=>{var o,a;e.parentNode&&pi.removeChildNode(e.parentNode,e),e.parentNode=t;let n=t.childNodes.indexOf(r);if(n>=0){t.childNodes.splice(n,0,e),e.yogaNode&&((o=t.yogaNode)===null||o===void 0||o.insertChild(e.yogaNode,n));return}t.childNodes.push(e),e.yogaNode&&((a=t.yogaNode)===null||a===void 0||a.insertChild(e.yogaNode,t.yogaNode.getChildCount())),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Zk(t)};pi.removeChildNode=(t,e)=>{var r,o;e.yogaNode&&((o=(r=e.parentNode)===null||r===void 0?void 0:r.yogaNode)===null||o===void 0||o.removeChild(e.yogaNode)),e.parentNode=null;let a=t.childNodes.indexOf(e);a>=0&&t.childNodes.splice(a,1),(t.nodeName==="ink-text"||t.nodeName==="ink-virtual-text")&&Zk(t)};pi.setAttribute=(t,e,r)=>{t.attributes[e]=r};pi.setStyle=(t,e)=>{t.style=e,t.yogaNode&&vEt.default(t.yogaNode,e)};pi.createTextNode=t=>{let e={nodeName:"#text",nodeValue:t,yogaNode:void 0,parentNode:null,style:{}};return pi.setTextNodeValue(e,t),e};var SEt=function(t,e){var r,o;let a=t.nodeName==="#text"?t.nodeValue:PEt.default(t),n=oCe.default(a);if(n.width<=e||n.width>=1&&e>0&&e<1)return n;let u=(o=(r=t.style)===null||r===void 0?void 0:r.textWrap)!==null&&o!==void 0?o:"wrap",A=DEt.default(a,e,u);return oCe.default(A)},aCe=t=>{var e;if(!(!t||!t.parentNode))return(e=t.yogaNode)!==null&&e!==void 0?e:aCe(t.parentNode)},Zk=t=>{let e=aCe(t);e?.markDirty()};pi.setTextNodeValue=(t,e)=>{typeof e!="string"&&(e=String(e)),t.nodeValue=e,Zk(t)}});var fCe=_(pB=>{"use strict";var ACe=pB&&pB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(pB,"__esModule",{value:!0});var lCe=x6(),xEt=ACe(kEe()),cCe=ACe(om()),Mo=W6(),uCe=t=>{t?.unsetMeasureFunc(),t?.freeRecursive()};pB.default=xEt.default({schedulePassiveEffects:lCe.unstable_scheduleCallback,cancelPassiveEffects:lCe.unstable_cancelCallback,now:Date.now,getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>{},resetAfterCommit:t=>{if(t.isStaticDirty){t.isStaticDirty=!1,typeof t.onImmediateRender=="function"&&t.onImmediateRender();return}typeof t.onRender=="function"&&t.onRender()},getChildHostContext:(t,e)=>{let r=t.isInsideText,o=e==="ink-text"||e==="ink-virtual-text";return r===o?t:{isInsideText:o}},shouldSetTextContent:()=>!1,createInstance:(t,e,r,o)=>{if(o.isInsideText&&t==="ink-box")throw new Error(" can\u2019t be nested inside component");let a=t==="ink-text"&&o.isInsideText?"ink-virtual-text":t,n=Mo.createNode(a);for(let[u,A]of Object.entries(e))u!=="children"&&(u==="style"?Mo.setStyle(n,A):u==="internal_transform"?n.internal_transform=A:u==="internal_static"?n.internal_static=!0:Mo.setAttribute(n,u,A));return n},createTextInstance:(t,e,r)=>{if(!r.isInsideText)throw new Error(`Text string "${t}" must be rendered inside component`);return Mo.createTextNode(t)},resetTextContent:()=>{},hideTextInstance:t=>{Mo.setTextNodeValue(t,"")},unhideTextInstance:(t,e)=>{Mo.setTextNodeValue(t,e)},getPublicInstance:t=>t,hideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(cCe.default.DISPLAY_NONE)},unhideInstance:t=>{var e;(e=t.yogaNode)===null||e===void 0||e.setDisplay(cCe.default.DISPLAY_FLEX)},appendInitialChild:Mo.appendChildNode,appendChild:Mo.appendChildNode,insertBefore:Mo.insertBeforeNode,finalizeInitialChildren:(t,e,r,o)=>(t.internal_static&&(o.isStaticDirty=!0,o.staticNode=t),!1),supportsMutation:!0,appendChildToContainer:Mo.appendChildNode,insertInContainerBefore:Mo.insertBeforeNode,removeChildFromContainer:(t,e)=>{Mo.removeChildNode(t,e),uCe(e.yogaNode)},prepareUpdate:(t,e,r,o,a)=>{t.internal_static&&(a.isStaticDirty=!0);let n={},u=Object.keys(o);for(let A of u)if(o[A]!==r[A]){if(A==="style"&&typeof o.style=="object"&&typeof r.style=="object"){let h=o.style,E=r.style,I=Object.keys(h);for(let v of I){if(v==="borderStyle"||v==="borderColor"){if(typeof n.style!="object"){let b={};n.style=b}n.style.borderStyle=h.borderStyle,n.style.borderColor=h.borderColor}if(h[v]!==E[v]){if(typeof n.style!="object"){let b={};n.style=b}n.style[v]=h[v]}}continue}n[A]=o[A]}return n},commitUpdate:(t,e)=>{for(let[r,o]of Object.entries(e))r!=="children"&&(r==="style"?Mo.setStyle(t,o):r==="internal_transform"?t.internal_transform=o:r==="internal_static"?t.internal_static=!0:Mo.setAttribute(t,r,o))},commitTextUpdate:(t,e,r)=>{Mo.setTextNodeValue(t,r)},removeChild:(t,e)=>{Mo.removeChildNode(t,e),uCe(e.yogaNode)}})});var hCe=_((LVt,pCe)=>{"use strict";pCe.exports=(t,e=1,r)=>{if(r={indent:" ",includeEmptyLines:!1,...r},typeof t!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof t}\``);if(typeof e!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof e}\``);if(typeof r.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof r.indent}\``);if(e===0)return t;let o=r.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return t.replace(o,r.indent.repeat(e))}});var gCe=_(hB=>{"use strict";var bEt=hB&&hB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(hB,"__esModule",{value:!0});var $k=bEt(om());hB.default=t=>t.getComputedWidth()-t.getComputedPadding($k.default.EDGE_LEFT)-t.getComputedPadding($k.default.EDGE_RIGHT)-t.getComputedBorder($k.default.EDGE_LEFT)-t.getComputedBorder($k.default.EDGE_RIGHT)});var dCe=_((OVt,kEt)=>{kEt.exports={single:{topLeft:"\u250C",topRight:"\u2510",bottomRight:"\u2518",bottomLeft:"\u2514",vertical:"\u2502",horizontal:"\u2500"},double:{topLeft:"\u2554",topRight:"\u2557",bottomRight:"\u255D",bottomLeft:"\u255A",vertical:"\u2551",horizontal:"\u2550"},round:{topLeft:"\u256D",topRight:"\u256E",bottomRight:"\u256F",bottomLeft:"\u2570",vertical:"\u2502",horizontal:"\u2500"},bold:{topLeft:"\u250F",topRight:"\u2513",bottomRight:"\u251B",bottomLeft:"\u2517",vertical:"\u2503",horizontal:"\u2501"},singleDouble:{topLeft:"\u2553",topRight:"\u2556",bottomRight:"\u255C",bottomLeft:"\u2559",vertical:"\u2551",horizontal:"\u2500"},doubleSingle:{topLeft:"\u2552",topRight:"\u2555",bottomRight:"\u255B",bottomLeft:"\u2558",vertical:"\u2502",horizontal:"\u2550"},classic:{topLeft:"+",topRight:"+",bottomRight:"+",bottomLeft:"+",vertical:"|",horizontal:"-"}}});var yCe=_((UVt,V6)=>{"use strict";var mCe=dCe();V6.exports=mCe;V6.exports.default=mCe});var CCe=_((_Vt,ECe)=>{"use strict";var QEt=(t,e,r)=>{let o=t.indexOf(e);if(o===-1)return t;let a=e.length,n=0,u="";do u+=t.substr(n,o-n)+e+r,n=o+a,o=t.indexOf(e,n);while(o!==-1);return u+=t.substr(n),u},FEt=(t,e,r,o)=>{let a=0,n="";do{let u=t[o-1]==="\r";n+=t.substr(a,(u?o-1:o)-a)+e+(u?`\r +`:` +`)+r,a=o+1,o=t.indexOf(` +`,a)}while(o!==-1);return n+=t.substr(a),n};ECe.exports={stringReplaceAll:QEt,stringEncaseCRLFWithFirstIndex:FEt}});var DCe=_((HVt,vCe)=>{"use strict";var TEt=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,wCe=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,REt=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,NEt=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,LEt=new Map([["n",` +`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function BCe(t){let e=t[0]==="u",r=t[1]==="{";return e&&!r&&t.length===5||t[0]==="x"&&t.length===3?String.fromCharCode(parseInt(t.slice(1),16)):e&&r?String.fromCodePoint(parseInt(t.slice(2,-1),16)):LEt.get(t)||t}function MEt(t,e){let r=[],o=e.trim().split(/\s*,\s*/g),a;for(let n of o){let u=Number(n);if(!Number.isNaN(u))r.push(u);else if(a=n.match(REt))r.push(a[2].replace(NEt,(A,p,h)=>p?BCe(p):h));else throw new Error(`Invalid Chalk template style argument: ${n} (in style '${t}')`)}return r}function OEt(t){wCe.lastIndex=0;let e=[],r;for(;(r=wCe.exec(t))!==null;){let o=r[1];if(r[2]){let a=MEt(o,r[2]);e.push([o].concat(a))}else e.push([o])}return e}function ICe(t,e){let r={};for(let a of e)for(let n of a.styles)r[n[0]]=a.inverse?null:n.slice(1);let o=t;for(let[a,n]of Object.entries(r))if(!!Array.isArray(n)){if(!(a in o))throw new Error(`Unknown Chalk style: ${a}`);o=n.length>0?o[a](...n):o[a]}return o}vCe.exports=(t,e)=>{let r=[],o=[],a=[];if(e.replace(TEt,(n,u,A,p,h,E)=>{if(u)a.push(BCe(u));else if(p){let I=a.join("");a=[],o.push(r.length===0?I:ICe(t,r)(I)),r.push({inverse:A,styles:OEt(p)})}else if(h){if(r.length===0)throw new Error("Found extraneous } in Chalk template literal");o.push(ICe(t,r)(a.join(""))),a=[],r.pop()}else a.push(E)}),o.push(a.join("")),r.length>0){let n=`Chalk template literal is missing ${r.length} closing bracket${r.length===1?"":"s"} (\`}\`)`;throw new Error(n)}return o.join("")}});var iQ=_((jVt,QCe)=>{"use strict";var gB=vI(),{stdout:J6,stderr:z6}=yN(),{stringReplaceAll:UEt,stringEncaseCRLFWithFirstIndex:_Et}=CCe(),{isArray:eQ}=Array,SCe=["ansi","ansi","ansi256","ansi16m"],_C=Object.create(null),HEt=(t,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let r=J6?J6.level:0;t.level=e.level===void 0?r:e.level},X6=class{constructor(e){return xCe(e)}},xCe=t=>{let e={};return HEt(e,t),e.template=(...r)=>kCe(e.template,...r),Object.setPrototypeOf(e,tQ.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=X6,e.template};function tQ(t){return xCe(t)}for(let[t,e]of Object.entries(gB))_C[t]={get(){let r=rQ(this,Z6(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,t,{value:r}),r}};_C.visible={get(){let t=rQ(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:t}),t}};var bCe=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let t of bCe)_C[t]={get(){let{level:e}=this;return function(...r){let o=Z6(gB.color[SCe[e]][t](...r),gB.color.close,this._styler);return rQ(this,o,this._isEmpty)}}};for(let t of bCe){let e="bg"+t[0].toUpperCase()+t.slice(1);_C[e]={get(){let{level:r}=this;return function(...o){let a=Z6(gB.bgColor[SCe[r]][t](...o),gB.bgColor.close,this._styler);return rQ(this,a,this._isEmpty)}}}}var jEt=Object.defineProperties(()=>{},{..._C,level:{enumerable:!0,get(){return this._generator.level},set(t){this._generator.level=t}}}),Z6=(t,e,r)=>{let o,a;return r===void 0?(o=t,a=e):(o=r.openAll+t,a=e+r.closeAll),{open:t,close:e,openAll:o,closeAll:a,parent:r}},rQ=(t,e,r)=>{let o=(...a)=>eQ(a[0])&&eQ(a[0].raw)?PCe(o,kCe(o,...a)):PCe(o,a.length===1?""+a[0]:a.join(" "));return Object.setPrototypeOf(o,jEt),o._generator=t,o._styler=e,o._isEmpty=r,o},PCe=(t,e)=>{if(t.level<=0||!e)return t._isEmpty?"":e;let r=t._styler;if(r===void 0)return e;let{openAll:o,closeAll:a}=r;if(e.indexOf("\x1B")!==-1)for(;r!==void 0;)e=UEt(e,r.close,r.open),r=r.parent;let n=e.indexOf(` +`);return n!==-1&&(e=_Et(e,a,o,n)),o+e+a},K6,kCe=(t,...e)=>{let[r]=e;if(!eQ(r)||!eQ(r.raw))return e.join(" ");let o=e.slice(1),a=[r.raw[0]];for(let n=1;n{"use strict";var qEt=mB&&mB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(mB,"__esModule",{value:!0});var dB=qEt(iQ()),GEt=/^(rgb|hsl|hsv|hwb)\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,YEt=/^(ansi|ansi256)\(\s?(\d+)\s?\)$/,sQ=(t,e)=>e==="foreground"?t:"bg"+t[0].toUpperCase()+t.slice(1);mB.default=(t,e,r)=>{if(!e)return t;if(e in dB.default){let a=sQ(e,r);return dB.default[a](t)}if(e.startsWith("#")){let a=sQ("hex",r);return dB.default[a](e)(t)}if(e.startsWith("ansi")){let a=YEt.exec(e);if(!a)return t;let n=sQ(a[1],r),u=Number(a[2]);return dB.default[n](u)(t)}if(e.startsWith("rgb")||e.startsWith("hsl")||e.startsWith("hsv")||e.startsWith("hwb")){let a=GEt.exec(e);if(!a)return t;let n=sQ(a[1],r),u=Number(a[2]),A=Number(a[3]),p=Number(a[4]);return dB.default[n](u,A,p)(t)}return t}});var TCe=_(yB=>{"use strict";var FCe=yB&&yB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(yB,"__esModule",{value:!0});var WEt=FCe(yCe()),ej=FCe($6());yB.default=(t,e,r,o)=>{if(typeof r.style.borderStyle=="string"){let a=r.yogaNode.getComputedWidth(),n=r.yogaNode.getComputedHeight(),u=r.style.borderColor,A=WEt.default[r.style.borderStyle],p=ej.default(A.topLeft+A.horizontal.repeat(a-2)+A.topRight,u,"foreground"),h=(ej.default(A.vertical,u,"foreground")+` +`).repeat(n-2),E=ej.default(A.bottomLeft+A.horizontal.repeat(a-2)+A.bottomRight,u,"foreground");o.write(t,e,p,{transformers:[]}),o.write(t,e+1,h,{transformers:[]}),o.write(t+a-1,e+1,h,{transformers:[]}),o.write(t,e+n-1,E,{transformers:[]})}}});var NCe=_(EB=>{"use strict";var am=EB&&EB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(EB,"__esModule",{value:!0});var VEt=am(om()),KEt=am(M6()),JEt=am(hCe()),zEt=am(q6()),XEt=am(gCe()),ZEt=am(Y6()),$Et=am(TCe()),eCt=(t,e)=>{var r;let o=(r=t.childNodes[0])===null||r===void 0?void 0:r.yogaNode;if(o){let a=o.getComputedLeft(),n=o.getComputedTop();e=` +`.repeat(n)+JEt.default(e,a)}return e},RCe=(t,e,r)=>{var o;let{offsetX:a=0,offsetY:n=0,transformers:u=[],skipStaticElements:A}=r;if(A&&t.internal_static)return;let{yogaNode:p}=t;if(p){if(p.getDisplay()===VEt.default.DISPLAY_NONE)return;let h=a+p.getComputedLeft(),E=n+p.getComputedTop(),I=u;if(typeof t.internal_transform=="function"&&(I=[t.internal_transform,...u]),t.nodeName==="ink-text"){let v=ZEt.default(t);if(v.length>0){let b=KEt.default(v),C=XEt.default(p);if(b>C){let T=(o=t.style.textWrap)!==null&&o!==void 0?o:"wrap";v=zEt.default(v,C,T)}v=eCt(t,v),e.write(h,E,v,{transformers:I})}return}if(t.nodeName==="ink-box"&&$Et.default(h,E,t,e),t.nodeName==="ink-root"||t.nodeName==="ink-box")for(let v of t.childNodes)RCe(v,e,{offsetX:h,offsetY:E,transformers:I,skipStaticElements:A})}};EB.default=RCe});var MCe=_((WVt,LCe)=>{"use strict";LCe.exports=t=>{t=Object.assign({onlyFirst:!1},t);let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,t.onlyFirst?void 0:"g")}});var UCe=_((VVt,tj)=>{"use strict";var tCt=MCe(),OCe=t=>typeof t=="string"?t.replace(tCt(),""):t;tj.exports=OCe;tj.exports.default=OCe});var jCe=_((KVt,HCe)=>{"use strict";var _Ce="[\uD800-\uDBFF][\uDC00-\uDFFF]";HCe.exports=t=>t&&t.exact?new RegExp(`^${_Ce}$`):new RegExp(_Ce,"g")});var GCe=_((JVt,rj)=>{"use strict";var rCt=UCe(),nCt=jCe(),qCe=t=>rCt(t).replace(nCt()," ").length;rj.exports=qCe;rj.exports.default=qCe});var VCe=_(CB=>{"use strict";var WCe=CB&&CB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(CB,"__esModule",{value:!0});var YCe=WCe(H6()),iCt=WCe(GCe()),nj=class{constructor(e){this.writes=[];let{width:r,height:o}=e;this.width=r,this.height=o}write(e,r,o,a){let{transformers:n}=a;!o||this.writes.push({x:e,y:r,text:o,transformers:n})}get(){let e=[];for(let o=0;oo.trimRight()).join(` +`),height:e.length}}};CB.default=nj});var zCe=_(wB=>{"use strict";var ij=wB&&wB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(wB,"__esModule",{value:!0});var sCt=ij(om()),KCe=ij(NCe()),JCe=ij(VCe());wB.default=(t,e)=>{var r;if(t.yogaNode.setWidth(e),t.yogaNode){t.yogaNode.calculateLayout(void 0,void 0,sCt.default.DIRECTION_LTR);let o=new JCe.default({width:t.yogaNode.getComputedWidth(),height:t.yogaNode.getComputedHeight()});KCe.default(t,o,{skipStaticElements:!0});let a;!((r=t.staticNode)===null||r===void 0)&&r.yogaNode&&(a=new JCe.default({width:t.staticNode.yogaNode.getComputedWidth(),height:t.staticNode.yogaNode.getComputedHeight()}),KCe.default(t.staticNode,a,{skipStaticElements:!1}));let{output:n,height:u}=o.get();return{output:n,outputHeight:u,staticOutput:a?`${a.get().output} +`:""}}return{output:"",outputHeight:0,staticOutput:""}}});var ewe=_((ZVt,$Ce)=>{"use strict";var XCe=Be("stream"),ZCe=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],sj={},oCt=t=>{let e=new XCe.PassThrough,r=new XCe.PassThrough;e.write=a=>t("stdout",a),r.write=a=>t("stderr",a);let o=new console.Console(e,r);for(let a of ZCe)sj[a]=console[a],console[a]=o[a];return()=>{for(let a of ZCe)console[a]=sj[a];sj={}}};$Ce.exports=oCt});var aj=_(oj=>{"use strict";Object.defineProperty(oj,"__esModule",{value:!0});oj.default=new WeakMap});var cj=_(lj=>{"use strict";Object.defineProperty(lj,"__esModule",{value:!0});var aCt=sn(),twe=aCt.createContext({exit:()=>{}});twe.displayName="InternalAppContext";lj.default=twe});var Aj=_(uj=>{"use strict";Object.defineProperty(uj,"__esModule",{value:!0});var lCt=sn(),rwe=lCt.createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});rwe.displayName="InternalStdinContext";uj.default=rwe});var pj=_(fj=>{"use strict";Object.defineProperty(fj,"__esModule",{value:!0});var cCt=sn(),nwe=cCt.createContext({stdout:void 0,write:()=>{}});nwe.displayName="InternalStdoutContext";fj.default=nwe});var gj=_(hj=>{"use strict";Object.defineProperty(hj,"__esModule",{value:!0});var uCt=sn(),iwe=uCt.createContext({stderr:void 0,write:()=>{}});iwe.displayName="InternalStderrContext";hj.default=iwe});var oQ=_(dj=>{"use strict";Object.defineProperty(dj,"__esModule",{value:!0});var ACt=sn(),swe=ACt.createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{}});swe.displayName="InternalFocusContext";dj.default=swe});var awe=_((sKt,owe)=>{"use strict";var fCt=/[|\\{}()[\]^$+*?.-]/g;owe.exports=t=>{if(typeof t!="string")throw new TypeError("Expected a string");return t.replace(fCt,"\\$&")}});var Awe=_((oKt,uwe)=>{"use strict";var pCt=awe(),hCt=typeof process=="object"&&process&&typeof process.cwd=="function"?process.cwd():".",cwe=[].concat(Be("module").builtinModules,"bootstrap_node","node").map(t=>new RegExp(`(?:\\((?:node:)?${t}(?:\\.js)?:\\d+:\\d+\\)$|^\\s*at (?:node:)?${t}(?:\\.js)?:\\d+:\\d+$)`));cwe.push(/\((?:node:)?internal\/[^:]+:\d+:\d+\)$/,/\s*at (?:node:)?internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);var IB=class{constructor(e){e={ignoredPackages:[],...e},"internals"in e||(e.internals=IB.nodeInternals()),"cwd"in e||(e.cwd=hCt),this._cwd=e.cwd.replace(/\\/g,"/"),this._internals=[].concat(e.internals,gCt(e.ignoredPackages)),this._wrapCallSite=e.wrapCallSite||!1}static nodeInternals(){return[...cwe]}clean(e,r=0){r=" ".repeat(r),Array.isArray(e)||(e=e.split(` +`)),!/^\s*at /.test(e[0])&&/^\s*at /.test(e[1])&&(e=e.slice(1));let o=!1,a=null,n=[];return e.forEach(u=>{if(u=u.replace(/\\/g,"/"),this._internals.some(p=>p.test(u)))return;let A=/^\s*at /.test(u);o?u=u.trimEnd().replace(/^(\s+)at /,"$1"):(u=u.trim(),A&&(u=u.slice(3))),u=u.replace(`${this._cwd}/`,""),u&&(A?(a&&(n.push(a),a=null),n.push(u)):(o=!0,a=u))}),n.map(u=>`${r}${u} +`).join("")}captureString(e,r=this.captureString){typeof e=="function"&&(r=e,e=1/0);let{stackTraceLimit:o}=Error;e&&(Error.stackTraceLimit=e);let a={};Error.captureStackTrace(a,r);let{stack:n}=a;return Error.stackTraceLimit=o,this.clean(n)}capture(e,r=this.capture){typeof e=="function"&&(r=e,e=1/0);let{prepareStackTrace:o,stackTraceLimit:a}=Error;Error.prepareStackTrace=(A,p)=>this._wrapCallSite?p.map(this._wrapCallSite):p,e&&(Error.stackTraceLimit=e);let n={};Error.captureStackTrace(n,r);let{stack:u}=n;return Object.assign(Error,{prepareStackTrace:o,stackTraceLimit:a}),u}at(e=this.at){let[r]=this.capture(1,e);if(!r)return{};let o={line:r.getLineNumber(),column:r.getColumnNumber()};lwe(o,r.getFileName(),this._cwd),r.isConstructor()&&(o.constructor=!0),r.isEval()&&(o.evalOrigin=r.getEvalOrigin()),r.isNative()&&(o.native=!0);let a;try{a=r.getTypeName()}catch{}a&&a!=="Object"&&a!=="[object Object]"&&(o.type=a);let n=r.getFunctionName();n&&(o.function=n);let u=r.getMethodName();return u&&n!==u&&(o.method=u),o}parseLine(e){let r=e&&e.match(dCt);if(!r)return null;let o=r[1]==="new",a=r[2],n=r[3],u=r[4],A=Number(r[5]),p=Number(r[6]),h=r[7],E=r[8],I=r[9],v=r[10]==="native",b=r[11]===")",C,T={};if(E&&(T.line=Number(E)),I&&(T.column=Number(I)),b&&h){let L=0;for(let U=h.length-1;U>0;U--)if(h.charAt(U)===")")L++;else if(h.charAt(U)==="("&&h.charAt(U-1)===" "&&(L--,L===-1&&h.charAt(U-1)===" ")){let J=h.slice(0,U-1);h=h.slice(U+1),a+=` (${J}`;break}}if(a){let L=a.match(mCt);L&&(a=L[1],C=L[2])}return lwe(T,h,this._cwd),o&&(T.constructor=!0),n&&(T.evalOrigin=n,T.evalLine=A,T.evalColumn=p,T.evalFile=u&&u.replace(/\\/g,"/")),v&&(T.native=!0),a&&(T.function=a),C&&a!==C&&(T.method=C),T}};function lwe(t,e,r){e&&(e=e.replace(/\\/g,"/"),e.startsWith(`${r}/`)&&(e=e.slice(r.length+1)),t.file=e)}function gCt(t){if(t.length===0)return[];let e=t.map(r=>pCt(r));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${e.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var dCt=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),mCt=/^(.*?) \[as (.*?)\]$/;uwe.exports=IB});var pwe=_((aKt,fwe)=>{"use strict";fwe.exports=(t,e)=>t.replace(/^\t+/gm,r=>" ".repeat(r.length*(e||2)))});var gwe=_((lKt,hwe)=>{"use strict";var yCt=pwe(),ECt=(t,e)=>{let r=[],o=t-e,a=t+e;for(let n=o;n<=a;n++)r.push(n);return r};hwe.exports=(t,e,r)=>{if(typeof t!="string")throw new TypeError("Source code is missing.");if(!e||e<1)throw new TypeError("Line number must start from `1`.");if(t=yCt(t).split(/\r?\n/),!(e>t.length))return r={around:3,...r},ECt(e,r.around).filter(o=>t[o-1]!==void 0).map(o=>({line:o,value:t[o-1]}))}});var aQ=_(ru=>{"use strict";var CCt=ru&&ru.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),wCt=ru&&ru.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),ICt=ru&&ru.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&CCt(e,t,r);return wCt(e,t),e},BCt=ru&&ru.__rest||function(t,e){var r={};for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.indexOf(o)<0&&(r[o]=t[o]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,o=Object.getOwnPropertySymbols(t);a{var{children:r}=t,o=BCt(t,["children"]);let a=Object.assign(Object.assign({},o),{marginLeft:o.marginLeft||o.marginX||o.margin||0,marginRight:o.marginRight||o.marginX||o.margin||0,marginTop:o.marginTop||o.marginY||o.margin||0,marginBottom:o.marginBottom||o.marginY||o.margin||0,paddingLeft:o.paddingLeft||o.paddingX||o.padding||0,paddingRight:o.paddingRight||o.paddingX||o.padding||0,paddingTop:o.paddingTop||o.paddingY||o.padding||0,paddingBottom:o.paddingBottom||o.paddingY||o.padding||0});return dwe.default.createElement("ink-box",{ref:e,style:a},r)});mj.displayName="Box";mj.defaultProps={flexDirection:"row",flexGrow:0,flexShrink:1};ru.default=mj});var Cj=_(BB=>{"use strict";var yj=BB&&BB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(BB,"__esModule",{value:!0});var vCt=yj(sn()),HC=yj(iQ()),mwe=yj($6()),Ej=({color:t,backgroundColor:e,dimColor:r,bold:o,italic:a,underline:n,strikethrough:u,inverse:A,wrap:p,children:h})=>{if(h==null)return null;let E=I=>(r&&(I=HC.default.dim(I)),t&&(I=mwe.default(I,t,"foreground")),e&&(I=mwe.default(I,e,"background")),o&&(I=HC.default.bold(I)),a&&(I=HC.default.italic(I)),n&&(I=HC.default.underline(I)),u&&(I=HC.default.strikethrough(I)),A&&(I=HC.default.inverse(I)),I);return vCt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:p},internal_transform:E},h)};Ej.displayName="Text";Ej.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:"wrap"};BB.default=Ej});var wwe=_(nu=>{"use strict";var DCt=nu&&nu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),PCt=nu&&nu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),SCt=nu&&nu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&DCt(e,t,r);return PCt(e,t),e},vB=nu&&nu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(nu,"__esModule",{value:!0});var ywe=SCt(Be("fs")),fs=vB(sn()),Ewe=vB(Awe()),xCt=vB(gwe()),Xf=vB(aQ()),hA=vB(Cj()),Cwe=new Ewe.default({cwd:process.cwd(),internals:Ewe.default.nodeInternals()}),bCt=({error:t})=>{let e=t.stack?t.stack.split(` +`).slice(1):void 0,r=e?Cwe.parseLine(e[0]):void 0,o,a=0;if(r?.file&&r?.line&&ywe.existsSync(r.file)){let n=ywe.readFileSync(r.file,"utf8");if(o=xCt.default(n,r.line),o)for(let{line:u}of o)a=Math.max(a,String(u).length)}return fs.default.createElement(Xf.default,{flexDirection:"column",padding:1},fs.default.createElement(Xf.default,null,fs.default.createElement(hA.default,{backgroundColor:"red",color:"white"}," ","ERROR"," "),fs.default.createElement(hA.default,null," ",t.message)),r&&fs.default.createElement(Xf.default,{marginTop:1},fs.default.createElement(hA.default,{dimColor:!0},r.file,":",r.line,":",r.column)),r&&o&&fs.default.createElement(Xf.default,{marginTop:1,flexDirection:"column"},o.map(({line:n,value:u})=>fs.default.createElement(Xf.default,{key:n},fs.default.createElement(Xf.default,{width:a+1},fs.default.createElement(hA.default,{dimColor:n!==r.line,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0},String(n).padStart(a," "),":")),fs.default.createElement(hA.default,{key:n,backgroundColor:n===r.line?"red":void 0,color:n===r.line?"white":void 0}," "+u)))),t.stack&&fs.default.createElement(Xf.default,{marginTop:1,flexDirection:"column"},t.stack.split(` +`).slice(1).map(n=>{let u=Cwe.parseLine(n);return u?fs.default.createElement(Xf.default,{key:n},fs.default.createElement(hA.default,{dimColor:!0},"- "),fs.default.createElement(hA.default,{dimColor:!0,bold:!0},u.function),fs.default.createElement(hA.default,{dimColor:!0,color:"gray"}," ","(",u.file,":",u.line,":",u.column,")")):fs.default.createElement(Xf.default,{key:n},fs.default.createElement(hA.default,{dimColor:!0},"- "),fs.default.createElement(hA.default,{dimColor:!0,bold:!0},n))})))};nu.default=bCt});var Bwe=_(iu=>{"use strict";var kCt=iu&&iu.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),QCt=iu&&iu.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),FCt=iu&&iu.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&kCt(e,t,r);return QCt(e,t),e},cm=iu&&iu.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(iu,"__esModule",{value:!0});var lm=FCt(sn()),Iwe=cm(m6()),TCt=cm(cj()),RCt=cm(Aj()),NCt=cm(pj()),LCt=cm(gj()),MCt=cm(oQ()),OCt=cm(wwe()),UCt=" ",_Ct="\x1B[Z",HCt="\x1B",lQ=class extends lm.PureComponent{constructor(){super(...arguments),this.state={isFocusEnabled:!0,activeFocusId:void 0,focusables:[],error:void 0},this.rawModeEnabledCount=0,this.handleSetRawMode=e=>{let{stdin:r}=this.props;if(!this.isRawModeSupported())throw r===process.stdin?new Error(`Raw mode is not supported on the current process.stdin, which Ink uses as input stream by default. +Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`):new Error(`Raw mode is not supported on the stdin provided to Ink. +Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`);if(r.setEncoding("utf8"),e){this.rawModeEnabledCount===0&&(r.addListener("data",this.handleInput),r.resume(),r.setRawMode(!0)),this.rawModeEnabledCount++;return}--this.rawModeEnabledCount===0&&(r.setRawMode(!1),r.removeListener("data",this.handleInput),r.pause())},this.handleInput=e=>{e===""&&this.props.exitOnCtrlC&&this.handleExit(),e===HCt&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(e===UCt&&this.focusNext(),e===_Ct&&this.focusPrevious())},this.handleExit=e=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(e)},this.enableFocus=()=>{this.setState({isFocusEnabled:!0})},this.disableFocus=()=>{this.setState({isFocusEnabled:!1})},this.focusNext=()=>{this.setState(e=>{let r=e.focusables[0].id;return{activeFocusId:this.findNextFocusable(e)||r}})},this.focusPrevious=()=>{this.setState(e=>{let r=e.focusables[e.focusables.length-1].id;return{activeFocusId:this.findPreviousFocusable(e)||r}})},this.addFocusable=(e,{autoFocus:r})=>{this.setState(o=>{let a=o.activeFocusId;return!a&&r&&(a=e),{activeFocusId:a,focusables:[...o.focusables,{id:e,isActive:!0}]}})},this.removeFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.filter(o=>o.id!==e)}))},this.activateFocusable=e=>{this.setState(r=>({focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!0})}))},this.deactivateFocusable=e=>{this.setState(r=>({activeFocusId:r.activeFocusId===e?void 0:r.activeFocusId,focusables:r.focusables.map(o=>o.id!==e?o:{id:e,isActive:!1})}))},this.findNextFocusable=e=>{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r+1;o{let r=e.focusables.findIndex(o=>o.id===e.activeFocusId);for(let o=r-1;o>=0;o--)if(e.focusables[o].isActive)return e.focusables[o].id}}static getDerivedStateFromError(e){return{error:e}}isRawModeSupported(){return this.props.stdin.isTTY}render(){return lm.default.createElement(TCt.default.Provider,{value:{exit:this.handleExit}},lm.default.createElement(RCt.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},lm.default.createElement(NCt.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},lm.default.createElement(LCt.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},lm.default.createElement(MCt.default.Provider,{value:{activeId:this.state.activeFocusId,add:this.addFocusable,remove:this.removeFocusable,activate:this.activateFocusable,deactivate:this.deactivateFocusable,enableFocus:this.enableFocus,disableFocus:this.disableFocus,focusNext:this.focusNext,focusPrevious:this.focusPrevious}},this.state.error?lm.default.createElement(OCt.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){Iwe.default.hide(this.props.stdout)}componentWillUnmount(){Iwe.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(e){this.handleExit(e)}};iu.default=lQ;lQ.displayName="InternalApp"});var Pwe=_(su=>{"use strict";var jCt=su&&su.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),qCt=su&&su.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),GCt=su&&su.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&jCt(e,t,r);return qCt(e,t),e},ou=su&&su.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(su,"__esModule",{value:!0});var YCt=ou(sn()),vwe=uO(),WCt=ou(AEe()),VCt=ou(f6()),KCt=ou(mEe()),JCt=ou(EEe()),wj=ou(fCe()),zCt=ou(zCe()),XCt=ou(d6()),ZCt=ou(ewe()),$Ct=GCt(W6()),ewt=ou(aj()),twt=ou(Bwe()),jC=process.env.CI==="false"?!1:KCt.default,Dwe=()=>{},Ij=class{constructor(e){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;let{output:r,outputHeight:o,staticOutput:a}=zCt.default(this.rootNode,this.options.stdout.columns||80),n=a&&a!==` +`;if(this.options.debug){n&&(this.fullStaticOutput+=a),this.options.stdout.write(this.fullStaticOutput+r);return}if(jC){n&&this.options.stdout.write(a),this.lastOutput=r;return}if(n&&(this.fullStaticOutput+=a),o>=this.options.stdout.rows){this.options.stdout.write(VCt.default.clearTerminal+this.fullStaticOutput+r),this.lastOutput=r;return}n&&(this.log.clear(),this.options.stdout.write(a),this.log(r)),!n&&r!==this.lastOutput&&this.throttledLog(r),this.lastOutput=r},JCt.default(this),this.options=e,this.rootNode=$Ct.createNode("ink-root"),this.rootNode.onRender=e.debug?this.onRender:vwe(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=WCt.default.create(e.stdout),this.throttledLog=e.debug?this.log:vwe(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=wj.default.createContainer(this.rootNode,!1,!1),this.unsubscribeExit=XCt.default(this.unmount,{alwaysLast:!1}),e.patchConsole&&this.patchConsole(),jC||(e.stdout.on("resize",this.onRender),this.unsubscribeResize=()=>{e.stdout.off("resize",this.onRender)})}render(e){let r=YCt.default.createElement(twt.default,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},e);wj.default.updateContainer(r,this.container,null,Dwe)}writeToStdout(e){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(e+this.fullStaticOutput+this.lastOutput);return}if(jC){this.options.stdout.write(e);return}this.log.clear(),this.options.stdout.write(e),this.log(this.lastOutput)}}writeToStderr(e){if(!this.isUnmounted){if(this.options.debug){this.options.stderr.write(e),this.options.stdout.write(this.fullStaticOutput+this.lastOutput);return}if(jC){this.options.stderr.write(e);return}this.log.clear(),this.options.stderr.write(e),this.log(this.lastOutput)}}unmount(e){this.isUnmounted||(this.onRender(),this.unsubscribeExit(),typeof this.restoreConsole=="function"&&this.restoreConsole(),typeof this.unsubscribeResize=="function"&&this.unsubscribeResize(),jC?this.options.stdout.write(this.lastOutput+` +`):this.options.debug||this.log.done(),this.isUnmounted=!0,wj.default.updateContainer(null,this.container,null,Dwe),ewt.default.delete(this.options.stdout),e instanceof Error?this.rejectExitPromise(e):this.resolveExitPromise())}waitUntilExit(){return this.exitPromise||(this.exitPromise=new Promise((e,r)=>{this.resolveExitPromise=e,this.rejectExitPromise=r})),this.exitPromise}clear(){!jC&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=ZCt.default((e,r)=>{e==="stdout"&&this.writeToStdout(r),e==="stderr"&&(r.startsWith("The above error occurred")||this.writeToStderr(r))}))}};su.default=Ij});var xwe=_(DB=>{"use strict";var Swe=DB&&DB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(DB,"__esModule",{value:!0});var rwt=Swe(Pwe()),cQ=Swe(aj()),nwt=Be("stream"),iwt=(t,e)=>{let r=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},swt(e)),o=owt(r.stdout,()=>new rwt.default(r));return o.render(t),{rerender:o.render,unmount:()=>o.unmount(),waitUntilExit:o.waitUntilExit,cleanup:()=>cQ.default.delete(r.stdout),clear:o.clear}};DB.default=iwt;var swt=(t={})=>t instanceof nwt.Stream?{stdout:t,stdin:process.stdin}:t,owt=(t,e)=>{let r;return cQ.default.has(t)?r=cQ.default.get(t):(r=e(),cQ.default.set(t,r)),r}});var kwe=_(Zf=>{"use strict";var awt=Zf&&Zf.__createBinding||(Object.create?function(t,e,r,o){o===void 0&&(o=r),Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[r]}})}:function(t,e,r,o){o===void 0&&(o=r),t[o]=e[r]}),lwt=Zf&&Zf.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),cwt=Zf&&Zf.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(t!=null)for(var r in t)r!=="default"&&Object.hasOwnProperty.call(t,r)&&awt(e,t,r);return lwt(e,t),e};Object.defineProperty(Zf,"__esModule",{value:!0});var PB=cwt(sn()),bwe=t=>{let{items:e,children:r,style:o}=t,[a,n]=PB.useState(0),u=PB.useMemo(()=>e.slice(a),[e,a]);PB.useLayoutEffect(()=>{n(e.length)},[e.length]);let A=u.map((h,E)=>r(h,a+E)),p=PB.useMemo(()=>Object.assign({position:"absolute",flexDirection:"column"},o),[o]);return PB.default.createElement("ink-box",{internal_static:!0,style:p},A)};bwe.displayName="Static";Zf.default=bwe});var Fwe=_(SB=>{"use strict";var uwt=SB&&SB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(SB,"__esModule",{value:!0});var Awt=uwt(sn()),Qwe=({children:t,transform:e})=>t==null?null:Awt.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:e},t);Qwe.displayName="Transform";SB.default=Qwe});var Rwe=_(xB=>{"use strict";var fwt=xB&&xB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(xB,"__esModule",{value:!0});var pwt=fwt(sn()),Twe=({count:t=1})=>pwt.default.createElement("ink-text",null,` +`.repeat(t));Twe.displayName="Newline";xB.default=Twe});var Mwe=_(bB=>{"use strict";var Nwe=bB&&bB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(bB,"__esModule",{value:!0});var hwt=Nwe(sn()),gwt=Nwe(aQ()),Lwe=()=>hwt.default.createElement(gwt.default,{flexGrow:1});Lwe.displayName="Spacer";bB.default=Lwe});var uQ=_(kB=>{"use strict";var dwt=kB&&kB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(kB,"__esModule",{value:!0});var mwt=sn(),ywt=dwt(Aj()),Ewt=()=>mwt.useContext(ywt.default);kB.default=Ewt});var Uwe=_(QB=>{"use strict";var Cwt=QB&&QB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(QB,"__esModule",{value:!0});var Owe=sn(),wwt=Cwt(uQ()),Iwt=(t,e={})=>{let{stdin:r,setRawMode:o,internal_exitOnCtrlC:a}=wwt.default();Owe.useEffect(()=>{if(e.isActive!==!1)return o(!0),()=>{o(!1)}},[e.isActive,o]),Owe.useEffect(()=>{if(e.isActive===!1)return;let n=u=>{let A=String(u),p={upArrow:A==="\x1B[A",downArrow:A==="\x1B[B",leftArrow:A==="\x1B[D",rightArrow:A==="\x1B[C",pageDown:A==="\x1B[6~",pageUp:A==="\x1B[5~",return:A==="\r",escape:A==="\x1B",ctrl:!1,shift:!1,tab:A===" "||A==="\x1B[Z",backspace:A==="\b",delete:A==="\x7F"||A==="\x1B[3~",meta:!1};A<=""&&!p.return&&(A=String.fromCharCode(A.charCodeAt(0)+"a".charCodeAt(0)-1),p.ctrl=!0),A.startsWith("\x1B")&&(A=A.slice(1),p.meta=!0);let h=A>="A"&&A<="Z",E=A>="\u0410"&&A<="\u042F";A.length===1&&(h||E)&&(p.shift=!0),p.tab&&A==="[Z"&&(p.shift=!0),(p.tab||p.backspace||p.delete)&&(A=""),(!(A==="c"&&p.ctrl)||!a)&&t(A,p)};return r?.on("data",n),()=>{r?.off("data",n)}},[e.isActive,r,a,t])};QB.default=Iwt});var _we=_(FB=>{"use strict";var Bwt=FB&&FB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(FB,"__esModule",{value:!0});var vwt=sn(),Dwt=Bwt(cj()),Pwt=()=>vwt.useContext(Dwt.default);FB.default=Pwt});var Hwe=_(TB=>{"use strict";var Swt=TB&&TB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(TB,"__esModule",{value:!0});var xwt=sn(),bwt=Swt(pj()),kwt=()=>xwt.useContext(bwt.default);TB.default=kwt});var jwe=_(RB=>{"use strict";var Qwt=RB&&RB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(RB,"__esModule",{value:!0});var Fwt=sn(),Twt=Qwt(gj()),Rwt=()=>Fwt.useContext(Twt.default);RB.default=Rwt});var Gwe=_(LB=>{"use strict";var qwe=LB&&LB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(LB,"__esModule",{value:!0});var NB=sn(),Nwt=qwe(oQ()),Lwt=qwe(uQ()),Mwt=({isActive:t=!0,autoFocus:e=!1}={})=>{let{isRawModeSupported:r,setRawMode:o}=Lwt.default(),{activeId:a,add:n,remove:u,activate:A,deactivate:p}=NB.useContext(Nwt.default),h=NB.useMemo(()=>Math.random().toString().slice(2,7),[]);return NB.useEffect(()=>(n(h,{autoFocus:e}),()=>{u(h)}),[h,e]),NB.useEffect(()=>{t?A(h):p(h)},[t,h]),NB.useEffect(()=>{if(!(!r||!t))return o(!0),()=>{o(!1)}},[t]),{isFocused:Boolean(h)&&a===h}};LB.default=Mwt});var Ywe=_(MB=>{"use strict";var Owt=MB&&MB.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(MB,"__esModule",{value:!0});var Uwt=sn(),_wt=Owt(oQ()),Hwt=()=>{let t=Uwt.useContext(_wt.default);return{enableFocus:t.enableFocus,disableFocus:t.disableFocus,focusNext:t.focusNext,focusPrevious:t.focusPrevious}};MB.default=Hwt});var Wwe=_(Bj=>{"use strict";Object.defineProperty(Bj,"__esModule",{value:!0});Bj.default=t=>{var e,r,o,a;return{width:(r=(e=t.yogaNode)===null||e===void 0?void 0:e.getComputedWidth())!==null&&r!==void 0?r:0,height:(a=(o=t.yogaNode)===null||o===void 0?void 0:o.getComputedHeight())!==null&&a!==void 0?a:0}}});var ic=_(ro=>{"use strict";Object.defineProperty(ro,"__esModule",{value:!0});var jwt=xwe();Object.defineProperty(ro,"render",{enumerable:!0,get:function(){return jwt.default}});var qwt=aQ();Object.defineProperty(ro,"Box",{enumerable:!0,get:function(){return qwt.default}});var Gwt=Cj();Object.defineProperty(ro,"Text",{enumerable:!0,get:function(){return Gwt.default}});var Ywt=kwe();Object.defineProperty(ro,"Static",{enumerable:!0,get:function(){return Ywt.default}});var Wwt=Fwe();Object.defineProperty(ro,"Transform",{enumerable:!0,get:function(){return Wwt.default}});var Vwt=Rwe();Object.defineProperty(ro,"Newline",{enumerable:!0,get:function(){return Vwt.default}});var Kwt=Mwe();Object.defineProperty(ro,"Spacer",{enumerable:!0,get:function(){return Kwt.default}});var Jwt=Uwe();Object.defineProperty(ro,"useInput",{enumerable:!0,get:function(){return Jwt.default}});var zwt=_we();Object.defineProperty(ro,"useApp",{enumerable:!0,get:function(){return zwt.default}});var Xwt=uQ();Object.defineProperty(ro,"useStdin",{enumerable:!0,get:function(){return Xwt.default}});var Zwt=Hwe();Object.defineProperty(ro,"useStdout",{enumerable:!0,get:function(){return Zwt.default}});var $wt=jwe();Object.defineProperty(ro,"useStderr",{enumerable:!0,get:function(){return $wt.default}});var eIt=Gwe();Object.defineProperty(ro,"useFocus",{enumerable:!0,get:function(){return eIt.default}});var tIt=Ywe();Object.defineProperty(ro,"useFocusManager",{enumerable:!0,get:function(){return tIt.default}});var rIt=Wwe();Object.defineProperty(ro,"measureElement",{enumerable:!0,get:function(){return rIt.default}})});var Dj={};Kt(Dj,{Gem:()=>vj});var Vwe,um,vj,AQ=Et(()=>{Vwe=$e(ic()),um=$e(sn()),vj=(0,um.memo)(({active:t})=>{let e=(0,um.useMemo)(()=>t?"\u25C9":"\u25EF",[t]),r=(0,um.useMemo)(()=>t?"green":"yellow",[t]);return um.default.createElement(Vwe.Text,{color:r},e)})});var Jwe={};Kt(Jwe,{useKeypress:()=>Am});function Am({active:t},e,r){let{stdin:o}=(0,Kwe.useStdin)(),a=(0,fQ.useCallback)((n,u)=>e(n,u),r);(0,fQ.useEffect)(()=>{if(!(!t||!o))return o.on("keypress",a),()=>{o.off("keypress",a)}},[t,a,o])}var Kwe,fQ,OB=Et(()=>{Kwe=$e(ic()),fQ=$e(sn())});var Xwe={};Kt(Xwe,{FocusRequest:()=>zwe,useFocusRequest:()=>Pj});var zwe,Pj,Sj=Et(()=>{OB();zwe=(r=>(r.BEFORE="before",r.AFTER="after",r))(zwe||{}),Pj=function({active:t},e,r){Am({active:t},(o,a)=>{a.name==="tab"&&(a.shift?e("before"):e("after"))},r)}});var Zwe={};Kt(Zwe,{useListInput:()=>UB});var UB,pQ=Et(()=>{OB();UB=function(t,e,{active:r,minus:o,plus:a,set:n,loop:u=!0}){Am({active:r},(A,p)=>{let h=e.indexOf(t);switch(p.name){case o:{let E=h-1;if(u){n(e[(e.length+E)%e.length]);return}if(E<0)return;n(e[E])}break;case a:{let E=h+1;if(u){n(e[E%e.length]);return}if(E>=e.length)return;n(e[E])}break}},[e,t,a,n,u])}});var hQ={};Kt(hQ,{ScrollableItems:()=>nIt});var E0,La,nIt,gQ=Et(()=>{E0=$e(ic()),La=$e(sn());Sj();pQ();nIt=({active:t=!0,children:e=[],radius:r=10,size:o=1,loop:a=!0,onFocusRequest:n,willReachEnd:u})=>{let A=L=>{if(L.key===null)throw new Error("Expected all children to have a key");return L.key},p=La.default.Children.map(e,L=>A(L)),h=p[0],[E,I]=(0,La.useState)(h),v=p.indexOf(E);(0,La.useEffect)(()=>{p.includes(E)||I(h)},[e]),(0,La.useEffect)(()=>{u&&v>=p.length-2&&u()},[v]),Pj({active:t&&!!n},L=>{n?.(L)},[n]),UB(E,p,{active:t,minus:"up",plus:"down",set:I,loop:a});let b=v-r,C=v+r;C>p.length&&(b-=C-p.length,C=p.length),b<0&&(C+=-b,b=0),C>=p.length&&(C=p.length-1);let T=[];for(let L=b;L<=C;++L){let U=p[L],J=t&&U===E;T.push(La.default.createElement(E0.Box,{key:U,height:o},La.default.createElement(E0.Box,{marginLeft:1,marginRight:1},La.default.createElement(E0.Text,null,J?La.default.createElement(E0.Text,{color:"cyan",bold:!0},">"):" ")),La.default.createElement(E0.Box,null,La.default.cloneElement(e[L],{active:J}))))}return La.default.createElement(E0.Box,{flexDirection:"column",width:"100%"},T)}});var $we,$f,eIe,xj,tIe,bj=Et(()=>{$we=$e(ic()),$f=$e(sn()),eIe=Be("readline"),xj=$f.default.createContext(null),tIe=({children:t})=>{let{stdin:e,setRawMode:r}=(0,$we.useStdin)();(0,$f.useEffect)(()=>{r&&r(!0),e&&(0,eIe.emitKeypressEvents)(e)},[e,r]);let[o,a]=(0,$f.useState)(new Map),n=(0,$f.useMemo)(()=>({getAll:()=>o,get:u=>o.get(u),set:(u,A)=>a(new Map([...o,[u,A]]))}),[o,a]);return $f.default.createElement(xj.Provider,{value:n,children:t})}});var kj={};Kt(kj,{useMinistore:()=>iIt});function iIt(t,e){let r=(0,dQ.useContext)(xj);if(r===null)throw new Error("Expected this hook to run with a ministore context attached");if(typeof t>"u")return r.getAll();let o=(0,dQ.useCallback)(n=>{r.set(t,n)},[t,r.set]),a=r.get(t);return typeof a>"u"&&(a=e),[a,o]}var dQ,Qj=Et(()=>{dQ=$e(sn());bj()});var yQ={};Kt(yQ,{renderForm:()=>sIt});async function sIt(t,e,{stdin:r,stdout:o,stderr:a}){let n,u=p=>{let{exit:h}=(0,mQ.useApp)();Am({active:!0},(E,I)=>{I.name==="return"&&(n=p,h())},[h,p])},{waitUntilExit:A}=(0,mQ.render)(Fj.default.createElement(tIe,null,Fj.default.createElement(t,{...e,useSubmit:u})),{stdin:r,stdout:o,stderr:a});return await A(),n}var mQ,Fj,EQ=Et(()=>{mQ=$e(ic()),Fj=$e(sn());bj();OB()});var sIe=_(_B=>{"use strict";Object.defineProperty(_B,"__esModule",{value:!0});_B.UncontrolledTextInput=void 0;var nIe=sn(),Tj=sn(),rIe=ic(),fm=iQ(),iIe=({value:t,placeholder:e="",focus:r=!0,mask:o,highlightPastedText:a=!1,showCursor:n=!0,onChange:u,onSubmit:A})=>{let[{cursorOffset:p,cursorWidth:h},E]=Tj.useState({cursorOffset:(t||"").length,cursorWidth:0});Tj.useEffect(()=>{E(T=>{if(!r||!n)return T;let L=t||"";return T.cursorOffset>L.length-1?{cursorOffset:L.length,cursorWidth:0}:T})},[t,r,n]);let I=a?h:0,v=o?o.repeat(t.length):t,b=v,C=e?fm.grey(e):void 0;if(n&&r){C=e.length>0?fm.inverse(e[0])+fm.grey(e.slice(1)):fm.inverse(" "),b=v.length>0?"":fm.inverse(" ");let T=0;for(let L of v)T>=p-I&&T<=p?b+=fm.inverse(L):b+=L,T++;v.length>0&&p===v.length&&(b+=fm.inverse(" "))}return rIe.useInput((T,L)=>{if(L.upArrow||L.downArrow||L.ctrl&&T==="c"||L.tab||L.shift&&L.tab)return;if(L.return){A&&A(t);return}let U=p,J=t,te=0;L.leftArrow?n&&U--:L.rightArrow?n&&U++:L.backspace||L.delete?p>0&&(J=t.slice(0,p-1)+t.slice(p,t.length),U--):(J=t.slice(0,p)+T+t.slice(p,t.length),U+=T.length,T.length>1&&(te=T.length)),p<0&&(U=0),p>t.length&&(U=t.length),E({cursorOffset:U,cursorWidth:te}),J!==t&&u(J)},{isActive:r}),nIe.createElement(rIe.Text,null,e?v.length>0?b:C:b)};_B.default=iIe;_B.UncontrolledTextInput=t=>{let[e,r]=Tj.useState("");return nIe.createElement(iIe,Object.assign({},t,{value:e,onChange:r}))}});var lIe={};Kt(lIe,{Pad:()=>Rj});var oIe,aIe,Rj,Nj=Et(()=>{oIe=$e(ic()),aIe=$e(sn()),Rj=({length:t,active:e})=>{if(t===0)return null;let r=t>1?` ${"-".repeat(t-1)}`:" ";return aIe.default.createElement(oIe.Text,{dimColor:!e},r)}});var cIe={};Kt(cIe,{ItemOptions:()=>oIt});var jB,w0,oIt,uIe=Et(()=>{jB=$e(ic()),w0=$e(sn());pQ();AQ();Nj();oIt=function({active:t,skewer:e,options:r,value:o,onChange:a,sizes:n=[]}){let u=r.filter(({label:p})=>!!p).map(({value:p})=>p),A=r.findIndex(p=>p.value===o&&p.label!="");return UB(o,u,{active:t,minus:"left",plus:"right",set:a}),w0.default.createElement(w0.default.Fragment,null,r.map(({label:p},h)=>{let E=h===A,I=n[h]-1||0,v=p.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),b=Math.max(0,I-v.length-2);return p?w0.default.createElement(jB.Box,{key:p,width:I,marginLeft:1},w0.default.createElement(jB.Text,{wrap:"truncate"},w0.default.createElement(vj,{active:E})," ",p),e?w0.default.createElement(Rj,{active:t,length:b}):null):w0.default.createElement(jB.Box,{key:`spacer-${h}`,width:I,marginLeft:1})}))}});var PIe=_((zJt,DIe)=>{var Gj;DIe.exports=()=>(typeof Gj>"u"&&(Gj=Be("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),Gj)});var VIe=_((wzt,WIe)=>{var $j=Symbol("arg flag"),Ma=class extends Error{constructor(e,r){super(e),this.name="ArgError",this.code=r,Object.setPrototypeOf(this,Ma.prototype)}};function iv(t,{argv:e=process.argv.slice(2),permissive:r=!1,stopAtPositional:o=!1}={}){if(!t)throw new Ma("argument specification object is required","ARG_CONFIG_NO_SPEC");let a={_:[]},n={},u={};for(let A of Object.keys(t)){if(!A)throw new Ma("argument key cannot be an empty string","ARG_CONFIG_EMPTY_KEY");if(A[0]!=="-")throw new Ma(`argument key must start with '-' but found: '${A}'`,"ARG_CONFIG_NONOPT_KEY");if(A.length===1)throw new Ma(`argument key must have a name; singular '-' keys are not allowed: ${A}`,"ARG_CONFIG_NONAME_KEY");if(typeof t[A]=="string"){n[A]=t[A];continue}let p=t[A],h=!1;if(Array.isArray(p)&&p.length===1&&typeof p[0]=="function"){let[E]=p;p=(I,v,b=[])=>(b.push(E(I,v,b[b.length-1])),b),h=E===Boolean||E[$j]===!0}else if(typeof p=="function")h=p===Boolean||p[$j]===!0;else throw new Ma(`type missing or not a function or valid array type: ${A}`,"ARG_CONFIG_VAD_TYPE");if(A[1]!=="-"&&A.length>2)throw new Ma(`short argument keys (with a single hyphen) must have only one character: ${A}`,"ARG_CONFIG_SHORTOPT_TOOLONG");u[A]=[p,h]}for(let A=0,p=e.length;A0){a._=a._.concat(e.slice(A));break}if(h==="--"){a._=a._.concat(e.slice(A+1));break}if(h.length>1&&h[0]==="-"){let E=h[1]==="-"||h.length===2?[h]:h.slice(1).split("").map(I=>`-${I}`);for(let I=0;I1&&e[A+1][0]==="-"&&!(e[A+1].match(/^-?\d*(\.(?=\d))?\d*$/)&&(L===Number||typeof BigInt<"u"&&L===BigInt))){let J=b===T?"":` (alias for ${T})`;throw new Ma(`option requires argument: ${b}${J}`,"ARG_MISSING_REQUIRED_LONGARG")}a[T]=L(e[A+1],T,a[T]),++A}else a[T]=L(C,T,a[T])}}else a._.push(h)}return a}iv.flag=t=>(t[$j]=!0,t);iv.COUNT=iv.flag((t,e,r)=>(r||0)+1);iv.ArgError=Ma;WIe.exports=iv});var t1e=_((Kzt,e1e)=>{var nq;e1e.exports=()=>(typeof nq>"u"&&(nq=Be("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),nq)});var o1e=_((cq,uq)=>{(function(t){cq&&typeof cq=="object"&&typeof uq<"u"?uq.exports=t():typeof define=="function"&&define.amd?define([],t):typeof window<"u"?window.isWindows=t():typeof global<"u"?global.isWindows=t():typeof self<"u"?self.isWindows=t():this.isWindows=t()})(function(){"use strict";return function(){return process&&(process.platform==="win32"||/^(msys|cygwin)$/.test(process.env.OSTYPE))}})});var u1e=_((WXt,c1e)=>{"use strict";Aq.ifExists=n1t;var GC=Be("util"),sc=Be("path"),a1e=o1e(),e1t=/^#!\s*(?:\/usr\/bin\/env)?\s*([^ \t]+)(.*)$/,t1t={createPwshFile:!0,createCmdFile:a1e(),fs:Be("fs")},r1t=new Map([[".js","node"],[".cjs","node"],[".mjs","node"],[".cmd","cmd"],[".bat","cmd"],[".ps1","pwsh"],[".sh","sh"]]);function l1e(t){let e={...t1t,...t},r=e.fs;return e.fs_={chmod:r.chmod?GC.promisify(r.chmod):async()=>{},mkdir:GC.promisify(r.mkdir),readFile:GC.promisify(r.readFile),stat:GC.promisify(r.stat),unlink:GC.promisify(r.unlink),writeFile:GC.promisify(r.writeFile)},e}async function Aq(t,e,r){let o=l1e(r);await o.fs_.stat(t),await s1t(t,e,o)}function n1t(t,e,r){return Aq(t,e,r).catch(()=>{})}function i1t(t,e){return e.fs_.unlink(t).catch(()=>{})}async function s1t(t,e,r){let o=await u1t(t,r);return await o1t(e,r),a1t(t,e,o,r)}function o1t(t,e){return e.fs_.mkdir(sc.dirname(t),{recursive:!0})}function a1t(t,e,r,o){let a=l1e(o),n=[{generator:p1t,extension:""}];return a.createCmdFile&&n.push({generator:f1t,extension:".cmd"}),a.createPwshFile&&n.push({generator:h1t,extension:".ps1"}),Promise.all(n.map(u=>A1t(t,e+u.extension,r,u.generator,a)))}function l1t(t,e){return i1t(t,e)}function c1t(t,e){return g1t(t,e)}async function u1t(t,e){let a=(await e.fs_.readFile(t,"utf8")).trim().split(/\r*\n/)[0].match(e1t);if(!a){let n=sc.extname(t).toLowerCase();return{program:r1t.get(n)||null,additionalArgs:""}}return{program:a[1],additionalArgs:a[2]}}async function A1t(t,e,r,o,a){let n=a.preserveSymlinks?"--preserve-symlinks":"",u=[r.additionalArgs,n].filter(A=>A).join(" ");return a=Object.assign({},a,{prog:r.program,args:u}),await l1t(e,a),await a.fs_.writeFile(e,o(t,e,a),"utf8"),c1t(e,a)}function f1t(t,e,r){let a=sc.relative(sc.dirname(e),t).split("/").join("\\"),n=sc.isAbsolute(a)?`"${a}"`:`"%~dp0\\${a}"`,u,A=r.prog,p=r.args||"",h=fq(r.nodePath).win32;A?(u=`"%~dp0\\${A}.exe"`,a=n):(A=n,p="",a="");let E=r.progArgs?`${r.progArgs.join(" ")} `:"",I=h?`@SET NODE_PATH=${h}\r +`:"";return u?I+=`@IF EXIST ${u} (\r + ${u} ${p} ${a} ${E}%*\r +) ELSE (\r + @SETLOCAL\r + @SET PATHEXT=%PATHEXT:;.JS;=;%\r + ${A} ${p} ${a} ${E}%*\r +)\r +`:I+=`@${A} ${p} ${a} ${E}%*\r +`,I}function p1t(t,e,r){let o=sc.relative(sc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n;o=o.split("\\").join("/");let u=sc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,A=r.args||"",p=fq(r.nodePath).posix;a?(n=`"$basedir/${r.prog}"`,o=u):(a=u,A="",o="");let h=r.progArgs?`${r.progArgs.join(" ")} `:"",E=`#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\\\,/,g')") + +case \`uname\` in + *CYGWIN*) basedir=\`cygpath -w "$basedir"\`;; +esac + +`,I=r.nodePath?`export NODE_PATH="${p}" +`:"";return n?E+=`${I}if [ -x ${n} ]; then + exec ${n} ${A} ${o} ${h}"$@" +else + exec ${a} ${A} ${o} ${h}"$@" +fi +`:E+=`${I}${a} ${A} ${o} ${h}"$@" +exit $? +`,E}function h1t(t,e,r){let o=sc.relative(sc.dirname(e),t),a=r.prog&&r.prog.split("\\").join("/"),n=a&&`"${a}$exe"`,u;o=o.split("\\").join("/");let A=sc.isAbsolute(o)?`"${o}"`:`"$basedir/${o}"`,p=r.args||"",h=fq(r.nodePath),E=h.win32,I=h.posix;n?(u=`"$basedir/${r.prog}$exe"`,o=A):(n=A,p="",o="");let v=r.progArgs?`${r.progArgs.join(" ")} `:"",b=`#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +${r.nodePath?`$env_node_path=$env:NODE_PATH +$env:NODE_PATH="${E}" +`:""}if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +}`;return r.nodePath&&(b+=` else { + $env:NODE_PATH="${I}" +}`),u?b+=` +$ret=0 +if (Test-Path ${u}) { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & ${u} ${p} ${o} ${v}$args + } else { + & ${u} ${p} ${o} ${v}$args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & ${n} ${p} ${o} ${v}$args + } else { + & ${n} ${p} ${o} ${v}$args + } + $ret=$LASTEXITCODE +} +${r.nodePath?`$env:NODE_PATH=$env_node_path +`:""}exit $ret +`:b+=` +# Support pipeline input +if ($MyInvocation.ExpectingInput) { + $input | & ${n} ${p} ${o} ${v}$args +} else { + & ${n} ${p} ${o} ${v}$args +} +${r.nodePath?`$env:NODE_PATH=$env_node_path +`:""}exit $LASTEXITCODE +`,b}function g1t(t,e){return e.fs_.chmod(t,493)}function fq(t){if(!t)return{win32:"",posix:""};let e=typeof t=="string"?t.split(sc.delimiter):Array.from(t),r={};for(let o=0;o`/mnt/${A.toLowerCase()}`):e[o];r.win32=r.win32?`${r.win32};${a}`:a,r.posix=r.posix?`${r.posix}:${n}`:n,r[o]={win32:a,posix:n}}return r}c1e.exports=Aq});var Sq=_((h$t,F1e)=>{F1e.exports=Be("stream")});var L1e=_((g$t,N1e)=>{"use strict";function T1e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function U1t(t){for(var e=1;e0?this.tail.next=o:this.head=o,this.tail=o,++this.length}},{key:"unshift",value:function(r){var o={data:r,next:this.head};this.length===0&&(this.tail=o),this.head=o,++this.length}},{key:"shift",value:function(){if(this.length!==0){var r=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,r}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(r){if(this.length===0)return"";for(var o=this.head,a=""+o.data;o=o.next;)a+=r+o.data;return a}},{key:"concat",value:function(r){if(this.length===0)return QQ.alloc(0);for(var o=QQ.allocUnsafe(r>>>0),a=this.head,n=0;a;)W1t(a.data,o,n),n+=a.data.length,a=a.next;return o}},{key:"consume",value:function(r,o){var a;return ru.length?u.length:r;if(A===u.length?n+=u:n+=u.slice(0,r),r-=A,r===0){A===u.length?(++a,o.next?this.head=o.next:this.head=this.tail=null):(this.head=o,o.data=u.slice(A));break}++a}return this.length-=a,n}},{key:"_getBuffer",value:function(r){var o=QQ.allocUnsafe(r),a=this.head,n=1;for(a.data.copy(o),r-=a.data.length;a=a.next;){var u=a.data,A=r>u.length?u.length:r;if(u.copy(o,o.length-r,0,A),r-=A,r===0){A===u.length?(++n,a.next?this.head=a.next:this.head=this.tail=null):(this.head=a,a.data=u.slice(A));break}++n}return this.length-=n,o}},{key:Y1t,value:function(r,o){return xq(this,U1t({},o,{depth:0,customInspect:!1}))}}]),t}()});var kq=_((d$t,O1e)=>{"use strict";function V1t(t,e){var r=this,o=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return o||a?(e?e(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,process.nextTick(bq,this,t)):process.nextTick(bq,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,function(n){!e&&n?r._writableState?r._writableState.errorEmitted?process.nextTick(FQ,r):(r._writableState.errorEmitted=!0,process.nextTick(M1e,r,n)):process.nextTick(M1e,r,n):e?(process.nextTick(FQ,r),e(n)):process.nextTick(FQ,r)}),this)}function M1e(t,e){bq(t,e),FQ(t)}function FQ(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit("close")}function K1t(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function bq(t,e){t.emit("error",e)}function J1t(t,e){var r=t._readableState,o=t._writableState;r&&r.autoDestroy||o&&o.autoDestroy?t.destroy(e):t.emit("error",e)}O1e.exports={destroy:V1t,undestroy:K1t,errorOrDestroy:J1t}});var k0=_((m$t,H1e)=>{"use strict";var _1e={};function ac(t,e,r){r||(r=Error);function o(n,u,A){return typeof e=="string"?e:e(n,u,A)}class a extends r{constructor(u,A,p){super(o(u,A,p))}}a.prototype.name=r.name,a.prototype.code=t,_1e[t]=a}function U1e(t,e){if(Array.isArray(t)){let r=t.length;return t=t.map(o=>String(o)),r>2?`one of ${e} ${t.slice(0,r-1).join(", ")}, or `+t[r-1]:r===2?`one of ${e} ${t[0]} or ${t[1]}`:`of ${e} ${t[0]}`}else return`of ${e} ${String(t)}`}function z1t(t,e,r){return t.substr(!r||r<0?0:+r,e.length)===e}function X1t(t,e,r){return(r===void 0||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e}function Z1t(t,e,r){return typeof r!="number"&&(r=0),r+e.length>t.length?!1:t.indexOf(e,r)!==-1}ac("ERR_INVALID_OPT_VALUE",function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"'},TypeError);ac("ERR_INVALID_ARG_TYPE",function(t,e,r){let o;typeof e=="string"&&z1t(e,"not ")?(o="must not be",e=e.replace(/^not /,"")):o="must be";let a;if(X1t(t," argument"))a=`The ${t} ${o} ${U1e(e,"type")}`;else{let n=Z1t(t,".")?"property":"argument";a=`The "${t}" ${n} ${o} ${U1e(e,"type")}`}return a+=`. Received type ${typeof r}`,a},TypeError);ac("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF");ac("ERR_METHOD_NOT_IMPLEMENTED",function(t){return"The "+t+" method is not implemented"});ac("ERR_STREAM_PREMATURE_CLOSE","Premature close");ac("ERR_STREAM_DESTROYED",function(t){return"Cannot call "+t+" after a stream was destroyed"});ac("ERR_MULTIPLE_CALLBACK","Callback called multiple times");ac("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable");ac("ERR_STREAM_WRITE_AFTER_END","write after end");ac("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError);ac("ERR_UNKNOWN_ENCODING",function(t){return"Unknown encoding: "+t},TypeError);ac("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event");H1e.exports.codes=_1e});var Qq=_((y$t,j1e)=>{"use strict";var $1t=k0().codes.ERR_INVALID_OPT_VALUE;function e2t(t,e,r){return t.highWaterMark!=null?t.highWaterMark:e?t[r]:null}function t2t(t,e,r,o){var a=e2t(e,o,r);if(a!=null){if(!(isFinite(a)&&Math.floor(a)===a)||a<0){var n=o?r:"highWaterMark";throw new $1t(n,a)}return Math.floor(a)}return t.objectMode?16:16*1024}j1e.exports={getHighWaterMark:t2t}});var q1e=_((E$t,Fq)=>{typeof Object.create=="function"?Fq.exports=function(e,r){r&&(e.super_=r,e.prototype=Object.create(r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:Fq.exports=function(e,r){if(r){e.super_=r;var o=function(){};o.prototype=r.prototype,e.prototype=new o,e.prototype.constructor=e}}});var Q0=_((C$t,Rq)=>{try{if(Tq=Be("util"),typeof Tq.inherits!="function")throw"";Rq.exports=Tq.inherits}catch{Rq.exports=q1e()}var Tq});var Y1e=_((w$t,G1e)=>{G1e.exports=Be("util").deprecate});var Mq=_((I$t,X1e)=>{"use strict";X1e.exports=Ti;function V1e(t){var e=this;this.next=null,this.entry=null,this.finish=function(){x2t(e,t)}}var JC;Ti.WritableState=mv;var r2t={deprecate:Y1e()},K1e=Sq(),RQ=Be("buffer").Buffer,n2t=global.Uint8Array||function(){};function i2t(t){return RQ.from(t)}function s2t(t){return RQ.isBuffer(t)||t instanceof n2t}var Lq=kq(),o2t=Qq(),a2t=o2t.getHighWaterMark,F0=k0().codes,l2t=F0.ERR_INVALID_ARG_TYPE,c2t=F0.ERR_METHOD_NOT_IMPLEMENTED,u2t=F0.ERR_MULTIPLE_CALLBACK,A2t=F0.ERR_STREAM_CANNOT_PIPE,f2t=F0.ERR_STREAM_DESTROYED,p2t=F0.ERR_STREAM_NULL_VALUES,h2t=F0.ERR_STREAM_WRITE_AFTER_END,g2t=F0.ERR_UNKNOWN_ENCODING,zC=Lq.errorOrDestroy;Q0()(Ti,K1e);function d2t(){}function mv(t,e,r){JC=JC||Em(),t=t||{},typeof r!="boolean"&&(r=e instanceof JC),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.writableObjectMode),this.highWaterMark=a2t(this,t,"writableHighWaterMark",r),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var o=t.decodeStrings===!1;this.decodeStrings=!o,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(a){B2t(e,a)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new V1e(this)}mv.prototype.getBuffer=function(){for(var e=this.bufferedRequest,r=[];e;)r.push(e),e=e.next;return r};(function(){try{Object.defineProperty(mv.prototype,"buffer",{get:r2t.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}})();var TQ;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(TQ=Function.prototype[Symbol.hasInstance],Object.defineProperty(Ti,Symbol.hasInstance,{value:function(e){return TQ.call(this,e)?!0:this!==Ti?!1:e&&e._writableState instanceof mv}})):TQ=function(e){return e instanceof this};function Ti(t){JC=JC||Em();var e=this instanceof JC;if(!e&&!TQ.call(Ti,this))return new Ti(t);this._writableState=new mv(t,this,e),this.writable=!0,t&&(typeof t.write=="function"&&(this._write=t.write),typeof t.writev=="function"&&(this._writev=t.writev),typeof t.destroy=="function"&&(this._destroy=t.destroy),typeof t.final=="function"&&(this._final=t.final)),K1e.call(this)}Ti.prototype.pipe=function(){zC(this,new A2t)};function m2t(t,e){var r=new h2t;zC(t,r),process.nextTick(e,r)}function y2t(t,e,r,o){var a;return r===null?a=new p2t:typeof r!="string"&&!e.objectMode&&(a=new l2t("chunk",["string","Buffer"],r)),a?(zC(t,a),process.nextTick(o,a),!1):!0}Ti.prototype.write=function(t,e,r){var o=this._writableState,a=!1,n=!o.objectMode&&s2t(t);return n&&!RQ.isBuffer(t)&&(t=i2t(t)),typeof e=="function"&&(r=e,e=null),n?e="buffer":e||(e=o.defaultEncoding),typeof r!="function"&&(r=d2t),o.ending?m2t(this,r):(n||y2t(this,o,t,r))&&(o.pendingcb++,a=C2t(this,o,n,t,e,r)),a};Ti.prototype.cork=function(){this._writableState.corked++};Ti.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,!t.writing&&!t.corked&&!t.bufferProcessing&&t.bufferedRequest&&J1e(this,t))};Ti.prototype.setDefaultEncoding=function(e){if(typeof e=="string"&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new g2t(e);return this._writableState.defaultEncoding=e,this};Object.defineProperty(Ti.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function E2t(t,e,r){return!t.objectMode&&t.decodeStrings!==!1&&typeof e=="string"&&(e=RQ.from(e,r)),e}Object.defineProperty(Ti.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function C2t(t,e,r,o,a,n){if(!r){var u=E2t(e,o,a);o!==u&&(r=!0,a="buffer",o=u)}var A=e.objectMode?1:o.length;e.length+=A;var p=e.length{"use strict";var b2t=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e};$1e.exports=yA;var Z1e=_q(),Uq=Mq();Q0()(yA,Z1e);for(Oq=b2t(Uq.prototype),NQ=0;NQ{var MQ=Be("buffer"),np=MQ.Buffer;function e2e(t,e){for(var r in t)e[r]=t[r]}np.from&&np.alloc&&np.allocUnsafe&&np.allocUnsafeSlow?t2e.exports=MQ:(e2e(MQ,Hq),Hq.Buffer=XC);function XC(t,e,r){return np(t,e,r)}e2e(np,XC);XC.from=function(t,e,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return np(t,e,r)};XC.alloc=function(t,e,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var o=np(t);return e!==void 0?typeof r=="string"?o.fill(e,r):o.fill(e):o.fill(0),o};XC.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return np(t)};XC.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return MQ.SlowBuffer(t)}});var Gq=_(i2e=>{"use strict";var qq=r2e().Buffer,n2e=qq.isEncoding||function(t){switch(t=""+t,t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function F2t(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}function T2t(t){var e=F2t(t);if(typeof e!="string"&&(qq.isEncoding===n2e||!n2e(t)))throw new Error("Unknown encoding: "+t);return e||t}i2e.StringDecoder=yv;function yv(t){this.encoding=T2t(t);var e;switch(this.encoding){case"utf16le":this.text=U2t,this.end=_2t,e=4;break;case"utf8":this.fillLast=L2t,e=4;break;case"base64":this.text=H2t,this.end=j2t,e=3;break;default:this.write=q2t,this.end=G2t;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=qq.allocUnsafe(e)}yv.prototype.write=function(t){if(t.length===0)return"";var e,r;if(this.lastNeed){if(e=this.fillLast(t),e===void 0)return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r>5===6?2:t>>4===14?3:t>>3===30?4:t>>6===2?-1:-2}function R2t(t,e,r){var o=e.length-1;if(o=0?(a>0&&(t.lastNeed=a-1),a):--o=0?(a>0&&(t.lastNeed=a-2),a):--o=0?(a>0&&(a===2?a=0:t.lastNeed=a-3),a):0))}function N2t(t,e,r){if((e[0]&192)!==128)return t.lastNeed=0,"\uFFFD";if(t.lastNeed>1&&e.length>1){if((e[1]&192)!==128)return t.lastNeed=1,"\uFFFD";if(t.lastNeed>2&&e.length>2&&(e[2]&192)!==128)return t.lastNeed=2,"\uFFFD"}}function L2t(t){var e=this.lastTotal-this.lastNeed,r=N2t(this,t,e);if(r!==void 0)return r;if(this.lastNeed<=t.length)return t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,e,0,t.length),this.lastNeed-=t.length}function M2t(t,e){var r=R2t(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var o=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,o),t.toString("utf8",e,o)}function O2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"\uFFFD":e}function U2t(t,e){if((t.length-e)%2===0){var r=t.toString("utf16le",e);if(r){var o=r.charCodeAt(r.length-1);if(o>=55296&&o<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function _2t(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function H2t(t,e){var r=(t.length-e)%3;return r===0?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,r===1?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function j2t(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function q2t(t){return t.toString(this.encoding)}function G2t(t){return t&&t.length?this.write(t):""}});var OQ=_((D$t,a2e)=>{"use strict";var s2e=k0().codes.ERR_STREAM_PREMATURE_CLOSE;function Y2t(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,o=new Array(r),a=0;a{"use strict";var UQ;function T0(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var K2t=OQ(),R0=Symbol("lastResolve"),Cm=Symbol("lastReject"),Ev=Symbol("error"),_Q=Symbol("ended"),wm=Symbol("lastPromise"),Yq=Symbol("handlePromise"),Im=Symbol("stream");function N0(t,e){return{value:t,done:e}}function J2t(t){var e=t[R0];if(e!==null){var r=t[Im].read();r!==null&&(t[wm]=null,t[R0]=null,t[Cm]=null,e(N0(r,!1)))}}function z2t(t){process.nextTick(J2t,t)}function X2t(t,e){return function(r,o){t.then(function(){if(e[_Q]){r(N0(void 0,!0));return}e[Yq](r,o)},o)}}var Z2t=Object.getPrototypeOf(function(){}),$2t=Object.setPrototypeOf((UQ={get stream(){return this[Im]},next:function(){var e=this,r=this[Ev];if(r!==null)return Promise.reject(r);if(this[_Q])return Promise.resolve(N0(void 0,!0));if(this[Im].destroyed)return new Promise(function(u,A){process.nextTick(function(){e[Ev]?A(e[Ev]):u(N0(void 0,!0))})});var o=this[wm],a;if(o)a=new Promise(X2t(o,this));else{var n=this[Im].read();if(n!==null)return Promise.resolve(N0(n,!1));a=new Promise(this[Yq])}return this[wm]=a,a}},T0(UQ,Symbol.asyncIterator,function(){return this}),T0(UQ,"return",function(){var e=this;return new Promise(function(r,o){e[Im].destroy(null,function(a){if(a){o(a);return}r(N0(void 0,!0))})})}),UQ),Z2t),eBt=function(e){var r,o=Object.create($2t,(r={},T0(r,Im,{value:e,writable:!0}),T0(r,R0,{value:null,writable:!0}),T0(r,Cm,{value:null,writable:!0}),T0(r,Ev,{value:null,writable:!0}),T0(r,_Q,{value:e._readableState.endEmitted,writable:!0}),T0(r,Yq,{value:function(n,u){var A=o[Im].read();A?(o[wm]=null,o[R0]=null,o[Cm]=null,n(N0(A,!1))):(o[R0]=n,o[Cm]=u)},writable:!0}),r));return o[wm]=null,K2t(e,function(a){if(a&&a.code!=="ERR_STREAM_PREMATURE_CLOSE"){var n=o[Cm];n!==null&&(o[wm]=null,o[R0]=null,o[Cm]=null,n(a)),o[Ev]=a;return}var u=o[R0];u!==null&&(o[wm]=null,o[R0]=null,o[Cm]=null,u(N0(void 0,!0))),o[_Q]=!0}),e.on("readable",z2t.bind(null,o)),o};l2e.exports=eBt});var p2e=_((S$t,f2e)=>{"use strict";function u2e(t,e,r,o,a,n,u){try{var A=t[n](u),p=A.value}catch(h){r(h);return}A.done?e(p):Promise.resolve(p).then(o,a)}function tBt(t){return function(){var e=this,r=arguments;return new Promise(function(o,a){var n=t.apply(e,r);function u(p){u2e(n,o,a,u,A,"next",p)}function A(p){u2e(n,o,a,u,A,"throw",p)}u(void 0)})}}function A2e(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,o)}return r}function rBt(t){for(var e=1;e{"use strict";B2e.exports=mn;var ZC;mn.ReadableState=m2e;var x$t=Be("events").EventEmitter,d2e=function(e,r){return e.listeners(r).length},wv=Sq(),HQ=Be("buffer").Buffer,oBt=global.Uint8Array||function(){};function aBt(t){return HQ.from(t)}function lBt(t){return HQ.isBuffer(t)||t instanceof oBt}var Wq=Be("util"),$r;Wq&&Wq.debuglog?$r=Wq.debuglog("stream"):$r=function(){};var cBt=L1e(),$q=kq(),uBt=Qq(),ABt=uBt.getHighWaterMark,jQ=k0().codes,fBt=jQ.ERR_INVALID_ARG_TYPE,pBt=jQ.ERR_STREAM_PUSH_AFTER_EOF,hBt=jQ.ERR_METHOD_NOT_IMPLEMENTED,gBt=jQ.ERR_STREAM_UNSHIFT_AFTER_END_EVENT,$C,Vq,Kq;Q0()(mn,wv);var Cv=$q.errorOrDestroy,Jq=["error","close","destroy","pause","resume"];function dBt(t,e,r){if(typeof t.prependListener=="function")return t.prependListener(e,r);!t._events||!t._events[e]?t.on(e,r):Array.isArray(t._events[e])?t._events[e].unshift(r):t._events[e]=[r,t._events[e]]}function m2e(t,e,r){ZC=ZC||Em(),t=t||{},typeof r!="boolean"&&(r=e instanceof ZC),this.objectMode=!!t.objectMode,r&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.highWaterMark=ABt(this,t,"readableHighWaterMark",r),this.buffer=new cBt,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=t.emitClose!==!1,this.autoDestroy=!!t.autoDestroy,this.destroyed=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&($C||($C=Gq().StringDecoder),this.decoder=new $C(t.encoding),this.encoding=t.encoding)}function mn(t){if(ZC=ZC||Em(),!(this instanceof mn))return new mn(t);var e=this instanceof ZC;this._readableState=new m2e(t,this,e),this.readable=!0,t&&(typeof t.read=="function"&&(this._read=t.read),typeof t.destroy=="function"&&(this._destroy=t.destroy)),wv.call(this)}Object.defineProperty(mn.prototype,"destroyed",{enumerable:!1,get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){!this._readableState||(this._readableState.destroyed=e)}});mn.prototype.destroy=$q.destroy;mn.prototype._undestroy=$q.undestroy;mn.prototype._destroy=function(t,e){e(t)};mn.prototype.push=function(t,e){var r=this._readableState,o;return r.objectMode?o=!0:typeof t=="string"&&(e=e||r.defaultEncoding,e!==r.encoding&&(t=HQ.from(t,e),e=""),o=!0),y2e(this,t,e,!1,o)};mn.prototype.unshift=function(t){return y2e(this,t,null,!0,!1)};function y2e(t,e,r,o,a){$r("readableAddChunk",e);var n=t._readableState;if(e===null)n.reading=!1,EBt(t,n);else{var u;if(a||(u=mBt(n,e)),u)Cv(t,u);else if(n.objectMode||e&&e.length>0)if(typeof e!="string"&&!n.objectMode&&Object.getPrototypeOf(e)!==HQ.prototype&&(e=aBt(e)),o)n.endEmitted?Cv(t,new gBt):zq(t,n,e,!0);else if(n.ended)Cv(t,new pBt);else{if(n.destroyed)return!1;n.reading=!1,n.decoder&&!r?(e=n.decoder.write(e),n.objectMode||e.length!==0?zq(t,n,e,!1):Zq(t,n)):zq(t,n,e,!1)}else o||(n.reading=!1,Zq(t,n))}return!n.ended&&(n.length=h2e?t=h2e:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t}function g2e(t,e){return t<=0||e.length===0&&e.ended?0:e.objectMode?1:t!==t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=yBt(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0))}mn.prototype.read=function(t){$r("read",t),t=parseInt(t,10);var e=this._readableState,r=t;if(t!==0&&(e.emittedReadable=!1),t===0&&e.needReadable&&((e.highWaterMark!==0?e.length>=e.highWaterMark:e.length>0)||e.ended))return $r("read: emitReadable",e.length,e.ended),e.length===0&&e.ended?Xq(this):qQ(this),null;if(t=g2e(t,e),t===0&&e.ended)return e.length===0&&Xq(this),null;var o=e.needReadable;$r("need readable",o),(e.length===0||e.length-t0?a=w2e(t,e):a=null,a===null?(e.needReadable=e.length<=e.highWaterMark,t=0):(e.length-=t,e.awaitDrain=0),e.length===0&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&Xq(this)),a!==null&&this.emit("data",a),a};function EBt(t,e){if($r("onEofChunk"),!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length)}e.ended=!0,e.sync?qQ(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,E2e(t)))}}function qQ(t){var e=t._readableState;$r("emitReadable",e.needReadable,e.emittedReadable),e.needReadable=!1,e.emittedReadable||($r("emitReadable",e.flowing),e.emittedReadable=!0,process.nextTick(E2e,t))}function E2e(t){var e=t._readableState;$r("emitReadable_",e.destroyed,e.length,e.ended),!e.destroyed&&(e.length||e.ended)&&(t.emit("readable"),e.emittedReadable=!1),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,eG(t)}function Zq(t,e){e.readingMore||(e.readingMore=!0,process.nextTick(CBt,t,e))}function CBt(t,e){for(;!e.reading&&!e.ended&&(e.length1&&I2e(o.pipes,t)!==-1)&&!h&&($r("false write response, pause",o.awaitDrain),o.awaitDrain++),r.pause())}function v(L){$r("onerror",L),T(),t.removeListener("error",v),d2e(t,"error")===0&&Cv(t,L)}dBt(t,"error",v);function b(){t.removeListener("finish",C),T()}t.once("close",b);function C(){$r("onfinish"),t.removeListener("close",b),T()}t.once("finish",C);function T(){$r("unpipe"),r.unpipe(t)}return t.emit("pipe",r),o.flowing||($r("pipe resume"),r.resume()),t};function wBt(t){return function(){var r=t._readableState;$r("pipeOnDrain",r.awaitDrain),r.awaitDrain&&r.awaitDrain--,r.awaitDrain===0&&d2e(t,"data")&&(r.flowing=!0,eG(t))}}mn.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(e.pipesCount===0)return this;if(e.pipesCount===1)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var o=e.pipes,a=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var n=0;n0,o.flowing!==!1&&this.resume()):t==="readable"&&!o.endEmitted&&!o.readableListening&&(o.readableListening=o.needReadable=!0,o.flowing=!1,o.emittedReadable=!1,$r("on readable",o.length,o.reading),o.length?qQ(this):o.reading||process.nextTick(IBt,this)),r};mn.prototype.addListener=mn.prototype.on;mn.prototype.removeListener=function(t,e){var r=wv.prototype.removeListener.call(this,t,e);return t==="readable"&&process.nextTick(C2e,this),r};mn.prototype.removeAllListeners=function(t){var e=wv.prototype.removeAllListeners.apply(this,arguments);return(t==="readable"||t===void 0)&&process.nextTick(C2e,this),e};function C2e(t){var e=t._readableState;e.readableListening=t.listenerCount("readable")>0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount("data")>0&&t.resume()}function IBt(t){$r("readable nexttick read 0"),t.read(0)}mn.prototype.resume=function(){var t=this._readableState;return t.flowing||($r("resume"),t.flowing=!t.readableListening,BBt(this,t)),t.paused=!1,this};function BBt(t,e){e.resumeScheduled||(e.resumeScheduled=!0,process.nextTick(vBt,t,e))}function vBt(t,e){$r("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),eG(t),e.flowing&&!e.reading&&t.read(0)}mn.prototype.pause=function(){return $r("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&($r("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function eG(t){var e=t._readableState;for($r("flow",e.flowing);e.flowing&&t.read()!==null;);}mn.prototype.wrap=function(t){var e=this,r=this._readableState,o=!1;t.on("end",function(){if($r("wrapped end"),r.decoder&&!r.ended){var u=r.decoder.end();u&&u.length&&e.push(u)}e.push(null)}),t.on("data",function(u){if($r("wrapped data"),r.decoder&&(u=r.decoder.write(u)),!(r.objectMode&&u==null)&&!(!r.objectMode&&(!u||!u.length))){var A=e.push(u);A||(o=!0,t.pause())}});for(var a in t)this[a]===void 0&&typeof t[a]=="function"&&(this[a]=function(A){return function(){return t[A].apply(t,arguments)}}(a));for(var n=0;n=e.length?(e.decoder?r=e.buffer.join(""):e.buffer.length===1?r=e.buffer.first():r=e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r}function Xq(t){var e=t._readableState;$r("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,process.nextTick(DBt,e,t))}function DBt(t,e){if($r("endReadableNT",t.endEmitted,t.length),!t.endEmitted&&t.length===0&&(t.endEmitted=!0,e.readable=!1,e.emit("end"),t.autoDestroy)){var r=e._writableState;(!r||r.autoDestroy&&r.finished)&&e.destroy()}}typeof Symbol=="function"&&(mn.from=function(t,e){return Kq===void 0&&(Kq=p2e()),Kq(mn,t,e)});function I2e(t,e){for(var r=0,o=t.length;r{"use strict";D2e.exports=ip;var GQ=k0().codes,PBt=GQ.ERR_METHOD_NOT_IMPLEMENTED,SBt=GQ.ERR_MULTIPLE_CALLBACK,xBt=GQ.ERR_TRANSFORM_ALREADY_TRANSFORMING,bBt=GQ.ERR_TRANSFORM_WITH_LENGTH_0,YQ=Em();Q0()(ip,YQ);function kBt(t,e){var r=this._transformState;r.transforming=!1;var o=r.writecb;if(o===null)return this.emit("error",new SBt);r.writechunk=null,r.writecb=null,e!=null&&this.push(e),o(t);var a=this._readableState;a.reading=!1,(a.needReadable||a.length{"use strict";S2e.exports=Iv;var P2e=tG();Q0()(Iv,P2e);function Iv(t){if(!(this instanceof Iv))return new Iv(t);P2e.call(this,t)}Iv.prototype._transform=function(t,e,r){r(null,t)}});var T2e=_((F$t,F2e)=>{"use strict";var rG;function FBt(t){var e=!1;return function(){e||(e=!0,t.apply(void 0,arguments))}}var Q2e=k0().codes,TBt=Q2e.ERR_MISSING_ARGS,RBt=Q2e.ERR_STREAM_DESTROYED;function b2e(t){if(t)throw t}function NBt(t){return t.setHeader&&typeof t.abort=="function"}function LBt(t,e,r,o){o=FBt(o);var a=!1;t.on("close",function(){a=!0}),rG===void 0&&(rG=OQ()),rG(t,{readable:e,writable:r},function(u){if(u)return o(u);a=!0,o()});var n=!1;return function(u){if(!a&&!n){if(n=!0,NBt(t))return t.abort();if(typeof t.destroy=="function")return t.destroy();o(u||new RBt("pipe"))}}}function k2e(t){t()}function MBt(t,e){return t.pipe(e)}function OBt(t){return!t.length||typeof t[t.length-1]!="function"?b2e:t.pop()}function UBt(){for(var t=arguments.length,e=new Array(t),r=0;r0;return LBt(u,p,h,function(E){a||(a=E),E&&n.forEach(k2e),!p&&(n.forEach(k2e),o(a))})});return e.reduce(MBt)}F2e.exports=UBt});var ew=_((lc,vv)=>{var Bv=Be("stream");process.env.READABLE_STREAM==="disable"&&Bv?(vv.exports=Bv.Readable,Object.assign(vv.exports,Bv),vv.exports.Stream=Bv):(lc=vv.exports=_q(),lc.Stream=Bv||lc,lc.Readable=lc,lc.Writable=Mq(),lc.Duplex=Em(),lc.Transform=tG(),lc.PassThrough=x2e(),lc.finished=OQ(),lc.pipeline=T2e())});var L2e=_((T$t,N2e)=>{"use strict";var{Buffer:lu}=Be("buffer"),R2e=Symbol.for("BufferList");function ni(t){if(!(this instanceof ni))return new ni(t);ni._init.call(this,t)}ni._init=function(e){Object.defineProperty(this,R2e,{value:!0}),this._bufs=[],this.length=0,e&&this.append(e)};ni.prototype._new=function(e){return new ni(e)};ni.prototype._offset=function(e){if(e===0)return[0,0];let r=0;for(let o=0;othis.length||e<0)return;let r=this._offset(e);return this._bufs[r[0]][r[1]]};ni.prototype.slice=function(e,r){return typeof e=="number"&&e<0&&(e+=this.length),typeof r=="number"&&r<0&&(r+=this.length),this.copy(null,0,e,r)};ni.prototype.copy=function(e,r,o,a){if((typeof o!="number"||o<0)&&(o=0),(typeof a!="number"||a>this.length)&&(a=this.length),o>=this.length||a<=0)return e||lu.alloc(0);let n=!!e,u=this._offset(o),A=a-o,p=A,h=n&&r||0,E=u[1];if(o===0&&a===this.length){if(!n)return this._bufs.length===1?this._bufs[0]:lu.concat(this._bufs,this.length);for(let I=0;Iv)this._bufs[I].copy(e,h,E),h+=v;else{this._bufs[I].copy(e,h,E,E+p),h+=v;break}p-=v,E&&(E=0)}return e.length>h?e.slice(0,h):e};ni.prototype.shallowSlice=function(e,r){if(e=e||0,r=typeof r!="number"?this.length:r,e<0&&(e+=this.length),r<0&&(r+=this.length),e===r)return this._new();let o=this._offset(e),a=this._offset(r),n=this._bufs.slice(o[0],a[0]+1);return a[1]===0?n.pop():n[n.length-1]=n[n.length-1].slice(0,a[1]),o[1]!==0&&(n[0]=n[0].slice(o[1])),this._new(n)};ni.prototype.toString=function(e,r,o){return this.slice(r,o).toString(e)};ni.prototype.consume=function(e){if(e=Math.trunc(e),Number.isNaN(e)||e<=0)return this;for(;this._bufs.length;)if(e>=this._bufs[0].length)e-=this._bufs[0].length,this.length-=this._bufs[0].length,this._bufs.shift();else{this._bufs[0]=this._bufs[0].slice(e),this.length-=e;break}return this};ni.prototype.duplicate=function(){let e=this._new();for(let r=0;rthis.length?this.length:e;let o=this._offset(e),a=o[0],n=o[1];for(;a=t.length){let p=u.indexOf(t,n);if(p!==-1)return this._reverseOffset([a,p]);n=u.length-t.length+1}else{let p=this._reverseOffset([a,n]);if(this._match(p,t))return p;n++}n=0}return-1};ni.prototype._match=function(t,e){if(this.length-t{"use strict";var nG=ew().Duplex,_Bt=Q0(),Dv=L2e();function Uo(t){if(!(this instanceof Uo))return new Uo(t);if(typeof t=="function"){this._callback=t;let e=function(o){this._callback&&(this._callback(o),this._callback=null)}.bind(this);this.on("pipe",function(o){o.on("error",e)}),this.on("unpipe",function(o){o.removeListener("error",e)}),t=null}Dv._init.call(this,t),nG.call(this)}_Bt(Uo,nG);Object.assign(Uo.prototype,Dv.prototype);Uo.prototype._new=function(e){return new Uo(e)};Uo.prototype._write=function(e,r,o){this._appendBuffer(e),typeof o=="function"&&o()};Uo.prototype._read=function(e){if(!this.length)return this.push(null);e=Math.min(e,this.length),this.push(this.slice(0,e)),this.consume(e)};Uo.prototype.end=function(e){nG.prototype.end.call(this,e),this._callback&&(this._callback(null,this.slice()),this._callback=null)};Uo.prototype._destroy=function(e,r){this._bufs.length=0,this.length=0,r(e)};Uo.prototype._isBufferList=function(e){return e instanceof Uo||e instanceof Dv||Uo.isBufferList(e)};Uo.isBufferList=Dv.isBufferList;WQ.exports=Uo;WQ.exports.BufferListStream=Uo;WQ.exports.BufferList=Dv});var oG=_(rw=>{var HBt=Buffer.alloc,jBt="0000000000000000000",qBt="7777777777777777777",O2e="0".charCodeAt(0),U2e=Buffer.from("ustar\0","binary"),GBt=Buffer.from("00","binary"),YBt=Buffer.from("ustar ","binary"),WBt=Buffer.from(" \0","binary"),VBt=parseInt("7777",8),Pv=257,sG=263,KBt=function(t,e,r){return typeof t!="number"?r:(t=~~t,t>=e?e:t>=0||(t+=e,t>=0)?t:0)},JBt=function(t){switch(t){case 0:return"file";case 1:return"link";case 2:return"symlink";case 3:return"character-device";case 4:return"block-device";case 5:return"directory";case 6:return"fifo";case 7:return"contiguous-file";case 72:return"pax-header";case 55:return"pax-global-header";case 27:return"gnu-long-link-path";case 28:case 30:return"gnu-long-path"}return null},zBt=function(t){switch(t){case"file":return 0;case"link":return 1;case"symlink":return 2;case"character-device":return 3;case"block-device":return 4;case"directory":return 5;case"fifo":return 6;case"contiguous-file":return 7;case"pax-header":return 72}return 0},_2e=function(t,e,r,o){for(;re?qBt.slice(0,e)+" ":jBt.slice(0,e-t.length)+t+" "};function XBt(t){var e;if(t[0]===128)e=!0;else if(t[0]===255)e=!1;else return null;for(var r=[],o=t.length-1;o>0;o--){var a=t[o];e?r.push(a):r.push(255-a)}var n=0,u=r.length;for(o=0;o=Math.pow(10,r)&&r++,e+r+t};rw.decodeLongPath=function(t,e){return tw(t,0,t.length,e)};rw.encodePax=function(t){var e="";t.name&&(e+=iG(" path="+t.name+` +`)),t.linkname&&(e+=iG(" linkpath="+t.linkname+` +`));var r=t.pax;if(r)for(var o in r)e+=iG(" "+o+"="+r[o]+` +`);return Buffer.from(e)};rw.decodePax=function(t){for(var e={};t.length;){for(var r=0;r100;){var a=r.indexOf("/");if(a===-1)return null;o+=o?"/"+r.slice(0,a):r.slice(0,a),r=r.slice(a+1)}return Buffer.byteLength(r)>100||Buffer.byteLength(o)>155||t.linkname&&Buffer.byteLength(t.linkname)>100?null:(e.write(r),e.write(L0(t.mode&VBt,6),100),e.write(L0(t.uid,6),108),e.write(L0(t.gid,6),116),e.write(L0(t.size,11),124),e.write(L0(t.mtime.getTime()/1e3|0,11),136),e[156]=O2e+zBt(t.type),t.linkname&&e.write(t.linkname,157),U2e.copy(e,Pv),GBt.copy(e,sG),t.uname&&e.write(t.uname,265),t.gname&&e.write(t.gname,297),e.write(L0(t.devmajor||0,6),329),e.write(L0(t.devminor||0,6),337),o&&e.write(o,345),e.write(L0(H2e(e),6),148),e)};rw.decode=function(t,e,r){var o=t[156]===0?0:t[156]-O2e,a=tw(t,0,100,e),n=M0(t,100,8),u=M0(t,108,8),A=M0(t,116,8),p=M0(t,124,12),h=M0(t,136,12),E=JBt(o),I=t[157]===0?null:tw(t,157,100,e),v=tw(t,265,32),b=tw(t,297,32),C=M0(t,329,8),T=M0(t,337,8),L=H2e(t);if(L===8*32)return null;if(L!==M0(t,148,8))throw new Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(U2e.compare(t,Pv,Pv+6)===0)t[345]&&(a=tw(t,345,155,e)+"/"+a);else if(!(YBt.compare(t,Pv,Pv+6)===0&&WBt.compare(t,sG,sG+2)===0)){if(!r)throw new Error("Invalid tar header: unknown format.")}return o===0&&a&&a[a.length-1]==="/"&&(o=5),{name:a,mode:n,uid:u,gid:A,size:p,mtime:new Date(1e3*h),type:E,linkname:I,uname:v,gname:b,devmajor:C,devminor:T}}});var K2e=_((L$t,V2e)=>{var q2e=Be("util"),ZBt=M2e(),Sv=oG(),G2e=ew().Writable,Y2e=ew().PassThrough,W2e=function(){},j2e=function(t){return t&=511,t&&512-t},$Bt=function(t,e){var r=new VQ(t,e);return r.end(),r},evt=function(t,e){return e.path&&(t.name=e.path),e.linkpath&&(t.linkname=e.linkpath),e.size&&(t.size=parseInt(e.size,10)),t.pax=e,t},VQ=function(t,e){this._parent=t,this.offset=e,Y2e.call(this,{autoDestroy:!1})};q2e.inherits(VQ,Y2e);VQ.prototype.destroy=function(t){this._parent.destroy(t)};var sp=function(t){if(!(this instanceof sp))return new sp(t);G2e.call(this,t),t=t||{},this._offset=0,this._buffer=ZBt(),this._missing=0,this._partial=!1,this._onparse=W2e,this._header=null,this._stream=null,this._overflow=null,this._cb=null,this._locked=!1,this._destroyed=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null;var e=this,r=e._buffer,o=function(){e._continue()},a=function(v){if(e._locked=!1,v)return e.destroy(v);e._stream||o()},n=function(){e._stream=null;var v=j2e(e._header.size);v?e._parse(v,u):e._parse(512,I),e._locked||o()},u=function(){e._buffer.consume(j2e(e._header.size)),e._parse(512,I),o()},A=function(){var v=e._header.size;e._paxGlobal=Sv.decodePax(r.slice(0,v)),r.consume(v),n()},p=function(){var v=e._header.size;e._pax=Sv.decodePax(r.slice(0,v)),e._paxGlobal&&(e._pax=Object.assign({},e._paxGlobal,e._pax)),r.consume(v),n()},h=function(){var v=e._header.size;this._gnuLongPath=Sv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},E=function(){var v=e._header.size;this._gnuLongLinkPath=Sv.decodeLongPath(r.slice(0,v),t.filenameEncoding),r.consume(v),n()},I=function(){var v=e._offset,b;try{b=e._header=Sv.decode(r.slice(0,512),t.filenameEncoding,t.allowUnknownFormat)}catch(C){e.emit("error",C)}if(r.consume(512),!b){e._parse(512,I),o();return}if(b.type==="gnu-long-path"){e._parse(b.size,h),o();return}if(b.type==="gnu-long-link-path"){e._parse(b.size,E),o();return}if(b.type==="pax-global-header"){e._parse(b.size,A),o();return}if(b.type==="pax-header"){e._parse(b.size,p),o();return}if(e._gnuLongPath&&(b.name=e._gnuLongPath,e._gnuLongPath=null),e._gnuLongLinkPath&&(b.linkname=e._gnuLongLinkPath,e._gnuLongLinkPath=null),e._pax&&(e._header=b=evt(b,e._pax),e._pax=null),e._locked=!0,!b.size||b.type==="directory"){e._parse(512,I),e.emit("entry",b,$Bt(e,v),a);return}e._stream=new VQ(e,v),e.emit("entry",b,e._stream,a),e._parse(b.size,n),o()};this._onheader=I,this._parse(512,I)};q2e.inherits(sp,G2e);sp.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.emit("close"))};sp.prototype._parse=function(t,e){this._destroyed||(this._offset+=t,this._missing=t,e===this._onheader&&(this._partial=!1),this._onparse=e)};sp.prototype._continue=function(){if(!this._destroyed){var t=this._cb;this._cb=W2e,this._overflow?this._write(this._overflow,void 0,t):t()}};sp.prototype._write=function(t,e,r){if(!this._destroyed){var o=this._stream,a=this._buffer,n=this._missing;if(t.length&&(this._partial=!0),t.lengthn&&(u=t.slice(n),t=t.slice(0,n)),o?o.end(t):a.append(t),this._overflow=u,this._onparse()}};sp.prototype._final=function(t){if(this._partial)return this.destroy(new Error("Unexpected end of data"));t()};V2e.exports=sp});var z2e=_((M$t,J2e)=>{J2e.exports=Be("fs").constants||Be("constants")});var tBe=_((O$t,eBe)=>{var nw=z2e(),X2e=OO(),JQ=Q0(),tvt=Buffer.alloc,Z2e=ew().Readable,iw=ew().Writable,rvt=Be("string_decoder").StringDecoder,KQ=oG(),nvt=parseInt("755",8),ivt=parseInt("644",8),$2e=tvt(1024),lG=function(){},aG=function(t,e){e&=511,e&&t.push($2e.slice(0,512-e))};function svt(t){switch(t&nw.S_IFMT){case nw.S_IFBLK:return"block-device";case nw.S_IFCHR:return"character-device";case nw.S_IFDIR:return"directory";case nw.S_IFIFO:return"fifo";case nw.S_IFLNK:return"symlink"}return"file"}var zQ=function(t){iw.call(this),this.written=0,this._to=t,this._destroyed=!1};JQ(zQ,iw);zQ.prototype._write=function(t,e,r){if(this.written+=t.length,this._to.push(t))return r();this._to._drain=r};zQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var XQ=function(){iw.call(this),this.linkname="",this._decoder=new rvt("utf-8"),this._destroyed=!1};JQ(XQ,iw);XQ.prototype._write=function(t,e,r){this.linkname+=this._decoder.write(t),r()};XQ.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var xv=function(){iw.call(this),this._destroyed=!1};JQ(xv,iw);xv.prototype._write=function(t,e,r){r(new Error("No body allowed for this entry"))};xv.prototype.destroy=function(){this._destroyed||(this._destroyed=!0,this.emit("close"))};var EA=function(t){if(!(this instanceof EA))return new EA(t);Z2e.call(this,t),this._drain=lG,this._finalized=!1,this._finalizing=!1,this._destroyed=!1,this._stream=null};JQ(EA,Z2e);EA.prototype.entry=function(t,e,r){if(this._stream)throw new Error("already piping an entry");if(!(this._finalized||this._destroyed)){typeof e=="function"&&(r=e,e=null),r||(r=lG);var o=this;if((!t.size||t.type==="symlink")&&(t.size=0),t.type||(t.type=svt(t.mode)),t.mode||(t.mode=t.type==="directory"?nvt:ivt),t.uid||(t.uid=0),t.gid||(t.gid=0),t.mtime||(t.mtime=new Date),typeof e=="string"&&(e=Buffer.from(e)),Buffer.isBuffer(e)){t.size=e.length,this._encode(t);var a=this.push(e);return aG(o,t.size),a?process.nextTick(r):this._drain=r,new xv}if(t.type==="symlink"&&!t.linkname){var n=new XQ;return X2e(n,function(A){if(A)return o.destroy(),r(A);t.linkname=n.linkname,o._encode(t),r()}),n}if(this._encode(t),t.type!=="file"&&t.type!=="contiguous-file")return process.nextTick(r),new xv;var u=new zQ(this);return this._stream=u,X2e(u,function(A){if(o._stream=null,A)return o.destroy(),r(A);if(u.written!==t.size)return o.destroy(),r(new Error("size mismatch"));aG(o,t.size),o._finalizing&&o.finalize(),r()}),u}};EA.prototype.finalize=function(){if(this._stream){this._finalizing=!0;return}this._finalized||(this._finalized=!0,this.push($2e),this.push(null))};EA.prototype.destroy=function(t){this._destroyed||(this._destroyed=!0,t&&this.emit("error",t),this.emit("close"),this._stream&&this._stream.destroy&&this._stream.destroy())};EA.prototype._encode=function(t){if(!t.pax){var e=KQ.encode(t);if(e){this.push(e);return}}this._encodePax(t)};EA.prototype._encodePax=function(t){var e=KQ.encodePax({name:t.name,linkname:t.linkname,pax:t.pax}),r={name:"PaxHeader",mode:t.mode,uid:t.uid,gid:t.gid,size:e.length,mtime:t.mtime,type:"pax-header",linkname:t.linkname&&"PaxHeader",uname:t.uname,gname:t.gname,devmajor:t.devmajor,devminor:t.devminor};this.push(KQ.encode(r)),this.push(e),aG(this,e.length),r.size=t.size,r.type=t.type,this.push(KQ.encode(r))};EA.prototype._read=function(t){var e=this._drain;this._drain=lG,e()};eBe.exports=EA});var rBe=_(cG=>{cG.extract=K2e();cG.pack=tBe()});var hBe=_((ier,pBe)=>{"use strict";var Bm=class{constructor(e,r,o){this.__specs=e||{},Object.keys(this.__specs).forEach(a=>{if(typeof this.__specs[a]=="string"){let n=this.__specs[a],u=this.__specs[n];if(u){let A=u.aliases||[];A.push(a,n),u.aliases=[...new Set(A)],this.__specs[a]=u}else throw new Error(`Alias refers to invalid key: ${n} -> ${a}`)}}),this.__opts=r||{},this.__providers=ABe(o.filter(a=>a!=null&&typeof a=="object")),this.__isFiggyPudding=!0}get(e){return gG(this,e,!0)}get[Symbol.toStringTag](){return"FiggyPudding"}forEach(e,r=this){for(let[o,a]of this.entries())e.call(r,a,o,this)}toJSON(){let e={};return this.forEach((r,o)=>{e[o]=r}),e}*entries(e){for(let o of Object.keys(this.__specs))yield[o,this.get(o)];let r=e||this.__opts.other;if(r){let o=new Set;for(let a of this.__providers){let n=a.entries?a.entries(r):Cvt(a);for(let[u,A]of n)r(u)&&!o.has(u)&&(o.add(u),yield[u,A])}}}*[Symbol.iterator](){for(let[e,r]of this.entries())yield[e,r]}*keys(){for(let[e]of this.entries())yield e}*values(){for(let[,e]of this.entries())yield e}concat(...e){return new Proxy(new Bm(this.__specs,this.__opts,ABe(this.__providers).concat(e)),fBe)}};try{let t=Be("util");Bm.prototype[t.inspect.custom]=function(e,r){return this[Symbol.toStringTag]+" "+t.inspect(this.toJSON(),r)}}catch{}function yvt(t){throw Object.assign(new Error(`invalid config key requested: ${t}`),{code:"EBADKEY"})}function gG(t,e,r){let o=t.__specs[e];if(r&&!o&&(!t.__opts.other||!t.__opts.other(e)))yvt(e);else{o||(o={});let a;for(let n of t.__providers){if(a=uBe(e,n),a===void 0&&o.aliases&&o.aliases.length){for(let u of o.aliases)if(u!==e&&(a=uBe(u,n),a!==void 0))break}if(a!==void 0)break}return a===void 0&&o.default!==void 0?typeof o.default=="function"?o.default(t):o.default:a}}function uBe(t,e){let r;return e.__isFiggyPudding?r=gG(e,t,!1):typeof e.get=="function"?r=e.get(t):r=e[t],r}var fBe={has(t,e){return e in t.__specs&&gG(t,e,!1)!==void 0},ownKeys(t){return Object.keys(t.__specs)},get(t,e){return typeof e=="symbol"||e.slice(0,2)==="__"||e in Bm.prototype?t[e]:t.get(e)},set(t,e,r){if(typeof e=="symbol"||e.slice(0,2)==="__")return t[e]=r,!0;throw new Error("figgyPudding options cannot be modified. Use .concat() instead.")},deleteProperty(){throw new Error("figgyPudding options cannot be deleted. Use .concat() and shadow them instead.")}};pBe.exports=Evt;function Evt(t,e){function r(...o){return new Proxy(new Bm(t,e,o),fBe)}return r}function ABe(t){let e=[];return t.forEach(r=>e.unshift(r)),e}function Cvt(t){return Object.keys(t).map(e=>[e,t[e]])}});var mBe=_((ser,IA)=>{"use strict";var kv=Be("crypto"),wvt=hBe(),Ivt=Be("stream").Transform,gBe=["sha256","sha384","sha512"],Bvt=/^[a-z0-9+/]+(?:=?=?)$/i,vvt=/^([^-]+)-([^?]+)([?\S*]*)$/,Dvt=/^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)*$/,Pvt=/^[\x21-\x7E]+$/,ia=wvt({algorithms:{default:["sha512"]},error:{default:!1},integrity:{},options:{default:[]},pickAlgorithm:{default:()=>Rvt},Promise:{default:()=>Promise},sep:{default:" "},single:{default:!1},size:{},strict:{default:!1}}),U0=class{get isHash(){return!0}constructor(e,r){r=ia(r);let o=!!r.strict;this.source=e.trim();let a=this.source.match(o?Dvt:vvt);if(!a||o&&!gBe.some(u=>u===a[1]))return;this.algorithm=a[1],this.digest=a[2];let n=a[3];this.options=n?n.slice(1).split("?"):[]}hexDigest(){return this.digest&&Buffer.from(this.digest,"base64").toString("hex")}toJSON(){return this.toString()}toString(e){if(e=ia(e),e.strict&&!(gBe.some(o=>o===this.algorithm)&&this.digest.match(Bvt)&&(this.options||[]).every(o=>o.match(Pvt))))return"";let r=this.options&&this.options.length?`?${this.options.join("?")}`:"";return`${this.algorithm}-${this.digest}${r}`}},vm=class{get isIntegrity(){return!0}toJSON(){return this.toString()}toString(e){e=ia(e);let r=e.sep||" ";return e.strict&&(r=r.replace(/\S+/g," ")),Object.keys(this).map(o=>this[o].map(a=>U0.prototype.toString.call(a,e)).filter(a=>a.length).join(r)).filter(o=>o.length).join(r)}concat(e,r){r=ia(r);let o=typeof e=="string"?e:bv(e,r);return wA(`${this.toString(r)} ${o}`,r)}hexDigest(){return wA(this,{single:!0}).hexDigest()}match(e,r){r=ia(r);let o=wA(e,r),a=o.pickAlgorithm(r);return this[a]&&o[a]&&this[a].find(n=>o[a].find(u=>n.digest===u.digest))||!1}pickAlgorithm(e){e=ia(e);let r=e.pickAlgorithm,o=Object.keys(this);if(!o.length)throw new Error(`No algorithms available for ${JSON.stringify(this.toString())}`);return o.reduce((a,n)=>r(a,n)||a)}};IA.exports.parse=wA;function wA(t,e){if(e=ia(e),typeof t=="string")return dG(t,e);if(t.algorithm&&t.digest){let r=new vm;return r[t.algorithm]=[t],dG(bv(r,e),e)}else return dG(bv(t,e),e)}function dG(t,e){return e.single?new U0(t,e):t.trim().split(/\s+/).reduce((r,o)=>{let a=new U0(o,e);if(a.algorithm&&a.digest){let n=a.algorithm;r[n]||(r[n]=[]),r[n].push(a)}return r},new vm)}IA.exports.stringify=bv;function bv(t,e){return e=ia(e),t.algorithm&&t.digest?U0.prototype.toString.call(t,e):typeof t=="string"?bv(wA(t,e),e):vm.prototype.toString.call(t,e)}IA.exports.fromHex=Svt;function Svt(t,e,r){r=ia(r);let o=r.options&&r.options.length?`?${r.options.join("?")}`:"";return wA(`${e}-${Buffer.from(t,"hex").toString("base64")}${o}`,r)}IA.exports.fromData=xvt;function xvt(t,e){e=ia(e);let r=e.algorithms,o=e.options&&e.options.length?`?${e.options.join("?")}`:"";return r.reduce((a,n)=>{let u=kv.createHash(n).update(t).digest("base64"),A=new U0(`${n}-${u}${o}`,e);if(A.algorithm&&A.digest){let p=A.algorithm;a[p]||(a[p]=[]),a[p].push(A)}return a},new vm)}IA.exports.fromStream=bvt;function bvt(t,e){e=ia(e);let r=e.Promise||Promise,o=mG(e);return new r((a,n)=>{t.pipe(o),t.on("error",n),o.on("error",n);let u;o.on("integrity",A=>{u=A}),o.on("end",()=>a(u)),o.on("data",()=>{})})}IA.exports.checkData=kvt;function kvt(t,e,r){if(r=ia(r),e=wA(e,r),!Object.keys(e).length){if(r.error)throw Object.assign(new Error("No valid integrity hashes to check against"),{code:"EINTEGRITY"});return!1}let o=e.pickAlgorithm(r),a=kv.createHash(o).update(t).digest("base64"),n=wA({algorithm:o,digest:a}),u=n.match(e,r);if(u||!r.error)return u;if(typeof r.size=="number"&&t.length!==r.size){let A=new Error(`data size mismatch when checking ${e}. + Wanted: ${r.size} + Found: ${t.length}`);throw A.code="EBADSIZE",A.found=t.length,A.expected=r.size,A.sri=e,A}else{let A=new Error(`Integrity checksum failed when using ${o}: Wanted ${e}, but got ${n}. (${t.length} bytes)`);throw A.code="EINTEGRITY",A.found=n,A.expected=e,A.algorithm=o,A.sri=e,A}}IA.exports.checkStream=Qvt;function Qvt(t,e,r){r=ia(r);let o=r.Promise||Promise,a=mG(r.concat({integrity:e}));return new o((n,u)=>{t.pipe(a),t.on("error",u),a.on("error",u);let A;a.on("verified",p=>{A=p}),a.on("end",()=>n(A)),a.on("data",()=>{})})}IA.exports.integrityStream=mG;function mG(t){t=ia(t);let e=t.integrity&&wA(t.integrity,t),r=e&&Object.keys(e).length,o=r&&e.pickAlgorithm(t),a=r&&e[o],n=Array.from(new Set(t.algorithms.concat(o?[o]:[]))),u=n.map(kv.createHash),A=0,p=new Ivt({transform(h,E,I){A+=h.length,u.forEach(v=>v.update(h,E)),I(null,h,E)}}).on("end",()=>{let h=t.options&&t.options.length?`?${t.options.join("?")}`:"",E=wA(u.map((v,b)=>`${n[b]}-${v.digest("base64")}${h}`).join(" "),t),I=r&&E.match(e,t);if(typeof t.size=="number"&&A!==t.size){let v=new Error(`stream size mismatch when checking ${e}. + Wanted: ${t.size} + Found: ${A}`);v.code="EBADSIZE",v.found=A,v.expected=t.size,v.sri=e,p.emit("error",v)}else if(t.integrity&&!I){let v=new Error(`${e} integrity checksum failed when using ${o}: wanted ${a} but got ${E}. (${A} bytes)`);v.code="EINTEGRITY",v.found=E,v.expected=a,v.algorithm=o,v.sri=e,p.emit("error",v)}else p.emit("size",A),p.emit("integrity",E),I&&p.emit("verified",I)});return p}IA.exports.create=Fvt;function Fvt(t){t=ia(t);let e=t.algorithms,r=t.options.length?`?${t.options.join("?")}`:"",o=e.map(kv.createHash);return{update:function(a,n){return o.forEach(u=>u.update(a,n)),this},digest:function(a){return e.reduce((u,A)=>{let p=o.shift().digest("base64"),h=new U0(`${A}-${p}${r}`,t);if(h.algorithm&&h.digest){let E=h.algorithm;u[E]||(u[E]=[]),u[E].push(h)}return u},new vm)}}}var Tvt=new Set(kv.getHashes()),dBe=["md5","whirlpool","sha1","sha224","sha256","sha384","sha512","sha3","sha3-256","sha3-384","sha3-512","sha3_256","sha3_384","sha3_512"].filter(t=>Tvt.has(t));function Rvt(t,e){return dBe.indexOf(t.toLowerCase())>=dBe.indexOf(e.toLowerCase())?t:e}});var VBe=_((lir,WBe)=>{var TDt=uL();function RDt(t){return TDt(t)?void 0:t}WBe.exports=RDt});var JBe=_((cir,KBe)=>{var NDt=jx(),LDt=Q8(),MDt=N8(),ODt=jd(),UDt=gd(),_Dt=VBe(),HDt=P_(),jDt=k8(),qDt=1,GDt=2,YDt=4,WDt=HDt(function(t,e){var r={};if(t==null)return r;var o=!1;e=NDt(e,function(n){return n=ODt(n,t),o||(o=n.length>1),n}),UDt(t,jDt(t),r),o&&(r=LDt(r,qDt|GDt|YDt,_Dt));for(var a=e.length;a--;)MDt(r,e[a]);return r});KBe.exports=WDt});Pt();Ye();Pt();var eve=Be("child_process"),tve=$e(ed());qt();var uC=new Map([]);var o2={};Kt(o2,{BaseCommand:()=>ut,WorkspaceRequiredError:()=>rr,getCli:()=>the,getDynamicLibs:()=>ehe,getPluginConfiguration:()=>fC,openWorkspace:()=>AC,pluginCommands:()=>uC,runExit:()=>sk});qt();var ut=class extends nt{constructor(){super(...arguments);this.cwd=ge.String("--cwd",{hidden:!0})}validateAndExecute(){if(typeof this.cwd<"u")throw new it("The --cwd option is ambiguous when used anywhere else than the very first parameter provided in the command line, before even the command path");return super.validateAndExecute()}};Ye();Pt();qt();var rr=class extends it{constructor(e,r){let o=K.relative(e,r),a=K.join(e,Mt.fileName);super(`This command can only be run from within a workspace of your project (${o} isn't a workspace of ${a}).`)}};Ye();Pt();nA();Nl();b1();qt();var OAt=$e(zn());Za();var ehe=()=>new Map([["@yarnpkg/cli",o2],["@yarnpkg/core",s2],["@yarnpkg/fslib",Vw],["@yarnpkg/libzip",x1],["@yarnpkg/parsers",tI],["@yarnpkg/shell",T1],["clipanion",pI],["semver",OAt],["typanion",Ko]]);Ye();async function AC(t,e){let{project:r,workspace:o}=await St.find(t,e);if(!o)throw new rr(r.cwd,e);return o}Ye();Pt();nA();Nl();b1();qt();var tPt=$e(zn());Za();var tH={};Kt(tH,{AddCommand:()=>bh,BinCommand:()=>kh,CacheCleanCommand:()=>Qh,ClipanionCommand:()=>Wd,ConfigCommand:()=>Nh,ConfigGetCommand:()=>Fh,ConfigSetCommand:()=>Th,ConfigUnsetCommand:()=>Rh,DedupeCommand:()=>Lh,EntryCommand:()=>dC,ExecCommand:()=>Mh,ExplainCommand:()=>_h,ExplainPeerRequirementsCommand:()=>Oh,HelpCommand:()=>Vd,InfoCommand:()=>Hh,LinkCommand:()=>qh,NodeCommand:()=>Gh,PluginCheckCommand:()=>Yh,PluginImportCommand:()=>Kh,PluginImportSourcesCommand:()=>Jh,PluginListCommand:()=>Wh,PluginRemoveCommand:()=>zh,PluginRuntimeCommand:()=>Xh,RebuildCommand:()=>Zh,RemoveCommand:()=>$h,RunCommand:()=>e0,RunIndexCommand:()=>zd,SetResolutionCommand:()=>t0,SetVersionCommand:()=>Uh,SetVersionSourcesCommand:()=>Vh,UnlinkCommand:()=>r0,UpCommand:()=>Kf,VersionCommand:()=>Kd,WhyCommand:()=>n0,WorkspaceCommand:()=>o0,WorkspacesListCommand:()=>s0,YarnCommand:()=>jh,dedupeUtils:()=>gk,default:()=>Qgt,suggestUtils:()=>zc});var Tde=$e(ed());Ye();Ye();Ye();qt();var j0e=$e(A2());Za();var zc={};Kt(zc,{Modifier:()=>D8,Strategy:()=>fk,Target:()=>f2,WorkspaceModifier:()=>M0e,applyModifier:()=>ipt,extractDescriptorFromPath:()=>P8,extractRangeModifier:()=>O0e,fetchDescriptorFrom:()=>S8,findProjectDescriptors:()=>H0e,getModifier:()=>p2,getSuggestedDescriptors:()=>h2,makeWorkspaceDescriptor:()=>_0e,toWorkspaceModifier:()=>U0e});Ye();Ye();Pt();var v8=$e(zn()),rpt="workspace:",f2=(o=>(o.REGULAR="dependencies",o.DEVELOPMENT="devDependencies",o.PEER="peerDependencies",o))(f2||{}),D8=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="",o))(D8||{}),M0e=(o=>(o.CARET="^",o.TILDE="~",o.EXACT="*",o))(M0e||{}),fk=(n=>(n.KEEP="keep",n.REUSE="reuse",n.PROJECT="project",n.LATEST="latest",n.CACHE="cache",n))(fk||{});function p2(t,e){return t.exact?"":t.caret?"^":t.tilde?"~":e.configuration.get("defaultSemverRangePrefix")}var npt=/^([\^~]?)[0-9]+(?:\.[0-9]+){0,2}(?:-\S+)?$/;function O0e(t,{project:e}){let r=t.match(npt);return r?r[1]:e.configuration.get("defaultSemverRangePrefix")}function ipt(t,e){let{protocol:r,source:o,params:a,selector:n}=W.parseRange(t.range);return v8.default.valid(n)&&(n=`${e}${t.range}`),W.makeDescriptor(t,W.makeRange({protocol:r,source:o,params:a,selector:n}))}function U0e(t){switch(t){case"^":return"^";case"~":return"~";case"":return"*";default:throw new Error(`Assertion failed: Unknown modifier: "${t}"`)}}function _0e(t,e){return W.makeDescriptor(t.anchoredDescriptor,`${rpt}${U0e(e)}`)}async function H0e(t,{project:e,target:r}){let o=new Map,a=n=>{let u=o.get(n.descriptorHash);return u||o.set(n.descriptorHash,u={descriptor:n,locators:[]}),u};for(let n of e.workspaces)if(r==="peerDependencies"){let u=n.manifest.peerDependencies.get(t.identHash);u!==void 0&&a(u).locators.push(n.anchoredLocator)}else{let u=n.manifest.dependencies.get(t.identHash),A=n.manifest.devDependencies.get(t.identHash);r==="devDependencies"?A!==void 0?a(A).locators.push(n.anchoredLocator):u!==void 0&&a(u).locators.push(n.anchoredLocator):u!==void 0?a(u).locators.push(n.anchoredLocator):A!==void 0&&a(A).locators.push(n.anchoredLocator)}return o}async function P8(t,{cwd:e,workspace:r}){return await spt(async o=>{K.isAbsolute(t)||(t=K.relative(r.cwd,K.resolve(e,t)),t.match(/^\.{0,2}\//)||(t=`./${t}`));let{project:a}=r,n=await S8(W.makeIdent(null,"archive"),t,{project:r.project,cache:o,workspace:r});if(!n)throw new Error("Assertion failed: The descriptor should have been found");let u=new Qi,A=a.configuration.makeResolver(),p=a.configuration.makeFetcher(),h={checksums:a.storedChecksums,project:a,cache:o,fetcher:p,report:u,resolver:A},E=A.bindDescriptor(n,r.anchoredLocator,h),I=W.convertDescriptorToLocator(E),v=await p.fetch(I,h),b=await Mt.find(v.prefixPath,{baseFs:v.packageFs});if(!b.name)throw new Error("Target path doesn't have a name");return W.makeDescriptor(b.name,t)})}async function h2(t,{project:e,workspace:r,cache:o,target:a,fixed:n,modifier:u,strategies:A,maxResults:p=1/0}){if(!(p>=0))throw new Error(`Invalid maxResults (${p})`);let[h,E]=t.range!=="unknown"?n||kr.validRange(t.range)||!t.range.match(/^[a-z0-9._-]+$/i)?[t.range,"latest"]:["unknown",t.range]:["unknown","latest"];if(h!=="unknown")return{suggestions:[{descriptor:t,name:`Use ${W.prettyDescriptor(e.configuration,t)}`,reason:"(unambiguous explicit request)"}],rejections:[]};let I=typeof r<"u"&&r!==null&&r.manifest[a].get(t.identHash)||null,v=[],b=[],C=async T=>{try{await T()}catch(L){b.push(L)}};for(let T of A){if(v.length>=p)break;switch(T){case"keep":await C(async()=>{I&&v.push({descriptor:I,name:`Keep ${W.prettyDescriptor(e.configuration,I)}`,reason:"(no changes)"})});break;case"reuse":await C(async()=>{for(let{descriptor:L,locators:U}of(await H0e(t,{project:e,target:a})).values()){if(U.length===1&&U[0].locatorHash===r.anchoredLocator.locatorHash&&A.includes("keep"))continue;let J=`(originally used by ${W.prettyLocator(e.configuration,U[0])}`;J+=U.length>1?` and ${U.length-1} other${U.length>2?"s":""})`:")",v.push({descriptor:L,name:`Reuse ${W.prettyDescriptor(e.configuration,L)}`,reason:J})}});break;case"cache":await C(async()=>{for(let L of e.storedDescriptors.values())L.identHash===t.identHash&&v.push({descriptor:L,name:`Reuse ${W.prettyDescriptor(e.configuration,L)}`,reason:"(already used somewhere in the lockfile)"})});break;case"project":await C(async()=>{if(r.manifest.name!==null&&t.identHash===r.manifest.name.identHash)return;let L=e.tryWorkspaceByIdent(t);if(L===null)return;let U=_0e(L,u);v.push({descriptor:U,name:`Attach ${W.prettyDescriptor(e.configuration,U)}`,reason:`(local workspace at ${de.pretty(e.configuration,L.relativeCwd,de.Type.PATH)})`})});break;case"latest":{let L=e.configuration.get("enableNetwork"),U=e.configuration.get("enableOfflineMode");await C(async()=>{if(a==="peerDependencies")v.push({descriptor:W.makeDescriptor(t,"*"),name:"Use *",reason:"(catch-all peer dependency pattern)"});else if(!L&&!U)v.push({descriptor:null,name:"Resolve from latest",reason:de.pretty(e.configuration,"(unavailable because enableNetwork is toggled off)","grey")});else{let J=await S8(t,E,{project:e,cache:o,workspace:r,modifier:u});J&&v.push({descriptor:J,name:`Use ${W.prettyDescriptor(e.configuration,J)}`,reason:`(resolved from ${U?"the cache":"latest"})`})}})}break}}return{suggestions:v.slice(0,p),rejections:b.slice(0,p)}}async function S8(t,e,{project:r,cache:o,workspace:a,preserveModifier:n=!0,modifier:u}){let A=r.configuration.normalizeDependency(W.makeDescriptor(t,e)),p=new Qi,h=r.configuration.makeFetcher(),E=r.configuration.makeResolver(),I={project:r,fetcher:h,cache:o,checksums:r.storedChecksums,report:p,cacheOptions:{skipIntegrityCheck:!0}},v={...I,resolver:E,fetchOptions:I},b=E.bindDescriptor(A,a.anchoredLocator,v),C=await E.getCandidates(b,{},v);if(C.length===0)return null;let T=C[0],{protocol:L,source:U,params:J,selector:te}=W.parseRange(W.convertToManifestRange(T.reference));if(L===r.configuration.get("defaultProtocol")&&(L=null),v8.default.valid(te)){let le=te;if(typeof u<"u")te=u+te;else if(n!==!1){let ye=typeof n=="string"?n:A.range;te=O0e(ye,{project:r})+te}let pe=W.makeDescriptor(T,W.makeRange({protocol:L,source:U,params:J,selector:te}));(await E.getCandidates(r.configuration.normalizeDependency(pe),{},v)).length!==1&&(te=le)}return W.makeDescriptor(T,W.makeRange({protocol:L,source:U,params:J,selector:te}))}async function spt(t){return await oe.mktempPromise(async e=>{let r=Ve.create(e);return r.useWithSource(e,{enableMirror:!1,compressionLevel:0},e,{overwrite:!0}),await t(new Lr(e,{configuration:r,check:!1,immutable:!1}))})}var bh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.dev=ge.Boolean("-D,--dev",!1,{description:"Add a package as a dev dependency"});this.peer=ge.Boolean("-P,--peer",!1,{description:"Add a package as a peer dependency"});this.optional=ge.Boolean("-O,--optional",!1,{description:"Add / upgrade a package to an optional regular / peer dependency"});this.preferDev=ge.Boolean("--prefer-dev",!1,{description:"Add / upgrade a package to a dev dependency"});this.interactive=ge.Boolean("-i,--interactive",{description:"Reuse the specified package from other workspaces in the project"});this.cached=ge.Boolean("--cached",!1,{description:"Reuse the highest version already used somewhere within the project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.silent=ge.Boolean("--silent",{hidden:!0});this.packages=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=A||r.get("preferReuse"),h=p2(this,o),E=[p?"reuse":void 0,"project",this.cached?"cache":void 0,"latest"].filter(U=>typeof U<"u"),I=A?1/0:1,v=await Promise.all(this.packages.map(async U=>{let J=U.match(/^\.{0,2}\//)?await P8(U,{cwd:this.context.cwd,workspace:a}):W.tryParseDescriptor(U),te=U.match(/^(https?:|git@github)/);if(te)throw new it(`It seems you are trying to add a package using a ${de.pretty(r,`${te[0]}...`,de.Type.RANGE)} url; we now require package names to be explicitly specified. +Try running the command again with the package name prefixed: ${de.pretty(r,"yarn add",de.Type.CODE)} ${de.pretty(r,W.makeDescriptor(W.makeIdent(null,"my-package"),`${te[0]}...`),de.Type.DESCRIPTOR)}`);if(!J)throw new it(`The ${de.pretty(r,U,de.Type.CODE)} string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?`);let le=opt(a,J,{dev:this.dev,peer:this.peer,preferDev:this.preferDev,optional:this.optional});return await Promise.all(le.map(async Ae=>{let ye=await h2(J,{project:o,workspace:a,cache:n,fixed:u,target:Ae,modifier:h,strategies:E,maxResults:I});return{request:J,suggestedDescriptors:ye,target:Ae}}))})).then(U=>U.flat()),b=await AA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async U=>{for(let{request:J,suggestedDescriptors:{suggestions:te,rejections:le}}of v)if(te.filter(Ae=>Ae.descriptor!==null).length===0){let[Ae]=le;if(typeof Ae>"u")throw new Error("Assertion failed: Expected an error to have been set");o.configuration.get("enableNetwork")?U.reportError(27,`${W.prettyDescriptor(r,J)} can't be resolved to a satisfying range`):U.reportError(27,`${W.prettyDescriptor(r,J)} can't be resolved to a satisfying range (note: network resolution has been disabled)`),U.reportSeparator(),U.reportExceptionOnce(Ae)}});if(b.hasErrors())return b.exitCode();let C=!1,T=[],L=[];for(let{suggestedDescriptors:{suggestions:U},target:J}of v){let te,le=U.filter(ae=>ae.descriptor!==null),pe=le[0].descriptor,Ae=le.every(ae=>W.areDescriptorsEqual(ae.descriptor,pe));le.length===1||Ae?te=pe:(C=!0,{answer:te}=await(0,j0e.prompt)({type:"select",name:"answer",message:"Which range do you want to use?",choices:U.map(({descriptor:ae,name:we,reason:Pe})=>ae?{name:we,hint:Pe,descriptor:ae}:{name:we,hint:Pe,disabled:!0}),onCancel:()=>process.exit(130),result(ae){return this.find(ae,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let ye=a.manifest[J].get(te.identHash);(typeof ye>"u"||ye.descriptorHash!==te.descriptorHash)&&(a.manifest[J].set(te.identHash,te),this.optional&&(J==="dependencies"?a.manifest.ensureDependencyMeta({...te,range:"unknown"}).optional=!0:J==="peerDependencies"&&(a.manifest.ensurePeerDependencyMeta({...te,range:"unknown"}).optional=!0)),typeof ye>"u"?T.push([a,J,te,E]):L.push([a,J,ye,te]))}return await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyAddition,T),await r.triggerMultipleHooks(U=>U.afterWorkspaceDependencyReplacement,L),C&&this.context.stdout.write(` +`),await o.installWithNewReport({json:this.json,stdout:this.context.stdout,quiet:this.context.quiet},{cache:n,mode:this.mode})}};bh.paths=[["add"]],bh.usage=nt.Usage({description:"add dependencies to the project",details:"\n This command adds a package to the package.json for the nearest workspace.\n\n - If it didn't exist before, the package will by default be added to the regular `dependencies` field, but this behavior can be overriden thanks to the `-D,--dev` flag (which will cause the dependency to be added to the `devDependencies` field instead) and the `-P,--peer` flag (which will do the same but for `peerDependencies`).\n\n - If the package was already listed in your dependencies, it will by default be upgraded whether it's part of your `dependencies` or `devDependencies` (it won't ever update `peerDependencies`, though).\n\n - If set, the `--prefer-dev` flag will operate as a more flexible `-D,--dev` in that it will add the package to your `devDependencies` if it isn't already listed in either `dependencies` or `devDependencies`, but it will also happily upgrade your `dependencies` if that's what you already use (whereas `-D,--dev` would throw an exception).\n\n - If set, the `-O,--optional` flag will add the package to the `optionalDependencies` field and, in combination with the `-P,--peer` flag, it will add the package as an optional peer dependency. If the package was already listed in your `dependencies`, it will be upgraded to `optionalDependencies`. If the package was already listed in your `peerDependencies`, in combination with the `-P,--peer` flag, it will be upgraded to an optional peer dependency: `\"peerDependenciesMeta\": { \"\": { \"optional\": true } }`\n\n - If the added package doesn't specify a range at all its `latest` tag will be resolved and the returned version will be used to generate a new semver range (using the `^` modifier by default unless otherwise configured via the `defaultSemverRangePrefix` configuration, or the `~` modifier if `-T,--tilde` is specified, or no modifier at all if `-E,--exact` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use `-P,--peer` the default range will be `*` and won't be resolved at all.\n\n - If the added package specifies a range (such as `^1.0.0`, `latest`, or `rc`), Yarn will add this range as-is in the resulting package.json entry (in particular, tags such as `rc` will be encoded as-is rather than being converted into a semver range).\n\n If the `--cached` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency.\n\n If the `-i,--interactive` option is used (or if the `preferInteractive` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n For a compilation of all the supported protocols, please consult the dedicated page from our website: https://yarnpkg.com/protocols.\n ",examples:[["Add a regular package to the current workspace","$0 add lodash"],["Add a specific version for a package to the current workspace","$0 add lodash@1.2.3"],["Add a package from a GitHub repository (the master branch) to the current workspace using a URL","$0 add lodash@https://github.com/lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol","$0 add lodash@github:lodash/lodash"],["Add a package from a GitHub repository (the master branch) to the current workspace using the GitHub protocol (shorthand)","$0 add lodash@lodash/lodash"],["Add a package from a specific branch of a GitHub repository to the current workspace using the GitHub protocol (shorthand)","$0 add lodash-es@lodash/lodash#es"]]});function opt(t,e,{dev:r,peer:o,preferDev:a,optional:n}){let u=t.manifest["dependencies"].has(e.identHash),A=t.manifest["devDependencies"].has(e.identHash),p=t.manifest["peerDependencies"].has(e.identHash);if((r||o)&&u)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a regular dependency - remove the -D,-P flags or remove it from your dependencies first`);if(!r&&!o&&p)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - use either of -D or -P, or remove it from your peer dependencies first`);if(n&&A)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a dev dependency - remove the -O flag or remove it from your dev dependencies first`);if(n&&!o&&p)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" is already listed as a peer dependency - remove the -O flag or add the -P flag or remove it from your peer dependencies first`);if((r||a)&&n)throw new it(`Package "${W.prettyIdent(t.project.configuration,e)}" cannot simultaneously be a dev dependency and an optional dependency`);let h=[];return o&&h.push("peerDependencies"),(r||a)&&h.push("devDependencies"),n&&h.push("dependencies"),h.length>0?h:A?["devDependencies"]:p?["peerDependencies"]:["dependencies"]}Ye();Ye();qt();var kh=class extends ut{constructor(){super(...arguments);this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Print both the binary name and the locator of the package that provides the binary"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.name=ge.String({required:!1})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await St.find(r,this.context.cwd);if(await o.restoreInstallState(),this.name){let A=(await un.getPackageAccessibleBinaries(a,{project:o})).get(this.name);if(!A)throw new it(`Couldn't find a binary named "${this.name}" for package "${W.prettyLocator(r,a)}"`);let[,p]=A;return this.context.stdout.write(`${p} +`),0}return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async u=>{let A=await un.getPackageAccessibleBinaries(a,{project:o}),h=Array.from(A.keys()).reduce((E,I)=>Math.max(E,I.length),0);for(let[E,[I,v]]of A)u.reportJson({name:E,source:W.stringifyIdent(I),path:v});if(this.verbose)for(let[E,[I]]of A)u.reportInfo(null,`${E.padEnd(h," ")} ${W.prettyLocator(r,I)}`);else for(let E of A.keys())u.reportInfo(null,E)})).exitCode()}};kh.paths=[["bin"]],kh.usage=nt.Usage({description:"get the path to a binary script",details:` + When used without arguments, this command will print the list of all the binaries available in the current workspace. Adding the \`-v,--verbose\` flag will cause the output to contain both the binary name and the locator of the package that provides the binary. + + When an argument is specified, this command will just print the path to the binary on the standard output and exit. Note that the reported path may be stored within a zip archive. + `,examples:[["List all the available binaries","$0 bin"],["Print the path to a specific binary","$0 bin eslint"]]});Ye();Pt();qt();var Qh=class extends ut{constructor(){super(...arguments);this.mirror=ge.Boolean("--mirror",!1,{description:"Remove the global cache files instead of the local cache files"});this.all=ge.Boolean("--all",!1,{description:"Remove both the global cache files and the local cache files of the current project"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=await Lr.find(r);return(await Nt.start({configuration:r,stdout:this.context.stdout},async()=>{let n=(this.all||this.mirror)&&o.mirrorCwd!==null,u=!this.mirror;n&&(await oe.removePromise(o.mirrorCwd),await r.triggerHook(A=>A.cleanGlobalArtifacts,r)),u&&await oe.removePromise(o.cwd)})).exitCode()}};Qh.paths=[["cache","clean"],["cache","clear"]],Qh.usage=nt.Usage({description:"remove the shared cache files",details:` + This command will remove all the files from the cache. + `,examples:[["Remove all the local archives","$0 cache clean"],["Remove all the archives stored in the ~/.yarn directory","$0 cache clean --mirror"]]});Ye();qt();var G0e=$e(g2()),x8=Be("util"),Fh=class extends ut{constructor(){super(...arguments);this.why=ge.Boolean("--why",!1,{description:"Print the explanation for why a setting has its value"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.unsafe=ge.Boolean("--no-redacted",!1,{description:"Don't redact secrets (such as tokens) from the output"});this.name=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=this.name.replace(/[.[].*$/,""),a=this.name.replace(/^[^.[]*/,"");if(typeof r.settings.get(o)>"u")throw new it(`Couldn't find a configuration settings named "${o}"`);let u=r.getSpecial(o,{hideSecrets:!this.unsafe,getNativePaths:!0}),A=je.convertMapsToIndexableObjects(u),p=a?(0,G0e.default)(A,a):A,h=await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async E=>{E.reportJson(p)});if(!this.json){if(typeof p=="string")return this.context.stdout.write(`${p} +`),h.exitCode();x8.inspect.styles.name="cyan",this.context.stdout.write(`${(0,x8.inspect)(p,{depth:1/0,colors:r.get("enableColors"),compact:!1})} +`)}return h.exitCode()}};Fh.paths=[["config","get"]],Fh.usage=nt.Usage({description:"read a configuration settings",details:` + This command will print a configuration setting. + + Secrets (such as tokens) will be redacted from the output by default. If this behavior isn't desired, set the \`--no-redacted\` to get the untransformed value. + `,examples:[["Print a simple configuration setting","yarn config get yarnPath"],["Print a complex configuration setting","yarn config get packageExtensions"],["Print a nested field from the configuration",`yarn config get 'npmScopes["my-company"].npmRegistryServer'`],["Print a token from the configuration","yarn config get npmAuthToken --no-redacted"],["Print a configuration setting as JSON","yarn config get packageExtensions --json"]]});Ye();qt();var Rge=$e(F8()),Nge=$e(g2()),Lge=$e(T8()),R8=Be("util"),Th=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Set complex configuration settings to JSON values"});this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String();this.value=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);if(a==="enableStrictSettings")throw new it("This setting only affects the file it's in, and thus cannot be set from the CLI");let A=this.json?JSON.parse(this.value):this.value;await(this.home?C=>Ve.updateHomeConfiguration(C):C=>Ve.updateConfiguration(o(),C))(C=>{if(n){let T=(0,Rge.default)(C);return(0,Lge.default)(T,this.name,A),T}else return{...C,[a]:A}});let E=(await Ve.find(this.context.cwd,this.context.plugins)).getSpecial(a,{hideSecrets:!0,getNativePaths:!0}),I=je.convertMapsToIndexableObjects(E),v=n?(0,Nge.default)(I,n):I;return(await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async C=>{R8.inspect.styles.name="cyan",C.reportInfo(0,`Successfully set ${this.name} to ${(0,R8.inspect)(v,{depth:1/0,colors:r.get("enableColors"),compact:!1})}`)})).exitCode()}};Th.paths=[["config","set"]],Th.usage=nt.Usage({description:"change a configuration settings",details:` + This command will set a configuration setting. + + When used without the \`--json\` flag, it can only set a simple configuration setting (a string, a number, or a boolean). + + When used with the \`--json\` flag, it can set both simple and complex configuration settings, including Arrays and Objects. + `,examples:[["Set a simple configuration setting (a string, a number, or a boolean)","yarn config set initScope myScope"],["Set a simple configuration setting (a string, a number, or a boolean) using the `--json` flag",'yarn config set initScope --json \\"myScope\\"'],["Set a complex configuration setting (an Array) using the `--json` flag",`yarn config set unsafeHttpWhitelist --json '["*.example.com", "example.com"]'`],["Set a complex configuration setting (an Object) using the `--json` flag",`yarn config set packageExtensions --json '{ "@babel/parser@*": { "dependencies": { "@babel/types": "*" } } }'`],["Set a nested configuration setting",'yarn config set npmScopes.company.npmRegistryServer "https://npm.example.com"'],["Set a nested configuration setting using indexed access for non-simple keys",`yarn config set 'npmRegistries["//npm.example.com"].npmAuthToken' "ffffffff-ffff-ffff-ffff-ffffffffffff"`]]});Ye();qt();var Vge=$e(F8()),Kge=$e(_ge()),Jge=$e(L8()),Rh=class extends ut{constructor(){super(...arguments);this.home=ge.Boolean("-H,--home",!1,{description:"Update the home configuration instead of the project configuration"});this.name=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=()=>{if(!r.projectCwd)throw new it("This command must be run from within a project folder");return r.projectCwd},a=this.name.replace(/[.[].*$/,""),n=this.name.replace(/^[^.[]*\.?/,"");if(typeof r.settings.get(a)>"u")throw new it(`Couldn't find a configuration settings named "${a}"`);let A=this.home?h=>Ve.updateHomeConfiguration(h):h=>Ve.updateConfiguration(o(),h);return(await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout},async h=>{let E=!1;await A(I=>{if(!(0,Kge.default)(I,this.name))return h.reportWarning(0,`Configuration doesn't contain setting ${this.name}; there is nothing to unset`),E=!0,I;let v=n?(0,Vge.default)(I):{...I};return(0,Jge.default)(v,this.name),v}),E||h.reportInfo(0,`Successfully unset ${this.name}`)})).exitCode()}};Rh.paths=[["config","unset"]],Rh.usage=nt.Usage({description:"unset a configuration setting",details:` + This command will unset a configuration setting. + `,examples:[["Unset a simple configuration setting","yarn config unset initScope"],["Unset a complex configuration setting","yarn config unset packageExtensions"],["Unset a nested configuration setting","yarn config unset npmScopes.company.npmRegistryServer"]]});Ye();Pt();qt();var hk=Be("util"),Nh=class extends ut{constructor(){super(...arguments);this.noDefaults=ge.Boolean("--no-defaults",!1,{description:"Omit the default values from the display"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.verbose=ge.Boolean("-v,--verbose",{hidden:!0});this.why=ge.Boolean("--why",{hidden:!0});this.names=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins,{strict:!1}),o=await NE({configuration:r,stdout:this.context.stdout,forceError:this.json},[{option:this.verbose,message:"The --verbose option is deprecated, the settings' descriptions are now always displayed"},{option:this.why,message:"The --why option is deprecated, the settings' sources are now always displayed"}]);if(o!==null)return o;let a=this.names.length>0?[...new Set(this.names)].sort():[...r.settings.keys()].sort(),n,u=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async A=>{if(r.invalid.size>0&&!this.json){for(let[p,h]of r.invalid)A.reportError(34,`Invalid configuration key "${p}" in ${h}`);A.reportSeparator()}if(this.json)for(let p of a){let h=r.settings.get(p);typeof h>"u"&&A.reportError(34,`No configuration key named "${p}"`);let E=r.getSpecial(p,{hideSecrets:!0,getNativePaths:!0}),I=r.sources.get(p)??"",v=I&&I[0]!=="<"?ue.fromPortablePath(I):I;A.reportJson({key:p,effective:E,source:v,...h})}else{let p={breakLength:1/0,colors:r.get("enableColors"),maxArrayLength:2},h={},E={children:h};for(let I of a){if(this.noDefaults&&!r.sources.has(I))continue;let v=r.settings.get(I),b=r.sources.get(I)??"",C=r.getSpecial(I,{hideSecrets:!0,getNativePaths:!0}),T={Description:{label:"Description",value:de.tuple(de.Type.MARKDOWN,{text:v.description,format:this.cli.format(),paragraphs:!1})},Source:{label:"Source",value:de.tuple(b[0]==="<"?de.Type.CODE:de.Type.PATH,b)}};h[I]={value:de.tuple(de.Type.CODE,I),children:T};let L=(U,J)=>{for(let[te,le]of J)if(le instanceof Map){let pe={};U[te]={children:pe},L(pe,le)}else U[te]={label:te,value:de.tuple(de.Type.NO_HINT,(0,hk.inspect)(le,p))}};C instanceof Map?L(T,C):T.Value={label:"Value",value:de.tuple(de.Type.NO_HINT,(0,hk.inspect)(C,p))}}a.length!==1&&(n=void 0),$s.emitTree(E,{configuration:r,json:this.json,stdout:this.context.stdout,separators:2})}});if(!this.json&&typeof n<"u"){let A=a[0],p=(0,hk.inspect)(r.getSpecial(A,{hideSecrets:!0,getNativePaths:!0}),{colors:r.get("enableColors")});this.context.stdout.write(` +`),this.context.stdout.write(`${p} +`)}return u.exitCode()}};Nh.paths=[["config"]],Nh.usage=nt.Usage({description:"display the current configuration",details:` + This command prints the current active configuration settings. + `,examples:[["Print the active configuration settings","$0 config"]]});Ye();qt();Za();var gk={};Kt(gk,{Strategy:()=>d2,acceptedStrategies:()=>j0t,dedupe:()=>M8});Ye();Ye();var zge=$e(Zo()),d2=(e=>(e.HIGHEST="highest",e))(d2||{}),j0t=new Set(Object.values(d2)),q0t={highest:async(t,e,{resolver:r,fetcher:o,resolveOptions:a,fetchOptions:n})=>{let u=new Map;for(let[p,h]of t.storedResolutions){let E=t.storedDescriptors.get(p);if(typeof E>"u")throw new Error(`Assertion failed: The descriptor (${p}) should have been registered`);je.getSetWithDefault(u,E.identHash).add(h)}let A=new Map(je.mapAndFilter(t.storedDescriptors.values(),p=>W.isVirtualDescriptor(p)?je.mapAndFilter.skip:[p.descriptorHash,je.makeDeferred()]));for(let p of t.storedDescriptors.values()){let h=A.get(p.descriptorHash);if(typeof h>"u")throw new Error(`Assertion failed: The descriptor (${p.descriptorHash}) should have been registered`);let E=t.storedResolutions.get(p.descriptorHash);if(typeof E>"u")throw new Error(`Assertion failed: The resolution (${p.descriptorHash}) should have been registered`);let I=t.originalPackages.get(E);if(typeof I>"u")throw new Error(`Assertion failed: The package (${E}) should have been registered`);Promise.resolve().then(async()=>{let v=r.getResolutionDependencies(p,a),b=Object.fromEntries(await je.allSettledSafe(Object.entries(v).map(async([te,le])=>{let pe=A.get(le.descriptorHash);if(typeof pe>"u")throw new Error(`Assertion failed: The descriptor (${le.descriptorHash}) should have been registered`);let Ae=await pe.promise;if(!Ae)throw new Error("Assertion failed: Expected the dependency to have been through the dedupe process itself");return[te,Ae.updatedPackage]})));if(e.length&&!zge.default.isMatch(W.stringifyIdent(p),e)||!r.shouldPersistResolution(I,a))return I;let C=u.get(p.identHash);if(typeof C>"u")throw new Error(`Assertion failed: The resolutions (${p.identHash}) should have been registered`);if(C.size===1)return I;let T=[...C].map(te=>{let le=t.originalPackages.get(te);if(typeof le>"u")throw new Error(`Assertion failed: The package (${te}) should have been registered`);return le}),L=await r.getSatisfying(p,b,T,a),U=L.locators?.[0];if(typeof U>"u"||!L.sorted)return I;let J=t.originalPackages.get(U.locatorHash);if(typeof J>"u")throw new Error(`Assertion failed: The package (${U.locatorHash}) should have been registered`);return J}).then(async v=>{let b=await t.preparePackage(v,{resolver:r,resolveOptions:a});h.resolve({descriptor:p,currentPackage:I,updatedPackage:v,resolvedPackage:b})}).catch(v=>{h.reject(v)})}return[...A.values()].map(p=>p.promise)}};async function M8(t,{strategy:e,patterns:r,cache:o,report:a}){let{configuration:n}=t,u=new Qi,A=n.makeResolver(),p=n.makeFetcher(),h={cache:o,checksums:t.storedChecksums,fetcher:p,project:t,report:u,cacheOptions:{skipIntegrityCheck:!0}},E={project:t,resolver:A,report:u,fetchOptions:h};return await a.startTimerPromise("Deduplication step",async()=>{let I=q0t[e],v=await I(t,r,{resolver:A,resolveOptions:E,fetcher:p,fetchOptions:h}),b=Xs.progressViaCounter(v.length);await a.reportProgress(b);let C=0;await Promise.all(v.map(U=>U.then(J=>{if(J===null||J.currentPackage.locatorHash===J.updatedPackage.locatorHash)return;C++;let{descriptor:te,currentPackage:le,updatedPackage:pe}=J;a.reportInfo(0,`${W.prettyDescriptor(n,te)} can be deduped from ${W.prettyLocator(n,le)} to ${W.prettyLocator(n,pe)}`),a.reportJson({descriptor:W.stringifyDescriptor(te),currentResolution:W.stringifyLocator(le),updatedResolution:W.stringifyLocator(pe)}),t.storedResolutions.set(te.descriptorHash,pe.locatorHash)}).finally(()=>b.tick())));let T;switch(C){case 0:T="No packages";break;case 1:T="One package";break;default:T=`${C} packages`}let L=de.pretty(n,e,de.Type.CODE);return a.reportInfo(0,`${T} can be deduped using the ${L} strategy`),C})}var Lh=class extends ut{constructor(){super(...arguments);this.strategy=ge.String("-s,--strategy","highest",{description:"The strategy to use when deduping dependencies",validator:Vs(d2)});this.check=ge.Boolean("-c,--check",!1,{description:"Exit with exit code 1 when duplicates are found, without persisting the dependency tree"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.patterns=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=await Lr.find(r);await o.restoreInstallState({restoreResolutions:!1});let n=0,u=await Nt.start({configuration:r,includeFooter:!1,stdout:this.context.stdout,json:this.json},async A=>{n=await M8(o,{strategy:this.strategy,patterns:this.patterns,cache:a,report:A})});return u.hasErrors()?u.exitCode():this.check?n?1:0:await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:a,mode:this.mode})}};Lh.paths=[["dedupe"]],Lh.usage=nt.Usage({description:"deduplicate dependencies with overlapping ranges",details:"\n Duplicates are defined as descriptors with overlapping ranges being resolved and locked to different locators. They are a natural consequence of Yarn's deterministic installs, but they can sometimes pile up and unnecessarily increase the size of your project.\n\n This command dedupes dependencies in the current project using different strategies (only one is implemented at the moment):\n\n - `highest`: Reuses (where possible) the locators with the highest versions. This means that dependencies can only be upgraded, never downgraded. It's also guaranteed that it never takes more than a single pass to dedupe the entire dependency tree.\n\n **Note:** Even though it never produces a wrong dependency tree, this command should be used with caution, as it modifies the dependency tree, which can sometimes cause problems when packages don't strictly follow semver recommendations. Because of this, it is recommended to also review the changes manually.\n\n If set, the `-c,--check` flag will only report the found duplicates, without persisting the modified dependency tree. If changes are found, the command will exit with a non-zero exit code, making it suitable for CI purposes.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n ### In-depth explanation:\n\n Yarn doesn't deduplicate dependencies by default, otherwise installs wouldn't be deterministic and the lockfile would be useless. What it actually does is that it tries to not duplicate dependencies in the first place.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@*`will cause Yarn to reuse `foo@2.3.4`, even if the latest `foo` is actually `foo@2.10.14`, thus preventing unnecessary duplication.\n\n Duplication happens when Yarn can't unlock dependencies that have already been locked inside the lockfile.\n\n **Example:** If `foo@^2.3.4` (a dependency of a dependency) has already been resolved to `foo@2.3.4`, running `yarn add foo@2.10.14` will cause Yarn to install `foo@2.10.14` because the existing resolution doesn't satisfy the range `2.10.14`. This behavior can lead to (sometimes) unwanted duplication, since now the lockfile contains 2 separate resolutions for the 2 `foo` descriptors, even though they have overlapping ranges, which means that the lockfile can be simplified so that both descriptors resolve to `foo@2.10.14`.\n ",examples:[["Dedupe all packages","$0 dedupe"],["Dedupe all packages using a specific strategy","$0 dedupe --strategy highest"],["Dedupe a specific package","$0 dedupe lodash"],["Dedupe all packages with the `@babel/*` scope","$0 dedupe '@babel/*'"],["Check for duplicates (can be used as a CI step)","$0 dedupe --check"]]});Ye();qt();var Wd=class extends ut{async execute(){let{plugins:e}=await Ve.find(this.context.cwd,this.context.plugins),r=[];for(let u of e){let{commands:A}=u[1];if(A){let h=as.from(A).definitions();r.push([u[0],h])}}let o=this.cli.definitions(),a=(u,A)=>u.split(" ").slice(1).join()===A.split(" ").slice(1).join(),n=Xge()["@yarnpkg/builder"].bundles.standard;for(let u of r){let A=u[1];for(let p of A)o.find(h=>a(h.path,p.path)).plugin={name:u[0],isDefault:n.includes(u[0])}}this.context.stdout.write(`${JSON.stringify(o,null,2)} +`)}};Wd.paths=[["--clipanion=definitions"]];var Vd=class extends ut{async execute(){this.context.stdout.write(this.cli.usage(null))}};Vd.paths=[["help"],["--help"],["-h"]];Ye();Pt();qt();var dC=class extends ut{constructor(){super(...arguments);this.leadingArgument=ge.String();this.args=ge.Proxy()}async execute(){if(this.leadingArgument.match(/[\\/]/)&&!W.tryParseIdent(this.leadingArgument)){let r=K.resolve(this.context.cwd,ue.toPortablePath(this.leadingArgument));return await this.cli.run(this.args,{cwd:r})}else return await this.cli.run(["run",this.leadingArgument,...this.args])}};Ye();var Kd=class extends ut{async execute(){this.context.stdout.write(`${tn||""} +`)}};Kd.paths=[["-v"],["--version"]];Ye();Ye();qt();var Mh=class extends ut{constructor(){super(...arguments);this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,locator:a}=await St.find(r,this.context.cwd);return await o.restoreInstallState(),await un.executePackageShellcode(a,this.commandName,this.args,{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,project:o})}};Mh.paths=[["exec"]],Mh.usage=nt.Usage({description:"execute a shell script",details:` + This command simply executes a shell script within the context of the root directory of the active workspace using the portable shell. + + It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). + `,examples:[["Execute a single shell command","$0 exec echo Hello World"],["Execute a shell script",'$0 exec "tsc & babel src --out-dir lib"']]});Ye();qt();Za();var Oh=class extends ut{constructor(){super(...arguments);this.hash=ge.String({validator:aP(Ey(),[sI(/^p[0-9a-f]{5}$/)])})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return await o.restoreInstallState({restoreResolutions:!1}),await o.applyLightResolution(),await Y0t(this.hash,o,{stdout:this.context.stdout})}};Oh.paths=[["explain","peer-requirements"]],Oh.usage=nt.Usage({description:"explain a set of peer requirements",details:` + A set of peer requirements represents all peer requirements that a dependent must satisfy when providing a given peer request to a requester and its descendants. + + When the hash argument is specified, this command prints a detailed explanation of all requirements of the set corresponding to the hash and whether they're satisfied or not. + + When used without arguments, this command lists all sets of peer requirements and the corresponding hash that can be used to get detailed information about a given set. + + **Note:** A hash is a six-letter p-prefixed code that can be obtained from peer dependency warnings or from the list of all peer requirements (\`yarn explain peer-requirements\`). + `,examples:[["Explain the corresponding set of peer requirements for a hash","$0 explain peer-requirements p1a4ed"],["List all sets of peer requirements","$0 explain peer-requirements"]]});async function Y0t(t,e,r){let o=e.peerWarnings.find(n=>n.hash===t);if(typeof o>"u")throw new Error(`No peerDependency requirements found for hash: "${t}"`);return(await Nt.start({configuration:e.configuration,stdout:r.stdout,includeFooter:!1,includePrefix:!1},async n=>{let u=de.mark(e.configuration);switch(o.type){case 2:{n.reportInfo(0,`We have a problem with ${de.pretty(e.configuration,o.requested,de.Type.IDENT)}, which is provided with version ${W.prettyReference(e.configuration,o.version)}.`),n.reportInfo(0,"It is needed by the following direct dependencies of workspaces in your project:"),n.reportSeparator();for(let h of o.requesters.values()){let E=e.storedPackages.get(h.locatorHash);if(!E)throw new Error("Assertion failed: Expected the package to be registered");let I=E?.peerDependencies.get(o.requested.identHash);if(!I)throw new Error("Assertion failed: Expected the package to list the peer dependency");let v=kr.satisfiesWithPrereleases(o.version,I.range)?u.Check:u.Cross;n.reportInfo(null,` ${v} ${W.prettyLocator(e.configuration,h)} (via ${W.prettyRange(e.configuration,I.range)})`)}let A=[...o.links.values()].filter(h=>!o.requesters.has(h.locatorHash));if(A.length>0){n.reportSeparator(),n.reportInfo(0,`However, those packages themselves have more dependencies listing ${W.prettyIdent(e.configuration,o.requested)} as peer dependency:`),n.reportSeparator();for(let h of A){let E=e.storedPackages.get(h.locatorHash);if(!E)throw new Error("Assertion failed: Expected the package to be registered");let I=E?.peerDependencies.get(o.requested.identHash);if(!I)throw new Error("Assertion failed: Expected the package to list the peer dependency");let v=kr.satisfiesWithPrereleases(o.version,I.range)?u.Check:u.Cross;n.reportInfo(null,` ${v} ${W.prettyLocator(e.configuration,h)} (via ${W.prettyRange(e.configuration,I.range)})`)}}let p=Array.from(o.links.values(),h=>{let E=e.storedPackages.get(h.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: Expected the package to be registered");let I=E.peerDependencies.get(o.requested.identHash);if(typeof I>"u")throw new Error("Assertion failed: Expected the ident to be registered");return I.range});if(p.length>1){let h=kr.simplifyRanges(p);n.reportSeparator(),h===null?(n.reportInfo(0,"Unfortunately, put together, we found no single range that can satisfy all those peer requirements."),n.reportInfo(0,`Your best option may be to try to upgrade some dependencies with ${de.pretty(e.configuration,"yarn up",de.Type.CODE)}, or silence the warning via ${de.pretty(e.configuration,"logFilters",de.Type.CODE)}.`)):n.reportInfo(0,`Put together, the final range we computed is ${de.pretty(e.configuration,h,de.Type.RANGE)}`)}}break;default:n.reportInfo(0,`The ${de.pretty(e.configuration,"yarn explain peer-requirements",de.Type.CODE)} command doesn't support this warning type yet.`);break}})).exitCode()}Ye();qt();Za();Ye();Ye();Pt();qt();var Zge=$e(zn()),Uh=class extends ut{constructor(){super(...arguments);this.useYarnPath=ge.Boolean("--yarn-path",{description:"Set the yarnPath setting even if the version can be accessed by Corepack"});this.onlyIfNeeded=ge.Boolean("--only-if-needed",!1,{description:"Only lock the Yarn version if it isn't already locked"});this.version=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);if(this.onlyIfNeeded&&r.get("yarnPath")){let A=r.sources.get("yarnPath");if(!A)throw new Error("Assertion failed: Expected 'yarnPath' to have a source");let p=r.projectCwd??r.startingCwd;if(K.contains(p,A))return 0}let o=()=>{if(typeof tn>"u")throw new it("The --install flag can only be used without explicit version specifier from the Yarn CLI");return`file://${process.argv[1]}`},a,n=(A,p)=>({version:p,url:A.replace(/\{\}/g,p)});if(this.version==="self")a={url:o(),version:tn??"self"};else if(this.version==="latest"||this.version==="berry"||this.version==="stable")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await m2(r,"stable"));else if(this.version==="canary")a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await m2(r,"canary"));else if(this.version==="classic")a={url:"https://classic.yarnpkg.com/latest.js",version:"classic"};else if(this.version.match(/^https?:/))a={url:this.version,version:"remote"};else if(this.version.match(/^\.{0,2}[\\/]/)||ue.isAbsolute(this.version))a={url:`file://${K.resolve(ue.toPortablePath(this.version))}`,version:"file"};else if(kr.satisfiesWithPrereleases(this.version,">=2.0.0"))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",this.version);else if(kr.satisfiesWithPrereleases(this.version,"^0.x || ^1.x"))a=n("https://github.com/yarnpkg/yarn/releases/download/v{}/yarn-{}.js",this.version);else if(kr.validRange(this.version))a=n("https://repo.yarnpkg.com/{}/packages/yarnpkg-cli/bin/yarn.js",await W0t(r,this.version));else throw new it(`Invalid version descriptor "${this.version}"`);return(await Nt.start({configuration:r,stdout:this.context.stdout,includeLogs:!this.context.quiet},async A=>{let p=async()=>{let h="file://";return a.url.startsWith(h)?(A.reportInfo(0,`Retrieving ${de.pretty(r,a.url,de.Type.PATH)}`),await oe.readFilePromise(a.url.slice(h.length))):(A.reportInfo(0,`Downloading ${de.pretty(r,a.url,de.Type.URL)}`),await rn.get(a.url,{configuration:r}))};await O8(r,a.version,p,{report:A,useYarnPath:this.useYarnPath})})).exitCode()}};Uh.paths=[["set","version"]],Uh.usage=nt.Usage({description:"lock the Yarn version used by the project",details:"\n This command will set a specific release of Yarn to be used by Corepack: https://nodejs.org/api/corepack.html.\n\n By default it only will set the `packageManager` field at the root of your project, but if the referenced release cannot be represented this way, if you already have `yarnPath` configured, or if you set the `--yarn-path` command line flag, then the release will also be downloaded from the Yarn GitHub repository, stored inside your project, and referenced via the `yarnPath` settings from your project `.yarnrc.yml` file.\n\n A very good use case for this command is to enforce the version of Yarn used by any single member of your team inside the same project - by doing this you ensure that you have control over Yarn upgrades and downgrades (including on your deployment servers), and get rid of most of the headaches related to someone using a slightly different version and getting different behavior.\n\n The version specifier can be:\n\n - a tag:\n - `latest` / `berry` / `stable` -> the most recent stable berry (`>=2.0.0`) release\n - `canary` -> the most recent canary (release candidate) berry (`>=2.0.0`) release\n - `classic` -> the most recent classic (`^0.x || ^1.x`) release\n\n - a semver range (e.g. `2.x`) -> the most recent version satisfying the range (limited to berry releases)\n\n - a semver version (e.g. `2.4.1`, `1.22.1`)\n\n - a local file referenced through either a relative or absolute path\n\n - `self` -> the version used to invoke the command\n ",examples:[["Download the latest release from the Yarn repository","$0 set version latest"],["Download the latest canary release from the Yarn repository","$0 set version canary"],["Download the latest classic release from the Yarn repository","$0 set version classic"],["Download the most recent Yarn 3 build","$0 set version 3.x"],["Download a specific Yarn 2 build","$0 set version 2.0.0-rc.30"],["Switch back to a specific Yarn 1 release","$0 set version 1.22.1"],["Use a release from the local filesystem","$0 set version ./yarn.cjs"],["Use a release from a URL","$0 set version https://repo.yarnpkg.com/3.1.0/packages/yarnpkg-cli/bin/yarn.js"],["Download the version used to invoke the command","$0 set version self"]]});async function W0t(t,e){let o=(await rn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0})).tags.filter(a=>kr.satisfiesWithPrereleases(a,e));if(o.length===0)throw new it(`No matching release found for range ${de.pretty(t,e,de.Type.RANGE)}.`);return o[0]}async function m2(t,e){let r=await rn.get("https://repo.yarnpkg.com/tags",{configuration:t,jsonResponse:!0});if(!r.latest[e])throw new it(`Tag ${de.pretty(t,e,de.Type.RANGE)} not found`);return r.latest[e]}async function O8(t,e,r,{report:o,useYarnPath:a}){let n,u=async()=>(typeof n>"u"&&(n=await r()),n);if(e===null){let te=await u();await oe.mktempPromise(async le=>{let pe=K.join(le,"yarn.cjs");await oe.writeFilePromise(pe,te);let{stdout:Ae}=await Ur.execvp(process.execPath,[ue.fromPortablePath(pe),"--version"],{cwd:le,env:{...t.env,YARN_IGNORE_PATH:"1"}});if(e=Ae.trim(),!Zge.default.valid(e))throw new Error(`Invalid semver version. ${de.pretty(t,"yarn --version",de.Type.CODE)} returned: +${e}`)})}let A=t.projectCwd??t.startingCwd,p=K.resolve(A,".yarn/releases"),h=K.resolve(p,`yarn-${e}.cjs`),E=K.relative(t.startingCwd,h),I=je.isTaggedYarnVersion(e),v=t.get("yarnPath"),b=!I,C=b||!!v||!!a;if(a===!1){if(b)throw new zt(0,"You explicitly opted out of yarnPath usage in your command line, but the version you specified cannot be represented by Corepack");C=!1}else!C&&!process.env.COREPACK_ROOT&&(o.reportWarning(0,`You don't seem to have ${de.applyHyperlink(t,"Corepack","https://nodejs.org/api/corepack.html")} enabled; we'll have to rely on ${de.applyHyperlink(t,"yarnPath","https://yarnpkg.com/configuration/yarnrc#yarnPath")} instead`),C=!0);if(C){let te=await u();o.reportInfo(0,`Saving the new release in ${de.pretty(t,E,"magenta")}`),await oe.removePromise(K.dirname(h)),await oe.mkdirPromise(K.dirname(h),{recursive:!0}),await oe.writeFilePromise(h,te,{mode:493}),await Ve.updateConfiguration(A,{yarnPath:K.relative(A,h)})}else await oe.removePromise(K.dirname(h)),await Ve.updateConfiguration(A,{yarnPath:Ve.deleteProperty});let T=await Mt.tryFind(A)||new Mt;T.packageManager=`yarn@${I?e:await m2(t,"stable")}`;let L={};T.exportTo(L);let U=K.join(A,Mt.fileName),J=`${JSON.stringify(L,null,T.indent)} +`;return await oe.changeFilePromise(U,J,{automaticNewlines:!0}),{bundleVersion:e}}function $ge(t){return wr[fP(t)]}var V0t=/## (?YN[0-9]{4}) - `(?[A-Z_]+)`\n\n(?
(?:.(?!##))+)/gs;async function K0t(t){let r=`https://repo.yarnpkg.com/${je.isTaggedYarnVersion(tn)?tn:await m2(t,"canary")}/packages/gatsby/content/advanced/error-codes.md`,o=await rn.get(r,{configuration:t});return new Map(Array.from(o.toString().matchAll(V0t),({groups:a})=>{if(!a)throw new Error("Assertion failed: Expected the match to have been successful");let n=$ge(a.code);if(a.name!==n)throw new Error(`Assertion failed: Invalid error code data: Expected "${a.name}" to be named "${n}"`);return[a.code,a.details]}))}var _h=class extends ut{constructor(){super(...arguments);this.code=ge.String({required:!1,validator:oI(Ey(),[sI(/^YN[0-9]{4}$/)])});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);if(typeof this.code<"u"){let o=$ge(this.code),a=de.pretty(r,o,de.Type.CODE),n=this.cli.format().header(`${this.code} - ${a}`),A=(await K0t(r)).get(this.code),p=typeof A<"u"?de.jsonOrPretty(this.json,r,de.tuple(de.Type.MARKDOWN,{text:A,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description. + +You can help us by editing this page on GitHub \u{1F642}: +${de.jsonOrPretty(this.json,r,de.tuple(de.Type.URL,"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md"))} +`;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:o,details:p})} +`):this.context.stdout.write(`${n} + +${p} +`)}else{let o={children:je.mapAndFilter(Object.entries(wr),([a,n])=>Number.isNaN(Number(a))?je.mapAndFilter.skip:{label:Wu(Number(a)),value:de.tuple(de.Type.CODE,n)})};$s.emitTree(o,{configuration:r,stdout:this.context.stdout,json:this.json})}}};_h.paths=[["explain"]],_h.usage=nt.Usage({description:"explain an error code",details:` + When the code argument is specified, this command prints its name and its details. + + When used without arguments, this command lists all error codes and their names. + `,examples:[["Explain an error code","$0 explain YN0006"],["List all error codes","$0 explain"]]});Ye();Pt();qt();var ede=$e(Zo()),Hh=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Print versions of a package from the whole project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Print information for all packages, including transitive dependencies"});this.extra=ge.Array("-X,--extra",[],{description:"An array of requests of extra data provided by plugins"});this.cache=ge.Boolean("--cache",!1,{description:"Print information about the cache entry of a package (path, size, checksum)"});this.dependents=ge.Boolean("--dependents",!1,{description:"Print all dependents for each matching package"});this.manifest=ge.Boolean("--manifest",!1,{description:"Print data obtained by looking at the package archive (license, homepage, ...)"});this.nameOnly=ge.Boolean("--name-only",!1,{description:"Only print the name for the matching packages"});this.virtuals=ge.Boolean("--virtuals",!1,{description:"Print each instance of the virtual packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a&&!this.all)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=new Set(this.extra);this.cache&&u.add("cache"),this.dependents&&u.add("dependents"),this.manifest&&u.add("manifest");let A=(le,{recursive:pe})=>{let Ae=le.anchoredLocator.locatorHash,ye=new Map,ae=[Ae];for(;ae.length>0;){let we=ae.shift();if(ye.has(we))continue;let Pe=o.storedPackages.get(we);if(typeof Pe>"u")throw new Error("Assertion failed: Expected the package to be registered");if(ye.set(we,Pe),W.isVirtualLocator(Pe)&&ae.push(W.devirtualizeLocator(Pe).locatorHash),!(!pe&&we!==Ae))for(let g of Pe.dependencies.values()){let Ee=o.storedResolutions.get(g.descriptorHash);if(typeof Ee>"u")throw new Error("Assertion failed: Expected the resolution to be registered");ae.push(Ee)}}return ye.values()},p=({recursive:le})=>{let pe=new Map;for(let Ae of o.workspaces)for(let ye of A(Ae,{recursive:le}))pe.set(ye.locatorHash,ye);return pe.values()},h=({all:le,recursive:pe})=>le&&pe?o.storedPackages.values():le?p({recursive:pe}):A(a,{recursive:pe}),E=({all:le,recursive:pe})=>{let Ae=h({all:le,recursive:pe}),ye=this.patterns.map(Pe=>{let g=W.parseLocator(Pe),Ee=ede.default.makeRe(W.stringifyIdent(g)),De=W.isVirtualLocator(g),ce=De?W.devirtualizeLocator(g):g;return ne=>{let ee=W.stringifyIdent(ne);if(!Ee.test(ee))return!1;if(g.reference==="unknown")return!0;let Ie=W.isVirtualLocator(ne),ke=Ie?W.devirtualizeLocator(ne):ne;return!(De&&Ie&&g.reference!==ne.reference||ce.reference!==ke.reference)}}),ae=je.sortMap([...Ae],Pe=>W.stringifyLocator(Pe));return{selection:ae.filter(Pe=>ye.length===0||ye.some(g=>g(Pe))),sortedLookup:ae}},{selection:I,sortedLookup:v}=E({all:this.all,recursive:this.recursive});if(I.length===0)throw new it("No package matched your request");let b=new Map;if(this.dependents)for(let le of v)for(let pe of le.dependencies.values()){let Ae=o.storedResolutions.get(pe.descriptorHash);if(typeof Ae>"u")throw new Error("Assertion failed: Expected the resolution to be registered");je.getArrayWithDefault(b,Ae).push(le)}let C=new Map;for(let le of v){if(!W.isVirtualLocator(le))continue;let pe=W.devirtualizeLocator(le);je.getArrayWithDefault(C,pe.locatorHash).push(le)}let T={},L={children:T},U=r.makeFetcher(),J={project:o,fetcher:U,cache:n,checksums:o.storedChecksums,report:new Qi,cacheOptions:{skipIntegrityCheck:!0}},te=[async(le,pe,Ae)=>{if(!pe.has("manifest"))return;let ye=await U.fetch(le,J),ae;try{ae=await Mt.find(ye.prefixPath,{baseFs:ye.packageFs})}finally{ye.releaseFs?.()}Ae("Manifest",{License:de.tuple(de.Type.NO_HINT,ae.license),Homepage:de.tuple(de.Type.URL,ae.raw.homepage??null)})},async(le,pe,Ae)=>{if(!pe.has("cache"))return;let ye=o.storedChecksums.get(le.locatorHash)??null,ae=n.getLocatorPath(le,ye),we;if(ae!==null)try{we=await oe.statPromise(ae)}catch{}let Pe=typeof we<"u"?[we.size,de.Type.SIZE]:void 0;Ae("Cache",{Checksum:de.tuple(de.Type.NO_HINT,ye),Path:de.tuple(de.Type.PATH,ae),Size:Pe})}];for(let le of I){let pe=W.isVirtualLocator(le);if(!this.virtuals&&pe)continue;let Ae={},ye={value:[le,de.Type.LOCATOR],children:Ae};if(T[W.stringifyLocator(le)]=ye,this.nameOnly){delete ye.children;continue}let ae=C.get(le.locatorHash);typeof ae<"u"&&(Ae.Instances={label:"Instances",value:de.tuple(de.Type.NUMBER,ae.length)}),Ae.Version={label:"Version",value:de.tuple(de.Type.NO_HINT,le.version)};let we=(g,Ee)=>{let De={};if(Ae[g]=De,Array.isArray(Ee))De.children=Ee.map(ce=>({value:ce}));else{let ce={};De.children=ce;for(let[ne,ee]of Object.entries(Ee))typeof ee>"u"||(ce[ne]={label:ne,value:ee})}};if(!pe){for(let g of te)await g(le,u,we);await r.triggerHook(g=>g.fetchPackageInfo,le,u,we)}le.bin.size>0&&!pe&&we("Exported Binaries",[...le.bin.keys()].map(g=>de.tuple(de.Type.PATH,g)));let Pe=b.get(le.locatorHash);typeof Pe<"u"&&Pe.length>0&&we("Dependents",Pe.map(g=>de.tuple(de.Type.LOCATOR,g))),le.dependencies.size>0&&!pe&&we("Dependencies",[...le.dependencies.values()].map(g=>{let Ee=o.storedResolutions.get(g.descriptorHash),De=typeof Ee<"u"?o.storedPackages.get(Ee)??null:null;return de.tuple(de.Type.RESOLUTION,{descriptor:g,locator:De})})),le.peerDependencies.size>0&&pe&&we("Peer dependencies",[...le.peerDependencies.values()].map(g=>{let Ee=le.dependencies.get(g.identHash),De=typeof Ee<"u"?o.storedResolutions.get(Ee.descriptorHash)??null:null,ce=De!==null?o.storedPackages.get(De)??null:null;return de.tuple(de.Type.RESOLUTION,{descriptor:g,locator:ce})}))}$s.emitTree(L,{configuration:r,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Hh.paths=[["info"]],Hh.usage=nt.Usage({description:"see information related to packages",details:"\n This command prints various information related to the specified packages, accepting glob patterns.\n\n By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\n\n Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\n\n Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\n ",examples:[["Show information about Lodash","$0 info lodash"]]});Ye();Pt();Nl();var dk=$e(ed());qt();var U8=$e(zn());Za();var J0t=[{selector:t=>t===-1,name:"nodeLinker",value:"node-modules"},{selector:t=>t!==-1&&t<8,name:"enableGlobalCache",value:!1},{selector:t=>t!==-1&&t<8,name:"compressionLevel",value:"mixed"}],jh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.immutable=ge.Boolean("--immutable",{description:"Abort with an error exit code if the lockfile was to be modified"});this.immutableCache=ge.Boolean("--immutable-cache",{description:"Abort with an error exit code if the cache folder was to be modified"});this.refreshLockfile=ge.Boolean("--refresh-lockfile",{description:"Refresh the package metadata stored in the lockfile"});this.checkCache=ge.Boolean("--check-cache",{description:"Always refetch the packages and ensure that their checksums are consistent"});this.checkResolutions=ge.Boolean("--check-resolutions",{description:"Validates that the package resolutions are coherent"});this.inlineBuilds=ge.Boolean("--inline-builds",{description:"Verbosely print the output of the build steps of dependencies"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.cacheFolder=ge.String("--cache-folder",{hidden:!0});this.frozenLockfile=ge.Boolean("--frozen-lockfile",{hidden:!0});this.ignoreEngines=ge.Boolean("--ignore-engines",{hidden:!0});this.nonInteractive=ge.Boolean("--non-interactive",{hidden:!0});this.preferOffline=ge.Boolean("--prefer-offline",{hidden:!0});this.production=ge.Boolean("--production",{hidden:!0});this.registry=ge.String("--registry",{hidden:!0});this.silent=ge.Boolean("--silent",{hidden:!0});this.networkTimeout=ge.String("--network-timeout",{hidden:!0})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds<"u"&&r.useWithSource("",{enableInlineBuilds:this.inlineBuilds},r.startingCwd,{overwrite:!0});let o=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,a=await NE({configuration:r,stdout:this.context.stdout},[{option:this.ignoreEngines,message:"The --ignore-engines option is deprecated; engine checking isn't a core feature anymore",error:!dk.default.VERCEL},{option:this.registry,message:"The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file"},{option:this.preferOffline,message:"The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead",error:!dk.default.VERCEL},{option:this.production,message:"The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead",error:!0},{option:this.nonInteractive,message:"The --non-interactive option is deprecated",error:!o},{option:this.frozenLockfile,message:"The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead",callback:()=>this.immutable=this.frozenLockfile},{option:this.cacheFolder,message:"The cache-folder option has been deprecated; use rc settings instead",error:!dk.default.NETLIFY}]);if(a!==null)return a;let n=this.mode==="update-lockfile";if(n&&(this.immutable||this.immutableCache))throw new it(`${de.pretty(r,"--immutable",de.Type.CODE)} and ${de.pretty(r,"--immutable-cache",de.Type.CODE)} cannot be used with ${de.pretty(r,"--mode=update-lockfile",de.Type.CODE)}`);let u=(this.immutable??r.get("enableImmutableInstalls"))&&!n,A=this.immutableCache&&!n;if(r.projectCwd!==null){let T=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{let U=!1;await Z0t(r,u)&&(L.reportInfo(48,"Automatically removed core plugins that are now builtins \u{1F44D}"),U=!0),await X0t(r,u)&&(L.reportInfo(48,"Automatically fixed merge conflicts \u{1F44D}"),U=!0),U&&L.reportSeparator()});if(T.hasErrors())return T.exitCode()}if(r.projectCwd!==null){let T=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{if(Ve.telemetry?.isNew)Ve.telemetry.commitTips(),L.reportInfo(65,"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry"),L.reportInfo(65,`Run ${de.pretty(r,"yarn config set --home enableTelemetry 0",de.Type.CODE)} to disable`),L.reportSeparator();else if(Ve.telemetry?.shouldShowTips){let U=await rn.get("https://repo.yarnpkg.com/tags",{configuration:r,jsonResponse:!0}).catch(()=>null);if(U!==null){let J=null;if(tn!==null){let le=U8.default.prerelease(tn)?"canary":"stable",pe=U.latest[le];U8.default.gt(pe,tn)&&(J=[le,pe])}if(J)Ve.telemetry.commitTips(),L.reportInfo(88,`${de.applyStyle(r,`A new ${J[0]} version of Yarn is available:`,de.Style.BOLD)} ${W.prettyReference(r,J[1])}!`),L.reportInfo(88,`Upgrade now by running ${de.pretty(r,`yarn set version ${J[1]}`,de.Type.CODE)}`),L.reportSeparator();else{let te=Ve.telemetry.selectTip(U.tips);te&&(L.reportInfo(89,de.pretty(r,te.message,de.Type.MARKDOWN_INLINE)),te.url&&L.reportInfo(89,`Learn more at ${te.url}`),L.reportSeparator())}}}});if(T.hasErrors())return T.exitCode()}let{project:p,workspace:h}=await St.find(r,this.context.cwd),E=p.lockfileLastVersion;if(E!==null){let T=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async L=>{let U={};for(let J of J0t)J.selector(E)&&typeof r.sources.get(J.name)>"u"&&(r.use("",{[J.name]:J.value},p.cwd,{overwrite:!0}),U[J.name]=J.value);Object.keys(U).length>0&&(await Ve.updateConfiguration(p.cwd,U),L.reportInfo(87,"Migrated your project to the latest Yarn version \u{1F680}"),L.reportSeparator())});if(T.hasErrors())return T.exitCode()}let I=await Lr.find(r,{immutable:A,check:this.checkCache});if(!h)throw new rr(p.cwd,this.context.cwd);await p.restoreInstallState({restoreResolutions:!1});let v=r.get("enableHardenedMode");v&&typeof r.sources.get("enableHardenedMode")>"u"&&await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,includeFooter:!1},async T=>{T.reportWarning(0,"Yarn detected that the current workflow is executed from a public pull request. For safety the hardened mode has been enabled."),T.reportWarning(0,`It will prevent malicious lockfile manipulations, in exchange for a slower install time. You can opt-out if necessary; check our ${de.applyHyperlink(r,"documentation","https://yarnpkg.com/features/security#hardened-mode")} for more details.`),T.reportSeparator()}),(this.refreshLockfile??v)&&(p.lockfileNeedsRefresh=!0);let b=this.checkResolutions??v;return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout,forceSectionAlignment:!0,includeLogs:!0,includeVersion:!0},async T=>{await p.install({cache:I,report:T,immutable:u,checkResolutions:b,mode:this.mode})})).exitCode()}};jh.paths=[["install"],nt.Default],jh.usage=nt.Usage({description:"install the project dependencies",details:"\n This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:\n\n - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).\n\n - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of `cacheFolder` in `yarn config` to see where the cache files are stored).\n\n - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the .pnp.cjs file you might know).\n\n - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.\n\n Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.cjs file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.\n\n If the `--immutable` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the `immutablePatterns` configuration setting). For backward compatibility we offer an alias under the name of `--frozen-lockfile`, but it will be removed in a later release.\n\n If the `--immutable-cache` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).\n\n If the `--refresh-lockfile` option is set, Yarn will keep the same resolution for the packages currently in the lockfile but will refresh their metadata. If used together with `--immutable`, it can validate that the lockfile information are consistent. This flag is enabled by default when Yarn detects it runs within a pull request context.\n\n If the `--check-cache` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.\n\n If the `--inline-builds` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n ",examples:[["Install the project","$0 install"],["Validate a project when using Zero-Installs","$0 install --immutable --immutable-cache"],["Validate a project when using Zero-Installs (slightly safer if you accept external PRs)","$0 install --immutable --immutable-cache --check-cache"]]});var z0t="<<<<<<<";async function X0t(t,e){if(!t.projectCwd)return!1;let r=K.join(t.projectCwd,dr.lockfile);if(!await oe.existsPromise(r)||!(await oe.readFilePromise(r,"utf8")).includes(z0t))return!1;if(e)throw new zt(47,"Cannot autofix a lockfile when running an immutable install");let a=await Ur.execvp("git",["rev-parse","MERGE_HEAD","HEAD"],{cwd:t.projectCwd});if(a.code!==0&&(a=await Ur.execvp("git",["rev-parse","REBASE_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0&&(a=await Ur.execvp("git",["rev-parse","CHERRY_PICK_HEAD","HEAD"],{cwd:t.projectCwd})),a.code!==0)throw new zt(83,"Git returned an error when trying to find the commits pertaining to the conflict");let n=await Promise.all(a.stdout.trim().split(/\n/).map(async A=>{let p=await Ur.execvp("git",["show",`${A}:./${dr.lockfile}`],{cwd:t.projectCwd});if(p.code!==0)throw new zt(83,`Git returned an error when trying to access the lockfile content in ${A}`);try{return Vi(p.stdout)}catch{throw new zt(46,"A variant of the conflicting lockfile failed to parse")}}));n=n.filter(A=>!!A.__metadata);for(let A of n){if(A.__metadata.version<7)for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=W.parseDescriptor(p,!0),E=t.normalizeDependency(h),I=W.stringifyDescriptor(E);I!==p&&(A[I]=A[p],delete A[p])}for(let p of Object.keys(A)){if(p==="__metadata")continue;let h=A[p].checksum;typeof h=="string"&&h.includes("/")||(A[p].checksum=`${A.__metadata.cacheKey}/${h}`)}}let u=Object.assign({},...n);u.__metadata.version=`${Math.min(...n.map(A=>parseInt(A.__metadata.version??0)))}`,u.__metadata.cacheKey="merged";for(let[A,p]of Object.entries(u))typeof p=="string"&&delete u[A];return await oe.changeFilePromise(r,Ba(u),{automaticNewlines:!0}),!0}async function Z0t(t,e){if(!t.projectCwd)return!1;let r=[],o=K.join(t.projectCwd,".yarn/plugins/@yarnpkg");return await Ve.updateConfiguration(t.projectCwd,{plugins:n=>{if(!Array.isArray(n))return n;let u=n.filter(A=>{if(!A.path)return!0;let p=K.resolve(t.projectCwd,A.path),h=B1.has(A.spec)&&K.contains(o,p);return h&&r.push(p),!h});return u.length===0?Ve.deleteProperty:u.length===n.length?n:u}},{immutable:e})?(await Promise.all(r.map(async n=>{await oe.removePromise(n)})),!0):!1}Ye();Pt();qt();var qh=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Link all workspaces belonging to the target projects to the current one"});this.private=ge.Boolean("-p,--private",!1,{description:"Also link private workspaces belonging to the target projects to the current one"});this.relative=ge.Boolean("-r,--relative",!1,{description:"Link workspaces using relative paths instead of absolute paths"});this.destinations=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=o.topLevelWorkspace,A=[];for(let p of this.destinations){let h=K.resolve(this.context.cwd,ue.toPortablePath(p)),E=await Ve.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await St.find(E,h);if(o.cwd===I.cwd)throw new it(`Invalid destination '${p}'; Can't link the project to itself`);if(!v)throw new rr(I.cwd,h);if(this.all){let b=!1;for(let C of I.workspaces)C.manifest.name&&(!C.manifest.private||this.private)&&(A.push(C),b=!0);if(!b)throw new it(`No workspace found to be linked in the target project: ${p}`)}else{if(!v.manifest.name)throw new it(`The target workspace at '${p}' doesn't have a name and thus cannot be linked`);if(v.manifest.private&&!this.private)throw new it(`The target workspace at '${p}' is marked private - use the --private flag to link it anyway`);A.push(v)}}for(let p of A){let h=W.stringifyIdent(p.anchoredLocator),E=this.relative?K.relative(o.cwd,p.cwd):p.cwd;u.manifest.resolutions.push({pattern:{descriptor:{fullName:h}},reference:`portal:${E}`})}return await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};qh.paths=[["link"]],qh.usage=nt.Usage({description:"connect the local project to another one",details:"\n This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\n ",examples:[["Register one or more remote workspaces for use in the current project","$0 link ~/ts-loader ~/jest"],["Register all workspaces from a remote project for use in the current project","$0 link ~/jest --all"]]});qt();var Gh=class extends ut{constructor(){super(...arguments);this.args=ge.Proxy()}async execute(){return this.cli.run(["exec","node",...this.args])}};Gh.paths=[["node"]],Gh.usage=nt.Usage({description:"run node with the hook already setup",details:` + This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment). + + The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version. + `,examples:[["Run a Node script","$0 node ./my-script.js"]]});Ye();qt();var Yh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=await Ve.findRcFiles(this.context.cwd);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{for(let u of o)if(!!u.data?.plugins)for(let A of u.data.plugins){if(!A.checksum||!A.spec.match(/^https?:/))continue;let p=await rn.get(A.spec,{configuration:r}),h=wn.makeHash(p);if(A.checksum===h)continue;let E=de.pretty(r,A.path,de.Type.PATH),I=de.pretty(r,A.spec,de.Type.URL),v=`${E} is different from the file provided by ${I}`;n.reportJson({...A,newChecksum:h}),n.reportError(0,v)}})).exitCode()}};Yh.paths=[["plugin","check"]],Yh.usage=nt.Usage({category:"Plugin-related commands",description:"find all third-party plugins that differ from their own spec",details:` + Check only the plugins from https. + + If this command detects any plugin differences in the CI environment, it will throw an error. + `,examples:[["find all third-party plugins that differ from their own spec","$0 plugin check"]]});Ye();Ye();Pt();qt();var ode=Be("os");Ye();Pt();qt();var tde=Be("os");Ye();Nl();qt();var $0t="https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml";async function Jd(t,e){let r=await rn.get($0t,{configuration:t}),o=Vi(r.toString());return Object.fromEntries(Object.entries(o).filter(([a,n])=>!e||kr.satisfiesWithPrereleases(e,n.range??"<4.0.0-rc.1")))}var Wh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{let n=await Jd(r,tn);for(let[u,{experimental:A,...p}]of Object.entries(n)){let h=u;A&&(h+=" [experimental]"),a.reportJson({name:u,experimental:A,...p}),a.reportInfo(null,h)}})).exitCode()}};Wh.paths=[["plugin","list"]],Wh.usage=nt.Usage({category:"Plugin-related commands",description:"list the available official plugins",details:"\n This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\n ",examples:[["List the official plugins","$0 plugin list"]]});var egt=/^[0-9]+$/,tgt=process.platform==="win32";function rde(t){return egt.test(t)?`pull/${t}/head`:t}var rgt=({repository:t,branch:e},r)=>[["git","init",ue.fromPortablePath(r)],["git","remote","add","origin",t],["git","fetch","origin","--depth=1",rde(e)],["git","reset","--hard","FETCH_HEAD"]],ngt=({branch:t})=>[["git","fetch","origin","--depth=1",rde(t),"--force"],["git","reset","--hard","FETCH_HEAD"],["git","clean","-dfx","-e","packages/yarnpkg-cli/bundles"]],igt=({plugins:t,noMinify:e},r,o)=>[["yarn","build:cli",...new Array().concat(...t.map(a=>["--plugin",K.resolve(o,a)])),...e?["--no-minify"]:[],"|"],[tgt?"move":"mv","packages/yarnpkg-cli/bundles/yarn.js",ue.fromPortablePath(r),"|"]],Vh=class extends ut{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.plugins=ge.Array("--plugin",[],{description:"An array of additional plugins that should be included in the bundle"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"If set, the bundle will be built but not added to the project"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a bundle for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.skipPlugins=ge.Boolean("--skip-plugins",!1,{description:"Skip updating the contrib plugins"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=typeof this.installPath<"u"?K.resolve(this.context.cwd,ue.toPortablePath(this.installPath)):K.resolve(ue.toPortablePath((0,tde.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Nt.start({configuration:r,stdout:this.context.stdout},async u=>{await _8(this,{configuration:r,report:u,target:a}),u.reportSeparator(),u.reportInfo(0,"Building a fresh bundle"),u.reportSeparator();let A=await Ur.execvp("git",["rev-parse","--short","HEAD"],{cwd:a,strict:!0}),p=K.join(a,`packages/yarnpkg-cli/bundles/yarn-${A.stdout.trim()}.js`);oe.existsSync(p)||(await y2(igt(this,p,a),{configuration:r,context:this.context,target:a}),u.reportSeparator());let h=await oe.readFilePromise(p);if(!this.dryRun){let{bundleVersion:E}=await O8(r,null,async()=>h,{report:u});this.skipPlugins||await sgt(this,E,{project:o,report:u,target:a})}})).exitCode()}};Vh.paths=[["set","version","from","sources"]],Vh.usage=nt.Usage({description:"build Yarn from master",details:` + This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project. + + By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \`--skip-plugins\` flag. + `,examples:[["Build Yarn from master","$0 set version from sources"]]});async function y2(t,{configuration:e,context:r,target:o}){for(let[a,...n]of t){let u=n[n.length-1]==="|";if(u&&n.pop(),u)await Ur.pipevp(a,n,{cwd:o,stdin:r.stdin,stdout:r.stdout,stderr:r.stderr,strict:!0});else{r.stdout.write(`${de.pretty(e,` $ ${[a,...n].join(" ")}`,"grey")} +`);try{await Ur.execvp(a,n,{cwd:o,strict:!0})}catch(A){throw r.stdout.write(A.stdout||A.stack),A}}}}async function _8(t,{configuration:e,report:r,target:o}){let a=!1;if(!t.force&&oe.existsSync(K.join(o,".git"))){r.reportInfo(0,"Fetching the latest commits"),r.reportSeparator();try{await y2(ngt(t),{configuration:e,context:t.context,target:o}),a=!0}catch{r.reportSeparator(),r.reportWarning(0,"Repository update failed; we'll try to regenerate it")}}a||(r.reportInfo(0,"Cloning the remote repository"),r.reportSeparator(),await oe.removePromise(o),await oe.mkdirPromise(o,{recursive:!0}),await y2(rgt(t,o),{configuration:e,context:t.context,target:o}))}async function sgt(t,e,{project:r,report:o,target:a}){let n=await Jd(r.configuration,e),u=new Set(Object.keys(n));for(let A of r.configuration.plugins.keys())!u.has(A)||await H8(A,t,{project:r,report:o,target:a})}Ye();Ye();Pt();qt();var nde=$e(zn()),ide=Be("url"),sde=Be("vm");var Kh=class extends ut{constructor(){super(...arguments);this.name=ge.String();this.checksum=ge.Boolean("--checksum",!0,{description:"Whether to care if this plugin is modified"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,stdout:this.context.stdout},async a=>{let{project:n}=await St.find(r,this.context.cwd),u,A;if(this.name.match(/^\.{0,2}[\\/]/)||ue.isAbsolute(this.name)){let p=K.resolve(this.context.cwd,ue.toPortablePath(this.name));a.reportInfo(0,`Reading ${de.pretty(r,p,de.Type.PATH)}`),u=K.relative(n.cwd,p),A=await oe.readFilePromise(p)}else{let p;if(this.name.match(/^https?:/)){try{new ide.URL(this.name)}catch{throw new zt(52,`Plugin specifier "${this.name}" is neither a plugin name nor a valid url`)}u=this.name,p=this.name}else{let h=W.parseLocator(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-"));if(h.reference!=="unknown"&&!nde.default.valid(h.reference))throw new zt(0,"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.");let E=W.stringifyIdent(h),I=await Jd(r,tn);if(!Object.hasOwn(I,E)){let v=`Couldn't find a plugin named ${W.prettyIdent(r,h)} on the remote registry. +`;throw r.plugins.has(E)?v+=`A plugin named ${W.prettyIdent(r,h)} is already installed; possibly attempting to import a built-in plugin.`:v+=`Note that only the plugins referenced on our website (${de.pretty(r,"https://github.com/yarnpkg/berry/blob/master/plugins.yml",de.Type.URL)}) can be referenced by their name; any other plugin will have to be referenced through its public url (for example ${de.pretty(r,"https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js",de.Type.URL)}).`,new zt(51,v)}u=E,p=I[E].url,h.reference!=="unknown"?p=p.replace(/\/master\//,`/${E}/${h.reference}/`):tn!==null&&(p=p.replace(/\/master\//,`/@yarnpkg/cli/${tn}/`))}a.reportInfo(0,`Downloading ${de.pretty(r,p,"green")}`),A=await rn.get(p,{configuration:r})}await j8(u,A,{checksum:this.checksum,project:n,report:a})})).exitCode()}};Kh.paths=[["plugin","import"]],Kh.usage=nt.Usage({category:"Plugin-related commands",description:"download a plugin",details:` + This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations. + + Three types of plugin references are accepted: + + - If the plugin is stored within the Yarn repository, it can be referenced by name. + - Third-party plugins can be referenced directly through their public urls. + - Local plugins can be referenced by their path on the disk. + + If the \`--no-checksum\` option is set, Yarn will no longer care if the plugin is modified. + + Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \`@yarnpkg/builder\` package). + `,examples:[['Download and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import @yarnpkg/plugin-exec"],['Download and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import exec"],["Download and activate a community plugin","$0 plugin import https://example.org/path/to/plugin.js"],["Activate a local plugin","$0 plugin import ./path/to/plugin.js"]]});async function j8(t,e,{checksum:r=!0,project:o,report:a}){let{configuration:n}=o,u={},A={exports:u};(0,sde.runInNewContext)(e.toString(),{module:A,exports:u});let h=`.yarn/plugins/${A.exports.name}.cjs`,E=K.resolve(o.cwd,h);a.reportInfo(0,`Saving the new plugin in ${de.pretty(n,h,"magenta")}`),await oe.mkdirPromise(K.dirname(E),{recursive:!0}),await oe.writeFilePromise(E,e);let I={path:h,spec:t};r&&(I.checksum=wn.makeHash(e)),await Ve.addPlugin(o.cwd,[I])}var ogt=({pluginName:t,noMinify:e},r)=>[["yarn",`build:${t}`,...e?["--no-minify"]:[],"|"]],Jh=class extends ut{constructor(){super(...arguments);this.installPath=ge.String("--path",{description:"The path where the repository should be cloned to"});this.repository=ge.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=ge.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.noMinify=ge.Boolean("--no-minify",!1,{description:"Build a plugin for development (debugging) - non-minified and non-mangled"});this.force=ge.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.name=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=typeof this.installPath<"u"?K.resolve(this.context.cwd,ue.toPortablePath(this.installPath)):K.resolve(ue.toPortablePath((0,ode.tmpdir)()),"yarnpkg-sources",wn.makeHash(this.repository).slice(0,6));return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let{project:u}=await St.find(r,this.context.cwd),A=W.parseIdent(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-")),p=W.stringifyIdent(A),h=await Jd(r,tn);if(!Object.hasOwn(h,p))throw new zt(51,`Couldn't find a plugin named "${p}" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let E=p;await _8(this,{configuration:r,report:n,target:o}),await H8(E,this,{project:u,report:n,target:o})})).exitCode()}};Jh.paths=[["plugin","import","from","sources"]],Jh.usage=nt.Usage({category:"Plugin-related commands",description:"build a plugin from sources",details:` + This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations. + + The plugins can be referenced by their short name if sourced from the official Yarn repository. + `,examples:[['Build and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import from sources @yarnpkg/plugin-exec"],['Build and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import from sources exec"]]});async function H8(t,{context:e,noMinify:r},{project:o,report:a,target:n}){let u=t.replace(/@yarnpkg\//,""),{configuration:A}=o;a.reportSeparator(),a.reportInfo(0,`Building a fresh ${u}`),a.reportSeparator(),await y2(ogt({pluginName:u,noMinify:r},n),{configuration:A,context:e,target:n}),a.reportSeparator();let p=K.resolve(n,`packages/${u}/bundles/${t}.js`),h=await oe.readFilePromise(p);await j8(t,h,{project:o,report:a})}Ye();Pt();qt();var zh=class extends ut{constructor(){super(...arguments);this.name=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let u=this.name,A=W.parseIdent(u);if(!r.plugins.has(u))throw new it(`${W.prettyIdent(r,A)} isn't referenced by the current configuration`);let p=`.yarn/plugins/${u}.cjs`,h=K.resolve(o.cwd,p);oe.existsSync(h)&&(n.reportInfo(0,`Removing ${de.pretty(r,p,de.Type.PATH)}...`),await oe.removePromise(h)),n.reportInfo(0,"Updating the configuration..."),await Ve.updateConfiguration(o.cwd,{plugins:E=>{if(!Array.isArray(E))return E;let I=E.filter(v=>v.path!==p);return I.length===0?Ve.deleteProperty:I.length===E.length?E:I}})})).exitCode()}};zh.paths=[["plugin","remove"]],zh.usage=nt.Usage({category:"Plugin-related commands",description:"remove a plugin",details:` + This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration. + + **Note:** The plugins have to be referenced by their name property, which can be obtained using the \`yarn plugin runtime\` command. Shorthands are not allowed. + `,examples:[["Remove a plugin imported from the Yarn repository","$0 plugin remove @yarnpkg/plugin-typescript"],["Remove a plugin imported from a local file","$0 plugin remove my-local-plugin"]]});Ye();qt();var Xh=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async a=>{for(let n of r.plugins.keys()){let u=this.context.plugins.plugins.has(n),A=n;u&&(A+=" [builtin]"),a.reportJson({name:n,builtin:u}),a.reportInfo(null,`${A}`)}})).exitCode()}};Xh.paths=[["plugin","runtime"]],Xh.usage=nt.Usage({category:"Plugin-related commands",description:"list the active plugins",details:` + This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins. + `,examples:[["List the currently active plugins","$0 plugin runtime"]]});Ye();Ye();qt();var Zh=class extends ut{constructor(){super(...arguments);this.idents=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);let u=new Set;for(let A of this.idents)u.add(W.parseIdent(A).identHash);if(await o.restoreInstallState({restoreResolutions:!1}),await o.resolveEverything({cache:n,report:new Qi}),u.size>0)for(let A of o.storedPackages.values())u.has(A.identHash)&&(o.storedBuildState.delete(A.locatorHash),o.skippedBuilds.delete(A.locatorHash));else o.storedBuildState.clear(),o.skippedBuilds.clear();return await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};Zh.paths=[["rebuild"]],Zh.usage=nt.Usage({description:"rebuild the project's native packages",details:` + This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again. + + Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future). + + By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory. + `,examples:[["Rebuild all packages","$0 rebuild"],["Rebuild fsevents only","$0 rebuild fsevents"]]});Ye();Ye();Ye();qt();var q8=$e(Zo());Za();var $h=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Apply the operation to all workspaces from the current project"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.patterns=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.all?o.workspaces:[a],A=["dependencies","devDependencies","peerDependencies"],p=[],h=!1,E=[];for(let C of this.patterns){let T=!1,L=W.parseIdent(C);for(let U of u){let J=[...U.manifest.peerDependenciesMeta.keys()];for(let te of(0,q8.default)(J,C))U.manifest.peerDependenciesMeta.delete(te),h=!0,T=!0;for(let te of A){let le=U.manifest.getForScope(te),pe=[...le.values()].map(Ae=>W.stringifyIdent(Ae));for(let Ae of(0,q8.default)(pe,W.stringifyIdent(L))){let{identHash:ye}=W.parseIdent(Ae),ae=le.get(ye);if(typeof ae>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");U.manifest[te].delete(ye),E.push([U,te,ae]),h=!0,T=!0}}}T||p.push(C)}let I=p.length>1?"Patterns":"Pattern",v=p.length>1?"don't":"doesn't",b=this.all?"any":"this";if(p.length>0)throw new it(`${I} ${de.prettyList(r,p,de.Type.CODE)} ${v} match any packages referenced by ${b} workspace`);return h?(await r.triggerMultipleHooks(C=>C.afterWorkspaceDependencyRemoval,E),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})):0}};$h.paths=[["remove"]],$h.usage=nt.Usage({description:"remove dependencies from the project",details:` + This command will remove the packages matching the specified patterns from the current workspace. + + If the \`--mode=\` option is set, Yarn will change which artifacts are generated. The modes currently supported are: + + - \`skip-build\` will not run the build scripts at all. Note that this is different from setting \`enableScripts\` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run. + + - \`update-lockfile\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost. + + This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them. + `,examples:[["Remove a dependency from the current project","$0 remove lodash"],["Remove a dependency from all workspaces at once","$0 remove lodash --all"],["Remove all dependencies starting with `eslint-`","$0 remove 'eslint-*'"],["Remove all dependencies with the `@babel` scope","$0 remove '@babel/*'"],["Remove all dependencies matching `react-dom` or `react-helmet`","$0 remove 'react-{dom,helmet}'"]]});Ye();Ye();var ade=Be("util"),zd=class extends ut{async execute(){let e=await Ve.find(this.context.cwd,this.context.plugins),{project:r,workspace:o}=await St.find(e,this.context.cwd);if(!o)throw new rr(r.cwd,this.context.cwd);return(await Nt.start({configuration:e,stdout:this.context.stdout},async n=>{let u=o.manifest.scripts,A=je.sortMap(u.keys(),E=>E),p={breakLength:1/0,colors:e.get("enableColors"),maxArrayLength:2},h=A.reduce((E,I)=>Math.max(E,I.length),0);for(let[E,I]of u.entries())n.reportInfo(null,`${E.padEnd(h," ")} ${(0,ade.inspect)(I,p)}`)})).exitCode()}};zd.paths=[["run"]];Ye();Ye();qt();var e0=class extends ut{constructor(){super(...arguments);this.inspect=ge.String("--inspect",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.inspectBrk=ge.String("--inspect-brk",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.topLevel=ge.Boolean("-T,--top-level",!1,{description:"Check the root workspace for scripts and/or binaries instead of the current one"});this.binariesOnly=ge.Boolean("-B,--binaries-only",!1,{description:"Ignore any user defined scripts and only check for binaries"});this.require=ge.String("--require",{description:"Forwarded to the underlying Node process when executing a binary"});this.silent=ge.Boolean("--silent",{hidden:!0});this.scriptName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a,locator:n}=await St.find(r,this.context.cwd);await o.restoreInstallState();let u=this.topLevel?o.topLevelWorkspace.anchoredLocator:n;if(!this.binariesOnly&&await un.hasPackageScript(u,this.scriptName,{project:o}))return await un.executePackageScript(u,this.scriptName,this.args,{project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let A=await un.getPackageAccessibleBinaries(u,{project:o});if(A.get(this.scriptName)){let h=[];return this.inspect&&(typeof this.inspect=="string"?h.push(`--inspect=${this.inspect}`):h.push("--inspect")),this.inspectBrk&&(typeof this.inspectBrk=="string"?h.push(`--inspect-brk=${this.inspectBrk}`):h.push("--inspect-brk")),this.require&&h.push(`--require=${this.require}`),await un.executePackageAccessibleBinary(u,this.scriptName,this.args,{cwd:this.context.cwd,project:o,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:h,packageAccessibleBinaries:A})}if(!this.topLevel&&!this.binariesOnly&&a&&this.scriptName.includes(":")){let E=(await Promise.all(o.workspaces.map(async I=>I.manifest.scripts.has(this.scriptName)?I:null))).filter(I=>I!==null);if(E.length===1)return await un.executeWorkspaceScript(E[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName==="node-gyp"?new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${W.prettyLocator(r,n)}). This typically happens because some package depends on "node-gyp" to build itself, but didn't list it in their dependencies. To fix that, please run "yarn add node-gyp" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new it(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${W.prettyLocator(r,n)}).`);{if(this.scriptName==="global")throw new it("The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead");let h=[this.scriptName].concat(this.args);for(let[E,I]of uC)for(let v of I)if(h.length>=v.length&&JSON.stringify(h.slice(0,v.length))===JSON.stringify(v))throw new it(`Couldn't find a script named "${this.scriptName}", but a matching command can be found in the ${E} plugin. You can install it with "yarn plugin import ${E}".`);throw new it(`Couldn't find a script named "${this.scriptName}".`)}}};e0.paths=[["run"]],e0.usage=nt.Usage({description:"run a script defined in the package.json",details:` + This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace: + + - If the \`scripts\` field from your local package.json contains a matching script name, its definition will get executed. + + - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed. + + - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed. + + Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax). + `,examples:[["Run the tests from the local workspace","$0 run test"],['Same thing, but without the "run" keyword',"$0 test"],["Inspect Webpack while running","$0 run --inspect-brk webpack"]]});Ye();Ye();qt();var t0=class extends ut{constructor(){super(...arguments);this.descriptor=ge.String();this.resolution=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(await o.restoreInstallState({restoreResolutions:!1}),!a)throw new rr(o.cwd,this.context.cwd);let u=W.parseDescriptor(this.descriptor,!0),A=W.makeDescriptor(u,this.resolution);return o.storedDescriptors.set(u.descriptorHash,u),o.storedDescriptors.set(A.descriptorHash,A),o.resolutionAliases.set(u.descriptorHash,A.descriptorHash),await o.installWithNewReport({stdout:this.context.stdout},{cache:n})}};t0.paths=[["set","resolution"]],t0.usage=nt.Usage({description:"enforce a package resolution",details:'\n This command updates the resolution table so that `descriptor` is resolved by `resolution`.\n\n Note that by default this command only affect the current resolution table - meaning that this "manual override" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, edit the `resolutions` field in your top-level manifest.\n\n Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\n ',examples:[["Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0","$0 set resolution lodash@npm:^1.2.3 1.5.0"]]});Ye();Pt();qt();var lde=$e(Zo()),r0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unlink all workspaces belonging to the target project from the current one"});this.leadingArguments=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);let u=o.topLevelWorkspace,A=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:p,reference:h}of u.manifest.resolutions)h.startsWith("portal:")&&A.add(p.descriptor.fullName);if(this.leadingArguments.length>0)for(let p of this.leadingArguments){let h=K.resolve(this.context.cwd,ue.toPortablePath(p));if(je.isPathLike(p)){let E=await Ve.find(h,this.context.plugins,{useRc:!1,strict:!1}),{project:I,workspace:v}=await St.find(E,h);if(!v)throw new rr(I.cwd,h);if(this.all){for(let b of I.workspaces)b.manifest.name&&A.add(W.stringifyIdent(b.anchoredLocator));if(A.size===0)throw new it("No workspace found to be unlinked in the target project")}else{if(!v.manifest.name)throw new it("The target workspace doesn't have a name and thus cannot be unlinked");A.add(W.stringifyIdent(v.anchoredLocator))}}else{let E=[...u.manifest.resolutions.map(({pattern:I})=>I.descriptor.fullName)];for(let I of(0,lde.default)(E,p))A.add(I)}}return u.manifest.resolutions=u.manifest.resolutions.filter(({pattern:p})=>!A.has(p.descriptor.fullName)),await o.installWithNewReport({stdout:this.context.stdout,quiet:this.context.quiet},{cache:n})}};r0.paths=[["unlink"]],r0.usage=nt.Usage({description:"disconnect the local project from another one",details:` + This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments. + `,examples:[["Unregister a remote workspace in the current project","$0 unlink ~/ts-loader"],["Unregister all workspaces from a remote project in the current project","$0 unlink ~/jest --all"],["Unregister all previously linked workspaces","$0 unlink --all"],["Unregister all workspaces matching a glob","$0 unlink '@babel/*' 'pkg-{a,b}'"]]});Ye();Ye();Ye();qt();var cde=$e(A2()),G8=$e(Zo());Za();var Kf=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Offer various choices, depending on the detected upgrade paths"});this.fixed=ge.Boolean("-F,--fixed",!1,{description:"Store dependency tags as-is instead of resolving them"});this.exact=ge.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=ge.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=ge.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Resolve again ALL resolutions for those packages"});this.mode=ge.String("--mode",{description:"Change what artifacts installs generate",validator:Vs(pl)});this.patterns=ge.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=[...o.storedDescriptors.values()],A=u.map(E=>W.stringifyIdent(E)),p=new Set;for(let E of this.patterns){if(W.parseDescriptor(E).range!=="unknown")throw new it("Ranges aren't allowed when using --recursive");for(let I of(0,G8.default)(A,E)){let v=W.parseIdent(I);p.add(v.identHash)}}let h=u.filter(E=>p.has(E.identHash));for(let E of h)o.storedDescriptors.delete(E.descriptorHash),o.storedResolutions.delete(E.descriptorHash);return await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}async executeUpClassic(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=this.fixed,A=this.interactive??r.get("preferInteractive"),p=p2(this,o),h=A?["keep","reuse","project","latest"]:["project","latest"],E=[],I=[];for(let L of this.patterns){let U=!1,J=W.parseDescriptor(L),te=W.stringifyIdent(J);for(let le of o.workspaces)for(let pe of["dependencies","devDependencies"]){let ye=[...le.manifest.getForScope(pe).values()].map(we=>W.stringifyIdent(we)),ae=te==="*"?ye:(0,G8.default)(ye,te);for(let we of ae){let Pe=W.parseIdent(we),g=le.manifest[pe].get(Pe.identHash);if(typeof g>"u")throw new Error("Assertion failed: Expected the descriptor to be registered");let Ee=W.makeDescriptor(Pe,J.range);E.push(Promise.resolve().then(async()=>[le,pe,g,await h2(Ee,{project:o,workspace:le,cache:n,target:pe,fixed:u,modifier:p,strategies:h})])),U=!0}}U||I.push(L)}if(I.length>1)throw new it(`Patterns ${de.prettyList(r,I,de.Type.CODE)} don't match any packages referenced by any workspace`);if(I.length>0)throw new it(`Pattern ${de.prettyList(r,I,de.Type.CODE)} doesn't match any packages referenced by any workspace`);let v=await Promise.all(E),b=await AA.start({configuration:r,stdout:this.context.stdout,suggestInstall:!1},async L=>{for(let[,,U,{suggestions:J,rejections:te}]of v){let le=J.filter(pe=>pe.descriptor!==null);if(le.length===0){let[pe]=te;if(typeof pe>"u")throw new Error("Assertion failed: Expected an error to have been set");let Ae=this.cli.error(pe);o.configuration.get("enableNetwork")?L.reportError(27,`${W.prettyDescriptor(r,U)} can't be resolved to a satisfying range + +${Ae}`):L.reportError(27,`${W.prettyDescriptor(r,U)} can't be resolved to a satisfying range (note: network resolution has been disabled) + +${Ae}`)}else le.length>1&&!A&&L.reportError(27,`${W.prettyDescriptor(r,U)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(b.hasErrors())return b.exitCode();let C=!1,T=[];for(let[L,U,,{suggestions:J}]of v){let te,le=J.filter(ae=>ae.descriptor!==null),pe=le[0].descriptor,Ae=le.every(ae=>W.areDescriptorsEqual(ae.descriptor,pe));le.length===1||Ae?te=pe:(C=!0,{answer:te}=await(0,cde.prompt)({type:"select",name:"answer",message:`Which range do you want to use in ${W.prettyWorkspace(r,L)} \u276F ${U}?`,choices:J.map(({descriptor:ae,name:we,reason:Pe})=>ae?{name:we,hint:Pe,descriptor:ae}:{name:we,hint:Pe,disabled:!0}),onCancel:()=>process.exit(130),result(ae){return this.find(ae,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let ye=L.manifest[U].get(te.identHash);if(typeof ye>"u")throw new Error("Assertion failed: This descriptor should have a matching entry");if(ye.descriptorHash!==te.descriptorHash)L.manifest[U].set(te.identHash,te),T.push([L,U,ye,te]);else{let ae=r.makeResolver(),we={project:o,resolver:ae},Pe=r.normalizeDependency(ye),g=ae.bindDescriptor(Pe,L.anchoredLocator,we);o.forgetResolution(g)}}return await r.triggerMultipleHooks(L=>L.afterWorkspaceDependencyReplacement,T),C&&this.context.stdout.write(` +`),await o.installWithNewReport({stdout:this.context.stdout},{cache:n,mode:this.mode})}};Kf.paths=[["up"]],Kf.usage=nt.Usage({description:"upgrade dependencies across the project",details:"\n This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\n\n If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\n\n If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\n\n The, `-C,--caret`, `-E,--exact` and `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the latter will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\n\n This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\n ",examples:[["Upgrade all instances of lodash to the latest release","$0 up lodash"],["Upgrade all instances of lodash to the latest release, but ask confirmation for each","$0 up lodash -i"],["Upgrade all instances of lodash to 1.2.3","$0 up lodash@1.2.3"],["Upgrade all instances of packages with the `@babel` scope to the latest release","$0 up '@babel/*'"],["Upgrade all instances of packages containing the word `jest` to the latest release","$0 up '*jest*'"],["Upgrade all instances of packages with the `@babel` scope to 7.0.0","$0 up '@babel/*@7.0.0'"]]}),Kf.schema=[lI("recursive",Gu.Forbids,["interactive","exact","tilde","caret"],{ignore:[void 0,!1]})];Ye();Ye();Ye();qt();var n0=class extends ut{constructor(){super(...arguments);this.recursive=ge.Boolean("-R,--recursive",!1,{description:"List, for each workspace, what are all the paths that lead to the dependency"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.peers=ge.Boolean("--peers",!1,{description:"Also print the peer dependencies that match the specified name"});this.package=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=W.parseIdent(this.package).identHash,u=this.recursive?lgt(o,n,{configuration:r,peers:this.peers}):agt(o,n,{configuration:r,peers:this.peers});$s.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1})}};n0.paths=[["why"]],n0.usage=nt.Usage({description:"display the reason why a package is needed",details:` + This command prints the exact reasons why a package appears in the dependency tree. + + If \`-R,--recursive\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named "Foo" when looking for "Bar", it means that "Foo" already got printed higher in the tree. + `,examples:[["Explain why lodash is used in your project","$0 why lodash"]]});function agt(t,e,{configuration:r,peers:o}){let a=je.sortMap(t.storedPackages.values(),A=>W.stringifyLocator(A)),n={},u={children:n};for(let A of a){let p={};for(let E of A.dependencies.values()){if(!o&&A.peerDependencies.has(E.identHash))continue;let I=t.storedResolutions.get(E.descriptorHash);if(!I)throw new Error("Assertion failed: The resolution should have been registered");let v=t.storedPackages.get(I);if(!v)throw new Error("Assertion failed: The package should have been registered");if(v.identHash!==e)continue;{let C=W.stringifyLocator(A);n[C]={value:[A,de.Type.LOCATOR],children:p}}let b=W.stringifyLocator(v);p[b]={value:[{descriptor:E,locator:v},de.Type.DEPENDENT]}}}return u}function lgt(t,e,{configuration:r,peers:o}){let a=je.sortMap(t.workspaces,v=>W.stringifyLocator(v.anchoredLocator)),n=new Set,u=new Set,A=v=>{if(n.has(v.locatorHash))return u.has(v.locatorHash);if(n.add(v.locatorHash),v.identHash===e)return u.add(v.locatorHash),!0;let b=!1;v.identHash===e&&(b=!0);for(let C of v.dependencies.values()){if(!o&&v.peerDependencies.has(C.identHash))continue;let T=t.storedResolutions.get(C.descriptorHash);if(!T)throw new Error("Assertion failed: The resolution should have been registered");let L=t.storedPackages.get(T);if(!L)throw new Error("Assertion failed: The package should have been registered");A(L)&&(b=!0)}return b&&u.add(v.locatorHash),b};for(let v of a)A(v.anchoredPackage);let p=new Set,h={},E={children:h},I=(v,b,C)=>{if(!u.has(v.locatorHash))return;let T=C!==null?de.tuple(de.Type.DEPENDENT,{locator:v,descriptor:C}):de.tuple(de.Type.LOCATOR,v),L={},U={value:T,children:L},J=W.stringifyLocator(v);if(b[J]=U,!p.has(v.locatorHash)&&(p.add(v.locatorHash),!(C!==null&&t.tryWorkspaceByLocator(v))))for(let te of v.dependencies.values()){if(!o&&v.peerDependencies.has(te.identHash))continue;let le=t.storedResolutions.get(te.descriptorHash);if(!le)throw new Error("Assertion failed: The resolution should have been registered");let pe=t.storedPackages.get(le);if(!pe)throw new Error("Assertion failed: The package should have been registered");I(pe,L,te)}};for(let v of a)I(v.anchoredPackage,h,null);return E}Ye();var eH={};Kt(eH,{GitFetcher:()=>C2,GitResolver:()=>w2,default:()=>bgt,gitUtils:()=>ra});Ye();Pt();var ra={};Kt(ra,{TreeishProtocols:()=>E2,clone:()=>$8,fetchBase:()=>Qde,fetchChangedFiles:()=>Fde,fetchChangedWorkspaces:()=>Sgt,fetchRoot:()=>kde,isGitUrl:()=>EC,lsRemote:()=>bde,normalizeLocator:()=>Pgt,normalizeRepoUrl:()=>mC,resolveUrl:()=>Z8,splitRepoUrl:()=>i0,validateRepoUrl:()=>X8});Ye();Pt();qt();var Pde=$e(Bde()),Sde=$e(EU()),yC=$e(Be("querystring")),J8=$e(zn());function K8(t,e,r){let o=t.indexOf(r);return t.lastIndexOf(e,o>-1?o:1/0)}function vde(t){try{return new URL(t)}catch{return}}function vgt(t){let e=K8(t,"@","#"),r=K8(t,":","#");return r>e&&(t=`${t.slice(0,r)}/${t.slice(r+1)}`),K8(t,":","#")===-1&&t.indexOf("//")===-1&&(t=`ssh://${t}`),t}function Dde(t){return vde(t)||vde(vgt(t))}function mC(t,{git:e=!1}={}){if(t=t.replace(/^git\+https:/,"https:"),t=t.replace(/^(?:github:|https:\/\/github\.com\/|git:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\.git)?(#.*)?$/,"https://github.com/$1/$2.git$3"),t=t.replace(/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/,"https://github.com/$1/$2.git#$3"),e){let r=Dde(t);r&&(t=r.href),t=t.replace(/^git\+([^:]+):/,"$1:")}return t}function xde(){return{...process.env,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||"ssh"} -o BatchMode=yes`}}var Dgt=[/^ssh:/,/^git(?:\+[^:]+)?:/,/^(?:git\+)?https?:[^#]+\/[^#]+(?:\.git)(?:#.*)?$/,/^git@[^#]+\/[^#]+\.git(?:#.*)?$/,/^(?:github:|https:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z._0-9-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\.git)?(?:#.*)?$/,/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/],E2=(a=>(a.Commit="commit",a.Head="head",a.Tag="tag",a.Semver="semver",a))(E2||{});function EC(t){return t?Dgt.some(e=>!!t.match(e)):!1}function i0(t){t=mC(t);let e=t.indexOf("#");if(e===-1)return{repo:t,treeish:{protocol:"head",request:"HEAD"},extra:{}};let r=t.slice(0,e),o=t.slice(e+1);if(o.match(/^[a-z]+=/)){let a=yC.default.parse(o);for(let[p,h]of Object.entries(a))if(typeof h!="string")throw new Error(`Assertion failed: The ${p} parameter must be a literal string`);let n=Object.values(E2).find(p=>Object.hasOwn(a,p)),[u,A]=typeof n<"u"?[n,a[n]]:["head","HEAD"];for(let p of Object.values(E2))delete a[p];return{repo:r,treeish:{protocol:u,request:A},extra:a}}else{let a=o.indexOf(":"),[n,u]=a===-1?[null,o]:[o.slice(0,a),o.slice(a+1)];return{repo:r,treeish:{protocol:n,request:u},extra:{}}}}function Pgt(t){return W.makeLocator(t,mC(t.reference))}function X8(t,{configuration:e}){let r=mC(t,{git:!0});if(!rn.getNetworkSettings(`https://${(0,Pde.default)(r).resource}`,{configuration:e}).enableNetwork)throw new zt(80,`Request to '${r}' has been blocked because of your configuration settings`);return r}async function bde(t,e){let r=X8(t,{configuration:e}),o=await z8("listing refs",["ls-remote",r],{cwd:e.startingCwd,env:xde()},{configuration:e,normalizedRepoUrl:r}),a=new Map,n=/^([a-f0-9]{40})\t([^\n]+)/gm,u;for(;(u=n.exec(o.stdout))!==null;)a.set(u[2],u[1]);return a}async function Z8(t,e){let{repo:r,treeish:{protocol:o,request:a},extra:n}=i0(t),u=await bde(r,e),A=(h,E)=>{switch(h){case"commit":{if(!E.match(/^[a-f0-9]{40}$/))throw new Error("Invalid commit hash");return yC.default.stringify({...n,commit:E})}case"head":{let I=u.get(E==="HEAD"?E:`refs/heads/${E}`);if(typeof I>"u")throw new Error(`Unknown head ("${E}")`);return yC.default.stringify({...n,commit:I})}case"tag":{let I=u.get(`refs/tags/${E}`);if(typeof I>"u")throw new Error(`Unknown tag ("${E}")`);return yC.default.stringify({...n,commit:I})}case"semver":{let I=kr.validRange(E);if(!I)throw new Error(`Invalid range ("${E}")`);let v=new Map([...u.entries()].filter(([C])=>C.startsWith("refs/tags/")).map(([C,T])=>[J8.default.parse(C.slice(10)),T]).filter(C=>C[0]!==null)),b=J8.default.maxSatisfying([...v.keys()],I);if(b===null)throw new Error(`No matching range ("${E}")`);return yC.default.stringify({...n,commit:v.get(b)})}case null:{let I;if((I=p("commit",E))!==null||(I=p("tag",E))!==null||(I=p("head",E))!==null)return I;throw E.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve "${E}" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol ("${h}")`)}},p=(h,E)=>{try{return A(h,E)}catch{return null}};return mC(`${r}#${A(o,a)}`)}async function $8(t,e){return await e.getLimit("cloneConcurrency")(async()=>{let{repo:r,treeish:{protocol:o,request:a}}=i0(t);if(o!=="commit")throw new Error("Invalid treeish protocol when cloning");let n=X8(r,{configuration:e}),u=await oe.mktempPromise(),A={cwd:u,env:xde()};return await z8("cloning the repository",["clone","-c core.autocrlf=false",n,ue.fromPortablePath(u)],A,{configuration:e,normalizedRepoUrl:n}),await z8("switching branch",["checkout",`${a}`],A,{configuration:e,normalizedRepoUrl:n}),u})}async function kde(t){let e,r=t;do{if(e=r,await oe.existsPromise(K.join(e,".git")))return e;r=K.dirname(e)}while(r!==e);return null}async function Qde(t,{baseRefs:e}){if(e.length===0)throw new it("Can't run this command with zero base refs specified.");let r=[];for(let A of e){let{code:p}=await Ur.execvp("git",["merge-base",A,"HEAD"],{cwd:t});p===0&&r.push(A)}if(r.length===0)throw new it(`No ancestor could be found between any of HEAD and ${e.join(", ")}`);let{stdout:o}=await Ur.execvp("git",["merge-base","HEAD",...r],{cwd:t,strict:!0}),a=o.trim(),{stdout:n}=await Ur.execvp("git",["show","--quiet","--pretty=format:%s",a],{cwd:t,strict:!0}),u=n.trim();return{hash:a,title:u}}async function Fde(t,{base:e,project:r}){let o=je.buildIgnorePattern(r.configuration.get("changesetIgnorePatterns")),{stdout:a}=await Ur.execvp("git",["diff","--name-only",`${e}`],{cwd:t,strict:!0}),n=a.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>K.resolve(t,ue.toPortablePath(h))),{stdout:u}=await Ur.execvp("git",["ls-files","--others","--exclude-standard"],{cwd:t,strict:!0}),A=u.split(/\r\n|\r|\n/).filter(h=>h.length>0).map(h=>K.resolve(t,ue.toPortablePath(h))),p=[...new Set([...n,...A].sort())];return o?p.filter(h=>!K.relative(r.cwd,h).match(o)):p}async function Sgt({ref:t,project:e}){if(e.configuration.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let r=[K.resolve(e.cwd,dr.lockfile),K.resolve(e.cwd,e.configuration.get("cacheFolder")),K.resolve(e.cwd,e.configuration.get("installStatePath")),K.resolve(e.cwd,e.configuration.get("virtualFolder"))];await e.configuration.triggerHook(u=>u.populateYarnPaths,e,u=>{u!=null&&r.push(u)});let o=await kde(e.configuration.projectCwd);if(o==null)throw new it("This command can only be run on Git repositories");let a=await Qde(o,{baseRefs:typeof t=="string"?[t]:e.configuration.get("changesetBaseRefs")}),n=await Fde(o,{base:a.hash,project:e});return new Set(je.mapAndFilter(n,u=>{let A=e.tryWorkspaceByFilePath(u);return A===null?je.mapAndFilter.skip:r.some(p=>u.startsWith(p))?je.mapAndFilter.skip:A}))}async function z8(t,e,r,{configuration:o,normalizedRepoUrl:a}){try{return await Ur.execvp("git",e,{...r,strict:!0})}catch(n){if(!(n instanceof Ur.ExecError))throw n;let u=n.reportExtra,A=n.stderr.toString();throw new zt(1,`Failed ${t}`,p=>{p.reportError(1,` ${de.prettyField(o,{label:"Repository URL",value:de.tuple(de.Type.URL,a)})}`);for(let h of A.matchAll(/^(.+?): (.*)$/gm)){let[,E,I]=h;E=E.toLowerCase();let v=E==="error"?"Error":`${(0,Sde.default)(E)} Error`;p.reportError(1,` ${de.prettyField(o,{label:v,value:de.tuple(de.Type.NO_HINT,I)})}`)}u?.(p)})}}var C2=class{supports(e,r){return EC(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,a=new Map(r.checksums);a.set(e.locatorHash,o);let n={...r,checksums:a},u=await this.downloadHosted(e,n);if(u!==null)return u;let[A,p,h]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(e,n),...r.cacheOptions});return{packageFs:A,releaseFs:p,prefixPath:W.getIdentVendorPath(e),checksum:h}}async downloadHosted(e,r){return r.project.configuration.reduceHook(o=>o.fetchHostedRepository,null,e,r)}async cloneFromRemote(e,r){let o=await $8(e.reference,r.project.configuration),a=i0(e.reference),n=K.join(o,"package.tgz");await un.prepareExternalProject(o,n,{configuration:r.project.configuration,report:r.report,workspace:a.extra.workspace,locator:e});let u=await oe.readFilePromise(n);return await je.releaseAfterUseAsync(async()=>await Xi.convertToZip(u,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1}))}};Ye();Ye();var w2=class{supportsDescriptor(e,r){return EC(e.range)}supportsLocator(e,r){return EC(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=await Z8(e.range,o.project.configuration);return[W.makeLocator(e,a)]}async getSatisfying(e,r,o,a){let n=i0(e.range);return{locators:o.filter(A=>{if(A.identHash!==e.identHash)return!1;let p=i0(A.reference);return!(n.repo!==p.repo||n.treeish.protocol==="commit"&&n.treeish.request!==p.treeish.request)}),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var xgt={configuration:{changesetBaseRefs:{description:"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.",type:"STRING",isArray:!0,isNullable:!1,default:["master","origin/master","upstream/master","main","origin/main","upstream/main"]},changesetIgnorePatterns:{description:"Array of glob patterns; files matching them will be ignored when fetching the changed files",type:"STRING",default:[],isArray:!0},cloneConcurrency:{description:"Maximal number of concurrent clones",type:"NUMBER",default:2}},fetchers:[C2],resolvers:[w2]};var bgt=xgt;qt();var s0=class extends ut{constructor(){super(...arguments);this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Find packages via dependencies/devDependencies instead of using the workspaces field"});this.noPrivate=ge.Boolean("--no-private",{description:"Exclude workspaces that have the private field set to true"});this.verbose=ge.Boolean("-v,--verbose",!1,{description:"Also return the cross-dependencies between workspaces"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);return(await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async n=>{let u=this.since?await ra.fetchChangedWorkspaces({ref:this.since,project:o}):o.workspaces,A=new Set(u);if(this.recursive)for(let p of[...u].map(h=>h.getRecursiveWorkspaceDependents()))for(let h of p)A.add(h);for(let p of A){let{manifest:h}=p;if(h.private&&this.noPrivate)continue;let E;if(this.verbose){let I=new Set,v=new Set;for(let b of Mt.hardDependencies)for(let[C,T]of h.getForScope(b)){let L=o.tryWorkspaceByDescriptor(T);L===null?o.workspacesByIdent.has(C)&&v.add(T):I.add(L)}E={workspaceDependencies:Array.from(I).map(b=>b.relativeCwd),mismatchedWorkspaceDependencies:Array.from(v).map(b=>W.stringifyDescriptor(b))}}n.reportInfo(null,`${p.relativeCwd}`),n.reportJson({location:p.relativeCwd,name:h.name?W.stringifyIdent(h.name):null,...E})}})).exitCode()}};s0.paths=[["workspaces","list"]],s0.usage=nt.Usage({category:"Workspace-related commands",description:"list all available workspaces",details:"\n This command will print the list of all workspaces in the project.\n\n - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `--no-private` is set, Yarn will not list any workspaces that have the `private` field set to `true`.\n\n - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\n "});Ye();Ye();qt();var o0=class extends ut{constructor(){super(...arguments);this.workspaceName=ge.String();this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=o.workspaces,u=new Map(n.map(p=>[W.stringifyIdent(p.anchoredLocator),p])),A=u.get(this.workspaceName);if(A===void 0){let p=Array.from(u.keys()).sort();throw new it(`Workspace '${this.workspaceName}' not found. Did you mean any of the following: + - ${p.join(` + - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:A.cwd})}};o0.paths=[["workspace"]],o0.usage=nt.Usage({category:"Workspace-related commands",description:"run a command within the specified workspace",details:` + This command will run a given sub-command on a single workspace. + `,examples:[["Add a package to a single workspace","yarn workspace components add -D react"],["Run build script on a single workspace","yarn workspace components run build"]]});var kgt={configuration:{enableImmutableInstalls:{description:"If true (the default on CI), prevents the install command from modifying the lockfile",type:"BOOLEAN",default:Tde.isCI},defaultSemverRangePrefix:{description:"The default save prefix: '^', '~' or ''",type:"STRING",values:["^","~",""],default:"^"},preferReuse:{description:"If true, `yarn add` will attempt to reuse the most common dependency range in other workspaces.",type:"BOOLEAN",default:!1}},commands:[Qh,Fh,Th,Rh,t0,Vh,Uh,s0,Wd,Vd,dC,Kd,bh,kh,Nh,Lh,Mh,Oh,_h,Hh,jh,qh,r0,Gh,Yh,Jh,Kh,zh,Wh,Xh,Zh,$h,zd,e0,Kf,n0,o0]},Qgt=kgt;var oH={};Kt(oH,{default:()=>Tgt});Ye();var kt={optional:!0},rH=[["@tailwindcss/aspect-ratio@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@tailwindcss/line-clamp@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0",{peerDependencies:{postcss:"^8.0.0"}}],["@samverschueren/stream-to-observable@<0.3.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["any-observable@<0.5.1",{peerDependenciesMeta:{rxjs:kt,zenObservable:kt}}],["@pm2/agent@<1.0.4",{dependencies:{debug:"*"}}],["debug@<4.2.0",{peerDependenciesMeta:{["supports-color"]:kt}}],["got@<11",{dependencies:{["@types/responselike"]:"^1.0.0",["@types/keyv"]:"^3.1.1"}}],["cacheable-lookup@<4.1.2",{dependencies:{["@types/keyv"]:"^3.1.1"}}],["http-link-dataloader@*",{peerDependencies:{graphql:"^0.13.1 || ^14.0.0"}}],["typescript-language-server@*",{dependencies:{["vscode-jsonrpc"]:"^5.0.1",["vscode-languageserver-protocol"]:"^3.15.0"}}],["postcss-syntax@*",{peerDependenciesMeta:{["postcss-html"]:kt,["postcss-jsx"]:kt,["postcss-less"]:kt,["postcss-markdown"]:kt,["postcss-scss"]:kt}}],["jss-plugin-rule-value-function@<=10.1.1",{dependencies:{["tiny-warning"]:"^1.0.2"}}],["ink-select-input@<4.1.0",{peerDependencies:{react:"^16.8.2"}}],["license-webpack-plugin@<2.3.18",{peerDependenciesMeta:{webpack:kt}}],["snowpack@>=3.3.0",{dependencies:{["node-gyp"]:"^7.1.0"}}],["promise-inflight@*",{peerDependenciesMeta:{bluebird:kt}}],["reactcss@*",{peerDependencies:{react:"*"}}],["react-color@<=2.19.0",{peerDependencies:{react:"*"}}],["gatsby-plugin-i18n@*",{dependencies:{ramda:"^0.24.1"}}],["useragent@^2.0.0",{dependencies:{request:"^2.88.0",yamlparser:"0.0.x",semver:"5.5.x"}}],["@apollographql/apollo-tools@<=0.5.2",{peerDependencies:{graphql:"^14.2.1 || ^15.0.0"}}],["material-table@^2.0.0",{dependencies:{"@babel/runtime":"^7.11.2"}}],["@babel/parser@*",{dependencies:{"@babel/types":"^7.8.3"}}],["fork-ts-checker-webpack-plugin@<=6.3.4",{peerDependencies:{eslint:">= 6",typescript:">= 2.7",webpack:">= 4","vue-template-compiler":"*"},peerDependenciesMeta:{eslint:kt,"vue-template-compiler":kt}}],["rc-animate@<=3.1.1",{peerDependencies:{react:">=16.9.0","react-dom":">=16.9.0"}}],["react-bootstrap-table2-paginator@*",{dependencies:{classnames:"^2.2.6"}}],["react-draggable@<=4.4.3",{peerDependencies:{react:">= 16.3.0","react-dom":">= 16.3.0"}}],["apollo-upload-client@<14",{peerDependencies:{graphql:"14 - 15"}}],["react-instantsearch-core@<=6.7.0",{peerDependencies:{algoliasearch:">= 3.1 < 5"}}],["react-instantsearch-dom@<=6.7.0",{dependencies:{"react-fast-compare":"^3.0.0"}}],["ws@<7.2.1",{peerDependencies:{bufferutil:"^4.0.1","utf-8-validate":"^5.0.2"},peerDependenciesMeta:{bufferutil:kt,"utf-8-validate":kt}}],["react-portal@<4.2.2",{peerDependencies:{"react-dom":"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0"}}],["react-scripts@<=4.0.1",{peerDependencies:{react:"*"}}],["testcafe@<=1.10.1",{dependencies:{"@babel/plugin-transform-for-of":"^7.12.1","@babel/runtime":"^7.12.5"}}],["testcafe-legacy-api@<=4.2.0",{dependencies:{"testcafe-hammerhead":"^17.0.1","read-file-relative":"^1.2.0"}}],["@google-cloud/firestore@<=4.9.3",{dependencies:{protobufjs:"^6.8.6"}}],["gatsby-source-apiserver@*",{dependencies:{["babel-polyfill"]:"^6.26.0"}}],["@webpack-cli/package-utils@<=1.0.1-alpha.4",{dependencies:{["cross-spawn"]:"^7.0.3"}}],["gatsby-remark-prismjs@<3.3.28",{dependencies:{lodash:"^4"}}],["gatsby-plugin-favicon@*",{peerDependencies:{webpack:"*"}}],["gatsby-plugin-sharp@<=4.6.0-next.3",{dependencies:{debug:"^4.3.1"}}],["gatsby-react-router-scroll@<=5.6.0-next.0",{dependencies:{["prop-types"]:"^15.7.2"}}],["@rebass/forms@*",{dependencies:{["@styled-system/should-forward-prop"]:"^5.0.0"},peerDependencies:{react:"^16.8.6"}}],["rebass@*",{peerDependencies:{react:"^16.8.6"}}],["@ant-design/react-slick@<=0.28.3",{peerDependencies:{react:">=16.0.0"}}],["mqtt@<4.2.7",{dependencies:{duplexify:"^4.1.1"}}],["vue-cli-plugin-vuetify@<=2.0.3",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt,"vuetify-loader":kt}}],["vue-cli-plugin-vuetify@<=2.0.4",{dependencies:{"null-loader":"^3.0.0"}}],["vue-cli-plugin-vuetify@>=2.4.3",{peerDependencies:{vue:"*"}}],["@vuetify/cli-plugin-utils@<=0.0.4",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":kt}}],["@vue/cli-plugin-typescript@<=5.0.0-alpha.0",{dependencies:{"babel-loader":"^8.1.0"}}],["@vue/cli-plugin-typescript@<=5.0.0-beta.0",{dependencies:{"@babel/core":"^7.12.16"},peerDependencies:{"vue-template-compiler":"^2.0.0"},peerDependenciesMeta:{"vue-template-compiler":kt}}],["cordova-ios@<=6.3.0",{dependencies:{underscore:"^1.9.2"}}],["cordova-lib@<=10.0.1",{dependencies:{underscore:"^1.9.2"}}],["git-node-fs@*",{peerDependencies:{"js-git":"^0.7.8"},peerDependenciesMeta:{"js-git":kt}}],["consolidate@<0.16.0",{peerDependencies:{mustache:"^3.0.0"},peerDependenciesMeta:{mustache:kt}}],["consolidate@<=0.16.0",{peerDependencies:{velocityjs:"^2.0.1",tinyliquid:"^0.2.34","liquid-node":"^3.0.1",jade:"^1.11.0","then-jade":"*",dust:"^0.3.0","dustjs-helpers":"^1.7.4","dustjs-linkedin":"^2.7.5",swig:"^1.4.2","swig-templates":"^2.0.3","razor-tmpl":"^1.3.1",atpl:">=0.7.6",liquor:"^0.0.5",twig:"^1.15.2",ejs:"^3.1.5",eco:"^1.1.0-rc-3",jazz:"^0.0.18",jqtpl:"~1.1.0",hamljs:"^0.6.2",hamlet:"^0.3.3",whiskers:"^0.4.0","haml-coffee":"^1.14.1","hogan.js":"^3.0.2",templayed:">=0.2.3",handlebars:"^4.7.6",underscore:"^1.11.0",lodash:"^4.17.20",pug:"^3.0.0","then-pug":"*",qejs:"^3.0.5",walrus:"^0.10.1",mustache:"^4.0.1",just:"^0.1.8",ect:"^0.5.9",mote:"^0.2.0",toffee:"^0.3.6",dot:"^1.1.3","bracket-template":"^1.1.5",ractive:"^1.3.12",nunjucks:"^3.2.2",htmling:"^0.0.8","babel-core":"^6.26.3",plates:"~0.4.11","react-dom":"^16.13.1",react:"^16.13.1","arc-templates":"^0.5.3",vash:"^0.13.0",slm:"^2.0.0",marko:"^3.14.4",teacup:"^2.0.0","coffee-script":"^1.12.7",squirrelly:"^5.1.0",twing:"^5.0.2"},peerDependenciesMeta:{velocityjs:kt,tinyliquid:kt,"liquid-node":kt,jade:kt,"then-jade":kt,dust:kt,"dustjs-helpers":kt,"dustjs-linkedin":kt,swig:kt,"swig-templates":kt,"razor-tmpl":kt,atpl:kt,liquor:kt,twig:kt,ejs:kt,eco:kt,jazz:kt,jqtpl:kt,hamljs:kt,hamlet:kt,whiskers:kt,"haml-coffee":kt,"hogan.js":kt,templayed:kt,handlebars:kt,underscore:kt,lodash:kt,pug:kt,"then-pug":kt,qejs:kt,walrus:kt,mustache:kt,just:kt,ect:kt,mote:kt,toffee:kt,dot:kt,"bracket-template":kt,ractive:kt,nunjucks:kt,htmling:kt,"babel-core":kt,plates:kt,"react-dom":kt,react:kt,"arc-templates":kt,vash:kt,slm:kt,marko:kt,teacup:kt,"coffee-script":kt,squirrelly:kt,twing:kt}}],["vue-loader@<=16.3.3",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",webpack:"^4.1.0 || ^5.0.0-0"},peerDependenciesMeta:{"@vue/compiler-sfc":kt}}],["vue-loader@^16.7.0",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",vue:"^3.2.13"},peerDependenciesMeta:{"@vue/compiler-sfc":kt,vue:kt}}],["scss-parser@<=1.0.5",{dependencies:{lodash:"^4.17.21"}}],["query-ast@<1.0.5",{dependencies:{lodash:"^4.17.21"}}],["redux-thunk@<=2.3.0",{peerDependencies:{redux:"^4.0.0"}}],["skypack@<=0.3.2",{dependencies:{tar:"^6.1.0"}}],["@npmcli/metavuln-calculator@<2.0.0",{dependencies:{"json-parse-even-better-errors":"^2.3.1"}}],["bin-links@<2.3.0",{dependencies:{"mkdirp-infer-owner":"^1.0.2"}}],["rollup-plugin-polyfill-node@<=0.8.0",{peerDependencies:{rollup:"^1.20.0 || ^2.0.0"}}],["snowpack@<3.8.6",{dependencies:{"magic-string":"^0.25.7"}}],["elm-webpack-loader@*",{dependencies:{temp:"^0.9.4"}}],["winston-transport@<=4.4.0",{dependencies:{logform:"^2.2.0"}}],["jest-vue-preprocessor@*",{dependencies:{"@babel/core":"7.8.7","@babel/template":"7.8.6"},peerDependencies:{pug:"^2.0.4"},peerDependenciesMeta:{pug:kt}}],["redux-persist@*",{peerDependencies:{react:">=16"},peerDependenciesMeta:{react:kt}}],["sodium@>=3",{dependencies:{"node-gyp":"^3.8.0"}}],["babel-plugin-graphql-tag@<=3.1.0",{peerDependencies:{graphql:"^14.0.0 || ^15.0.0"}}],["@playwright/test@<=1.14.1",{dependencies:{"jest-matcher-utils":"^26.4.2"}}],...["babel-plugin-remove-graphql-queries@<3.14.0-next.1","babel-preset-gatsby-package@<1.14.0-next.1","create-gatsby@<1.14.0-next.1","gatsby-admin@<0.24.0-next.1","gatsby-cli@<3.14.0-next.1","gatsby-core-utils@<2.14.0-next.1","gatsby-design-tokens@<3.14.0-next.1","gatsby-legacy-polyfills@<1.14.0-next.1","gatsby-plugin-benchmark-reporting@<1.14.0-next.1","gatsby-plugin-graphql-config@<0.23.0-next.1","gatsby-plugin-image@<1.14.0-next.1","gatsby-plugin-mdx@<2.14.0-next.1","gatsby-plugin-netlify-cms@<5.14.0-next.1","gatsby-plugin-no-sourcemaps@<3.14.0-next.1","gatsby-plugin-page-creator@<3.14.0-next.1","gatsby-plugin-preact@<5.14.0-next.1","gatsby-plugin-preload-fonts@<2.14.0-next.1","gatsby-plugin-schema-snapshot@<2.14.0-next.1","gatsby-plugin-styletron@<6.14.0-next.1","gatsby-plugin-subfont@<3.14.0-next.1","gatsby-plugin-utils@<1.14.0-next.1","gatsby-recipes@<0.25.0-next.1","gatsby-source-shopify@<5.6.0-next.1","gatsby-source-wikipedia@<3.14.0-next.1","gatsby-transformer-screenshot@<3.14.0-next.1","gatsby-worker@<0.5.0-next.1"].map(t=>[t,{dependencies:{"@babel/runtime":"^7.14.8"}}]),["gatsby-core-utils@<2.14.0-next.1",{dependencies:{got:"8.3.2"}}],["gatsby-plugin-gatsby-cloud@<=3.1.0-next.0",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["gatsby-plugin-gatsby-cloud@<=3.2.0-next.1",{peerDependencies:{webpack:"*"}}],["babel-plugin-remove-graphql-queries@<=3.14.0-next.1",{dependencies:{"gatsby-core-utils":"^2.8.0-next.1"}}],["gatsby-plugin-netlify@3.13.0-next.1",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["clipanion-v3-codemod@<=0.2.0",{peerDependencies:{jscodeshift:"^0.11.0"}}],["react-live@*",{peerDependencies:{"react-dom":"*",react:"*"}}],["webpack@<4.44.1",{peerDependenciesMeta:{"webpack-cli":kt,"webpack-command":kt}}],["webpack@<5.0.0-beta.23",{peerDependenciesMeta:{"webpack-cli":kt}}],["webpack-dev-server@<3.10.2",{peerDependenciesMeta:{"webpack-cli":kt}}],["@docusaurus/responsive-loader@<1.5.0",{peerDependenciesMeta:{sharp:kt,jimp:kt}}],["eslint-module-utils@*",{peerDependenciesMeta:{"eslint-import-resolver-node":kt,"eslint-import-resolver-typescript":kt,"eslint-import-resolver-webpack":kt,"@typescript-eslint/parser":kt}}],["eslint-plugin-import@*",{peerDependenciesMeta:{"@typescript-eslint/parser":kt}}],["critters-webpack-plugin@<3.0.2",{peerDependenciesMeta:{"html-webpack-plugin":kt}}],["terser@<=5.10.0",{dependencies:{acorn:"^8.5.0"}}],["babel-preset-react-app@10.0.x",{dependencies:{"@babel/plugin-proposal-private-property-in-object":"^7.16.0"}}],["eslint-config-react-app@*",{peerDependenciesMeta:{typescript:kt}}],["@vue/eslint-config-typescript@<11.0.0",{peerDependenciesMeta:{typescript:kt}}],["unplugin-vue2-script-setup@<0.9.1",{peerDependencies:{"@vue/composition-api":"^1.4.3","@vue/runtime-dom":"^3.2.26"}}],["@cypress/snapshot@*",{dependencies:{debug:"^3.2.7"}}],["auto-relay@<=0.14.0",{peerDependencies:{"reflect-metadata":"^0.1.13"}}],["vue-template-babel-compiler@<1.2.0",{peerDependencies:{["vue-template-compiler"]:"^2.6.0"}}],["@parcel/transformer-image@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["@parcel/transformer-js@<2.5.0",{peerDependencies:{["@parcel/core"]:"*"}}],["parcel@*",{peerDependenciesMeta:{["@parcel/core"]:kt}}],["react-scripts@*",{peerDependencies:{eslint:"*"}}],["focus-trap-react@^8.0.0",{dependencies:{tabbable:"^5.3.2"}}],["react-rnd@<10.3.7",{peerDependencies:{react:">=16.3.0","react-dom":">=16.3.0"}}],["connect-mongo@*",{peerDependencies:{"express-session":"^1.17.1"}}],["vue-i18n@<9",{peerDependencies:{vue:"^2"}}],["vue-router@<4",{peerDependencies:{vue:"^2"}}],["unified@<10",{dependencies:{"@types/unist":"^2.0.0"}}],["react-github-btn@<=1.3.0",{peerDependencies:{react:">=16.3.0"}}],["react-dev-utils@*",{peerDependencies:{typescript:">=2.7",webpack:">=4"},peerDependenciesMeta:{typescript:kt}}],["@asyncapi/react-component@<=1.0.0-next.39",{peerDependencies:{react:">=16.8.0","react-dom":">=16.8.0"}}],["xo@*",{peerDependencies:{webpack:">=1.11.0"},peerDependenciesMeta:{webpack:kt}}],["babel-plugin-remove-graphql-queries@<=4.20.0-next.0",{dependencies:{"@babel/types":"^7.15.4"}}],["gatsby-plugin-page-creator@<=4.20.0-next.1",{dependencies:{"fs-extra":"^10.1.0"}}],["gatsby-plugin-utils@<=3.14.0-next.1",{dependencies:{fastq:"^1.13.0"},peerDependencies:{graphql:"^15.0.0"}}],["gatsby-plugin-mdx@<3.1.0-next.1",{dependencies:{mkdirp:"^1.0.4"}}],["gatsby-plugin-mdx@^2",{peerDependencies:{gatsby:"^3.0.0-next"}}],["fdir@<=5.2.0",{peerDependencies:{picomatch:"2.x"},peerDependenciesMeta:{picomatch:kt}}],["babel-plugin-transform-typescript-metadata@<=0.3.2",{peerDependencies:{"@babel/core":"^7","@babel/traverse":"^7"},peerDependenciesMeta:{"@babel/traverse":kt}}],["graphql-compose@>=9.0.10",{peerDependencies:{graphql:"^14.2.0 || ^15.0.0 || ^16.0.0"}}]];var nH;function Rde(){return typeof nH>"u"&&(nH=Be("zlib").brotliDecompressSync(Buffer.from("G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==","base64")).toString()),nH}var iH;function Nde(){return typeof iH>"u"&&(iH=Be("zlib").brotliDecompressSync(Buffer.from("G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=","base64")).toString()),iH}var sH;function Lde(){return typeof sH>"u"&&(sH=Be("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),sH}var Mde=new Map([[W.makeIdent(null,"fsevents").identHash,Rde],[W.makeIdent(null,"resolve").identHash,Nde],[W.makeIdent(null,"typescript").identHash,Lde]]),Fgt={hooks:{registerPackageExtensions:async(t,e)=>{for(let[r,o]of rH)e(W.parseDescriptor(r,!0),o)},getBuiltinPatch:async(t,e)=>{let r="compat/";if(!e.startsWith(r))return;let o=W.parseIdent(e.slice(r.length)),a=Mde.get(o.identHash)?.();return typeof a<"u"?a:null},reduceDependency:async(t,e,r,o)=>typeof Mde.get(t.identHash)>"u"?t:W.makeDescriptor(t,W.makeRange({protocol:"patch:",source:W.stringifyDescriptor(t),selector:`optional!builtin`,params:null}))}},Tgt=Fgt;var BH={};Kt(BH,{ConstraintsCheckCommand:()=>p0,ConstraintsQueryCommand:()=>A0,ConstraintsSourceCommand:()=>f0,default:()=>odt});Ye();Ye();B2();var wC=class{constructor(e){this.project=e}createEnvironment(){let e=new CC(["cwd","ident"]),r=new CC(["workspace","type","ident"]),o=new CC(["ident"]),a={manifestUpdates:new Map,reportedErrors:new Map},n=new Map,u=new Map;for(let A of this.project.storedPackages.values()){let p=Array.from(A.peerDependencies.values(),h=>[W.stringifyIdent(h),h.range]);n.set(A.locatorHash,{workspace:null,ident:W.stringifyIdent(A),version:A.version,dependencies:new Map,peerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional!==!0)),optionalPeerDependencies:new Map(p.filter(([h])=>A.peerDependenciesMeta.get(h)?.optional===!0))})}for(let A of this.project.storedPackages.values()){let p=n.get(A.locatorHash);p.dependencies=new Map(Array.from(A.dependencies.values(),h=>{let E=this.project.storedResolutions.get(h.descriptorHash);if(typeof E>"u")throw new Error("Assertion failed: The resolution should have been registered");let I=n.get(E);if(typeof I>"u")throw new Error("Assertion failed: The package should have been registered");return[W.stringifyIdent(h),I]})),p.dependencies.delete(p.ident)}for(let A of this.project.workspaces){let p=W.stringifyIdent(A.anchoredLocator),h=A.manifest.exportTo({}),E=n.get(A.anchoredLocator.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");let I=(T,L,{caller:U=Ji.getCaller()}={})=>{let J=I2(T),te=je.getMapWithDefault(a.manifestUpdates,A.cwd),le=je.getMapWithDefault(te,J),pe=je.getSetWithDefault(le,L);U!==null&&pe.add(U)},v=T=>I(T,void 0,{caller:Ji.getCaller()}),b=T=>{je.getArrayWithDefault(a.reportedErrors,A.cwd).push(T)},C=e.insert({cwd:A.relativeCwd,ident:p,manifest:h,pkg:E,set:I,unset:v,error:b});u.set(A,C);for(let T of Mt.allDependencies)for(let L of A.manifest[T].values()){let U=W.stringifyIdent(L),J=()=>{I([T,U],void 0,{caller:Ji.getCaller()})},te=pe=>{I([T,U],pe,{caller:Ji.getCaller()})},le=null;if(T!=="peerDependencies"&&(T!=="dependencies"||!A.manifest.devDependencies.has(L.identHash))){let pe=A.anchoredPackage.dependencies.get(L.identHash);if(pe){if(typeof pe>"u")throw new Error("Assertion failed: The dependency should have been registered");let Ae=this.project.storedResolutions.get(pe.descriptorHash);if(typeof Ae>"u")throw new Error("Assertion failed: The resolution should have been registered");let ye=n.get(Ae);if(typeof ye>"u")throw new Error("Assertion failed: The package should have been registered");le=ye}}r.insert({workspace:C,ident:U,range:L.range,type:T,resolution:le,update:te,delete:J,error:b})}}for(let A of this.project.storedPackages.values()){let p=this.project.tryWorkspaceByLocator(A);if(!p)continue;let h=u.get(p);if(typeof h>"u")throw new Error("Assertion failed: The workspace should have been registered");let E=n.get(A.locatorHash);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");E.workspace=h}return{workspaces:e,dependencies:r,packages:o,result:a}}async process(){let e=this.createEnvironment(),r={Yarn:{workspace:a=>e.workspaces.find(a)[0]??null,workspaces:a=>e.workspaces.find(a),dependency:a=>e.dependencies.find(a)[0]??null,dependencies:a=>e.dependencies.find(a),package:a=>e.packages.find(a)[0]??null,packages:a=>e.packages.find(a)}},o=await this.project.loadUserConfig();return o?.constraints?(await o.constraints(r),e.result):null}};Ye();Ye();qt();var A0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.query=ge.String()}async execute(){let{Constraints:r}=await Promise.resolve().then(()=>(x2(),S2)),o=await Ve.find(this.context.cwd,this.context.plugins),{project:a}=await St.find(o,this.context.cwd),n=await r.find(a),u=this.query;return u.endsWith(".")||(u=`${u}.`),(await Nt.start({configuration:o,json:this.json,stdout:this.context.stdout},async p=>{for await(let h of n.query(u)){let E=Array.from(Object.entries(h)),I=E.length,v=E.reduce((b,[C])=>Math.max(b,C.length),0);for(let b=0;b(x2(),S2)),o=await Ve.find(this.context.cwd,this.context.plugins),{project:a}=await St.find(o,this.context.cwd),n=await r.find(a);this.context.stdout.write(this.verbose?n.fullSource:n.source)}};f0.paths=[["constraints","source"]],f0.usage=nt.Usage({category:"Constraints-related commands",description:"print the source code for the constraints",details:"\n This command will print the Prolog source code used by the constraints engine. Adding the `-v,--verbose` flag will print the *full* source code, including the fact database automatically compiled from the workspace manifests.\n ",examples:[["Prints the source code","yarn constraints source"],["Print the source code and the fact database","yarn constraints source -v"]]});Ye();Ye();qt();B2();var p0=class extends ut{constructor(){super(...arguments);this.fix=ge.Boolean("--fix",!1,{description:"Attempt to automatically fix unambiguous issues, following a multi-pass process"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd);await o.restoreInstallState();let a=await o.loadUserConfig(),n;if(a?.constraints)n=new wC(o);else{let{Constraints:h}=await Promise.resolve().then(()=>(x2(),S2));n=await h.find(o)}let u,A=!1,p=!1;for(let h=this.fix?10:1;h>0;--h){let E=await n.process();if(!E)break;let{changedWorkspaces:I,remainingErrors:v}=mk(o,E,{fix:this.fix}),b=[];for(let[C,T]of I){let L=C.manifest.indent;C.manifest=new Mt,C.manifest.indent=L,C.manifest.load(T),b.push(C.persistManifest())}if(await Promise.all(b),!(I.size>0&&h>1)){u=Gde(v,{configuration:r}),A=!1,p=!0;for(let[,C]of v)for(let T of C)T.fixable?A=!0:p=!1}}if(u.children.length===0)return 0;if(A){let h=p?`Those errors can all be fixed by running ${de.pretty(r,"yarn constraints --fix",de.Type.CODE)}`:`Errors prefixed by '\u2699' can be fixed by running ${de.pretty(r,"yarn constraints --fix",de.Type.CODE)}`;await Nt.start({configuration:r,stdout:this.context.stdout,includeNames:!1,includeFooter:!1},async E=>{E.reportInfo(0,h),E.reportSeparator()})}return u.children=je.sortMap(u.children,h=>h.value[1]),$s.emitTree(u,{configuration:r,stdout:this.context.stdout,json:this.json,separators:1}),1}};p0.paths=[["constraints"]],p0.usage=nt.Usage({category:"Constraints-related commands",description:"check that the project constraints are met",details:` + This command will run constraints on your project and emit errors for each one that is found but isn't met. If any error is emitted the process will exit with a non-zero exit code. + + If the \`--fix\` flag is used, Yarn will attempt to automatically fix the issues the best it can, following a multi-pass process (with a maximum of 10 iterations). Some ambiguous patterns cannot be autofixed, in which case you'll have to manually specify the right resolution. + + For more information as to how to write constraints, please consult our dedicated page on our website: https://yarnpkg.com/features/constraints. + `,examples:[["Check that all constraints are satisfied","yarn constraints"],["Autofix all unmet constraints","yarn constraints --fix"]]});B2();var sdt={configuration:{enableConstraintsChecks:{description:"If true, constraints will run during installs",type:"BOOLEAN",default:!1},constraintsPath:{description:"The path of the constraints file.",type:"ABSOLUTE_PATH",default:"./constraints.pro"}},commands:[A0,f0,p0],hooks:{async validateProjectAfterInstall(t,{reportError:e}){if(!t.configuration.get("enableConstraintsChecks"))return;let r=await t.loadUserConfig(),o;if(r?.constraints)o=new wC(t);else{let{Constraints:u}=await Promise.resolve().then(()=>(x2(),S2));o=await u.find(t)}let a=await o.process();if(!a)return;let{remainingErrors:n}=mk(t,a);if(n.size!==0)if(t.configuration.isCI)for(let[u,A]of n)for(let p of A)e(84,`${de.pretty(t.configuration,u.anchoredLocator,de.Type.IDENT)}: ${p.text}`);else e(84,`Constraint check failed; run ${de.pretty(t.configuration,"yarn constraints",de.Type.CODE)} for more details`)}}},odt=sdt;var vH={};Kt(vH,{CreateCommand:()=>em,DlxCommand:()=>h0,default:()=>ldt});Ye();qt();var em=class extends ut{constructor(){super(...arguments);this.pkg=ge.String("-p,--package",{description:"The package to run the provided command from"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}async execute(){let r=[];this.pkg&&r.push("--package",this.pkg),this.quiet&&r.push("--quiet");let o=this.command.replace(/^(@[^@/]+)(@|$)/,"$1/create$2"),a=W.parseDescriptor(o),n=a.name.match(/^create(-|$)/)?a:a.scope?W.makeIdent(a.scope,`create-${a.name}`):W.makeIdent(null,`create-${a.name}`),u=W.stringifyIdent(n);return a.range!=="unknown"&&(u+=`@${a.range}`),this.cli.run(["dlx",...r,u,...this.args])}};em.paths=[["create"]];Ye();Ye();Pt();qt();var h0=class extends ut{constructor(){super(...arguments);this.packages=ge.Array("-p,--package",{description:"The package(s) to install before running the command"});this.quiet=ge.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=ge.String();this.args=ge.Proxy()}async execute(){return Ve.telemetry=null,await oe.mktempPromise(async r=>{let o=K.join(r,`dlx-${process.pid}`);await oe.mkdirPromise(o),await oe.writeFilePromise(K.join(o,"package.json"),`{} +`),await oe.writeFilePromise(K.join(o,"yarn.lock"),"");let a=K.join(o,".yarnrc.yml"),n=await Ve.findProjectCwd(this.context.cwd),A={enableGlobalCache:!(await Ve.find(this.context.cwd,null,{strict:!1})).get("enableGlobalCache"),enableTelemetry:!1,logFilters:[{code:Wu(68),level:de.LogLevel.Discard}]},p=n!==null?K.join(n,".yarnrc.yml"):null;p!==null&&oe.existsSync(p)?(await oe.copyFilePromise(p,a),await Ve.updateConfiguration(o,L=>{let U=je.toMerged(L,A);return Array.isArray(L.plugins)&&(U.plugins=L.plugins.map(J=>{let te=typeof J=="string"?J:J.path,le=ue.isAbsolute(te)?te:ue.resolve(ue.fromPortablePath(n),te);return typeof J=="string"?le:{path:le,spec:J.spec}})),U})):await oe.writeJsonPromise(a,A);let h=this.packages??[this.command],E=W.parseDescriptor(this.command).name,I=await this.cli.run(["add","--fixed","--",...h],{cwd:o,quiet:this.quiet});if(I!==0)return I;this.quiet||this.context.stdout.write(` +`);let v=await Ve.find(o,this.context.plugins),{project:b,workspace:C}=await St.find(v,o);if(C===null)throw new rr(b.cwd,o);await b.restoreInstallState();let T=await un.getWorkspaceAccessibleBinaries(C);return T.has(E)===!1&&T.size===1&&typeof this.packages>"u"&&(E=Array.from(T)[0][0]),await un.executeWorkspaceAccessibleBinary(C,E,this.args,{packageAccessibleBinaries:T,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};h0.paths=[["dlx"]],h0.usage=nt.Usage({description:"run a package in a temporary environment",details:"\n This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\n\n By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\n\n Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\n ",examples:[["Use create-react-app to create a new React app","yarn dlx create-react-app ./my-app"],["Install multiple packages for a single command",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e "console.log('hello!')"`]]});var adt={commands:[em,h0]},ldt=adt;var SH={};Kt(SH,{ExecFetcher:()=>k2,ExecResolver:()=>Q2,default:()=>Adt,execUtils:()=>wk});Ye();Ye();Pt();var fA="exec:";var wk={};Kt(wk,{loadGeneratorFile:()=>b2,makeLocator:()=>PH,makeSpec:()=>dme,parseSpec:()=>DH});Ye();Pt();function DH(t){let{params:e,selector:r}=W.parseRange(t),o=ue.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?W.parseLocator(e.locator):null,path:o}}function dme({parentLocator:t,path:e,generatorHash:r,protocol:o}){let a=t!==null?{locator:W.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return W.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function PH(t,{parentLocator:e,path:r,generatorHash:o,protocol:a}){return W.makeLocator(t,dme({parentLocator:e,path:r,generatorHash:o,protocol:a}))}async function b2(t,e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(t,{protocol:e}),n=K.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,n.localPath)}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=K.join(u.prefixPath,a);return await A.readFilePromise(p,"utf8")}var k2=class{supports(e,r){return!!e.reference.startsWith(fA)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:fA});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){let o=await b2(e.reference,fA,r);return oe.mktempPromise(async a=>{let n=K.join(a,"generator.js");return await oe.writeFilePromise(n,o),oe.mktempPromise(async u=>{if(await this.generatePackage(u,e,n,r),!oe.existsSync(K.join(u,"build")))throw new Error("The script should have generated a build directory");return await Xi.makeArchiveFromDirectory(K.join(u,"build"),{prefixPath:W.getIdentVendorPath(e),compressionLevel:r.project.configuration.get("compressionLevel")})})})}async generatePackage(e,r,o,a){return await oe.mktempPromise(async n=>{let u=await un.makeScriptEnv({project:a.project,binFolder:n}),A=K.join(e,"runtime.js");return await oe.mktempPromise(async p=>{let h=K.join(p,"buildfile.log"),E=K.join(e,"generator"),I=K.join(e,"build");await oe.mkdirPromise(E),await oe.mkdirPromise(I);let v={tempDir:ue.fromPortablePath(E),buildDir:ue.fromPortablePath(I),locator:W.stringifyLocator(r)};await oe.writeFilePromise(A,` + // Expose 'Module' as a global variable + Object.defineProperty(global, 'Module', { + get: () => require('module'), + configurable: true, + enumerable: false, + }); + + // Expose non-hidden built-in modules as global variables + for (const name of Module.builtinModules.filter((name) => name !== 'module' && !name.startsWith('_'))) { + Object.defineProperty(global, name, { + get: () => require(name), + configurable: true, + enumerable: false, + }); + } + + // Expose the 'execEnv' global variable + Object.defineProperty(global, 'execEnv', { + value: { + ...${JSON.stringify(v)}, + }, + enumerable: true, + }); + `);let b=u.NODE_OPTIONS||"",C=/\s*--require\s+\S*\.pnp\.c?js\s*/g;b=b.replace(C," ").trim(),u.NODE_OPTIONS=b;let{stdout:T,stderr:L}=a.project.configuration.getSubprocessStreams(h,{header:`# This file contains the result of Yarn generating a package (${W.stringifyLocator(r)}) +`,prefix:W.prettyLocator(a.project.configuration,r),report:a.report}),{code:U}=await Ur.pipevp(process.execPath,["--require",ue.fromPortablePath(A),ue.fromPortablePath(o),W.stringifyIdent(r)],{cwd:e,env:u,stdin:null,stdout:T,stderr:L});if(U!==0)throw oe.detachTemp(p),new Error(`Package generation failed (exit code ${U}, logs can be found here: ${de.pretty(a.project.configuration,h,de.Type.PATH)})`)})})}};Ye();Ye();var cdt=2,Q2=class{supportsDescriptor(e,r){return!!e.range.startsWith(fA)}supportsLocator(e,r){return!!e.reference.startsWith(fA)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=DH(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await b2(W.makeRange({protocol:fA,source:a,selector:a,params:{locator:W.stringifyLocator(n)}}),fA,o.fetchOptions),A=wn.makeHash(`${cdt}`,u).slice(0,6);return[PH(e,{parentLocator:n,path:a,generatorHash:A,protocol:fA})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var udt={fetchers:[k2],resolvers:[Q2]},Adt=udt;var bH={};Kt(bH,{FileFetcher:()=>N2,FileResolver:()=>L2,TarballFileFetcher:()=>M2,TarballFileResolver:()=>O2,default:()=>hdt,fileUtils:()=>tm});Ye();Pt();var DC=/^(?:[a-zA-Z]:[\\/]|\.{0,2}\/)/,F2=/^[^?]*\.(?:tar\.gz|tgz)(?:::.*)?$/,Ui="file:";var tm={};Kt(tm,{fetchArchiveFromLocator:()=>R2,makeArchiveFromLocator:()=>Ik,makeBufferFromLocator:()=>xH,makeLocator:()=>PC,makeSpec:()=>mme,parseSpec:()=>T2});Ye();Pt();function T2(t){let{params:e,selector:r}=W.parseRange(t),o=ue.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?W.parseLocator(e.locator):null,path:o}}function mme({parentLocator:t,path:e,hash:r,protocol:o}){let a=t!==null?{locator:W.stringifyLocator(t)}:{},n=typeof r<"u"?{hash:r}:{};return W.makeRange({protocol:o,source:e,selector:e,params:{...n,...a}})}function PC(t,{parentLocator:e,path:r,hash:o,protocol:a}){return W.makeLocator(t,mme({parentLocator:e,path:r,hash:o,protocol:a}))}async function R2(t,e){let{parentLocator:r,path:o}=W.parseFileStyleRange(t.reference,{protocol:Ui}),a=K.isAbsolute(o)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await e.fetcher.fetch(r,e),n=a.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,a.localPath)}:a;a!==n&&a.releaseFs&&a.releaseFs();let u=n.packageFs,A=K.join(n.prefixPath,o);return await je.releaseAfterUseAsync(async()=>await u.readFilePromise(A),n.releaseFs)}async function Ik(t,{protocol:e,fetchOptions:r,inMemory:o=!1}){let{parentLocator:a,path:n}=W.parseFileStyleRange(t.reference,{protocol:e}),u=K.isAbsolute(n)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(a,r),A=u.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,u.localPath)}:u;u!==A&&u.releaseFs&&u.releaseFs();let p=A.packageFs,h=K.join(A.prefixPath,n);return await je.releaseAfterUseAsync(async()=>await Xi.makeArchiveFromDirectory(h,{baseFs:p,prefixPath:W.getIdentVendorPath(t),compressionLevel:r.project.configuration.get("compressionLevel"),inMemory:o}),A.releaseFs)}async function xH(t,{protocol:e,fetchOptions:r}){return(await Ik(t,{protocol:e,fetchOptions:r,inMemory:!0})).getBufferAndClose()}var N2=class{supports(e,r){return!!e.reference.startsWith(Ui)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:Ui});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async fetchFromDisk(e,r){return Ik(e,{protocol:Ui,fetchOptions:r})}};Ye();Ye();var fdt=2,L2=class{supportsDescriptor(e,r){return e.range.match(DC)?!0:!!e.range.startsWith(Ui)}supportsLocator(e,r){return!!e.reference.startsWith(Ui)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return DC.test(e.range)&&(e=W.makeDescriptor(e,`${Ui}${e.range}`)),W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=T2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=await xH(W.makeLocator(e,W.makeRange({protocol:Ui,source:a,selector:a,params:{locator:W.stringifyLocator(n)}})),{protocol:Ui,fetchOptions:o.fetchOptions}),A=wn.makeHash(`${fdt}`,u).slice(0,6);return[PC(e,{parentLocator:n,path:a,hash:A,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};Ye();var M2=class{supports(e,r){return F2.test(e.reference)?!!e.reference.startsWith(Ui):!1}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromDisk(e,r){let o=await R2(e,r);return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();Ye();var O2=class{supportsDescriptor(e,r){return F2.test(e.range)?!!(e.range.startsWith(Ui)||DC.test(e.range)):!1}supportsLocator(e,r){return F2.test(e.reference)?!!e.reference.startsWith(Ui):!1}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return DC.test(e.range)&&(e=W.makeDescriptor(e,`${Ui}${e.range}`)),W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:a,parentLocator:n}=T2(e.range);if(n===null)throw new Error("Assertion failed: The descriptor should have been bound");let u=PC(e,{parentLocator:n,path:a,hash:"",protocol:Ui}),A=await R2(u,o.fetchOptions),p=wn.makeHash(A).slice(0,6);return[PC(e,{parentLocator:n,path:a,hash:p,protocol:Ui})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var pdt={fetchers:[M2,N2],resolvers:[O2,L2]},hdt=pdt;var FH={};Kt(FH,{GithubFetcher:()=>U2,default:()=>ddt,githubUtils:()=>Bk});Ye();Pt();var Bk={};Kt(Bk,{invalidGithubUrlMessage:()=>Cme,isGithubUrl:()=>kH,parseGithubUrl:()=>QH});var yme=$e(Be("querystring")),Eme=[/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+)\/tarball\/([^/#]+)(?:#(.*))?$/,/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+?)(?:\.git)?(?:#(.*))?$/];function kH(t){return t?Eme.some(e=>!!t.match(e)):!1}function QH(t){let e;for(let A of Eme)if(e=t.match(A),e)break;if(!e)throw new Error(Cme(t));let[,r,o,a,n="master"]=e,{commit:u}=yme.default.parse(n);return n=u||n.replace(/[^:]*:/,""),{auth:r,username:o,reponame:a,treeish:n}}function Cme(t){return`Input cannot be parsed as a valid GitHub URL ('${t}').`}var U2=class{supports(e,r){return!!kH(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await rn.get(this.getLocatorUrl(e,r),{configuration:r.project.configuration});return await oe.mktempPromise(async a=>{let n=new gn(a);await Xi.extractArchiveTo(o,n,{stripComponents:1});let u=ra.splitRepoUrl(e.reference),A=K.join(a,"package.tgz");await un.prepareExternalProject(a,A,{configuration:r.project.configuration,report:r.report,workspace:u.extra.workspace,locator:e});let p=await oe.readFilePromise(A);return await Xi.convertToZip(p,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,r){let{auth:o,username:a,reponame:n,treeish:u}=QH(e.reference);return`https://${o?`${o}@`:""}github.com/${a}/${n}/archive/${u}.tar.gz`}};var gdt={hooks:{async fetchHostedRepository(t,e,r){if(t!==null)return t;let o=new U2;if(!o.supports(e,r))return null;try{return await o.fetch(e,r)}catch{return null}}}},ddt=gdt;var TH={};Kt(TH,{TarballHttpFetcher:()=>H2,TarballHttpResolver:()=>j2,default:()=>ydt});Ye();function _2(t){let e;try{e=new URL(t)}catch{return!1}return!(e.protocol!=="http:"&&e.protocol!=="https:"||!e.pathname.match(/(\.tar\.gz|\.tgz|\/[^.]+)$/))}var H2=class{supports(e,r){return _2(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o=await rn.get(e.reference,{configuration:r.project.configuration});return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();Ye();var j2=class{supportsDescriptor(e,r){return _2(e.range)}supportsLocator(e,r){return _2(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){return[W.convertDescriptorToLocator(e)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"HARD",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var mdt={fetchers:[H2],resolvers:[j2]},ydt=mdt;var RH={};Kt(RH,{InitCommand:()=>g0,default:()=>Cdt});Ye();Ye();Pt();qt();var g0=class extends ut{constructor(){super(...arguments);this.private=ge.Boolean("-p,--private",!1,{description:"Initialize a private package"});this.workspace=ge.Boolean("-w,--workspace",!1,{description:"Initialize a workspace root with a `packages/` directory"});this.install=ge.String("-i,--install",!1,{tolerateBoolean:!0,description:"Initialize a package with a specific bundle that will be locked in the project"});this.name=ge.String("-n,--name",{description:"Initialize a package with the given name"});this.usev2=ge.Boolean("-2",!1,{hidden:!0});this.yes=ge.Boolean("-y,--yes",{hidden:!0})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=typeof this.install=="string"?this.install:this.usev2||this.install===!0?"latest":null;return o!==null?await this.executeProxy(r,o):await this.executeRegular(r)}async executeProxy(r,o){if(r.projectCwd!==null&&r.projectCwd!==this.context.cwd)throw new it("Cannot use the --install flag from within a project subdirectory");oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=K.join(this.context.cwd,dr.lockfile);oe.existsSync(a)||await oe.writeFilePromise(a,"");let n=await this.cli.run(["set","version",o],{quiet:!0});if(n!==0)return n;let u=[];return this.private&&u.push("-p"),this.workspace&&u.push("-w"),this.name&&u.push(`-n=${this.name}`),this.yes&&u.push("-y"),await oe.mktempPromise(async A=>{let{code:p}=await Ur.pipevp("yarn",["init",...u],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await un.makeScriptEnv({binFolder:A})});return p})}async executeRegular(r){let o=null;try{o=(await St.find(r,this.context.cwd)).project}catch{o=null}oe.existsSync(this.context.cwd)||await oe.mkdirPromise(this.context.cwd,{recursive:!0});let a=await Mt.tryFind(this.context.cwd),n=a??new Mt,u=Object.fromEntries(r.get("initFields").entries());n.load(u),n.name=n.name??W.makeIdent(r.get("initScope"),this.name??K.basename(this.context.cwd)),n.packageManager=tn&&je.isTaggedYarnVersion(tn)?`yarn@${tn}`:null,(!a&&this.workspace||this.private)&&(n.private=!0),this.workspace&&n.workspaceDefinitions.length===0&&(await oe.mkdirPromise(K.join(this.context.cwd,"packages"),{recursive:!0}),n.workspaceDefinitions=[{pattern:"packages/*"}]);let A={};n.exportTo(A);let p=K.join(this.context.cwd,Mt.fileName);await oe.changeFilePromise(p,`${JSON.stringify(A,null,2)} +`,{automaticNewlines:!0});let h=[p],E=K.join(this.context.cwd,"README.md");if(oe.existsSync(E)||(await oe.writeFilePromise(E,`# ${W.stringifyIdent(n.name)} +`),h.push(E)),!o||o.cwd===this.context.cwd){let I=K.join(this.context.cwd,dr.lockfile);oe.existsSync(I)||(await oe.writeFilePromise(I,""),h.push(I));let b=[".yarn/*","!.yarn/patches","!.yarn/plugins","!.yarn/releases","!.yarn/sdks","!.yarn/versions","","# Swap the comments on the following lines if you wish to use zero-installs","# In that case, don't forget to run `yarn config set enableGlobalCache false`!","# Documentation here: https://yarnpkg.com/features/caching#zero-installs","","#!.yarn/cache",".pnp.*"].map(pe=>`${pe} +`).join(""),C=K.join(this.context.cwd,".gitignore");oe.existsSync(C)||(await oe.writeFilePromise(C,b),h.push(C));let L=["/.yarn/** linguist-vendored","/.yarn/releases/* binary","/.yarn/plugins/**/* binary","/.pnp.* binary linguist-generated"].map(pe=>`${pe} +`).join(""),U=K.join(this.context.cwd,".gitattributes");oe.existsSync(U)||(await oe.writeFilePromise(U,L),h.push(U));let J={["*"]:{endOfLine:"lf",insertFinalNewline:!0},["*.{js,json,yml}"]:{charset:"utf-8",indentStyle:"space",indentSize:2}};je.mergeIntoTarget(J,r.get("initEditorConfig"));let te=`root = true +`;for(let[pe,Ae]of Object.entries(J)){te+=` +[${pe}] +`;for(let[ye,ae]of Object.entries(Ae)){let we=ye.replace(/[A-Z]/g,Pe=>`_${Pe.toLowerCase()}`);te+=`${we} = ${ae} +`}}let le=K.join(this.context.cwd,".editorconfig");oe.existsSync(le)||(await oe.writeFilePromise(le,te),h.push(le)),await this.cli.run(["install"],{quiet:!0}),oe.existsSync(K.join(this.context.cwd,".git"))||(await Ur.execvp("git",["init"],{cwd:this.context.cwd}),await Ur.execvp("git",["add","--",...h],{cwd:this.context.cwd}),await Ur.execvp("git",["commit","--allow-empty","-m","First commit"],{cwd:this.context.cwd}))}}};g0.paths=[["init"]],g0.usage=nt.Usage({description:"create a new package",details:"\n This command will setup a new package in your local directory.\n\n If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\n\n If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\n\n If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\n\n The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\n ",examples:[["Create a new package in the local directory","yarn init"],["Create a new private package in the local directory","yarn init -p"],["Create a new package and store the Yarn release inside","yarn init -i=latest"],["Create a new private package and defines it as a workspace root","yarn init -w"]]});var Edt={configuration:{initScope:{description:"Scope used when creating packages via the init command",type:"STRING",default:null},initFields:{description:"Additional fields to set when creating packages via the init command",type:"MAP",valueDefinition:{description:"",type:"ANY"}},initEditorConfig:{description:"Extra rules to define in the generator editorconfig",type:"MAP",valueDefinition:{description:"",type:"ANY"}}},commands:[g0]},Cdt=Edt;var Lj={};Kt(Lj,{SearchCommand:()=>C0,UpgradeInteractiveCommand:()=>I0,default:()=>lIt});Ye();var Ime=$e(Be("os"));function SC({stdout:t}){if(Ime.default.endianness()==="BE")throw new Error("Interactive commands cannot be used on big-endian systems because ink depends on yoga-layout-prebuilt which only supports little-endian architectures");if(!t.isTTY)throw new Error("Interactive commands can only be used inside a TTY environment")}qt();var Rye=$e(ZH()),$H={appId:"OFCNCOG2CU",apiKey:"6fe4476ee5a1832882e326b506d14126",indexName:"npm-search"},myt=(0,Rye.default)($H.appId,$H.apiKey).initIndex($H.indexName),e6=async(t,e=0)=>await myt.search(t,{analyticsTags:["yarn-plugin-interactive-tools"],attributesToRetrieve:["name","version","owner","repository","humanDownloadsLast30Days"],page:e,hitsPerPage:10});var HB=["regular","dev","peer"],C0=class extends ut{async execute(){SC(this.context);let{Gem:e}=await Promise.resolve().then(()=>(AQ(),Dj)),{ScrollableItems:r}=await Promise.resolve().then(()=>(gQ(),hQ)),{useKeypress:o}=await Promise.resolve().then(()=>(OB(),Jwe)),{useMinistore:a}=await Promise.resolve().then(()=>(Qj(),kj)),{renderForm:n}=await Promise.resolve().then(()=>(EQ(),yQ)),{default:u}=await Promise.resolve().then(()=>$e(sIe())),{Box:A,Text:p}=await Promise.resolve().then(()=>$e(ic())),{default:h,useEffect:E,useState:I}=await Promise.resolve().then(()=>$e(sn())),v=await Ve.find(this.context.cwd,this.context.plugins),b=()=>h.createElement(A,{flexDirection:"row"},h.createElement(A,{flexDirection:"column",width:48},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move between packages.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select a package.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," again to change the target."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to install the selected packages.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),C=()=>h.createElement(h.Fragment,null,h.createElement(A,{width:15},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Owner")),h.createElement(A,{width:11},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Version")),h.createElement(A,{width:10},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Downloads"))),T=()=>h.createElement(A,{width:17},h.createElement(p,{bold:!0,underline:!0,color:"gray"},"Target")),L=({hit:ae,active:we})=>{let[Pe,g]=a(ae.name,null);o({active:we},(ce,ne)=>{if(ne.name!=="space")return;if(!Pe){g(HB[0]);return}let ee=HB.indexOf(Pe)+1;ee===HB.length?g(null):g(HB[ee])},[Pe,g]);let Ee=W.parseIdent(ae.name),De=W.prettyIdent(v,Ee);return h.createElement(A,null,h.createElement(A,{width:45},h.createElement(p,{bold:!0,wrap:"wrap"},De)),h.createElement(A,{width:14,marginLeft:1},h.createElement(p,{bold:!0,wrap:"truncate"},ae.owner.name)),h.createElement(A,{width:10,marginLeft:1},h.createElement(p,{italic:!0,wrap:"truncate"},ae.version)),h.createElement(A,{width:16,marginLeft:1},h.createElement(p,null,ae.humanDownloadsLast30Days)))},U=({name:ae,active:we})=>{let[Pe]=a(ae,null),g=W.parseIdent(ae);return h.createElement(A,null,h.createElement(A,{width:47},h.createElement(p,{bold:!0}," - ",W.prettyIdent(v,g))),HB.map(Ee=>h.createElement(A,{key:Ee,width:14,marginLeft:1},h.createElement(p,null," ",h.createElement(e,{active:Pe===Ee})," ",h.createElement(p,{bold:!0},Ee)))))},J=()=>h.createElement(A,{marginTop:1},h.createElement(p,null,"Powered by Algolia.")),le=await n(({useSubmit:ae})=>{let we=a();ae(we);let Pe=Array.from(we.keys()).filter(H=>we.get(H)!==null),[g,Ee]=I(""),[De,ce]=I(0),[ne,ee]=I([]),Ie=H=>{H.match(/\t| /)||Ee(H)},ke=async()=>{ce(0);let H=await e6(g);H.query===g&&ee(H.hits)},ht=async()=>{let H=await e6(g,De+1);H.query===g&&H.page-1===De&&(ce(H.page),ee([...ne,...H.hits]))};return E(()=>{g?ke():ee([])},[g]),h.createElement(A,{flexDirection:"column"},h.createElement(b,null),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(p,{bold:!0},"Search: "),h.createElement(A,{width:41},h.createElement(u,{value:g,onChange:Ie,placeholder:"i.e. babel, webpack, react...",showCursor:!1})),h.createElement(C,null)),ne.length?h.createElement(r,{radius:2,loop:!1,children:ne.map(H=>h.createElement(L,{key:H.name,hit:H,active:!1})),willReachEnd:ht}):h.createElement(p,{color:"gray"},"Start typing..."),h.createElement(A,{flexDirection:"row",marginTop:1},h.createElement(A,{width:49},h.createElement(p,{bold:!0},"Selected:")),h.createElement(T,null)),Pe.length?Pe.map(H=>h.createElement(U,{key:H,name:H,active:!1})):h.createElement(p,{color:"gray"},"No selected packages..."),h.createElement(J,null))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof le>"u")return 1;let pe=Array.from(le.keys()).filter(ae=>le.get(ae)==="regular"),Ae=Array.from(le.keys()).filter(ae=>le.get(ae)==="dev"),ye=Array.from(le.keys()).filter(ae=>le.get(ae)==="peer");return pe.length&&await this.cli.run(["add",...pe]),Ae.length&&await this.cli.run(["add","--dev",...Ae]),ye&&await this.cli.run(["add","--peer",...ye]),0}};C0.paths=[["search"]],C0.usage=nt.Usage({category:"Interactive commands",description:"open the search interface",details:` + This command opens a fullscreen terminal interface where you can search for and install packages from the npm registry. + `,examples:[["Open the search window","yarn search"]]});Ye();qt();w_();var fIe=$e(zn()),AIe=/^((?:[\^~]|>=?)?)([0-9]+)(\.[0-9]+)(\.[0-9]+)((?:-\S+)?)$/,pIe=(t,e)=>t.length>0?[t.slice(0,e)].concat(pIe(t.slice(e),e)):[],I0=class extends ut{async execute(){SC(this.context);let{ItemOptions:e}=await Promise.resolve().then(()=>(uIe(),cIe)),{Pad:r}=await Promise.resolve().then(()=>(Nj(),lIe)),{ScrollableItems:o}=await Promise.resolve().then(()=>(gQ(),hQ)),{useMinistore:a}=await Promise.resolve().then(()=>(Qj(),kj)),{renderForm:n}=await Promise.resolve().then(()=>(EQ(),yQ)),{Box:u,Text:A}=await Promise.resolve().then(()=>$e(ic())),{default:p,useEffect:h,useRef:E,useState:I}=await Promise.resolve().then(()=>$e(sn())),v=await Ve.find(this.context.cwd,this.context.plugins),{project:b,workspace:C}=await St.find(v,this.context.cwd),T=await Lr.find(v);if(!C)throw new rr(b.cwd,this.context.cwd);await b.restoreInstallState({restoreResolutions:!1});let L=this.context.stdout.rows-7,U=(Ee,De)=>{let ce=fpe(Ee,De),ne="";for(let ee of ce)ee.added?ne+=de.pretty(v,ee.value,"green"):ee.removed||(ne+=ee.value);return ne},J=(Ee,De)=>{if(Ee===De)return De;let ce=W.parseRange(Ee),ne=W.parseRange(De),ee=ce.selector.match(AIe),Ie=ne.selector.match(AIe);if(!ee||!Ie)return U(Ee,De);let ke=["gray","red","yellow","green","magenta"],ht=null,H="";for(let lt=1;lt{let ne=await zc.fetchDescriptorFrom(Ee,ce,{project:b,cache:T,preserveModifier:De,workspace:C});return ne!==null?ne.range:Ee.range},le=async Ee=>{let De=fIe.default.valid(Ee.range)?`^${Ee.range}`:Ee.range,[ce,ne]=await Promise.all([te(Ee,Ee.range,De).catch(()=>null),te(Ee,Ee.range,"latest").catch(()=>null)]),ee=[{value:null,label:Ee.range}];return ce&&ce!==Ee.range?ee.push({value:ce,label:J(Ee.range,ce)}):ee.push({value:null,label:""}),ne&&ne!==ce&&ne!==Ee.range?ee.push({value:ne,label:J(Ee.range,ne)}):ee.push({value:null,label:""}),ee},pe=()=>p.createElement(u,{flexDirection:"row"},p.createElement(u,{flexDirection:"column",width:49},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select packages.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},""),"/",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to select versions."))),p.createElement(u,{flexDirection:"column"},p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to install.")),p.createElement(u,{marginLeft:1},p.createElement(A,null,"Press ",p.createElement(A,{bold:!0,color:"cyanBright"},"")," to abort.")))),Ae=()=>p.createElement(u,{flexDirection:"row",paddingTop:1,paddingBottom:1},p.createElement(u,{width:50},p.createElement(A,{bold:!0},p.createElement(A,{color:"greenBright"},"?")," Pick the packages you want to upgrade.")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Current")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Range")),p.createElement(u,{width:17},p.createElement(A,{bold:!0,underline:!0,color:"gray"},"Latest"))),ye=({active:Ee,descriptor:De,suggestions:ce})=>{let[ne,ee]=a(De.descriptorHash,null),Ie=W.stringifyIdent(De),ke=Math.max(0,45-Ie.length);return p.createElement(p.Fragment,null,p.createElement(u,null,p.createElement(u,{width:45},p.createElement(A,{bold:!0},W.prettyIdent(v,De)),p.createElement(r,{active:Ee,length:ke})),p.createElement(e,{active:Ee,options:ce,value:ne,skewer:!0,onChange:ee,sizes:[17,17,17]})))},ae=({dependencies:Ee})=>{let[De,ce]=I(Ee.map(()=>null)),ne=E(!0),ee=async Ie=>{let ke=await le(Ie);return ke.filter(ht=>ht.label!=="").length<=1?null:{descriptor:Ie,suggestions:ke}};return h(()=>()=>{ne.current=!1},[]),h(()=>{let Ie=Math.trunc(L*1.75),ke=Ee.slice(0,Ie),ht=Ee.slice(Ie),H=pIe(ht,L),lt=ke.map(ee).reduce(async(Re,Qe)=>{await Re;let be=await Qe;be!==null&&(!ne.current||ce(_e=>{let Te=_e.findIndex(He=>He===null),Je=[..._e];return Je[Te]=be,Je}))},Promise.resolve());H.reduce((Re,Qe)=>Promise.all(Qe.map(be=>Promise.resolve().then(()=>ee(be)))).then(async be=>{be=be.filter(_e=>_e!==null),await Re,ne.current&&ce(_e=>{let Te=_e.findIndex(Je=>Je===null);return _e.slice(0,Te).concat(be).concat(_e.slice(Te+be.length))})}),lt).then(()=>{ne.current&&ce(Re=>Re.filter(Qe=>Qe!==null))})},[]),De.length?p.createElement(o,{radius:L>>1,children:De.map((Ie,ke)=>Ie!==null?p.createElement(ye,{key:ke,active:!1,descriptor:Ie.descriptor,suggestions:Ie.suggestions}):p.createElement(A,{key:ke},"Loading..."))}):p.createElement(A,null,"No upgrades found")},Pe=await n(({useSubmit:Ee})=>{Ee(a());let De=new Map;for(let ne of b.workspaces)for(let ee of["dependencies","devDependencies"])for(let Ie of ne.manifest[ee].values())b.tryWorkspaceByDescriptor(Ie)===null&&(Ie.range.startsWith("link:")||De.set(Ie.descriptorHash,Ie));let ce=je.sortMap(De.values(),ne=>W.stringifyDescriptor(ne));return p.createElement(u,{flexDirection:"column"},p.createElement(pe,null),p.createElement(Ae,null),p.createElement(ae,{dependencies:ce}))},{},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof Pe>"u")return 1;let g=!1;for(let Ee of b.workspaces)for(let De of["dependencies","devDependencies"]){let ce=Ee.manifest[De];for(let ne of ce.values()){let ee=Pe.get(ne.descriptorHash);typeof ee<"u"&&ee!==null&&(ce.set(ne.identHash,W.makeDescriptor(ne,ee)),g=!0)}}return g?await b.installWithNewReport({quiet:this.context.quiet,stdout:this.context.stdout},{cache:T}):0}};I0.paths=[["upgrade-interactive"]],I0.usage=nt.Usage({category:"Interactive commands",description:"open the upgrade interface",details:` + This command opens a fullscreen terminal interface where you can see any out of date packages used by your application, their status compared to the latest versions available on the remote registry, and select packages to upgrade. + `,examples:[["Open the upgrade window","yarn upgrade-interactive"]]});var aIt={commands:[C0,I0]},lIt=aIt;var Mj={};Kt(Mj,{LinkFetcher:()=>qB,LinkResolver:()=>GB,PortalFetcher:()=>YB,PortalResolver:()=>WB,default:()=>uIt});Ye();Pt();var ep="portal:",tp="link:";var qB=class{supports(e,r){return!!e.reference.startsWith(tp)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:tp});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:tp}),n=K.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=K.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0,localPath:p}:{packageFs:new _u(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,discardFromLookup:!0}}};Ye();Pt();var GB=class{supportsDescriptor(e,r){return!!e.range.startsWith(tp)}supportsLocator(e,r){return!!e.reference.startsWith(tp)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(tp.length);return[W.makeLocator(e,`${tp}${ue.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){return{...e,version:"0.0.0",languageName:r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map}}};Ye();Pt();var YB=class{supports(e,r){return!!e.reference.startsWith(ep)}getLocalPath(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:ep});if(K.isAbsolute(a))return a;let n=r.fetcher.getLocalPath(o,r);return n===null?null:K.resolve(n,a)}async fetch(e,r){let{parentLocator:o,path:a}=W.parseFileStyleRange(e.reference,{protocol:ep}),n=K.isAbsolute(a)?{packageFs:new gn(Bt.root),prefixPath:Bt.dot,localPath:Bt.root}:await r.fetcher.fetch(o,r),u=n.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,n.localPath),localPath:Bt.root}:n;n!==u&&n.releaseFs&&n.releaseFs();let A=u.packageFs,p=K.resolve(u.localPath??u.packageFs.getRealPath(),u.prefixPath,a);return n.localPath?{packageFs:new gn(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot,localPath:p}:{packageFs:new _u(p,{baseFs:A}),releaseFs:u.releaseFs,prefixPath:Bt.dot}}};Ye();Ye();Pt();var WB=class{supportsDescriptor(e,r){return!!e.range.startsWith(ep)}supportsLocator(e,r){return!!e.reference.startsWith(ep)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){return W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(ep.length);return[W.makeLocator(e,`${ep}${ue.toPortablePath(a)}`)]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let o=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),a=await je.releaseAfterUseAsync(async()=>await Mt.find(o.prefixPath,{baseFs:o.packageFs}),o.releaseFs);return{...e,version:a.version||"0.0.0",languageName:a.languageName||r.project.configuration.get("defaultLanguageName"),linkType:"SOFT",conditions:a.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(a.dependencies),peerDependencies:a.peerDependencies,dependenciesMeta:a.dependenciesMeta,peerDependenciesMeta:a.peerDependenciesMeta,bin:a.bin}}};var cIt={fetchers:[qB,YB],resolvers:[GB,WB]},uIt=cIt;var Cq={};Kt(Cq,{NodeModulesLinker:()=>lv,NodeModulesMode:()=>dq,PnpLooseLinker:()=>cv,default:()=>P1t});Pt();Ye();Pt();Pt();var Uj=(t,e)=>`${t}@${e}`,hIe=(t,e)=>{let r=e.indexOf("#"),o=r>=0?e.substring(r+1):e;return Uj(t,o)};var mIe=(t,e={})=>{let r=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),o=e.check||r>=9,a=e.hoistingLimits||new Map,n={check:o,debugLevel:r,hoistingLimits:a,fastLookupPossible:!0},u;n.debugLevel>=0&&(u=Date.now());let A=mIt(t,n),p=!1,h=0;do p=_j(A,[A],new Set([A.locator]),new Map,n).anotherRoundNeeded,n.fastLookupPossible=!1,h++;while(p);if(n.debugLevel>=0&&console.log(`hoist time: ${Date.now()-u}ms, rounds: ${h}`),n.debugLevel>=1){let E=VB(A);if(_j(A,[A],new Set([A.locator]),new Map,n).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree: +${E}, next tree: +${VB(A)}`);let v=yIe(A);if(v)throw new Error(`${v}, after hoisting finished: +${VB(A)}`)}return n.debugLevel>=2&&console.log(VB(A)),yIt(A)},AIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=n=>{if(!o.has(n)){o.add(n);for(let u of n.hoistedDependencies.values())r.set(u.name,u);for(let u of n.dependencies.values())n.peerNames.has(u.name)||a(u)}};return a(e),r},fIt=t=>{let e=t[t.length-1],r=new Map,o=new Set,a=new Set,n=(u,A)=>{if(o.has(u))return;o.add(u);for(let h of u.hoistedDependencies.values())if(!A.has(h.name)){let E;for(let I of t)E=I.dependencies.get(h.name),E&&r.set(E.name,E)}let p=new Set;for(let h of u.dependencies.values())p.add(h.name);for(let h of u.dependencies.values())u.peerNames.has(h.name)||n(h,p)};return n(e,a),r},gIe=(t,e)=>{if(e.decoupled)return e;let{name:r,references:o,ident:a,locator:n,dependencies:u,originalDependencies:A,hoistedDependencies:p,peerNames:h,reasons:E,isHoistBorder:I,hoistPriority:v,dependencyKind:b,hoistedFrom:C,hoistedTo:T}=e,L={name:r,references:new Set(o),ident:a,locator:n,dependencies:new Map(u),originalDependencies:new Map(A),hoistedDependencies:new Map(p),peerNames:new Set(h),reasons:new Map(E),decoupled:!0,isHoistBorder:I,hoistPriority:v,dependencyKind:b,hoistedFrom:new Map(C),hoistedTo:new Map(T)},U=L.dependencies.get(r);return U&&U.ident==L.ident&&L.dependencies.set(r,L),t.dependencies.set(L.name,L),L},pIt=(t,e)=>{let r=new Map([[t.name,[t.ident]]]);for(let a of t.dependencies.values())t.peerNames.has(a.name)||r.set(a.name,[a.ident]);let o=Array.from(e.keys());o.sort((a,n)=>{let u=e.get(a),A=e.get(n);return A.hoistPriority!==u.hoistPriority?A.hoistPriority-u.hoistPriority:A.peerDependents.size!==u.peerDependents.size?A.peerDependents.size-u.peerDependents.size:A.dependents.size-u.dependents.size});for(let a of o){let n=a.substring(0,a.indexOf("@",1)),u=a.substring(n.length+1);if(!t.peerNames.has(n)){let A=r.get(n);A||(A=[],r.set(n,A)),A.indexOf(u)<0&&A.push(u)}}return r},Oj=t=>{let e=new Set,r=(o,a=new Set)=>{if(!a.has(o)){a.add(o);for(let n of o.peerNames)if(!t.peerNames.has(n)){let u=t.dependencies.get(n);u&&!e.has(u)&&r(u,a)}e.add(o)}};for(let o of t.dependencies.values())t.peerNames.has(o.name)||r(o);return e},_j=(t,e,r,o,a,n=new Set)=>{let u=e[e.length-1];if(n.has(u))return{anotherRoundNeeded:!1,isGraphChanged:!1};n.add(u);let A=EIt(u),p=pIt(u,A),h=t==u?new Map:a.fastLookupPossible?AIt(e):fIt(e),E,I=!1,v=!1,b=new Map(Array.from(p.entries()).map(([T,L])=>[T,L[0]])),C=new Map;do{let T=dIt(t,e,r,h,b,p,o,C,a);T.isGraphChanged&&(v=!0),T.anotherRoundNeeded&&(I=!0),E=!1;for(let[L,U]of p)U.length>1&&!u.dependencies.has(L)&&(b.delete(L),U.shift(),b.set(L,U[0]),E=!0)}while(E);for(let T of u.dependencies.values())if(!u.peerNames.has(T.name)&&!r.has(T.locator)){r.add(T.locator);let L=_j(t,[...e,T],r,C,a);L.isGraphChanged&&(v=!0),L.anotherRoundNeeded&&(I=!0),r.delete(T.locator)}return{anotherRoundNeeded:I,isGraphChanged:v}},hIt=t=>{for(let[e,r]of t.dependencies)if(!t.peerNames.has(e)&&r.ident!==t.ident)return!0;return!1},gIt=(t,e,r,o,a,n,u,A,{outputReason:p,fastLookupPossible:h})=>{let E,I=null,v=new Set;p&&(E=`${Array.from(e).map(L=>no(L)).join("\u2192")}`);let b=r[r.length-1],T=!(o.ident===b.ident);if(p&&!T&&(I="- self-reference"),T&&(T=o.dependencyKind!==1,p&&!T&&(I="- workspace")),T&&o.dependencyKind===2&&(T=!hIt(o),p&&!T&&(I="- external soft link with unhoisted dependencies")),T&&(T=b.dependencyKind!==1||b.hoistedFrom.has(o.name)||e.size===1,p&&!T&&(I=b.reasons.get(o.name))),T&&(T=!t.peerNames.has(o.name),p&&!T&&(I=`- cannot shadow peer: ${no(t.originalDependencies.get(o.name).locator)} at ${E}`)),T){let L=!1,U=a.get(o.name);if(L=!U||U.ident===o.ident,p&&!L&&(I=`- filled by: ${no(U.locator)} at ${E}`),L)for(let J=r.length-1;J>=1;J--){let le=r[J].dependencies.get(o.name);if(le&&le.ident!==o.ident){L=!1;let pe=A.get(b);pe||(pe=new Set,A.set(b,pe)),pe.add(o.name),p&&(I=`- filled by ${no(le.locator)} at ${r.slice(0,J).map(Ae=>no(Ae.locator)).join("\u2192")}`);break}}T=L}if(T&&(T=n.get(o.name)===o.ident,p&&!T&&(I=`- filled by: ${no(u.get(o.name)[0])} at ${E}`)),T){let L=!0,U=new Set(o.peerNames);for(let J=r.length-1;J>=1;J--){let te=r[J];for(let le of U){if(te.peerNames.has(le)&&te.originalDependencies.has(le))continue;let pe=te.dependencies.get(le);pe&&t.dependencies.get(le)!==pe&&(J===r.length-1?v.add(pe):(v=null,L=!1,p&&(I=`- peer dependency ${no(pe.locator)} from parent ${no(te.locator)} was not hoisted to ${E}`))),U.delete(le)}if(!L)break}T=L}if(T&&!h)for(let L of o.hoistedDependencies.values()){let U=a.get(L.name)||t.dependencies.get(L.name);if(!U||L.ident!==U.ident){T=!1,p&&(I=`- previously hoisted dependency mismatch, needed: ${no(L.locator)}, available: ${no(U?.locator)}`);break}}return v!==null&&v.size>0?{isHoistable:2,dependsOn:v,reason:I}:{isHoistable:T?0:1,reason:I}},CQ=t=>`${t.name}@${t.locator}`,dIt=(t,e,r,o,a,n,u,A,p)=>{let h=e[e.length-1],E=new Set,I=!1,v=!1,b=(U,J,te,le,pe)=>{if(E.has(le))return;let Ae=[...J,CQ(le)],ye=[...te,CQ(le)],ae=new Map,we=new Map;for(let ce of Oj(le)){let ne=gIt(h,r,[h,...U,le],ce,o,a,n,A,{outputReason:p.debugLevel>=2,fastLookupPossible:p.fastLookupPossible});if(we.set(ce,ne),ne.isHoistable===2)for(let ee of ne.dependsOn){let Ie=ae.get(ee.name)||new Set;Ie.add(ce.name),ae.set(ee.name,Ie)}}let Pe=new Set,g=(ce,ne,ee)=>{if(!Pe.has(ce)){Pe.add(ce),we.set(ce,{isHoistable:1,reason:ee});for(let Ie of ae.get(ce.name)||[])g(le.dependencies.get(Ie),ne,p.debugLevel>=2?`- peer dependency ${no(ce.locator)} from parent ${no(le.locator)} was not hoisted`:"")}};for(let[ce,ne]of we)ne.isHoistable===1&&g(ce,ne,ne.reason);let Ee=!1;for(let ce of we.keys())if(!Pe.has(ce)){v=!0;let ne=u.get(le);ne&&ne.has(ce.name)&&(I=!0),Ee=!0,le.dependencies.delete(ce.name),le.hoistedDependencies.set(ce.name,ce),le.reasons.delete(ce.name);let ee=h.dependencies.get(ce.name);if(p.debugLevel>=2){let Ie=Array.from(J).concat([le.locator]).map(ht=>no(ht)).join("\u2192"),ke=h.hoistedFrom.get(ce.name);ke||(ke=[],h.hoistedFrom.set(ce.name,ke)),ke.push(Ie),le.hoistedTo.set(ce.name,Array.from(e).map(ht=>no(ht.locator)).join("\u2192"))}if(!ee)h.ident!==ce.ident&&(h.dependencies.set(ce.name,ce),pe.add(ce));else for(let Ie of ce.references)ee.references.add(Ie)}if(le.dependencyKind===2&&Ee&&(I=!0),p.check){let ce=yIe(t);if(ce)throw new Error(`${ce}, after hoisting dependencies of ${[h,...U,le].map(ne=>no(ne.locator)).join("\u2192")}: +${VB(t)}`)}let De=Oj(le);for(let ce of De)if(Pe.has(ce)){let ne=we.get(ce);if((a.get(ce.name)===ce.ident||!le.reasons.has(ce.name))&&ne.isHoistable!==0&&le.reasons.set(ce.name,ne.reason),!ce.isHoistBorder&&ye.indexOf(CQ(ce))<0){E.add(le);let Ie=gIe(le,ce);b([...U,le],Ae,ye,Ie,T),E.delete(le)}}},C,T=new Set(Oj(h)),L=Array.from(e).map(U=>CQ(U));do{C=T,T=new Set;for(let U of C){if(U.locator===h.locator||U.isHoistBorder)continue;let J=gIe(h,U);b([],Array.from(r),L,J,T)}}while(T.size>0);return{anotherRoundNeeded:I,isGraphChanged:v}},yIe=t=>{let e=[],r=new Set,o=new Set,a=(n,u,A)=>{if(r.has(n)||(r.add(n),o.has(n)))return;let p=new Map(u);for(let h of n.dependencies.values())n.peerNames.has(h.name)||p.set(h.name,h);for(let h of n.originalDependencies.values()){let E=p.get(h.name),I=()=>`${Array.from(o).concat([n]).map(v=>no(v.locator)).join("\u2192")}`;if(n.peerNames.has(h.name)){let v=u.get(h.name);(v!==E||!v||v.ident!==h.ident)&&e.push(`${I()} - broken peer promise: expected ${h.ident} but found ${v&&v.ident}`)}else{let v=A.hoistedFrom.get(n.name),b=n.hoistedTo.get(h.name),C=`${v?` hoisted from ${v.join(", ")}`:""}`,T=`${b?` hoisted to ${b}`:""}`,L=`${I()}${C}`;E?E.ident!==h.ident&&e.push(`${L} - broken require promise for ${h.name}${T}: expected ${h.ident}, but found: ${E.ident}`):e.push(`${L} - broken require promise: no required dependency ${h.name}${T} found`)}}o.add(n);for(let h of n.dependencies.values())n.peerNames.has(h.name)||a(h,p,n);o.delete(n)};return a(t,t.dependencies,t),e.join(` +`)},mIt=(t,e)=>{let{identName:r,name:o,reference:a,peerNames:n}=t,u={name:o,references:new Set([a]),locator:Uj(r,a),ident:hIe(r,a),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(n),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},A=new Map([[t,u]]),p=(h,E)=>{let I=A.get(h),v=!!I;if(!I){let{name:b,identName:C,reference:T,peerNames:L,hoistPriority:U,dependencyKind:J}=h,te=e.hoistingLimits.get(E.locator);I={name:b,references:new Set([T]),locator:Uj(C,T),ident:hIe(C,T),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(L),reasons:new Map,decoupled:!0,isHoistBorder:te?te.has(b):!1,hoistPriority:U||0,dependencyKind:J||0,hoistedFrom:new Map,hoistedTo:new Map},A.set(h,I)}if(E.dependencies.set(h.name,I),E.originalDependencies.set(h.name,I),v){let b=new Set,C=T=>{if(!b.has(T)){b.add(T),T.decoupled=!1;for(let L of T.dependencies.values())T.peerNames.has(L.name)||C(L)}};C(I)}else for(let b of h.dependencies)p(b,I)};for(let h of t.dependencies)p(h,u);return u},Hj=t=>t.substring(0,t.indexOf("@",1)),yIt=t=>{let e={name:t.name,identName:Hj(t.locator),references:new Set(t.references),dependencies:new Set},r=new Set([t]),o=(a,n,u)=>{let A=r.has(a),p;if(n===a)p=u;else{let{name:h,references:E,locator:I}=a;p={name:h,identName:Hj(I),references:E,dependencies:new Set}}if(u.dependencies.add(p),!A){r.add(a);for(let h of a.dependencies.values())a.peerNames.has(h.name)||o(h,a,p);r.delete(a)}};for(let a of t.dependencies.values())o(a,t,e);return e},EIt=t=>{let e=new Map,r=new Set([t]),o=u=>`${u.name}@${u.ident}`,a=u=>{let A=o(u),p=e.get(A);return p||(p={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(A,p)),p},n=(u,A)=>{let p=!!r.has(A);if(a(A).dependents.add(u.ident),!p){r.add(A);for(let E of A.dependencies.values()){let I=a(E);I.hoistPriority=Math.max(I.hoistPriority,E.hoistPriority),A.peerNames.has(E.name)?I.peerDependents.add(A.ident):n(A,E)}}};for(let u of t.dependencies.values())t.peerNames.has(u.name)||n(t,u);return e},no=t=>{if(!t)return"none";let e=t.indexOf("@",1),r=t.substring(0,e);r.endsWith("$wsroot$")&&(r=`wh:${r.replace("$wsroot$","")}`);let o=t.substring(e+1);if(o==="workspace:.")return".";if(o){let a=(o.indexOf("#")>0?o.split("#")[1]:o).replace("npm:","");return o.startsWith("virtual")&&(r=`v:${r}`),a.startsWith("workspace")&&(r=`w:${r}`,a=""),`${r}${a?`@${a}`:""}`}else return`${r}`},dIe=5e4,VB=t=>{let e=0,r=(a,n,u="")=>{if(e>dIe||n.has(a))return"";e++;let A=Array.from(a.dependencies.values()).sort((h,E)=>h.name===E.name?0:h.name>E.name?1:-1),p="";n.add(a);for(let h=0;h":"")+(v!==E.name?`a:${E.name}:`:"")+no(E.locator)+(I?` ${I}`:"")} +`,p+=r(E,n,`${u}${hdIe?` +Tree is too large, part of the tree has been dunped +`:"")};var KB=(o=>(o.WORKSPACES="workspaces",o.DEPENDENCIES="dependencies",o.NONE="none",o))(KB||{}),EIe="node_modules",B0="$wsroot$";var JB=(t,e)=>{let{packageTree:r,hoistingLimits:o,errors:a,preserveSymlinksRequired:n}=wIt(t,e),u=null;if(a.length===0){let A=mIe(r,{hoistingLimits:o});u=BIt(t,A,e)}return{tree:u,errors:a,preserveSymlinksRequired:n}},gA=t=>`${t.name}@${t.reference}`,qj=t=>{let e=new Map;for(let[r,o]of t.entries())if(!o.dirList){let a=e.get(o.locator);a||(a={target:o.target,linkType:o.linkType,locations:[],aliases:o.aliases},e.set(o.locator,a)),a.locations.push(r)}for(let r of e.values())r.locations=r.locations.sort((o,a)=>{let n=o.split(K.delimiter).length,u=a.split(K.delimiter).length;return a===o?0:n!==u?u-n:a>o?1:-1});return e},CIe=(t,e)=>{let r=W.isVirtualLocator(t)?W.devirtualizeLocator(t):t,o=W.isVirtualLocator(e)?W.devirtualizeLocator(e):e;return W.areLocatorsEqual(r,o)},jj=(t,e,r,o)=>{if(t.linkType!=="SOFT")return!1;let a=ue.toPortablePath(r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation);return K.contains(o,a)===null},CIt=t=>{let e=t.getPackageInformation(t.topLevel);if(e===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");if(t.findPackageLocator(e.packageLocation)===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let o=ue.toPortablePath(e.packageLocation.slice(0,-1)),a=new Map,n={children:new Map},u=t.getDependencyTreeRoots(),A=new Map,p=new Set,h=(v,b)=>{let C=gA(v);if(p.has(C))return;p.add(C);let T=t.getPackageInformation(v);if(T){let L=b?gA(b):"";if(gA(v)!==L&&T.linkType==="SOFT"&&!jj(T,v,t,o)){let U=wIe(T,v,t);(!A.get(U)||v.reference.startsWith("workspace:"))&&A.set(U,v)}for(let[U,J]of T.packageDependencies)J!==null&&(T.packagePeers.has(U)||h(t.getLocator(U,J),v))}};for(let v of u)h(v,null);let E=o.split(K.sep);for(let v of A.values()){let b=t.getPackageInformation(v),T=ue.toPortablePath(b.packageLocation.slice(0,-1)).split(K.sep).slice(E.length),L=n;for(let U of T){let J=L.children.get(U);J||(J={children:new Map},L.children.set(U,J)),L=J}L.workspaceLocator=v}let I=(v,b)=>{if(v.workspaceLocator){let C=gA(b),T=a.get(C);T||(T=new Set,a.set(C,T)),T.add(v.workspaceLocator)}for(let C of v.children.values())I(C,v.workspaceLocator||b)};for(let v of n.children.values())I(v,n.workspaceLocator);return a},wIt=(t,e)=>{let r=[],o=!1,a=new Map,n=CIt(t),u=t.getPackageInformation(t.topLevel);if(u===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");let A=t.findPackageLocator(u.packageLocation);if(A===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let p=ue.toPortablePath(u.packageLocation.slice(0,-1)),h={name:A.name,identName:A.name,reference:A.reference,peerNames:u.packagePeers,dependencies:new Set,dependencyKind:1},E=new Map,I=(b,C)=>`${gA(C)}:${b}`,v=(b,C,T,L,U,J,te,le)=>{let pe=I(b,T),Ae=E.get(pe),ye=!!Ae;!ye&&T.name===A.name&&T.reference===A.reference&&(Ae=h,E.set(pe,h));let ae=jj(C,T,t,p);if(!Ae){let ce=0;ae?ce=2:C.linkType==="SOFT"&&T.name.endsWith(B0)&&(ce=1),Ae={name:b,identName:T.name,reference:T.reference,dependencies:new Set,peerNames:ce===1?new Set:C.packagePeers,dependencyKind:ce},E.set(pe,Ae)}let we;if(ae?we=2:U.linkType==="SOFT"?we=1:we=0,Ae.hoistPriority=Math.max(Ae.hoistPriority||0,we),le&&!ae){let ce=gA({name:L.identName,reference:L.reference}),ne=a.get(ce)||new Set;a.set(ce,ne),ne.add(Ae.name)}let Pe=new Map(C.packageDependencies);if(e.project){let ce=e.project.workspacesByCwd.get(ue.toPortablePath(C.packageLocation.slice(0,-1)));if(ce){let ne=new Set([...Array.from(ce.manifest.peerDependencies.values(),ee=>W.stringifyIdent(ee)),...Array.from(ce.manifest.peerDependenciesMeta.keys())]);for(let ee of ne)Pe.has(ee)||(Pe.set(ee,J.get(ee)||null),Ae.peerNames.add(ee))}}let g=gA({name:T.name.replace(B0,""),reference:T.reference}),Ee=n.get(g);if(Ee)for(let ce of Ee)Pe.set(`${ce.name}${B0}`,ce.reference);(C!==U||C.linkType!=="SOFT"||!ae&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(te)))&&L.dependencies.add(Ae);let De=T!==A&&C.linkType==="SOFT"&&!T.name.endsWith(B0)&&!ae;if(!ye&&!De){let ce=new Map;for(let[ne,ee]of Pe)if(ee!==null){let Ie=t.getLocator(ne,ee),ke=t.getLocator(ne.replace(B0,""),ee),ht=t.getPackageInformation(ke);if(ht===null)throw new Error("Assertion failed: Expected the package to have been registered");let H=jj(ht,Ie,t,p);if(e.validateExternalSoftLinks&&e.project&&H){ht.packageDependencies.size>0&&(o=!0);for(let[_e,Te]of ht.packageDependencies)if(Te!==null){let Je=W.parseLocator(Array.isArray(Te)?`${Te[0]}@${Te[1]}`:`${_e}@${Te}`);if(gA(Je)!==gA(Ie)){let He=Pe.get(_e);if(He){let x=W.parseLocator(Array.isArray(He)?`${He[0]}@${He[1]}`:`${_e}@${He}`);CIe(x,Je)||r.push({messageName:71,text:`Cannot link ${W.prettyIdent(e.project.configuration,W.parseIdent(Ie.name))} into ${W.prettyLocator(e.project.configuration,W.parseLocator(`${T.name}@${T.reference}`))} dependency ${W.prettyLocator(e.project.configuration,Je)} conflicts with parent dependency ${W.prettyLocator(e.project.configuration,x)}`})}else{let x=ce.get(_e);if(x){let w=x.target,S=W.parseLocator(Array.isArray(w)?`${w[0]}@${w[1]}`:`${_e}@${w}`);CIe(S,Je)||r.push({messageName:71,text:`Cannot link ${W.prettyIdent(e.project.configuration,W.parseIdent(Ie.name))} into ${W.prettyLocator(e.project.configuration,W.parseLocator(`${T.name}@${T.reference}`))} dependency ${W.prettyLocator(e.project.configuration,Je)} conflicts with dependency ${W.prettyLocator(e.project.configuration,S)} from sibling portal ${W.prettyIdent(e.project.configuration,W.parseIdent(x.portal.name))}`})}else ce.set(_e,{target:Je.reference,portal:Ie})}}}}let lt=e.hoistingLimitsByCwd?.get(te),Re=H?te:K.relative(p,ue.toPortablePath(ht.packageLocation))||Bt.dot,Qe=e.hoistingLimitsByCwd?.get(Re);v(ne,ht,Ie,Ae,C,Pe,Re,lt==="dependencies"||Qe==="dependencies"||Qe==="workspaces")}}};return v(A.name,u,A,h,u,u.packageDependencies,Bt.dot,!1),{packageTree:h,hoistingLimits:a,errors:r,preserveSymlinksRequired:o}};function wIe(t,e,r){let o=r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation;return ue.toPortablePath(o||t.packageLocation)}function IIt(t,e,r){let o=e.getLocator(t.name.replace(B0,""),t.reference),a=e.getPackageInformation(o);if(a===null)throw new Error("Assertion failed: Expected the package to be registered");return r.pnpifyFs?{linkType:"SOFT",target:ue.toPortablePath(a.packageLocation)}:{linkType:a.linkType,target:wIe(a,t,e)}}var BIt=(t,e,r)=>{let o=new Map,a=(E,I,v)=>{let{linkType:b,target:C}=IIt(E,t,r);return{locator:gA(E),nodePath:I,target:C,linkType:b,aliases:v}},n=E=>{let[I,v]=E.split("/");return v?{scope:I,name:v}:{scope:null,name:I}},u=new Set,A=(E,I,v)=>{if(u.has(E))return;u.add(E);let b=Array.from(E.references).sort().join("#");for(let C of E.dependencies){let T=Array.from(C.references).sort().join("#");if(C.identName===E.identName.replace(B0,"")&&T===b)continue;let L=Array.from(C.references).sort(),U={name:C.identName,reference:L[0]},{name:J,scope:te}=n(C.name),le=te?[te,J]:[J],pe=K.join(I,EIe),Ae=K.join(pe,...le),ye=`${v}/${U.name}`,ae=a(U,v,L.slice(1)),we=!1;if(ae.linkType==="SOFT"&&r.project){let Pe=r.project.workspacesByCwd.get(ae.target.slice(0,-1));we=!!(Pe&&!Pe.manifest.name)}if(!C.name.endsWith(B0)&&!we){let Pe=o.get(Ae);if(Pe){if(Pe.dirList)throw new Error(`Assertion failed: ${Ae} cannot merge dir node with leaf node`);{let De=W.parseLocator(Pe.locator),ce=W.parseLocator(ae.locator);if(Pe.linkType!==ae.linkType)throw new Error(`Assertion failed: ${Ae} cannot merge nodes with different link types ${Pe.nodePath}/${W.stringifyLocator(De)} and ${v}/${W.stringifyLocator(ce)}`);if(De.identHash!==ce.identHash)throw new Error(`Assertion failed: ${Ae} cannot merge nodes with different idents ${Pe.nodePath}/${W.stringifyLocator(De)} and ${v}/s${W.stringifyLocator(ce)}`);ae.aliases=[...ae.aliases,...Pe.aliases,W.parseLocator(Pe.locator).reference]}}o.set(Ae,ae);let g=Ae.split("/"),Ee=g.indexOf(EIe);for(let De=g.length-1;Ee>=0&&De>Ee;De--){let ce=ue.toPortablePath(g.slice(0,De).join(K.sep)),ne=g[De],ee=o.get(ce);if(!ee)o.set(ce,{dirList:new Set([ne])});else if(ee.dirList){if(ee.dirList.has(ne))break;ee.dirList.add(ne)}}}A(C,ae.linkType==="SOFT"?ae.target:Ae,ye)}},p=a({name:e.name,reference:Array.from(e.references)[0]},"",[]),h=p.target;return o.set(h,p),A(e,h,""),o};Ye();Ye();Pt();Pt();nA();Nl();var lq={};Kt(lq,{PnpInstaller:()=>dm,PnpLinker:()=>P0,UnplugCommand:()=>x0,default:()=>$It,getPnpPath:()=>S0,jsInstallUtils:()=>mA,pnpUtils:()=>av,quotePathIfNeeded:()=>s1e});Pt();var i1e=Be("url");Ye();Ye();Pt();Pt();var IIe={["DEFAULT"]:{collapsed:!1,next:{["*"]:"DEFAULT"}},["TOP_LEVEL"]:{collapsed:!1,next:{fallbackExclusionList:"FALLBACK_EXCLUSION_LIST",packageRegistryData:"PACKAGE_REGISTRY_DATA",["*"]:"DEFAULT"}},["FALLBACK_EXCLUSION_LIST"]:{collapsed:!1,next:{["*"]:"FALLBACK_EXCLUSION_ENTRIES"}},["FALLBACK_EXCLUSION_ENTRIES"]:{collapsed:!0,next:{["*"]:"FALLBACK_EXCLUSION_DATA"}},["FALLBACK_EXCLUSION_DATA"]:{collapsed:!0,next:{["*"]:"DEFAULT"}},["PACKAGE_REGISTRY_DATA"]:{collapsed:!1,next:{["*"]:"PACKAGE_REGISTRY_ENTRIES"}},["PACKAGE_REGISTRY_ENTRIES"]:{collapsed:!0,next:{["*"]:"PACKAGE_STORE_DATA"}},["PACKAGE_STORE_DATA"]:{collapsed:!1,next:{["*"]:"PACKAGE_STORE_ENTRIES"}},["PACKAGE_STORE_ENTRIES"]:{collapsed:!0,next:{["*"]:"PACKAGE_INFORMATION_DATA"}},["PACKAGE_INFORMATION_DATA"]:{collapsed:!1,next:{packageDependencies:"PACKAGE_DEPENDENCIES",["*"]:"DEFAULT"}},["PACKAGE_DEPENDENCIES"]:{collapsed:!1,next:{["*"]:"PACKAGE_DEPENDENCY"}},["PACKAGE_DEPENDENCY"]:{collapsed:!0,next:{["*"]:"DEFAULT"}}};function vIt(t,e,r){let o="";o+="[";for(let a=0,n=t.length;a"u"||(A!==0&&(a+=", "),a+=JSON.stringify(p),a+=": ",a+=wQ(p,h,e,r).replace(/^ +/g,""),A+=1)}return a+="}",a}function SIt(t,e,r){let o=Object.keys(t),a=`${r} `,n="";n+=r,n+=`{ +`;let u=0;for(let A=0,p=o.length;A"u"||(u!==0&&(n+=",",n+=` +`),n+=a,n+=JSON.stringify(h),n+=": ",n+=wQ(h,E,e,a).replace(/^ +/g,""),u+=1)}return u!==0&&(n+=` +`),n+=r,n+="}",n}function wQ(t,e,r,o){let{next:a}=IIe[r],n=a[t]||a["*"];return BIe(e,n,o)}function BIe(t,e,r){let{collapsed:o}=IIe[e];return Array.isArray(t)?o?vIt(t,e,r):DIt(t,e,r):typeof t=="object"&&t!==null?o?PIt(t,e,r):SIt(t,e,r):JSON.stringify(t)}function vIe(t){return BIe(t,"TOP_LEVEL","")}function zB(t,e){let r=Array.from(t);Array.isArray(e)||(e=[e]);let o=[];for(let n of e)o.push(r.map(u=>n(u)));let a=r.map((n,u)=>u);return a.sort((n,u)=>{for(let A of o){let p=A[n]A[u]?1:0;if(p!==0)return p}return 0}),a.map(n=>r[n])}function xIt(t){let e=new Map,r=zB(t.fallbackExclusionList||[],[({name:o,reference:a})=>o,({name:o,reference:a})=>a]);for(let{name:o,reference:a}of r){let n=e.get(o);typeof n>"u"&&e.set(o,n=new Set),n.add(a)}return Array.from(e).map(([o,a])=>[o,Array.from(a)])}function bIt(t){return zB(t.fallbackPool||[],([e])=>e)}function kIt(t){let e=[];for(let[r,o]of zB(t.packageRegistry,([a])=>a===null?"0":`1${a}`)){let a=[];e.push([r,a]);for(let[n,{packageLocation:u,packageDependencies:A,packagePeers:p,linkType:h,discardFromLookup:E}]of zB(o,([I])=>I===null?"0":`1${I}`)){let I=[];r!==null&&n!==null&&!A.has(r)&&I.push([r,n]);for(let[C,T]of zB(A.entries(),([L])=>L))I.push([C,T]);let v=p&&p.size>0?Array.from(p):void 0,b=E||void 0;a.push([n,{packageLocation:u,packageDependencies:I,packagePeers:v,linkType:h,discardFromLookup:b}])}}return e}function XB(t){return{__info:["This file is automatically generated. Do not touch it, or risk","your modifications being lost."],dependencyTreeRoots:t.dependencyTreeRoots,enableTopLevelFallback:t.enableTopLevelFallback||!1,ignorePatternData:t.ignorePattern||null,fallbackExclusionList:xIt(t),fallbackPool:bIt(t),packageRegistryData:kIt(t)}}var SIe=$e(PIe());function xIe(t,e){return[t?`${t} +`:"",`/* eslint-disable */ +`,`"use strict"; +`,` +`,e,` +`,(0,SIe.default)()].join("")}function QIt(t){return JSON.stringify(t,null,2)}function FIt(t){return`'${t.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,`\\ +`)}'`}function TIt(t){return[`const RAW_RUNTIME_STATE = +`,`${FIt(vIe(t))}; + +`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) { +`,` return hydrateRuntimeState(JSON.parse(RAW_RUNTIME_STATE), {basePath: basePath || __dirname}); +`,`} +`].join("")}function RIt(){return[`function $$SETUP_STATE(hydrateRuntimeState, basePath) { +`,` const fs = require('fs'); +`,` const path = require('path'); +`,` const pnpDataFilepath = path.resolve(__dirname, ${JSON.stringify(dr.pnpData)}); +`,` return hydrateRuntimeState(JSON.parse(fs.readFileSync(pnpDataFilepath, 'utf8')), {basePath: basePath || __dirname}); +`,`} +`].join("")}function bIe(t){let e=XB(t),r=TIt(e);return xIe(t.shebang,r)}function kIe(t){let e=XB(t),r=RIt(),o=xIe(t.shebang,r);return{dataFile:QIt(e),loaderFile:o}}Pt();function Yj(t,{basePath:e}){let r=ue.toPortablePath(e),o=K.resolve(r),a=t.ignorePatternData!==null?new RegExp(t.ignorePatternData):null,n=new Map,u=new Map(t.packageRegistryData.map(([I,v])=>[I,new Map(v.map(([b,C])=>{if(I===null!=(b===null))throw new Error("Assertion failed: The name and reference should be null, or neither should");let T=C.discardFromLookup??!1,L={name:I,reference:b},U=n.get(C.packageLocation);U?(U.discardFromLookup=U.discardFromLookup&&T,T||(U.locator=L)):n.set(C.packageLocation,{locator:L,discardFromLookup:T});let J=null;return[b,{packageDependencies:new Map(C.packageDependencies),packagePeers:new Set(C.packagePeers),linkType:C.linkType,discardFromLookup:T,get packageLocation(){return J||(J=K.join(o,C.packageLocation))}}]}))])),A=new Map(t.fallbackExclusionList.map(([I,v])=>[I,new Set(v)])),p=new Map(t.fallbackPool),h=t.dependencyTreeRoots,E=t.enableTopLevelFallback;return{basePath:r,dependencyTreeRoots:h,enableTopLevelFallback:E,fallbackExclusionList:A,fallbackPool:p,ignorePattern:a,packageLocatorsByLocations:n,packageRegistry:u}}Pt();Pt();var rp=Be("module"),gm=Be("url"),tq=Be("util");var Oo=Be("url");var RIe=$e(Be("assert"));var Wj=Array.isArray,ZB=JSON.stringify,$B=Object.getOwnPropertyNames,pm=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Vj=(t,e)=>RegExp.prototype.exec.call(t,e),Kj=(t,...e)=>RegExp.prototype[Symbol.replace].apply(t,e),v0=(t,...e)=>String.prototype.endsWith.apply(t,e),Jj=(t,...e)=>String.prototype.includes.apply(t,e),zj=(t,...e)=>String.prototype.lastIndexOf.apply(t,e),ev=(t,...e)=>String.prototype.indexOf.apply(t,e),QIe=(t,...e)=>String.prototype.replace.apply(t,e),D0=(t,...e)=>String.prototype.slice.apply(t,e),dA=(t,...e)=>String.prototype.startsWith.apply(t,e),FIe=Map,TIe=JSON.parse;function tv(t,e,r){return class extends r{constructor(...o){super(e(...o)),this.code=t,this.name=`${r.name} [${t}]`}}}var NIe=tv("ERR_PACKAGE_IMPORT_NOT_DEFINED",(t,e,r)=>`Package import specifier "${t}" is not defined${e?` in package ${e}package.json`:""} imported from ${r}`,TypeError),Xj=tv("ERR_INVALID_MODULE_SPECIFIER",(t,e,r=void 0)=>`Invalid module "${t}" ${e}${r?` imported from ${r}`:""}`,TypeError),LIe=tv("ERR_INVALID_PACKAGE_TARGET",(t,e,r,o=!1,a=void 0)=>{let n=typeof r=="string"&&!o&&r.length&&!dA(r,"./");return e==="."?((0,RIe.default)(o===!1),`Invalid "exports" main target ${ZB(r)} defined in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`):`Invalid "${o?"imports":"exports"}" target ${ZB(r)} defined for '${e}' in the package config ${t}package.json${a?` imported from ${a}`:""}${n?'; targets must start with "./"':""}`},Error),rv=tv("ERR_INVALID_PACKAGE_CONFIG",(t,e,r)=>`Invalid package config ${t}${e?` while importing ${e}`:""}${r?`. ${r}`:""}`,Error),MIe=tv("ERR_PACKAGE_PATH_NOT_EXPORTED",(t,e,r=void 0)=>e==="."?`No "exports" main defined in ${t}package.json${r?` imported from ${r}`:""}`:`Package subpath '${e}' is not defined by "exports" in ${t}package.json${r?` imported from ${r}`:""}`,Error);var BQ=Be("url");function OIe(t,e){let r=Object.create(null);for(let o=0;oe):t+e}nv(r,t,o,u,a)}Vj(_Ie,D0(t,2))!==null&&nv(r,t,o,u,a);let p=new URL(t,o),h=p.pathname,E=new URL(".",o).pathname;if(dA(h,E)||nv(r,t,o,u,a),e==="")return p;if(Vj(_Ie,e)!==null){let I=n?QIe(r,"*",()=>e):r+e;MIt(I,o,u,a)}return n?new URL(Kj(HIe,p.href,()=>e)):new URL(e,p)}function UIt(t){let e=+t;return`${e}`!==t?!1:e>=0&&e<4294967295}function qC(t,e,r,o,a,n,u,A){if(typeof e=="string")return OIt(e,r,o,t,a,n,u,A);if(Wj(e)){if(e.length===0)return null;let p;for(let h=0;hn?-1:n>a||r===-1?1:o===-1||t.length>e.length?-1:e.length>t.length?1:0}function _It(t,e,r){if(typeof t=="string"||Wj(t))return!0;if(typeof t!="object"||t===null)return!1;let o=$B(t),a=!1,n=0;for(let u=0;u=h.length&&v0(e,I)&&qIe(n,h)===1&&zj(h,"*")===E&&(n=h,u=D0(e,E,e.length-I.length))}}if(n){let p=r[n],h=qC(t,p,u,n,o,!0,!1,a);return h==null&&Zj(e,t,o),h}Zj(e,t,o)}function YIe({name:t,base:e,conditions:r,readFileSyncFn:o}){if(t==="#"||dA(t,"#/")||v0(t,"/")){let u="is not a valid internal imports specifier name";throw new Xj(t,u,(0,Oo.fileURLToPath)(e))}let a,n=UIe(e,o);if(n.exists){a=(0,Oo.pathToFileURL)(n.pjsonPath);let u=n.imports;if(u)if(pm(u,t)&&!Jj(t,"*")){let A=qC(a,u[t],"",t,e,!1,!0,r);if(A!=null)return A}else{let A="",p,h=$B(u);for(let E=0;E=I.length&&v0(t,b)&&qIe(A,I)===1&&zj(I,"*")===v&&(A=I,p=D0(t,v,t.length-b.length))}}if(A){let E=u[A],I=qC(a,E,p,A,e,!0,!0,r);if(I!=null)return I}}}LIt(t,a,e)}Pt();var jIt=new Set(["BUILTIN_NODE_RESOLUTION_FAILED","MISSING_DEPENDENCY","MISSING_PEER_DEPENDENCY","QUALIFIED_PATH_RESOLUTION_FAILED","UNDECLARED_DEPENDENCY"]);function $i(t,e,r={},o){o??=jIt.has(t)?"MODULE_NOT_FOUND":t;let a={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:{...a,value:o},pnpCode:{...a,value:t},data:{...a,value:r}})}function au(t){return ue.normalize(ue.fromPortablePath(t))}var JIe=$e(VIe());function zIe(t){return qIt(),eq[t]}var eq;function qIt(){eq||(eq={"--conditions":[],...KIe(GIt()),...KIe(process.execArgv)})}function KIe(t){return(0,JIe.default)({"--conditions":[String],"-C":"--conditions"},{argv:t,permissive:!0})}function GIt(){let t=[],e=YIt(process.env.NODE_OPTIONS||"",t);return t.length,e}function YIt(t,e){let r=[],o=!1,a=!0;for(let n=0;nparseInt(t,10)),XIe=hm>19||hm===19&&sv>=2||hm===18&&sv>=13,Bzt=hm===20&&sv<6||hm===19&&sv>=3,vzt=hm>19||hm===19&&sv>=6;function ZIe(t){if(process.env.WATCH_REPORT_DEPENDENCIES&&process.send)if(t=t.map(e=>ue.fromPortablePath(mi.resolveVirtual(ue.toPortablePath(e)))),XIe)process.send({"watch:require":t});else for(let e of t)process.send({"watch:require":e})}function rq(t,e){let r=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,o=Number(process.env.PNP_DEBUG_LEVEL),a=/^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/,n=/^(\/|\.{1,2}(\/|$))/,u=/\/$/,A=/^\.{0,2}\//,p={name:null,reference:null},h=[],E=new Set;if(t.enableTopLevelFallback===!0&&h.push(p),e.compatibilityMode!==!1)for(let Re of["react-scripts","gatsby"]){let Qe=t.packageRegistry.get(Re);if(Qe)for(let be of Qe.keys()){if(be===null)throw new Error("Assertion failed: This reference shouldn't be null");h.push({name:Re,reference:be})}}let{ignorePattern:I,packageRegistry:v,packageLocatorsByLocations:b}=t;function C(Re,Qe){return{fn:Re,args:Qe,error:null,result:null}}function T(Re){let Qe=process.stderr?.hasColors?.()??process.stdout.isTTY,be=(Je,He)=>`\x1B[${Je}m${He}\x1B[0m`,_e=Re.error;console.error(_e?be("31;1",`\u2716 ${Re.error?.message.replace(/\n.*/s,"")}`):be("33;1","\u203C Resolution")),Re.args.length>0&&console.error();for(let Je of Re.args)console.error(` ${be("37;1","In \u2190")} ${(0,tq.inspect)(Je,{colors:Qe,compact:!0})}`);Re.result&&(console.error(),console.error(` ${be("37;1","Out \u2192")} ${(0,tq.inspect)(Re.result,{colors:Qe,compact:!0})}`));let Te=new Error().stack.match(/(?<=^ +)at.*/gm)?.slice(2)??[];if(Te.length>0){console.error();for(let Je of Te)console.error(` ${be("38;5;244",Je)}`)}console.error()}function L(Re,Qe){if(e.allowDebug===!1)return Qe;if(Number.isFinite(o)){if(o>=2)return(...be)=>{let _e=C(Re,be);try{return _e.result=Qe(...be)}catch(Te){throw _e.error=Te}finally{T(_e)}};if(o>=1)return(...be)=>{try{return Qe(...be)}catch(_e){let Te=C(Re,be);throw Te.error=_e,T(Te),_e}}}return Qe}function U(Re){let Qe=g(Re);if(!Qe)throw $i("INTERNAL","Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)");return Qe}function J(Re){if(Re.name===null)return!0;for(let Qe of t.dependencyTreeRoots)if(Qe.name===Re.name&&Qe.reference===Re.reference)return!0;return!1}let te=new Set(["node","require",...zIe("--conditions")]);function le(Re,Qe=te,be){let _e=ce(K.join(Re,"internal.js"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(_e===null)throw $i("INTERNAL",`The locator that owns the "${Re}" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:Te}=U(_e),Je=K.join(Te,dr.manifest);if(!e.fakeFs.existsSync(Je))return null;let He=JSON.parse(e.fakeFs.readFileSync(Je,"utf8"));if(He.exports==null)return null;let x=K.contains(Te,Re);if(x===null)throw $i("INTERNAL","unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)");x!=="."&&!A.test(x)&&(x=`./${x}`);try{let w=GIe({packageJSONUrl:(0,gm.pathToFileURL)(ue.fromPortablePath(Je)),packageSubpath:x,exports:He.exports,base:be?(0,gm.pathToFileURL)(ue.fromPortablePath(be)):null,conditions:Qe});return ue.toPortablePath((0,gm.fileURLToPath)(w))}catch(w){throw $i("EXPORTS_RESOLUTION_FAILED",w.message,{unqualifiedPath:au(Re),locator:_e,pkgJson:He,subpath:au(x),conditions:Qe},w.code)}}function pe(Re,Qe,{extensions:be}){let _e;try{Qe.push(Re),_e=e.fakeFs.statSync(Re)}catch{}if(_e&&!_e.isDirectory())return e.fakeFs.realpathSync(Re);if(_e&&_e.isDirectory()){let Te;try{Te=JSON.parse(e.fakeFs.readFileSync(K.join(Re,dr.manifest),"utf8"))}catch{}let Je;if(Te&&Te.main&&(Je=K.resolve(Re,Te.main)),Je&&Je!==Re){let He=pe(Je,Qe,{extensions:be});if(He!==null)return He}}for(let Te=0,Je=be.length;Te{let x=JSON.stringify(He.name);if(_e.has(x))return;_e.add(x);let w=Ee(He);for(let S of w)if(U(S).packagePeers.has(Re))Te(S);else{let F=be.get(S.name);typeof F>"u"&&be.set(S.name,F=new Set),F.add(S.reference)}};Te(Qe);let Je=[];for(let He of[...be.keys()].sort())for(let x of[...be.get(He)].sort())Je.push({name:He,reference:x});return Je}function ce(Re,{resolveIgnored:Qe=!1,includeDiscardFromLookup:be=!1}={}){if(ae(Re)&&!Qe)return null;let _e=K.relative(t.basePath,Re);_e.match(n)||(_e=`./${_e}`),_e.endsWith("/")||(_e=`${_e}/`);do{let Te=b.get(_e);if(typeof Te>"u"||Te.discardFromLookup&&!be){_e=_e.substring(0,_e.lastIndexOf("/",_e.length-2)+1);continue}return Te.locator}while(_e!=="");return null}function ne(Re){try{return e.fakeFs.readFileSync(ue.toPortablePath(Re),"utf8")}catch(Qe){if(Qe.code==="ENOENT")return;throw Qe}}function ee(Re,Qe,{considerBuiltins:be=!0}={}){if(Re.startsWith("#"))throw new Error("resolveToUnqualified can not handle private import mappings");if(Re==="pnpapi")return ue.toPortablePath(e.pnpapiResolution);if(be&&(0,rp.isBuiltin)(Re))return null;let _e=au(Re),Te=Qe&&au(Qe);if(Qe&&ae(Qe)&&(!K.isAbsolute(Re)||ce(Re)===null)){let x=ye(Re,Qe);if(x===!1)throw $i("BUILTIN_NODE_RESOLUTION_FAILED",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp) + +Require request: "${_e}" +Required by: ${Te} +`,{request:_e,issuer:Te});return ue.toPortablePath(x)}let Je,He=Re.match(a);if(He){if(!Qe)throw $i("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:_e,issuer:Te});let[,x,w]=He,S=ce(Qe);if(!S){let Ne=ye(Re,Qe);if(Ne===!1)throw $i("BUILTIN_NODE_RESOLUTION_FAILED",`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree). + +Require path: "${_e}" +Required by: ${Te} +`,{request:_e,issuer:Te});return ue.toPortablePath(Ne)}let F=U(S).packageDependencies.get(x),z=null;if(F==null&&S.name!==null){let Ne=t.fallbackExclusionList.get(S.name);if(!Ne||!Ne.has(S.reference)){for(let dt=0,jt=h.length;dtJ(ot))?X=$i("MISSING_PEER_DEPENDENCY",`${S.name} tried to access ${x} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required by: ${S.name}@${S.reference} (via ${Te}) +${Ne.map(ot=>`Ancestor breaking the chain: ${ot.name}@${ot.reference} +`).join("")} +`,{request:_e,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:x,brokenAncestors:Ne}):X=$i("MISSING_PEER_DEPENDENCY",`${S.name} tried to access ${x} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required by: ${S.name}@${S.reference} (via ${Te}) + +${Ne.map(ot=>`Ancestor breaking the chain: ${ot.name}@${ot.reference} +`).join("")} +`,{request:_e,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:x,brokenAncestors:Ne})}else F===void 0&&(!be&&(0,rp.isBuiltin)(Re)?J(S)?X=$i("UNDECLARED_DEPENDENCY",`Your application tried to access ${x}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${x} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required by: ${Te} +`,{request:_e,issuer:Te,dependencyName:x}):X=$i("UNDECLARED_DEPENDENCY",`${S.name} tried to access ${x}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${x} isn't otherwise declared in ${S.name}'s dependencies, this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required by: ${Te} +`,{request:_e,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:x}):J(S)?X=$i("UNDECLARED_DEPENDENCY",`Your application tried to access ${x}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required by: ${Te} +`,{request:_e,issuer:Te,dependencyName:x}):X=$i("UNDECLARED_DEPENDENCY",`${S.name} tried to access ${x}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. + +Required package: ${x}${x!==_e?` (via "${_e}")`:""} +Required by: ${S.name}@${S.reference} (via ${Te}) +`,{request:_e,issuer:Te,issuerLocator:Object.assign({},S),dependencyName:x}));if(F==null){if(z===null||X===null)throw X||new Error("Assertion failed: Expected an error to have been set");F=z;let Ne=X.message.replace(/\n.*/g,"");X.message=Ne,!E.has(Ne)&&o!==0&&(E.add(Ne),process.emitWarning(X))}let Z=Array.isArray(F)?{name:F[0],reference:F[1]}:{name:x,reference:F},ie=U(Z);if(!ie.packageLocation)throw $i("MISSING_DEPENDENCY",`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod. + +Required package: ${Z.name}@${Z.reference}${Z.name!==_e?` (via "${_e}")`:""} +Required by: ${S.name}@${S.reference} (via ${Te}) +`,{request:_e,issuer:Te,dependencyLocator:Object.assign({},Z)});let Se=ie.packageLocation;w?Je=K.join(Se,w):Je=Se}else if(K.isAbsolute(Re))Je=K.normalize(Re);else{if(!Qe)throw $i("API_ERROR","The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:_e,issuer:Te});let x=K.resolve(Qe);Qe.match(u)?Je=K.normalize(K.join(x,Re)):Je=K.normalize(K.join(K.dirname(x),Re))}return K.normalize(Je)}function Ie(Re,Qe,be=te,_e){if(n.test(Re))return Qe;let Te=le(Qe,be,_e);return Te?K.normalize(Te):Qe}function ke(Re,{extensions:Qe=Object.keys(rp.Module._extensions)}={}){let be=[],_e=pe(Re,be,{extensions:Qe});if(_e)return K.normalize(_e);{ZIe(be.map(He=>ue.fromPortablePath(He)));let Te=au(Re),Je=ce(Re);if(Je){let{packageLocation:He}=U(Je),x=!0;try{e.fakeFs.accessSync(He)}catch(w){if(w?.code==="ENOENT")x=!1;else{let S=(w?.message??w??"empty exception thrown").replace(/^[A-Z]/,y=>y.toLowerCase());throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`Required package exists but could not be accessed (${S}). + +Missing package: ${Je.name}@${Je.reference} +Expected package location: ${au(He)} +`,{unqualifiedPath:Te,extensions:Qe})}}if(!x){let w=He.includes("/unplugged/")?"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).":"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.";throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`${w} + +Missing package: ${Je.name}@${Je.reference} +Expected package location: ${au(He)} +`,{unqualifiedPath:Te,extensions:Qe})}}throw $i("QUALIFIED_PATH_RESOLUTION_FAILED",`Qualified path resolution failed: we looked for the following paths, but none could be accessed. + +Source path: ${Te} +${be.map(He=>`Not found: ${au(He)} +`).join("")}`,{unqualifiedPath:Te,extensions:Qe})}}function ht(Re,Qe,be){if(!Qe)throw new Error("Assertion failed: An issuer is required to resolve private import mappings");let _e=YIe({name:Re,base:(0,gm.pathToFileURL)(ue.fromPortablePath(Qe)),conditions:be.conditions??te,readFileSyncFn:ne});if(_e instanceof URL)return ke(ue.toPortablePath((0,gm.fileURLToPath)(_e)),{extensions:be.extensions});if(_e.startsWith("#"))throw new Error("Mapping from one private import to another isn't allowed");return H(_e,Qe,be)}function H(Re,Qe,be={}){try{if(Re.startsWith("#"))return ht(Re,Qe,be);let{considerBuiltins:_e,extensions:Te,conditions:Je}=be,He=ee(Re,Qe,{considerBuiltins:_e});if(Re==="pnpapi")return He;if(He===null)return null;let x=()=>Qe!==null?ae(Qe):!1,w=(!_e||!(0,rp.isBuiltin)(Re))&&!x()?Ie(Re,He,Je,Qe):He;return ke(w,{extensions:Te})}catch(_e){throw Object.hasOwn(_e,"pnpCode")&&Object.assign(_e.data,{request:au(Re),issuer:Qe&&au(Qe)}),_e}}function lt(Re){let Qe=K.normalize(Re),be=mi.resolveVirtual(Qe);return be!==Qe?be:null}return{VERSIONS:we,topLevel:Pe,getLocator:(Re,Qe)=>Array.isArray(Qe)?{name:Qe[0],reference:Qe[1]}:{name:Re,reference:Qe},getDependencyTreeRoots:()=>[...t.dependencyTreeRoots],getAllLocators(){let Re=[];for(let[Qe,be]of v)for(let _e of be.keys())Qe!==null&&_e!==null&&Re.push({name:Qe,reference:_e});return Re},getPackageInformation:Re=>{let Qe=g(Re);if(Qe===null)return null;let be=ue.fromPortablePath(Qe.packageLocation);return{...Qe,packageLocation:be}},findPackageLocator:Re=>ce(ue.toPortablePath(Re)),resolveToUnqualified:L("resolveToUnqualified",(Re,Qe,be)=>{let _e=Qe!==null?ue.toPortablePath(Qe):null,Te=ee(ue.toPortablePath(Re),_e,be);return Te===null?null:ue.fromPortablePath(Te)}),resolveUnqualified:L("resolveUnqualified",(Re,Qe)=>ue.fromPortablePath(ke(ue.toPortablePath(Re),Qe))),resolveRequest:L("resolveRequest",(Re,Qe,be)=>{let _e=Qe!==null?ue.toPortablePath(Qe):null,Te=H(ue.toPortablePath(Re),_e,be);return Te===null?null:ue.fromPortablePath(Te)}),resolveVirtual:L("resolveVirtual",Re=>{let Qe=lt(ue.toPortablePath(Re));return Qe!==null?ue.fromPortablePath(Qe):null})}}Pt();var $Ie=(t,e,r)=>{let o=XB(t),a=Yj(o,{basePath:e}),n=ue.join(e,dr.pnpCjs);return rq(a,{fakeFs:r,pnpapiResolution:n})};var iq=$e(t1e());qt();var mA={};Kt(mA,{checkManifestCompatibility:()=>r1e,extractBuildRequest:()=>vQ,getExtractHint:()=>sq,hasBindingGyp:()=>oq});Ye();Pt();function r1e(t){return W.isPackageCompatible(t,Ji.getArchitectureSet())}function vQ(t,e,r,{configuration:o}){let a=[];for(let n of["preinstall","install","postinstall"])e.manifest.scripts.has(n)&&a.push({type:0,script:n});return!e.manifest.scripts.has("install")&&e.misc.hasBindingGyp&&a.push({type:1,script:"node-gyp rebuild"}),a.length===0?null:t.linkType!=="HARD"?{skipped:!0,explain:n=>n.reportWarningOnce(6,`${W.prettyLocator(o,t)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`)}:r&&r.built===!1?{skipped:!0,explain:n=>n.reportInfoOnce(5,`${W.prettyLocator(o,t)} lists build scripts, but its build has been explicitly disabled through configuration.`)}:!o.get("enableScripts")&&!r.built?{skipped:!0,explain:n=>n.reportWarningOnce(4,`${W.prettyLocator(o,t)} lists build scripts, but all build scripts have been disabled.`)}:r1e(t)?{skipped:!1,directives:a}:{skipped:!0,explain:n=>n.reportWarningOnce(76,`${W.prettyLocator(o,t)} The ${Ji.getArchitectureName()} architecture is incompatible with this package, build skipped.`)}}var VIt=new Set([".exe",".bin",".h",".hh",".hpp",".c",".cc",".cpp",".java",".jar",".node"]);function sq(t){return t.packageFs.getExtractHint({relevantExtensions:VIt})}function oq(t){let e=K.join(t.prefixPath,"binding.gyp");return t.packageFs.existsSync(e)}var av={};Kt(av,{getUnpluggedPath:()=>ov});Ye();Pt();function ov(t,{configuration:e}){return K.resolve(e.get("pnpUnpluggedFolder"),W.slugifyLocator(t))}var KIt=new Set([W.makeIdent(null,"open").identHash,W.makeIdent(null,"opn").identHash]),P0=class{constructor(){this.mode="strict";this.pnpCache=new Map}getCustomDataKey(){return JSON.stringify({name:"PnpLinker",version:2})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the PnP linker to be enabled");let o=S0(r.project).cjs;if(!oe.existsSync(o))throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let a=je.getFactoryWithDefault(this.pnpCache,o,()=>je.dynamicRequire(o,{cachingStrategy:je.CachingStrategy.FsTime})),n={name:W.stringifyIdent(e),reference:e.reference},u=a.getPackageInformation(n);if(!u)throw new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed PnP map - running an install might help`);return ue.toPortablePath(u.packageLocation)}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=S0(r.project).cjs;if(!oe.existsSync(o))return null;let n=je.getFactoryWithDefault(this.pnpCache,o,()=>je.dynamicRequire(o,{cachingStrategy:je.CachingStrategy.FsTime})).findPackageLocator(ue.fromPortablePath(e));return n?W.makeLocator(W.parseIdent(n.name),n.reference):null}makeInstaller(e){return new dm(e)}isEnabled(e){return!(e.project.configuration.get("nodeLinker")!=="pnp"||e.project.configuration.get("pnpMode")!==this.mode)}},dm=class{constructor(e){this.opts=e;this.mode="strict";this.asyncActions=new je.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}attachCustomData(e){this.customData=e}async installPackage(e,r,o){let a=W.stringifyIdent(e),n=e.reference,u=!!this.opts.project.tryWorkspaceByLocator(e),A=W.isVirtualLocator(e),p=e.peerDependencies.size>0&&!A,h=!p&&!u,E=!p&&e.linkType!=="SOFT",I,v;if(h||E){let te=A?W.devirtualizeLocator(e):e;I=this.customData.store.get(te.locatorHash),typeof I>"u"&&(I=await JIt(r),e.linkType==="HARD"&&this.customData.store.set(te.locatorHash,I)),I.manifest.type==="module"&&(this.isESMLoaderRequired=!0),v=this.opts.project.getDependencyMeta(te,e.version)}let b=h?vQ(e,I,v,{configuration:this.opts.project.configuration}):null,C=E?await this.unplugPackageIfNeeded(e,I,r,v,o):r.packageFs;if(K.isAbsolute(r.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${r.prefixPath}) to be relative to the parent`);let T=K.resolve(C.getRealPath(),r.prefixPath),L=aq(this.opts.project.cwd,T),U=new Map,J=new Set;if(A){for(let te of e.peerDependencies.values())U.set(W.stringifyIdent(te),null),J.add(W.stringifyIdent(te));if(!u){let te=W.devirtualizeLocator(e);this.virtualTemplates.set(te.locatorHash,{location:aq(this.opts.project.cwd,mi.resolveVirtual(T)),locator:te})}}return je.getMapWithDefault(this.packageRegistry,a).set(n,{packageLocation:L,packageDependencies:U,packagePeers:J,linkType:e.linkType,discardFromLookup:r.discardFromLookup||!1}),{packageLocation:T,buildRequest:b}}async attachInternalDependencies(e,r){let o=this.getPackageInformation(e);for(let[a,n]of r){let u=W.areIdentsEqual(a,n)?n.reference:[W.stringifyIdent(n),n.reference];o.packageDependencies.set(W.stringifyIdent(a),u)}}async attachExternalDependents(e,r){for(let o of r)this.getDiskInformation(o).packageDependencies.set(W.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get("pnpMode")!==this.mode)return;let e=S0(this.opts.project);if(this.isEsmEnabled()||await oe.removePromise(e.esmLoader),this.opts.project.configuration.get("nodeLinker")!=="pnp"){await oe.removePromise(e.cjs),await oe.removePromise(e.data),await oe.removePromise(e.esmLoader),await oe.removePromise(this.opts.project.configuration.get("pnpUnpluggedFolder"));return}for(let{locator:E,location:I}of this.virtualTemplates.values())je.getMapWithDefault(this.packageRegistry,W.stringifyIdent(E)).set(E.reference,{packageLocation:I,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let r=this.opts.project.configuration.get("pnpFallbackMode"),o=this.opts.project.workspaces.map(({anchoredLocator:E})=>({name:W.stringifyIdent(E),reference:E.reference})),a=r!=="none",n=[],u=new Map,A=je.buildIgnorePattern([".yarn/sdks/**",...this.opts.project.configuration.get("pnpIgnorePatterns")]),p=this.packageRegistry,h=this.opts.project.configuration.get("pnpShebang");if(r==="dependencies-only")for(let E of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(E)&&n.push({name:W.stringifyIdent(E),reference:E.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:o,enableTopLevelFallback:a,fallbackExclusionList:n,fallbackPool:u,ignorePattern:A,packageRegistry:p,shebang:h}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has("pnpEnableEsmLoader"))return this.opts.project.configuration.get("pnpEnableEsmLoader");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type==="module")return!0;return!1}async finalizeInstallWithPnp(e){let r=S0(this.opts.project),o=await this.locateNodeModules(e.ignorePattern);if(o.length>0){this.opts.report.reportWarning(31,"One or more node_modules have been detected and will be removed. This operation may take some time.");for(let n of o)await oe.removePromise(n)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get("pnpEnableInlining")){let n=bIe(e);await oe.changeFilePromise(r.cjs,n,{automaticNewlines:!0,mode:493}),await oe.removePromise(r.data)}else{let{dataFile:n,loaderFile:u}=kIe(e);await oe.changeFilePromise(r.cjs,u,{automaticNewlines:!0,mode:493}),await oe.changeFilePromise(r.data,n,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning(0,"ESM support for PnP uses the experimental loader API and is therefore experimental"),await oe.changeFilePromise(r.esmLoader,(0,iq.default)(),{automaticNewlines:!0,mode:420}));let a=this.opts.project.configuration.get("pnpUnpluggedFolder");if(this.unpluggedPaths.size===0)await oe.removePromise(a);else for(let n of await oe.readdirPromise(a)){let u=K.resolve(a,n);this.unpluggedPaths.has(u)||await oe.removePromise(u)}}async locateNodeModules(e){let r=[],o=e?new RegExp(e):null;for(let a of this.opts.project.workspaces){let n=K.join(a.cwd,"node_modules");if(o&&o.test(K.relative(this.opts.project.cwd,a.cwd))||!oe.existsSync(n))continue;let u=await oe.readdirPromise(n,{withFileTypes:!0}),A=u.filter(p=>!p.isDirectory()||p.name===".bin"||!p.name.startsWith("."));if(A.length===u.length)r.push(n);else for(let p of A)r.push(K.join(n,p.name))}return r}async unplugPackageIfNeeded(e,r,o,a,n){return this.shouldBeUnplugged(e,r,a)?this.unplugPackage(e,o,n):o.packageFs}shouldBeUnplugged(e,r,o){return typeof o.unplugged<"u"?o.unplugged:KIt.has(e.identHash)||e.conditions!=null?!0:r.manifest.preferUnplugged!==null?r.manifest.preferUnplugged:!!(vQ(e,r,o,{configuration:this.opts.project.configuration})?.skipped===!1||r.misc.extractHint)}async unplugPackage(e,r,o){let a=ov(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new Uu(a,{baseFs:r.packageFs,pathUtils:K}):(this.unpluggedPaths.add(a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let n=K.join(a,r.prefixPath,".ready");await oe.existsPromise(n)||(this.opts.project.storedBuildState.delete(e.locatorHash),await oe.mkdirPromise(a,{recursive:!0}),await oe.copyPromise(a,Bt.dot,{baseFs:r.packageFs,overwrite:!1}),await oe.writeFilePromise(n,""))})),new gn(a))}getPackageInformation(e){let r=W.stringifyIdent(e),o=e.reference,a=this.packageRegistry.get(r);if(!a)throw new Error(`Assertion failed: The package information store should have been available (for ${W.prettyIdent(this.opts.project.configuration,e)})`);let n=a.get(o);if(!n)throw new Error(`Assertion failed: The package information should have been available (for ${W.prettyLocator(this.opts.project.configuration,e)})`);return n}getDiskInformation(e){let r=je.getMapWithDefault(this.packageRegistry,"@@disk"),o=aq(this.opts.project.cwd,e);return je.getFactoryWithDefault(r,o,()=>({packageLocation:o,packageDependencies:new Map,packagePeers:new Set,linkType:"SOFT",discardFromLookup:!1}))}};function aq(t,e){let r=K.relative(t,e);return r.match(/^\.{0,2}\//)||(r=`./${r}`),r.replace(/\/?$/,"/")}async function JIt(t){let e=await Mt.tryFind(t.prefixPath,{baseFs:t.packageFs})??new Mt,r=new Set(["preinstall","install","postinstall"]);for(let o of e.scripts.keys())r.has(o)||e.scripts.delete(o);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:sq(t),hasBindingGyp:oq(t)}}}Ye();Ye();qt();var n1e=$e(Zo());var x0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Unplug direct dependencies from the entire project"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Unplug both direct and transitive dependencies"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);if(r.get("nodeLinker")!=="pnp")throw new it("This command can only be used if the `nodeLinker` option is set to `pnp`");await o.restoreInstallState();let u=new Set(this.patterns),A=this.patterns.map(b=>{let C=W.parseDescriptor(b),T=C.range!=="unknown"?C:W.makeDescriptor(C,"*");if(!kr.validRange(T.range))throw new it(`The range of the descriptor patterns must be a valid semver range (${W.prettyDescriptor(r,T)})`);return L=>{let U=W.stringifyIdent(L);return!n1e.default.isMatch(U,W.stringifyIdent(T))||L.version&&!kr.satisfiesWithPrereleases(L.version,T.range)?!1:(u.delete(b),!0)}}),p=()=>{let b=[];for(let C of o.storedPackages.values())!o.tryWorkspaceByLocator(C)&&!W.isVirtualLocator(C)&&A.some(T=>T(C))&&b.push(C);return b},h=b=>{let C=new Set,T=[],L=(U,J)=>{if(C.has(U.locatorHash))return;let te=!!o.tryWorkspaceByLocator(U);if(!(J>0&&!this.recursive&&te)&&(C.add(U.locatorHash),!o.tryWorkspaceByLocator(U)&&A.some(le=>le(U))&&T.push(U),!(J>0&&!this.recursive)))for(let le of U.dependencies.values()){let pe=o.storedResolutions.get(le.descriptorHash);if(!pe)throw new Error("Assertion failed: The resolution should have been registered");let Ae=o.storedPackages.get(pe);if(!Ae)throw new Error("Assertion failed: The package should have been registered");L(Ae,J+1)}};for(let U of b)L(U.anchoredPackage,0);return T},E,I;if(this.all&&this.recursive?(E=p(),I="the project"):this.all?(E=h(o.workspaces),I="any workspace"):(E=h([a]),I="this workspace"),u.size>1)throw new it(`Patterns ${de.prettyList(r,u,de.Type.CODE)} don't match any packages referenced by ${I}`);if(u.size>0)throw new it(`Pattern ${de.prettyList(r,u,de.Type.CODE)} doesn't match any packages referenced by ${I}`);E=je.sortMap(E,b=>W.stringifyLocator(b));let v=await Nt.start({configuration:r,stdout:this.context.stdout,json:this.json},async b=>{for(let C of E){let T=C.version??"unknown",L=o.topLevelWorkspace.manifest.ensureDependencyMeta(W.makeDescriptor(C,T));L.unplugged=!0,b.reportInfo(0,`Will unpack ${W.prettyLocator(r,C)} to ${de.pretty(r,ov(C,{configuration:r}),de.Type.PATH)}`),b.reportJson({locator:W.stringifyLocator(C),version:T})}await o.topLevelWorkspace.persistManifest(),this.json||b.reportSeparator()});return v.hasErrors()?v.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};x0.paths=[["unplug"]],x0.usage=nt.Usage({description:"force the unpacking of a list of packages",details:"\n This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\n\n A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\n\n Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\n\n By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\n\n This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\n ",examples:[["Unplug the lodash dependency from the active workspace","yarn unplug lodash"],["Unplug all instances of lodash referenced by any workspace","yarn unplug lodash -A"],["Unplug all instances of lodash referenced by the active workspace and its dependencies","yarn unplug lodash -R"],["Unplug all instances of lodash, anywhere","yarn unplug lodash -AR"],["Unplug one specific version of lodash","yarn unplug lodash@1.2.3"],["Unplug all packages with the `@babel` scope","yarn unplug '@babel/*'"],["Unplug all packages (only for testing, not recommended)","yarn unplug -R '*'"]]});var S0=t=>({cjs:K.join(t.cwd,dr.pnpCjs),data:K.join(t.cwd,dr.pnpData),esmLoader:K.join(t.cwd,dr.pnpEsmLoader)}),s1e=t=>/\s/.test(t)?JSON.stringify(t):t;async function zIt(t,e,r){let o=/\s*--require\s+\S*\.pnp\.c?js\s*/g,a=/\s*--experimental-loader\s+\S*\.pnp\.loader\.mjs\s*/,n=(e.NODE_OPTIONS??"").replace(o," ").replace(a," ").trim();if(t.configuration.get("nodeLinker")!=="pnp"){e.NODE_OPTIONS=n;return}let u=S0(t),A=`--require ${s1e(ue.fromPortablePath(u.cjs))}`;oe.existsSync(u.esmLoader)&&(A=`${A} --experimental-loader ${(0,i1e.pathToFileURL)(ue.fromPortablePath(u.esmLoader)).href}`),oe.existsSync(u.cjs)&&(e.NODE_OPTIONS=n?`${A} ${n}`:A)}async function XIt(t,e){let r=S0(t);e(r.cjs),e(r.data),e(r.esmLoader),e(t.configuration.get("pnpUnpluggedFolder"))}var ZIt={hooks:{populateYarnPaths:XIt,setupScriptEnvironment:zIt},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: "pnp", "pnpm", or "node-modules"',type:"STRING",default:"pnp"},winLinkType:{description:"Whether Yarn should use Windows Junctions or symlinks when creating links on Windows.",type:"STRING",values:["junctions","symlinks"],default:"junctions"},pnpMode:{description:"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.",type:"STRING",default:"strict"},pnpShebang:{description:"String to prepend to the generated PnP script",type:"STRING",default:"#!/usr/bin/env node"},pnpIgnorePatterns:{description:"Array of glob patterns; files matching them will use the classic resolution",type:"STRING",default:[],isArray:!0},pnpEnableEsmLoader:{description:"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.",type:"BOOLEAN",default:!1},pnpEnableInlining:{description:"If true, the PnP data will be inlined along with the generated loader",type:"BOOLEAN",default:!0},pnpFallbackMode:{description:"If true, the generated PnP loader will follow the top-level fallback rule",type:"STRING",default:"dependencies-only"},pnpUnpluggedFolder:{description:"Folder where the unplugged packages must be stored",type:"ABSOLUTE_PATH",default:"./.yarn/unplugged"}},linkers:[P0],commands:[x0]},$It=ZIt;var p1e=$e(u1e());qt();var gq=$e(Be("crypto")),h1e=$e(Be("fs")),g1e=1,Pi="node_modules",DQ=".bin",d1e=".yarn-state.yml",d1t=1e3,dq=(o=>(o.CLASSIC="classic",o.HARDLINKS_LOCAL="hardlinks-local",o.HARDLINKS_GLOBAL="hardlinks-global",o))(dq||{}),lv=class{constructor(){this.installStateCache=new Map}getCustomDataKey(){return JSON.stringify({name:"NodeModulesLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the node-modules linker to be enabled");let o=r.project.tryWorkspaceByLocator(e);if(o)return o.cwd;let a=await je.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await hq(r.project,{unrollAliases:!0}));if(a===null)throw new it("Couldn't find the node_modules state file - running an install might help (findPackageLocation)");let n=a.locatorMap.get(W.stringifyLocator(e));if(!n){let p=new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw p.code="LOCATOR_NOT_INSTALLED",p}let u=n.locations.sort((p,h)=>p.split(K.sep).length-h.split(K.sep).length),A=K.join(r.project.configuration.startingCwd,Pi);return u.find(p=>K.contains(A,p))||n.locations[0]}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=await je.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await hq(r.project,{unrollAliases:!0}));if(o===null)return null;let{locationRoot:a,segments:n}=PQ(K.resolve(e),{skipPrefix:r.project.cwd}),u=o.locationTree.get(a);if(!u)return null;let A=u.locator;for(let p of n){if(u=u.children.get(p),!u)break;A=u.locator||A}return W.parseLocator(A)}makeInstaller(e){return new pq(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="node-modules"}},pq=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}attachCustomData(e){this.customData=e}async installPackage(e,r){let o=K.resolve(r.packageFs.getRealPath(),r.prefixPath),a=this.customData.store.get(e.locatorHash);if(typeof a>"u"&&(a=await m1t(e,r),e.linkType==="HARD"&&this.customData.store.set(e.locatorHash,a)),!W.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildRequest:null};let n=new Map,u=new Set;n.has(W.stringifyIdent(e))||n.set(W.stringifyIdent(e),e.reference);let A=e;if(W.isVirtualLocator(e)){A=W.devirtualizeLocator(e);for(let E of e.peerDependencies.values())n.set(W.stringifyIdent(E),null),u.add(W.stringifyIdent(E))}let p={packageLocation:`${ue.fromPortablePath(o)}/`,packageDependencies:n,packagePeers:u,linkType:e.linkType,discardFromLookup:r.discardFromLookup??!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:a,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:p});let h=r.checksum?r.checksum.substring(r.checksum.indexOf("/")+1):null;return this.realLocatorChecksums.set(A.locatorHash,h),{packageLocation:o,buildRequest:null}}async attachInternalDependencies(e,r){let o=this.localStore.get(e.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected information object to have been registered");for(let[a,n]of r){let u=W.areIdentsEqual(a,n)?n.reference:[W.stringifyIdent(n),n.reference];o.pnpNode.packageDependencies.set(W.stringifyIdent(a),u)}}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the node-modules linker")}async finalizeInstall(){if(this.opts.project.configuration.get("nodeLinker")!=="node-modules")return;let e=new mi({baseFs:new Jl({maxOpenFiles:80,readOnlyArchives:!0})}),r=await hq(this.opts.project),o=this.opts.project.configuration.get("nmMode");(r===null||o!==r.nmMode)&&(this.opts.project.storedBuildState.clear(),r={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:o,mtimeMs:0});let a=new Map(this.opts.project.workspaces.map(v=>{let b=this.opts.project.configuration.get("nmHoistingLimits");try{b=je.validateEnum(KB,v.manifest.installConfig?.hoistingLimits??b)}catch{let T=W.prettyWorkspace(this.opts.project.configuration,v);this.opts.report.reportWarning(57,`${T}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(KB).join(", ")}, using default: "${b}"`)}return[v.relativeCwd,b]})),n=new Map(this.opts.project.workspaces.map(v=>{let b=this.opts.project.configuration.get("nmSelfReferences");return b=v.manifest.installConfig?.selfReferences??b,[v.relativeCwd,b]})),u={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(v,b)=>Array.isArray(b)?{name:b[0],reference:b[1]}:{name:v,reference:b},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(v=>{let b=v.anchoredLocator;return{name:W.stringifyIdent(b),reference:b.reference}}),getPackageInformation:v=>{let b=v.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:W.makeLocator(W.parseIdent(v.name),v.reference),C=this.localStore.get(b.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the package reference to have been registered");return C.pnpNode},findPackageLocator:v=>{let b=this.opts.project.tryWorkspaceByCwd(ue.toPortablePath(v));if(b!==null){let C=b.anchoredLocator;return{name:W.stringifyIdent(C),reference:C.reference}}throw new Error("Assertion failed: Unimplemented")},resolveToUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveRequest:()=>{throw new Error("Assertion failed: Unimplemented")},resolveVirtual:v=>ue.fromPortablePath(mi.resolveVirtual(ue.toPortablePath(v)))},{tree:A,errors:p,preserveSymlinksRequired:h}=JB(u,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:a,project:this.opts.project,selfReferencesByCwd:n});if(!A){for(let{messageName:v,text:b}of p)this.opts.report.reportError(v,b);return}let E=qj(A);await B1t(r,E,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async v=>{let b=W.parseLocator(v),C=this.localStore.get(b.locatorHash);if(typeof C>"u")throw new Error("Assertion failed: Expected the slot to exist");return C.customPackageData.manifest}});let I=[];for(let[v,b]of E.entries()){if(C1e(v))continue;let C=W.parseLocator(v),T=this.localStore.get(C.locatorHash);if(typeof T>"u")throw new Error("Assertion failed: Expected the slot to exist");if(this.opts.project.tryWorkspaceByLocator(T.pkg))continue;let L=mA.extractBuildRequest(T.pkg,T.customPackageData,T.dependencyMeta,{configuration:this.opts.project.configuration});!L||I.push({buildLocations:b.locations,locator:C,buildRequest:L})}return h&&this.opts.report.reportWarning(72,`The application uses portals and that's why ${de.pretty(this.opts.project.configuration,"--preserve-symlinks",de.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:I}}};async function m1t(t,e){let r=await Mt.tryFind(e.prefixPath,{baseFs:e.packageFs})??new Mt,o=new Set(["preinstall","install","postinstall"]);for(let a of r.scripts.keys())o.has(a)||r.scripts.delete(a);return{manifest:{bin:r.bin,scripts:r.scripts},misc:{hasBindingGyp:mA.hasBindingGyp(e)}}}async function y1t(t,e,r,o,{installChangedByUser:a}){let n="";n+=`# Warning: This file is automatically generated. Removing it is fine, but will +`,n+=`# cause your node_modules installation to become invalidated. +`,n+=` +`,n+=`__metadata: +`,n+=` version: ${g1e} +`,n+=` nmMode: ${o.value} +`;let u=Array.from(e.keys()).sort(),A=W.stringifyLocator(t.topLevelWorkspace.anchoredLocator);for(let E of u){let I=e.get(E);n+=` +`,n+=`${JSON.stringify(E)}: +`,n+=` locations: +`;for(let v of I.locations){let b=K.contains(t.cwd,v);if(b===null)throw new Error(`Assertion failed: Expected the path to be within the project (${v})`);n+=` - ${JSON.stringify(b)} +`}if(I.aliases.length>0){n+=` aliases: +`;for(let v of I.aliases)n+=` - ${JSON.stringify(v)} +`}if(E===A&&r.size>0){n+=` bin: +`;for(let[v,b]of r){let C=K.contains(t.cwd,v);if(C===null)throw new Error(`Assertion failed: Expected the path to be within the project (${v})`);n+=` ${JSON.stringify(C)}: +`;for(let[T,L]of b){let U=K.relative(K.join(v,Pi),L);n+=` ${JSON.stringify(T)}: ${JSON.stringify(U)} +`}}}}let p=t.cwd,h=K.join(p,Pi,d1e);a&&await oe.removePromise(h),await oe.changeFilePromise(h,n,{automaticNewlines:!0})}async function hq(t,{unrollAliases:e=!1}={}){let r=t.cwd,o=K.join(r,Pi,d1e),a;try{a=await oe.statPromise(o)}catch{}if(!a)return null;let n=Vi(await oe.readFilePromise(o,"utf8"));if(n.__metadata.version>g1e)return null;let u=n.__metadata.nmMode||"classic",A=new Map,p=new Map;delete n.__metadata;for(let[h,E]of Object.entries(n)){let I=E.locations.map(b=>K.join(r,b)),v=E.bin;if(v)for(let[b,C]of Object.entries(v)){let T=K.join(r,ue.toPortablePath(b)),L=je.getMapWithDefault(p,T);for(let[U,J]of Object.entries(C))L.set(U,ue.toPortablePath([T,Pi,J].join(K.sep)))}if(A.set(h,{target:Bt.dot,linkType:"HARD",locations:I,aliases:E.aliases||[]}),e&&E.aliases)for(let b of E.aliases){let{scope:C,name:T}=W.parseLocator(h),L=W.makeLocator(W.makeIdent(C,T),b),U=W.stringifyLocator(L);A.set(U,{target:Bt.dot,linkType:"HARD",locations:I,aliases:[]})}}return{locatorMap:A,binSymlinks:p,locationTree:m1e(A,{skipPrefix:t.cwd}),nmMode:u,mtimeMs:a.mtimeMs}}var YC=async(t,e)=>{if(t.split(K.sep).indexOf(Pi)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${t}`);try{if(!e.innerLoop){let o=e.allowSymlink?await oe.statPromise(t):await oe.lstatPromise(t);if(e.allowSymlink&&!o.isDirectory()||!e.allowSymlink&&o.isSymbolicLink()){await oe.unlinkPromise(t);return}}let r=await oe.readdirPromise(t,{withFileTypes:!0});for(let o of r){let a=K.join(t,o.name);o.isDirectory()?(o.name!==Pi||e&&e.innerLoop)&&await YC(a,{innerLoop:!0,contentsOnly:!1}):await oe.unlinkPromise(a)}e.contentsOnly||await oe.rmdirPromise(t)}catch(r){if(r.code!=="ENOENT"&&r.code!=="ENOTEMPTY")throw r}},A1e=4,PQ=(t,{skipPrefix:e})=>{let r=K.contains(e,t);if(r===null)throw new Error(`Assertion failed: Writing attempt prevented to ${t} which is outside project root: ${e}`);let o=r.split(K.sep).filter(p=>p!==""),a=o.indexOf(Pi),n=o.slice(0,a).join(K.sep),u=K.join(e,n),A=o.slice(a);return{locationRoot:u,segments:A}},m1e=(t,{skipPrefix:e})=>{let r=new Map;if(t===null)return r;let o=()=>({children:new Map,linkType:"HARD"});for(let[a,n]of t.entries()){if(n.linkType==="SOFT"&&K.contains(e,n.target)!==null){let A=je.getFactoryWithDefault(r,n.target,o);A.locator=a,A.linkType=n.linkType}for(let u of n.locations){let{locationRoot:A,segments:p}=PQ(u,{skipPrefix:e}),h=je.getFactoryWithDefault(r,A,o);for(let E=0;E{if(process.platform==="win32"&&r==="junctions"){let o;try{o=await oe.lstatPromise(t)}catch{}if(!o||o.isDirectory()){await oe.symlinkPromise(t,e,"junction");return}}await oe.symlinkPromise(K.relative(K.dirname(e),t),e)};async function y1e(t,e,r){let o=K.join(t,`${gq.default.randomBytes(16).toString("hex")}.tmp`);try{await oe.writeFilePromise(o,r);try{await oe.linkPromise(o,e)}catch{}}finally{await oe.unlinkPromise(o)}}async function E1t({srcPath:t,dstPath:e,entry:r,globalHardlinksStore:o,baseFs:a,nmMode:n}){if(r.kind===E1e.FILE){if(n.value==="hardlinks-global"&&o&&r.digest){let A=K.join(o,r.digest.substring(0,2),`${r.digest.substring(2)}.dat`),p;try{let h=await oe.statPromise(A);if(h&&(!r.mtimeMs||h.mtimeMs>r.mtimeMs||h.mtimeMs(o.FILE="file",o.DIRECTORY="directory",o.SYMLINK="symlink",o))(E1e||{}),C1t=async(t,e,{baseFs:r,globalHardlinksStore:o,nmMode:a,windowsLinkType:n,packageChecksum:u})=>{await oe.mkdirPromise(t,{recursive:!0});let A=async(E=Bt.dot)=>{let I=K.join(e,E),v=await r.readdirPromise(I,{withFileTypes:!0}),b=new Map;for(let C of v){let T=K.join(E,C.name),L,U=K.join(I,C.name);if(C.isFile()){if(L={kind:"file",mode:(await r.lstatPromise(U)).mode},a.value==="hardlinks-global"){let J=await wn.checksumFile(U,{baseFs:r,algorithm:"sha1"});L.digest=J}}else if(C.isDirectory())L={kind:"directory"};else if(C.isSymbolicLink())L={kind:"symlink",symlinkTo:await r.readlinkPromise(U)};else throw new Error(`Unsupported file type (file: ${U}, mode: 0o${await r.statSync(U).mode.toString(8).padStart(6,"0")})`);if(b.set(T,L),C.isDirectory()&&T!==Pi){let J=await A(T);for(let[te,le]of J)b.set(te,le)}}return b},p;if(a.value==="hardlinks-global"&&o&&u){let E=K.join(o,u.substring(0,2),`${u.substring(2)}.json`);try{p=new Map(Object.entries(JSON.parse(await oe.readFilePromise(E,"utf8"))))}catch{p=await A()}}else p=await A();let h=!1;for(let[E,I]of p){let v=K.join(e,E),b=K.join(t,E);if(I.kind==="directory")await oe.mkdirPromise(b,{recursive:!0});else if(I.kind==="file"){let C=I.mtimeMs;await E1t({srcPath:v,dstPath:b,entry:I,nmMode:a,baseFs:r,globalHardlinksStore:o}),I.mtimeMs!==C&&(h=!0)}else I.kind==="symlink"&&await mq(K.resolve(K.dirname(b),I.symlinkTo),b,n)}if(a.value==="hardlinks-global"&&o&&h&&u){let E=K.join(o,u.substring(0,2),`${u.substring(2)}.json`);await oe.removePromise(E),await y1e(o,E,Buffer.from(JSON.stringify(Object.fromEntries(p))))}};function w1t(t,e,r,o){let a=new Map,n=new Map,u=new Map,A=!1,p=(h,E,I,v,b)=>{let C=!0,T=K.join(h,E),L=new Set;if(E===Pi||E.startsWith("@")){let J;try{J=oe.statSync(T)}catch{}C=!!J,J?J.mtimeMs>r?(A=!0,L=new Set(oe.readdirSync(T))):L=new Set(I.children.get(E).children.keys()):A=!0;let te=e.get(h);if(te){let le=K.join(h,Pi,DQ),pe;try{pe=oe.statSync(le)}catch{}if(!pe)A=!0;else if(pe.mtimeMs>r){A=!0;let Ae=new Set(oe.readdirSync(le)),ye=new Map;n.set(h,ye);for(let[ae,we]of te)Ae.has(ae)&&ye.set(ae,we)}else n.set(h,te)}}else C=b.has(E);let U=I.children.get(E);if(C){let{linkType:J,locator:te}=U,le={children:new Map,linkType:J,locator:te};if(v.children.set(E,le),te){let pe=je.getSetWithDefault(u,te);pe.add(T),u.set(te,pe)}for(let pe of U.children.keys())p(T,pe,U,le,L)}else U.locator&&o.storedBuildState.delete(W.parseLocator(U.locator).locatorHash)};for(let[h,E]of t){let{linkType:I,locator:v}=E,b={children:new Map,linkType:I,locator:v};if(a.set(h,b),v){let C=je.getSetWithDefault(u,E.locator);C.add(h),u.set(E.locator,C)}E.children.has(Pi)&&p(h,Pi,E,b,new Set)}return{locationTree:a,binSymlinks:n,locatorLocations:u,installChangedByUser:A}}function C1e(t){let e=W.parseDescriptor(t);return W.isVirtualDescriptor(e)&&(e=W.devirtualizeDescriptor(e)),e.range.startsWith("link:")}async function I1t(t,e,r,{loadManifest:o}){let a=new Map;for(let[A,{locations:p}]of t){let h=C1e(A)?null:await o(A,p[0]),E=new Map;if(h)for(let[I,v]of h.bin){let b=K.join(p[0],v);v!==""&&oe.existsSync(b)&&E.set(I,v)}a.set(A,E)}let n=new Map,u=(A,p,h)=>{let E=new Map,I=K.contains(r,A);if(h.locator&&I!==null){let v=a.get(h.locator);for(let[b,C]of v){let T=K.join(A,ue.toPortablePath(C));E.set(b,T)}for(let[b,C]of h.children){let T=K.join(A,b),L=u(T,T,C);L.size>0&&n.set(A,new Map([...n.get(A)||new Map,...L]))}}else for(let[v,b]of h.children){let C=u(K.join(A,v),p,b);for(let[T,L]of C)E.set(T,L)}return E};for(let[A,p]of e){let h=u(A,A,p);h.size>0&&n.set(A,new Map([...n.get(A)||new Map,...h]))}return n}var f1e=(t,e)=>{if(!t||!e)return t===e;let r=W.parseLocator(t);W.isVirtualLocator(r)&&(r=W.devirtualizeLocator(r));let o=W.parseLocator(e);return W.isVirtualLocator(o)&&(o=W.devirtualizeLocator(o)),W.areLocatorsEqual(r,o)};function yq(t){return K.join(t.get("globalFolder"),"store")}async function B1t(t,e,{baseFs:r,project:o,report:a,loadManifest:n,realLocatorChecksums:u}){let A=K.join(o.cwd,Pi),{locationTree:p,binSymlinks:h,locatorLocations:E,installChangedByUser:I}=w1t(t.locationTree,t.binSymlinks,t.mtimeMs,o),v=m1e(e,{skipPrefix:o.cwd}),b=[],C=async({srcDir:we,dstDir:Pe,linkType:g,globalHardlinksStore:Ee,nmMode:De,windowsLinkType:ce,packageChecksum:ne})=>{let ee=(async()=>{try{g==="SOFT"?(await oe.mkdirPromise(K.dirname(Pe),{recursive:!0}),await mq(K.resolve(we),Pe,ce)):await C1t(Pe,we,{baseFs:r,globalHardlinksStore:Ee,nmMode:De,windowsLinkType:ce,packageChecksum:ne})}catch(Ie){throw Ie.message=`While persisting ${we} -> ${Pe} ${Ie.message}`,Ie}finally{le.tick()}})().then(()=>b.splice(b.indexOf(ee),1));b.push(ee),b.length>A1e&&await Promise.race(b)},T=async(we,Pe,g)=>{let Ee=(async()=>{let De=async(ce,ne,ee)=>{try{ee.innerLoop||await oe.mkdirPromise(ne,{recursive:!0});let Ie=await oe.readdirPromise(ce,{withFileTypes:!0});for(let ke of Ie){if(!ee.innerLoop&&ke.name===DQ)continue;let ht=K.join(ce,ke.name),H=K.join(ne,ke.name);ke.isDirectory()?(ke.name!==Pi||ee&&ee.innerLoop)&&(await oe.mkdirPromise(H,{recursive:!0}),await De(ht,H,{...ee,innerLoop:!0})):ye.value==="hardlinks-local"||ye.value==="hardlinks-global"?await oe.linkPromise(ht,H):await oe.copyFilePromise(ht,H,h1e.default.constants.COPYFILE_FICLONE)}}catch(Ie){throw ee.innerLoop||(Ie.message=`While cloning ${ce} -> ${ne} ${Ie.message}`),Ie}finally{ee.innerLoop||le.tick()}};await De(we,Pe,g)})().then(()=>b.splice(b.indexOf(Ee),1));b.push(Ee),b.length>A1e&&await Promise.race(b)},L=async(we,Pe,g)=>{if(g)for(let[Ee,De]of Pe.children){let ce=g.children.get(Ee);await L(K.join(we,Ee),De,ce)}else{Pe.children.has(Pi)&&await YC(K.join(we,Pi),{contentsOnly:!1});let Ee=K.basename(we)===Pi&&v.has(K.join(K.dirname(we),K.sep));await YC(we,{contentsOnly:we===A,allowSymlink:Ee})}};for(let[we,Pe]of p){let g=v.get(we);for(let[Ee,De]of Pe.children){if(Ee===".")continue;let ce=g&&g.children.get(Ee),ne=K.join(we,Ee);await L(ne,De,ce)}}let U=async(we,Pe,g)=>{if(g){f1e(Pe.locator,g.locator)||await YC(we,{contentsOnly:Pe.linkType==="HARD"});for(let[Ee,De]of Pe.children){let ce=g.children.get(Ee);await U(K.join(we,Ee),De,ce)}}else{Pe.children.has(Pi)&&await YC(K.join(we,Pi),{contentsOnly:!0});let Ee=K.basename(we)===Pi&&v.has(K.join(K.dirname(we),K.sep));await YC(we,{contentsOnly:Pe.linkType==="HARD",allowSymlink:Ee})}};for(let[we,Pe]of v){let g=p.get(we);for(let[Ee,De]of Pe.children){if(Ee===".")continue;let ce=g&&g.children.get(Ee);await U(K.join(we,Ee),De,ce)}}let J=new Map,te=[];for(let[we,Pe]of E)for(let g of Pe){let{locationRoot:Ee,segments:De}=PQ(g,{skipPrefix:o.cwd}),ce=v.get(Ee),ne=Ee;if(ce){for(let ee of De)if(ne=K.join(ne,ee),ce=ce.children.get(ee),!ce)break;if(ce){let ee=f1e(ce.locator,we),Ie=e.get(ce.locator),ke=Ie.target,ht=ne,H=Ie.linkType;if(ee)J.has(ke)||J.set(ke,ht);else if(ke!==ht){let lt=W.parseLocator(ce.locator);W.isVirtualLocator(lt)&&(lt=W.devirtualizeLocator(lt)),te.push({srcDir:ke,dstDir:ht,linkType:H,realLocatorHash:lt.locatorHash})}}}}for(let[we,{locations:Pe}]of e.entries())for(let g of Pe){let{locationRoot:Ee,segments:De}=PQ(g,{skipPrefix:o.cwd}),ce=p.get(Ee),ne=v.get(Ee),ee=Ee,Ie=e.get(we),ke=W.parseLocator(we);W.isVirtualLocator(ke)&&(ke=W.devirtualizeLocator(ke));let ht=ke.locatorHash,H=Ie.target,lt=g;if(H===lt)continue;let Re=Ie.linkType;for(let Qe of De)ne=ne.children.get(Qe);if(!ce)te.push({srcDir:H,dstDir:lt,linkType:Re,realLocatorHash:ht});else for(let Qe of De)if(ee=K.join(ee,Qe),ce=ce.children.get(Qe),!ce){te.push({srcDir:H,dstDir:lt,linkType:Re,realLocatorHash:ht});break}}let le=Xs.progressViaCounter(te.length),pe=a.reportProgress(le),Ae=o.configuration.get("nmMode"),ye={value:Ae},ae=o.configuration.get("winLinkType");try{let we=ye.value==="hardlinks-global"?`${yq(o.configuration)}/v1`:null;if(we&&!await oe.existsPromise(we)){await oe.mkdirpPromise(we);for(let g=0;g<256;g++)await oe.mkdirPromise(K.join(we,g.toString(16).padStart(2,"0")))}for(let g of te)(g.linkType==="SOFT"||!J.has(g.srcDir))&&(J.set(g.srcDir,g.dstDir),await C({...g,globalHardlinksStore:we,nmMode:ye,windowsLinkType:ae,packageChecksum:u.get(g.realLocatorHash)||null}));await Promise.all(b),b.length=0;for(let g of te){let Ee=J.get(g.srcDir);g.linkType!=="SOFT"&&g.dstDir!==Ee&&await T(Ee,g.dstDir,{nmMode:ye})}await Promise.all(b),await oe.mkdirPromise(A,{recursive:!0});let Pe=await I1t(e,v,o.cwd,{loadManifest:n});await v1t(h,Pe,o.cwd,ae),await y1t(o,e,Pe,ye,{installChangedByUser:I}),Ae=="hardlinks-global"&&ye.value=="hardlinks-local"&&a.reportWarningOnce(74,"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices")}finally{pe.stop()}}async function v1t(t,e,r,o){for(let a of t.keys()){if(K.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);if(!e.has(a)){let n=K.join(a,Pi,DQ);await oe.removePromise(n)}}for(let[a,n]of e){if(K.contains(r,a)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${a}`);let u=K.join(a,Pi,DQ),A=t.get(a)||new Map;await oe.mkdirPromise(u,{recursive:!0});for(let p of A.keys())n.has(p)||(await oe.removePromise(K.join(u,p)),process.platform==="win32"&&await oe.removePromise(K.join(u,`${p}.cmd`)));for(let[p,h]of n){let E=A.get(p),I=K.join(u,p);E!==h&&(process.platform==="win32"?await(0,p1e.default)(ue.fromPortablePath(h),ue.fromPortablePath(I),{createPwshFile:!1}):(await oe.removePromise(I),await mq(h,I,o),K.contains(r,await oe.realpathPromise(h))!==null&&await oe.chmodPromise(h,493)))}}}Ye();Pt();nA();var cv=class extends P0{constructor(){super(...arguments);this.mode="loose"}makeInstaller(r){return new Eq(r)}},Eq=class extends dm{constructor(){super(...arguments);this.mode="loose"}async transformPnpSettings(r){let o=new mi({baseFs:new Jl({maxOpenFiles:80,readOnlyArchives:!0})}),a=$Ie(r,this.opts.project.cwd,o),{tree:n,errors:u}=JB(a,{pnpifyFs:!1,project:this.opts.project});if(!n){for(let{messageName:I,text:v}of u)this.opts.report.reportError(I,v);return}let A=new Map;r.fallbackPool=A;let p=(I,v)=>{let b=W.parseLocator(v.locator),C=W.stringifyIdent(b);C===I?A.set(I,b.reference):A.set(I,[C,b.reference])},h=K.join(this.opts.project.cwd,dr.nodeModules),E=n.get(h);if(!(typeof E>"u")){if("target"in E)throw new Error("Assertion failed: Expected the root junction point to be a directory");for(let I of E.dirList){let v=K.join(h,I),b=n.get(v);if(typeof b>"u")throw new Error("Assertion failed: Expected the child to have been registered");if("target"in b)p(I,b);else for(let C of b.dirList){let T=K.join(v,C),L=n.get(T);if(typeof L>"u")throw new Error("Assertion failed: Expected the subchild to have been registered");if("target"in L)p(`${I}/${C}`,L);else throw new Error("Assertion failed: Expected the leaf junction to be a package")}}}}};var D1t={hooks:{cleanGlobalArtifacts:async t=>{let e=yq(t);await oe.removePromise(e)}},configuration:{nmHoistingLimits:{description:"Prevents packages to be hoisted past specific levels",type:"STRING",values:["workspaces","dependencies","none"],default:"none"},nmMode:{description:"Defines in which measure Yarn must use hardlinks and symlinks when generated `node_modules` directories.",type:"STRING",values:["classic","hardlinks-local","hardlinks-global"],default:"classic"},nmSelfReferences:{description:"Defines whether the linker should generate self-referencing symlinks for workspaces.",type:"BOOLEAN",default:!0}},linkers:[lv,cv]},P1t=D1t;var EG={};Kt(EG,{NpmHttpFetcher:()=>fv,NpmRemapResolver:()=>pv,NpmSemverFetcher:()=>dl,NpmSemverResolver:()=>hv,NpmTagResolver:()=>gv,default:()=>Ovt,npmConfigUtils:()=>Zn,npmHttpUtils:()=>on,npmPublishUtils:()=>sw});Ye();var x1e=$e(zn());var Wn="npm:";var on={};Kt(on,{AuthType:()=>P1e,customPackageError:()=>mm,del:()=>N1t,get:()=>ym,getIdentUrl:()=>SQ,getPackageMetadata:()=>KC,handleInvalidAuthenticationError:()=>b0,post:()=>T1t,put:()=>R1t});Ye();Ye();Pt();var Bq=$e(A2()),v1e=$e(S_()),D1e=$e(zn()),vq=Be("url");var Zn={};Kt(Zn,{RegistryType:()=>w1e,getAuditRegistry:()=>S1t,getAuthConfiguration:()=>Iq,getDefaultRegistry:()=>uv,getPublishRegistry:()=>x1t,getRegistryConfiguration:()=>I1e,getScopeConfiguration:()=>wq,getScopeRegistry:()=>WC,normalizeRegistry:()=>oc});var w1e=(o=>(o.AUDIT_REGISTRY="npmAuditRegistry",o.FETCH_REGISTRY="npmRegistryServer",o.PUBLISH_REGISTRY="npmPublishRegistry",o))(w1e||{});function oc(t){return t.replace(/\/$/,"")}function S1t({configuration:t}){return uv({configuration:t,type:"npmAuditRegistry"})}function x1t(t,{configuration:e}){return t.publishConfig?.registry?oc(t.publishConfig.registry):t.name?WC(t.name.scope,{configuration:e,type:"npmPublishRegistry"}):uv({configuration:e,type:"npmPublishRegistry"})}function WC(t,{configuration:e,type:r="npmRegistryServer"}){let o=wq(t,{configuration:e});if(o===null)return uv({configuration:e,type:r});let a=o.get(r);return a===null?uv({configuration:e,type:r}):oc(a)}function uv({configuration:t,type:e="npmRegistryServer"}){let r=t.get(e);return oc(r!==null?r:t.get("npmRegistryServer"))}function I1e(t,{configuration:e}){let r=e.get("npmRegistries"),o=oc(t),a=r.get(o);if(typeof a<"u")return a;let n=r.get(o.replace(/^[a-z]+:/,""));return typeof n<"u"?n:null}function wq(t,{configuration:e}){if(t===null)return null;let o=e.get("npmScopes").get(t);return o||null}function Iq(t,{configuration:e,ident:r}){let o=r&&wq(r.scope,{configuration:e});return o?.get("npmAuthIdent")||o?.get("npmAuthToken")?o:I1e(t,{configuration:e})||e}var P1e=(a=>(a[a.NO_AUTH=0]="NO_AUTH",a[a.BEST_EFFORT=1]="BEST_EFFORT",a[a.CONFIGURATION=2]="CONFIGURATION",a[a.ALWAYS_AUTH=3]="ALWAYS_AUTH",a))(P1e||{});async function b0(t,{attemptedAs:e,registry:r,headers:o,configuration:a}){if(bQ(t))throw new zt(41,"Invalid OTP token");if(t.originalError?.name==="HTTPError"&&t.originalError?.response.statusCode===401)throw new zt(41,`Invalid authentication (${typeof e!="string"?`as ${await M1t(r,o,{configuration:a})}`:`attempted as ${e}`})`)}function mm(t,e){let r=t.response?.statusCode;return r?r===404?"Package not found":r>=500&&r<600?`The registry appears to be down (using a ${de.applyHyperlink(e,"local cache","https://yarnpkg.com/advanced/lexicon#local-cache")} might have protected you against such outages)`:null:null}function SQ(t){return t.scope?`/@${t.scope}%2f${t.name}`:`/${t.name}`}var B1e=new Map;async function KC(t,{cache:e,project:r,registry:o,headers:a,version:n,...u}){return await je.getFactoryWithDefault(B1e,t.identHash,async()=>{let{configuration:A}=r;o=Av(A,{ident:t,registry:o});let p=Q1t(A,o),h=K.join(p,`${W.slugifyIdent(t)}.json`),E=null;if(!r.lockfileNeedsRefresh){try{E=await oe.readJsonPromise(h)}catch{}if(E){if(typeof n<"u"&&typeof E.metadata.versions[n]<"u")return E.metadata;if(A.get("enableOfflineMode")){let I=structuredClone(E.metadata),v=new Set;if(e){for(let C of Object.keys(I.versions)){let T=W.makeLocator(t,`npm:${C}`),L=e.getLocatorMirrorPath(T);(!L||!oe.existsSync(L))&&(delete I.versions[C],v.add(C))}let b=I["dist-tags"].latest;if(v.has(b)){let C=Object.keys(E.metadata.versions).sort(D1e.default.compare),T=C.indexOf(b);for(;v.has(C[T])&&T>=0;)T-=1;T>=0?I["dist-tags"].latest=C[T]:delete I["dist-tags"].latest}}return I}}}return await ym(SQ(t),{...u,customErrorMessage:mm,configuration:A,registry:o,ident:t,headers:{...a,["If-None-Match"]:E?.etag,["If-Modified-Since"]:E?.lastModified},wrapNetworkRequest:async I=>async()=>{let v=await I();if(v.statusCode===304){if(E===null)throw new Error("Assertion failed: cachedMetadata should not be null");return{...v,body:E.metadata}}let b=b1t(JSON.parse(v.body.toString()));B1e.set(t.identHash,b);let C={metadata:b,etag:v.headers.etag,lastModified:v.headers["last-modified"]},T=`${h}-${process.pid}.tmp`;return await oe.mkdirPromise(p,{recursive:!0}),await oe.writeJsonPromise(T,C,{compact:!0}),await oe.renamePromise(T,h),{...v,body:b}}})})}var S1e=["name","dist.tarball","bin","scripts","os","cpu","libc","dependencies","dependenciesMeta","optionalDependencies","peerDependencies","peerDependenciesMeta","deprecated"];function b1t(t){return{"dist-tags":t["dist-tags"],versions:Object.fromEntries(Object.entries(t.versions).map(([e,r])=>[e,(0,v1e.default)(r,S1e)]))}}var k1t=wn.makeHash(...S1e).slice(0,6);function Q1t(t,e){let r=F1t(t),o=new vq.URL(e);return K.join(r,k1t,o.hostname)}function F1t(t){return K.join(t.get("globalFolder"),"metadata/npm")}async function ym(t,{configuration:e,headers:r,ident:o,authType:a,registry:n,...u}){n=Av(e,{ident:o,registry:n}),o&&o.scope&&typeof a>"u"&&(a=1);let A=await xQ(n,{authType:a,configuration:e,ident:o});A&&(r={...r,authorization:A});try{return await rn.get(t.charAt(0)==="/"?`${n}${t}`:t,{configuration:e,headers:r,...u})}catch(p){throw await b0(p,{registry:n,configuration:e,headers:r}),p}}async function T1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=Av(o,{ident:n,registry:A});let E=await xQ(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...VC(p)});try{return await rn.post(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!bQ(I)||p)throw await b0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await Dq(I,{configuration:o});let v={...a,...VC(p)};try{return await rn.post(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(b){throw await b0(b,{attemptedAs:r,registry:A,configuration:o,headers:a}),b}}}async function R1t(t,e,{attemptedAs:r,configuration:o,headers:a,ident:n,authType:u=3,registry:A,otp:p,...h}){A=Av(o,{ident:n,registry:A});let E=await xQ(A,{authType:u,configuration:o,ident:n});E&&(a={...a,authorization:E}),p&&(a={...a,...VC(p)});try{return await rn.put(A+t,e,{configuration:o,headers:a,...h})}catch(I){if(!bQ(I))throw await b0(I,{attemptedAs:r,registry:A,configuration:o,headers:a}),I;p=await Dq(I,{configuration:o});let v={...a,...VC(p)};try{return await rn.put(`${A}${t}`,e,{configuration:o,headers:v,...h})}catch(b){throw await b0(b,{attemptedAs:r,registry:A,configuration:o,headers:a}),b}}}async function N1t(t,{attemptedAs:e,configuration:r,headers:o,ident:a,authType:n=3,registry:u,otp:A,...p}){u=Av(r,{ident:a,registry:u});let h=await xQ(u,{authType:n,configuration:r,ident:a});h&&(o={...o,authorization:h}),A&&(o={...o,...VC(A)});try{return await rn.del(u+t,{configuration:r,headers:o,...p})}catch(E){if(!bQ(E)||A)throw await b0(E,{attemptedAs:e,registry:u,configuration:r,headers:o}),E;A=await Dq(E,{configuration:r});let I={...o,...VC(A)};try{return await rn.del(`${u}${t}`,{configuration:r,headers:I,...p})}catch(v){throw await b0(v,{attemptedAs:e,registry:u,configuration:r,headers:o}),v}}}function Av(t,{ident:e,registry:r}){if(typeof r>"u"&&e)return WC(e.scope,{configuration:t});if(typeof r!="string")throw new Error("Assertion failed: The registry should be a string");return oc(r)}async function xQ(t,{authType:e=2,configuration:r,ident:o}){let a=Iq(t,{configuration:r,ident:o}),n=L1t(a,e);if(!n)return null;let u=await r.reduceHook(A=>A.getNpmAuthenticationHeader,void 0,t,{configuration:r,ident:o});if(u)return u;if(a.get("npmAuthToken"))return`Bearer ${a.get("npmAuthToken")}`;if(a.get("npmAuthIdent")){let A=a.get("npmAuthIdent");return A.includes(":")?`Basic ${Buffer.from(A).toString("base64")}`:`Basic ${A}`}if(n&&e!==1)throw new zt(33,"No authentication configured for request");return null}function L1t(t,e){switch(e){case 2:return t.get("npmAlwaysAuth");case 1:case 3:return!0;case 0:return!1;default:throw new Error("Unreachable")}}async function M1t(t,e,{configuration:r}){if(typeof e>"u"||typeof e.authorization>"u")return"an anonymous user";try{return(await rn.get(new vq.URL(`${t}/-/whoami`).href,{configuration:r,headers:e,jsonResponse:!0})).username??"an unknown user"}catch{return"an unknown user"}}async function Dq(t,{configuration:e}){let r=t.originalError?.response.headers["npm-notice"];if(r&&(await Nt.start({configuration:e,stdout:process.stdout,includeFooter:!1},async a=>{if(a.reportInfo(0,r.replace(/(https?:\/\/\S+)/g,de.pretty(e,"$1",de.Type.URL))),!process.env.YARN_IS_TEST_ENV){let n=r.match(/open (https?:\/\/\S+)/i);if(n&&Ji.openUrl){let{openNow:u}=await(0,Bq.prompt)({type:"confirm",name:"openNow",message:"Do you want to try to open this url now?",required:!0,initial:!0,onCancel:()=>process.exit(130)});u&&(await Ji.openUrl(n[1])||(a.reportSeparator(),a.reportWarning(0,"We failed to automatically open the url; you'll have to open it yourself in your browser of choice.")))}}}),process.stdout.write(` +`)),process.env.YARN_IS_TEST_ENV)return process.env.YARN_INJECT_NPM_2FA_TOKEN||"";let{otp:o}=await(0,Bq.prompt)({type:"password",name:"otp",message:"One-time password:",required:!0,onCancel:()=>process.exit(130)});return process.stdout.write(` +`),o}function bQ(t){if(t.originalError?.name!=="HTTPError")return!1;try{return(t.originalError?.response.headers["www-authenticate"].split(/,\s*/).map(r=>r.toLowerCase())).includes("otp")}catch{return!1}}function VC(t){return{["npm-otp"]:t}}var fv=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o,params:a}=W.parseRange(e.reference);return!(!x1e.default.valid(o)||a===null||typeof a.__archiveUrl!="string")}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let{params:o}=W.parseRange(e.reference);if(o===null||typeof o.__archiveUrl!="string")throw new Error("Assertion failed: The archiveUrl querystring parameter should have been available");let a=await ym(o.__archiveUrl,{customErrorMessage:mm,configuration:r.project.configuration,ident:e});return await Xi.convertToZip(a,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}};Ye();var pv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!W.tryParseDescriptor(e.range.slice(Wn.length),!0))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){let o=r.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return r.resolver.getResolutionDependencies(o,r)}async getCandidates(e,r,o){let a=o.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return await o.resolver.getCandidates(a,r,o)}async getSatisfying(e,r,o,a){let n=a.project.configuration.normalizeDependency(W.parseDescriptor(e.range.slice(Wn.length),!0));return a.resolver.getSatisfying(n,r,o,a)}resolve(e,r){throw new Error("Unreachable")}};Ye();Ye();var b1e=$e(zn()),k1e=Be("url");var dl=class{supports(e,r){if(!e.reference.startsWith(Wn))return!1;let o=new k1e.URL(e.reference);return!(!b1e.default.valid(o.pathname)||o.searchParams.has("__archiveUrl"))}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),checksum:u}}async fetchFromNetwork(e,r){let o;try{o=await ym(dl.getLocatorUrl(e),{customErrorMessage:mm,configuration:r.project.configuration,ident:e})}catch{o=await ym(dl.getLocatorUrl(e).replace(/%2f/g,"/"),{customErrorMessage:mm,configuration:r.project.configuration,ident:e})}return await Xi.convertToZip(o,{configuration:r.project.configuration,prefixPath:W.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,r,{configuration:o}){let a=WC(e.scope,{configuration:o}),n=dl.getLocatorUrl(e);return r=r.replace(/^https?:(\/\/(?:[^/]+\.)?npmjs.org(?:$|\/))/,"https:$1"),a=a.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r=r.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r===a+n||r===a+n.replace(/%2f/g,"/")}static getLocatorUrl(e){let r=kr.clean(e.reference.slice(Wn.length));if(r===null)throw new zt(10,"The npm semver resolver got selected, but the version isn't semver");return`${SQ(e)}/-/${e.name}-${r}.tgz`}};Ye();Ye();Ye();var Pq=$e(zn());var kQ=W.makeIdent(null,"node-gyp"),O1t=/\b(node-gyp|prebuild-install)\b/,hv=class{supportsDescriptor(e,r){return e.range.startsWith(Wn)?!!kr.validRange(e.range.slice(Wn.length)):!1}supportsLocator(e,r){if(!e.reference.startsWith(Wn))return!1;let{selector:o}=W.parseRange(e.reference);return!!Pq.default.valid(o)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=kr.validRange(e.range.slice(Wn.length));if(a===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);let n=await KC(e,{cache:o.fetchOptions?.cache,project:o.project,version:Pq.default.valid(a.raw)?a.raw:void 0}),u=je.mapAndFilter(Object.keys(n.versions),h=>{try{let E=new kr.SemVer(h);if(a.test(E))return E}catch{}return je.mapAndFilter.skip}),A=u.filter(h=>!n.versions[h.raw].deprecated),p=A.length>0?A:u;return p.sort((h,E)=>-h.compare(E)),p.map(h=>{let E=W.makeLocator(e,`${Wn}${h.raw}`),I=n.versions[h.raw].dist.tarball;return dl.isConventionalTarballUrl(E,I,{configuration:o.project.configuration})?E:W.bindLocator(E,{__archiveUrl:I})})}async getSatisfying(e,r,o,a){let n=kr.validRange(e.range.slice(Wn.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(Wn.length)}`);return{locators:je.mapAndFilter(o,p=>{if(p.identHash!==e.identHash)return je.mapAndFilter.skip;let h=W.tryParseRange(p.reference,{requireProtocol:Wn});if(!h)return je.mapAndFilter.skip;let E=new kr.SemVer(h.selector);return n.test(E)?{locator:p,version:E}:je.mapAndFilter.skip}).sort((p,h)=>-p.version.compare(h.version)).map(({locator:p})=>p),sorted:!0}}async resolve(e,r){let{selector:o}=W.parseRange(e.reference),a=kr.clean(o);if(a===null)throw new zt(10,"The npm semver resolver got selected, but the version isn't semver");let n=await KC(e,{cache:r.fetchOptions?.cache,project:r.project,version:a});if(!Object.hasOwn(n,"versions"))throw new zt(15,'Registry returned invalid data for - missing "versions" field');if(!Object.hasOwn(n.versions,a))throw new zt(16,`Registry failed to return reference "${a}"`);let u=new Mt;if(u.load(n.versions[a]),!u.dependencies.has(kQ.identHash)&&!u.peerDependencies.has(kQ.identHash)){for(let A of u.scripts.values())if(A.match(O1t)){u.dependencies.set(kQ.identHash,W.makeDescriptor(kQ,"latest"));break}}return{...e,version:a,languageName:"node",linkType:"HARD",conditions:u.getConditions(),dependencies:r.project.configuration.normalizeDependencyMap(u.dependencies),peerDependencies:u.peerDependencies,dependenciesMeta:u.dependenciesMeta,peerDependenciesMeta:u.peerDependenciesMeta,bin:u.bin}}};Ye();Ye();var Q1e=$e(zn());var gv=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Wn)||!QE.test(e.range.slice(Wn.length)))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,o){return e}getResolutionDependencies(e,r){return{}}async getCandidates(e,r,o){let a=e.range.slice(Wn.length),n=await KC(e,{cache:o.fetchOptions?.cache,project:o.project});if(!Object.hasOwn(n,"dist-tags"))throw new zt(15,'Registry returned invalid data - missing "dist-tags" field');let u=n["dist-tags"];if(!Object.hasOwn(u,a))throw new zt(16,`Registry failed to return tag "${a}"`);let A=u[a],p=W.makeLocator(e,`${Wn}${A}`),h=n.versions[A].dist.tarball;return dl.isConventionalTarballUrl(p,h,{configuration:o.project.configuration})?[p]:[W.bindLocator(p,{__archiveUrl:h})]}async getSatisfying(e,r,o,a){let n=[];for(let u of o){if(u.identHash!==e.identHash)continue;let A=W.tryParseRange(u.reference,{requireProtocol:Wn});if(!(!A||!Q1e.default.valid(A.selector))){if(A.params?.__archiveUrl){let p=W.makeRange({protocol:Wn,selector:A.selector,source:null,params:null}),[h]=await a.resolver.getCandidates(W.makeDescriptor(e,p),r,a);if(u.reference!==h.reference)continue}n.push(u)}}return{locators:n,sorted:!1}}async resolve(e,r){throw new Error("Unreachable")}};var sw={};Kt(sw,{getGitHead:()=>Lvt,getPublishAccess:()=>wBe,getReadmeContent:()=>IBe,makePublishBody:()=>Nvt});Ye();Ye();Pt();var hG={};Kt(hG,{PackCommand:()=>O0,default:()=>mvt,packUtils:()=>CA});Ye();Ye();Ye();Pt();qt();var CA={};Kt(CA,{genPackList:()=>$Q,genPackStream:()=>pG,genPackageManifest:()=>lBe,hasPackScripts:()=>AG,prepareForPack:()=>fG});Ye();Pt();var uG=$e(Zo()),oBe=$e(rBe()),aBe=Be("zlib"),ovt=["/package.json","/readme","/readme.*","/license","/license.*","/licence","/licence.*","/changelog","/changelog.*"],avt=["/package.tgz",".github",".git",".hg","node_modules",".npmignore",".gitignore",".#*",".DS_Store"];async function AG(t){return!!(un.hasWorkspaceScript(t,"prepack")||un.hasWorkspaceScript(t,"postpack"))}async function fG(t,{report:e},r){await un.maybeExecuteWorkspaceLifecycleScript(t,"prepack",{report:e});try{let o=K.join(t.cwd,Mt.fileName);await oe.existsPromise(o)&&await t.manifest.loadFile(o,{baseFs:oe}),await r()}finally{await un.maybeExecuteWorkspaceLifecycleScript(t,"postpack",{report:e})}}async function pG(t,e){typeof e>"u"&&(e=await $Q(t));let r=new Set;for(let n of t.manifest.publishConfig?.executableFiles??new Set)r.add(K.normalize(n));for(let n of t.manifest.bin.values())r.add(K.normalize(n));let o=oBe.default.pack();process.nextTick(async()=>{for(let n of e){let u=K.normalize(n),A=K.resolve(t.cwd,u),p=K.join("package",u),h=await oe.lstatPromise(A),E={name:p,mtime:new Date(vi.SAFE_TIME*1e3)},I=r.has(u)?493:420,v,b,C=new Promise((L,U)=>{v=L,b=U}),T=L=>{L?b(L):v()};if(h.isFile()){let L;u==="package.json"?L=Buffer.from(JSON.stringify(await lBe(t),null,2)):L=await oe.readFilePromise(A),o.entry({...E,mode:I,type:"file"},L,T)}else h.isSymbolicLink()?o.entry({...E,mode:I,type:"symlink",linkname:await oe.readlinkPromise(A)},T):T(new Error(`Unsupported file type ${h.mode} for ${ue.fromPortablePath(u)}`));await C}o.finalize()});let a=(0,aBe.createGzip)();return o.pipe(a),a}async function lBe(t){let e=JSON.parse(JSON.stringify(t.manifest.raw));return await t.project.configuration.triggerHook(r=>r.beforeWorkspacePacking,t,e),e}async function $Q(t){let e=t.project,r=e.configuration,o={accept:[],reject:[]};for(let I of avt)o.reject.push(I);for(let I of ovt)o.accept.push(I);o.reject.push(r.get("rcFilename"));let a=I=>{if(I===null||!I.startsWith(`${t.cwd}/`))return;let v=K.relative(t.cwd,I),b=K.resolve(Bt.root,v);o.reject.push(b)};a(K.resolve(e.cwd,dr.lockfile)),a(r.get("cacheFolder")),a(r.get("globalFolder")),a(r.get("installStatePath")),a(r.get("virtualFolder")),a(r.get("yarnPath")),await r.triggerHook(I=>I.populateYarnPaths,e,I=>{a(I)});for(let I of e.workspaces){let v=K.relative(t.cwd,I.cwd);v!==""&&!v.match(/^(\.\.)?\//)&&o.reject.push(`/${v}`)}let n={accept:[],reject:[]},u=t.manifest.publishConfig?.main??t.manifest.main,A=t.manifest.publishConfig?.module??t.manifest.module,p=t.manifest.publishConfig?.browser??t.manifest.browser,h=t.manifest.publishConfig?.bin??t.manifest.bin;u!=null&&n.accept.push(K.resolve(Bt.root,u)),A!=null&&n.accept.push(K.resolve(Bt.root,A)),typeof p=="string"&&n.accept.push(K.resolve(Bt.root,p));for(let I of h.values())n.accept.push(K.resolve(Bt.root,I));if(p instanceof Map)for(let[I,v]of p.entries())n.accept.push(K.resolve(Bt.root,I)),typeof v=="string"&&n.accept.push(K.resolve(Bt.root,v));let E=t.manifest.files!==null;if(E){n.reject.push("/*");for(let I of t.manifest.files)cBe(n.accept,I,{cwd:Bt.root})}return await lvt(t.cwd,{hasExplicitFileList:E,globalList:o,ignoreList:n})}async function lvt(t,{hasExplicitFileList:e,globalList:r,ignoreList:o}){let a=[],n=new _u(t),u=[[Bt.root,[o]]];for(;u.length>0;){let[A,p]=u.pop(),h=await n.lstatPromise(A);if(!iBe(A,{globalList:r,ignoreLists:h.isDirectory()?null:p}))if(h.isDirectory()){let E=await n.readdirPromise(A),I=!1,v=!1;if(!e||A!==Bt.root)for(let T of E)I=I||T===".gitignore",v=v||T===".npmignore";let b=v?await nBe(n,A,".npmignore"):I?await nBe(n,A,".gitignore"):null,C=b!==null?[b].concat(p):p;iBe(A,{globalList:r,ignoreLists:p})&&(C=[...p,{accept:[],reject:["**/*"]}]);for(let T of E)u.push([K.resolve(A,T),C])}else(h.isFile()||h.isSymbolicLink())&&a.push(K.relative(Bt.root,A))}return a.sort()}async function nBe(t,e,r){let o={accept:[],reject:[]},a=await t.readFilePromise(K.join(e,r),"utf8");for(let n of a.split(/\n/g))cBe(o.reject,n,{cwd:e});return o}function cvt(t,{cwd:e}){let r=t[0]==="!";return r&&(t=t.slice(1)),t.match(/\.{0,1}\//)&&(t=K.resolve(e,t)),r&&(t=`!${t}`),t}function cBe(t,e,{cwd:r}){let o=e.trim();o===""||o[0]==="#"||t.push(cvt(o,{cwd:r}))}function iBe(t,{globalList:e,ignoreLists:r}){let o=ZQ(t,e.accept);if(o!==0)return o===2;let a=ZQ(t,e.reject);if(a!==0)return a===1;if(r!==null)for(let n of r){let u=ZQ(t,n.accept);if(u!==0)return u===2;let A=ZQ(t,n.reject);if(A!==0)return A===1}return!1}function ZQ(t,e){let r=e,o=[];for(let a=0;a{await fG(a,{report:p},async()=>{p.reportJson({base:ue.fromPortablePath(a.cwd)});let h=await $Q(a);for(let E of h)p.reportInfo(null,ue.fromPortablePath(E)),p.reportJson({location:ue.fromPortablePath(E)});if(!this.dryRun){let E=await pG(a,h),I=oe.createWriteStream(u);E.pipe(I),await new Promise(v=>{I.on("finish",v)})}}),this.dryRun||(p.reportInfo(0,`Package archive generated in ${de.pretty(r,u,de.Type.PATH)}`),p.reportJson({output:ue.fromPortablePath(u)}))})).exitCode()}};O0.paths=[["pack"]],O0.usage=nt.Usage({description:"generate a tarball from the active workspace",details:"\n This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\n\n If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\n ",examples:[["Create an archive from the active workspace","yarn pack"],["List the files that would be made part of the workspace's archive","yarn pack --dry-run"],["Name and output the archive in a dedicated folder","yarn pack --out /artifacts/%s-%v.tgz"]]});function uvt(t,{workspace:e}){let r=t.replace("%s",Avt(e)).replace("%v",fvt(e));return ue.toPortablePath(r)}function Avt(t){return t.manifest.name!==null?W.slugifyIdent(t.manifest.name):"package"}function fvt(t){return t.manifest.version!==null?t.manifest.version:"unknown"}var pvt=["dependencies","devDependencies","peerDependencies"],hvt="workspace:",gvt=(t,e)=>{e.publishConfig&&(e.publishConfig.type&&(e.type=e.publishConfig.type),e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.imports&&(e.imports=e.publishConfig.imports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let r=t.project;for(let o of pvt)for(let a of t.manifest.getForScope(o).values()){let n=r.tryWorkspaceByDescriptor(a),u=W.parseRange(a.range);if(u.protocol===hvt)if(n===null){if(r.tryWorkspaceByIdent(a)===null)throw new zt(21,`${W.prettyDescriptor(r.configuration,a)}: No local workspace found for this range`)}else{let A;W.areDescriptorsEqual(a,n.anchoredDescriptor)||u.selector==="*"?A=n.manifest.version??"0.0.0":u.selector==="~"||u.selector==="^"?A=`${u.selector}${n.manifest.version??"0.0.0"}`:A=u.selector;let p=o==="dependencies"?W.makeDescriptor(a,"unknown"):null,h=p!==null&&t.manifest.ensureDependencyMeta(p).optional?"optionalDependencies":o;e[h][W.stringifyIdent(a)]=A}}},dvt={hooks:{beforeWorkspacePacking:gvt},commands:[O0]},mvt=dvt;var yBe=Be("crypto"),EBe=$e(mBe()),CBe=Be("url");async function Nvt(t,e,{access:r,tag:o,registry:a,gitHead:n}){let u=t.manifest.name,A=t.manifest.version,p=W.stringifyIdent(u),h=(0,yBe.createHash)("sha1").update(e).digest("hex"),E=EBe.default.fromData(e).toString(),I=r??wBe(t,u),v=await IBe(t),b=await CA.genPackageManifest(t),C=`${p}-${A}.tgz`,T=new CBe.URL(`${oc(a)}/${p}/-/${C}`);return{_id:p,_attachments:{[C]:{content_type:"application/octet-stream",data:e.toString("base64"),length:e.length}},name:p,access:I,["dist-tags"]:{[o]:A},versions:{[A]:{...b,_id:`${p}@${A}`,name:p,version:A,gitHead:n,dist:{shasum:h,integrity:E,tarball:T.toString()}}},readme:v}}async function Lvt(t){try{let{stdout:e}=await Ur.execvp("git",["rev-parse","--revs-only","HEAD"],{cwd:t});return e.trim()===""?void 0:e.trim()}catch{return}}function wBe(t,e){let r=t.project.configuration;return t.manifest.publishConfig&&typeof t.manifest.publishConfig.access=="string"?t.manifest.publishConfig.access:r.get("npmPublishAccess")!==null?r.get("npmPublishAccess"):e.scope?"restricted":"public"}async function IBe(t){let e=ue.toPortablePath(`${t.cwd}/README.md`),r=t.manifest.name,a=`# ${W.stringifyIdent(r)} +`;try{a=await oe.readFilePromise(e,"utf8")}catch(n){if(n.code==="ENOENT")return a;throw n}return a}var yG={npmAlwaysAuth:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"BOOLEAN",default:!1},npmAuthIdent:{description:"Authentication identity for the npm registry (_auth in npm and yarn v1)",type:"SECRET",default:null},npmAuthToken:{description:"Authentication token for the npm registry (_authToken in npm and yarn v1)",type:"SECRET",default:null}},BBe={npmAuditRegistry:{description:"Registry to query for audit reports",type:"STRING",default:null},npmPublishRegistry:{description:"Registry to push packages to",type:"STRING",default:null},npmRegistryServer:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:"STRING",default:"https://registry.yarnpkg.com"}},Mvt={configuration:{...yG,...BBe,npmScopes:{description:"Settings per package scope",type:"MAP",valueDefinition:{description:"",type:"SHAPE",properties:{...yG,...BBe}}},npmRegistries:{description:"Settings per registry",type:"MAP",normalizeKeys:oc,valueDefinition:{description:"",type:"SHAPE",properties:{...yG}}}},fetchers:[fv,dl],resolvers:[pv,hv,gv]},Ovt=Mvt;var xG={};Kt(xG,{NpmAuditCommand:()=>_0,NpmInfoCommand:()=>H0,NpmLoginCommand:()=>j0,NpmLogoutCommand:()=>q0,NpmPublishCommand:()=>G0,NpmTagAddCommand:()=>W0,NpmTagListCommand:()=>Y0,NpmTagRemoveCommand:()=>V0,NpmWhoamiCommand:()=>K0,default:()=>Gvt,npmAuditTypes:()=>Tv,npmAuditUtils:()=>eF});Ye();Ye();qt();var vG=$e(Zo());Za();var Tv={};Kt(Tv,{Environment:()=>Qv,Severity:()=>Fv});var Qv=(o=>(o.All="all",o.Production="production",o.Development="development",o))(Qv||{}),Fv=(n=>(n.Info="info",n.Low="low",n.Moderate="moderate",n.High="high",n.Critical="critical",n))(Fv||{});var eF={};Kt(eF,{allSeverities:()=>ow,getPackages:()=>BG,getReportTree:()=>wG,getSeverityInclusions:()=>CG,getTopLevelDependencies:()=>IG});Ye();var vBe=$e(zn());var ow=["info","low","moderate","high","critical"];function CG(t){if(typeof t>"u")return new Set(ow);let e=ow.indexOf(t),r=ow.slice(e);return new Set(r)}function wG(t){let e={},r={children:e};for(let[o,a]of je.sortMap(Object.entries(t),n=>n[0]))for(let n of je.sortMap(a,u=>`${u.id}`))e[`${o}/${n.id}`]={value:de.tuple(de.Type.IDENT,W.parseIdent(o)),children:{ID:typeof n.id<"u"&&{label:"ID",value:de.tuple(de.Type.ID,n.id)},Issue:{label:"Issue",value:de.tuple(de.Type.NO_HINT,n.title)},URL:typeof n.url<"u"&&{label:"URL",value:de.tuple(de.Type.URL,n.url)},Severity:{label:"Severity",value:de.tuple(de.Type.NO_HINT,n.severity)},["Vulnerable Versions"]:{label:"Vulnerable Versions",value:de.tuple(de.Type.RANGE,n.vulnerable_versions)},["Tree Versions"]:{label:"Tree Versions",children:[...n.versions].sort(vBe.default.compare).map(u=>({value:de.tuple(de.Type.REFERENCE,u)}))},Dependents:{label:"Dependents",children:je.sortMap(n.dependents,u=>W.stringifyLocator(u)).map(u=>({value:de.tuple(de.Type.LOCATOR,u)}))}}};return r}function IG(t,e,{all:r,environment:o}){let a=[],n=r?t.workspaces:[e],u=["all","production"].includes(o),A=["all","development"].includes(o);for(let p of n)for(let h of p.anchoredPackage.dependencies.values())(p.manifest.devDependencies.has(h.identHash)?!A:!u)||a.push({workspace:p,dependency:h});return a}function BG(t,e,{recursive:r}){let o=new Map,a=new Set,n=[],u=(A,p)=>{let h=t.storedResolutions.get(p.descriptorHash);if(typeof h>"u")throw new Error("Assertion failed: The resolution should have been registered");if(!a.has(h))a.add(h);else return;let E=t.storedPackages.get(h);if(typeof E>"u")throw new Error("Assertion failed: The package should have been registered");if(W.ensureDevirtualizedLocator(E).reference.startsWith("npm:")&&E.version!==null){let v=W.stringifyIdent(E),b=je.getMapWithDefault(o,v);je.getArrayWithDefault(b,E.version).push(A)}if(r)for(let v of E.dependencies.values())n.push([E,v])};for(let{workspace:A,dependency:p}of e)n.push([A.anchoredLocator,p]);for(;n.length>0;){let[A,p]=n.shift();u(A,p)}return o}var _0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("-A,--all",!1,{description:"Audit dependencies from all workspaces"});this.recursive=ge.Boolean("-R,--recursive",!1,{description:"Audit transitive dependencies as well"});this.environment=ge.String("--environment","all",{description:"Which environments to cover",validator:Vs(Qv)});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.noDeprecations=ge.Boolean("--no-deprecations",!1,{description:"Don't warn about deprecated packages"});this.severity=ge.String("--severity","info",{description:"Minimal severity requested for packages to be displayed",validator:Vs(Fv)});this.excludes=ge.Array("--exclude",[],{description:"Array of glob patterns of packages to exclude from audit"});this.ignores=ge.Array("--ignore",[],{description:"Array of glob patterns of advisory ID's to ignore in the audit report"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=IG(o,a,{all:this.all,environment:this.environment}),u=BG(o,n,{recursive:this.recursive}),A=Array.from(new Set([...r.get("npmAuditExcludePackages"),...this.excludes])),p=Object.create(null);for(let[L,U]of u)A.some(J=>vG.default.isMatch(L,J))||(p[L]=[...U.keys()]);let h=Zn.getAuditRegistry({configuration:r}),E,I=await AA.start({configuration:r,stdout:this.context.stdout},async()=>{let L=on.post("/-/npm/v1/security/advisories/bulk",p,{authType:on.AuthType.BEST_EFFORT,configuration:r,jsonResponse:!0,registry:h}),U=this.noDeprecations?[]:await Promise.all(Array.from(Object.entries(p),async([te,le])=>{let pe=await on.getPackageMetadata(W.parseIdent(te),{project:o});return je.mapAndFilter(le,Ae=>{let{deprecated:ye}=pe.versions[Ae];return ye?[te,Ae,ye]:je.mapAndFilter.skip})})),J=await L;for(let[te,le,pe]of U.flat(1))Object.hasOwn(J,te)&&J[te].some(Ae=>kr.satisfiesWithPrereleases(le,Ae.vulnerable_versions))||(J[te]??=[],J[te].push({id:`${te} (deprecation)`,title:pe.trim()||"This package has been deprecated.",severity:"moderate",vulnerable_versions:le}));E=J});if(I.hasErrors())return I.exitCode();let v=CG(this.severity),b=Array.from(new Set([...r.get("npmAuditIgnoreAdvisories"),...this.ignores])),C=Object.create(null);for(let[L,U]of Object.entries(E)){let J=U.filter(te=>!vG.default.isMatch(`${te.id}`,b)&&v.has(te.severity));J.length>0&&(C[L]=J.map(te=>{let le=u.get(L);if(typeof le>"u")throw new Error("Assertion failed: Expected the registry to only return packages that were requested");let pe=[...le.keys()].filter(ye=>kr.satisfiesWithPrereleases(ye,te.vulnerable_versions)),Ae=new Map;for(let ye of pe)for(let ae of le.get(ye))Ae.set(ae.locatorHash,ae);return{...te,versions:pe,dependents:[...Ae.values()]}}))}let T=Object.keys(C).length>0;return T?($s.emitTree(wG(C),{configuration:r,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async L=>{L.reportInfo(1,"No audit suggestions")}),T?1:0)}};_0.paths=[["npm","audit"]],_0.usage=nt.Usage({description:"perform a vulnerability audit against the installed packages",details:` + This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths). + + For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \`-A,--all\`. To extend this search to both direct and transitive dependencies, use \`-R,--recursive\`. + + Applying the \`--severity\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${ow.map(r=>`\`${r}\``).join(", ")}. + + If the \`--json\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages. + + If certain packages produce false positives for a particular environment, the \`--exclude\` flag can be used to exclude any number of packages from the audit. This can also be set in the configuration file with the \`npmAuditExcludePackages\` option. + + If particular advisories are needed to be ignored, the \`--ignore\` flag can be used with Advisory ID's to ignore any number of advisories in the audit report. This can also be set in the configuration file with the \`npmAuditIgnoreAdvisories\` option. + + To understand the dependency tree requiring vulnerable packages, check the raw report with the \`--json\` flag or use \`yarn why package\` to get more information as to who depends on them. + `,examples:[["Checks for known security issues with the installed packages. The output is a list of known issues.","yarn npm audit"],["Audit dependencies in all workspaces","yarn npm audit --all"],["Limit auditing to `dependencies` (excludes `devDependencies`)","yarn npm audit --environment production"],["Show audit report as valid JSON","yarn npm audit --json"],["Audit all direct and transitive dependencies","yarn npm audit --recursive"],["Output moderate (or more severe) vulnerabilities","yarn npm audit --severity moderate"],["Exclude certain packages","yarn npm audit --exclude package1 --exclude package2"],["Ignore specific advisories","yarn npm audit --ignore 1234567 --ignore 7654321"]]});Ye();Ye();Pt();qt();var DG=$e(zn()),PG=Be("util"),H0=class extends ut{constructor(){super(...arguments);this.fields=ge.String("-f,--fields",{description:"A comma-separated list of manifest fields that should be displayed"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.packages=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),a=typeof this.fields<"u"?new Set(["name",...this.fields.split(/\s*,\s*/)]):null,n=[],u=!1,A=await Nt.start({configuration:r,includeFooter:!1,json:this.json,stdout:this.context.stdout},async p=>{for(let h of this.packages){let E;if(h==="."){let le=o.topLevelWorkspace;if(!le.manifest.name)throw new it(`Missing ${de.pretty(r,"name",de.Type.CODE)} field in ${ue.fromPortablePath(K.join(le.cwd,dr.manifest))}`);E=W.makeDescriptor(le.manifest.name,"unknown")}else E=W.parseDescriptor(h);let I=on.getIdentUrl(E),v=SG(await on.get(I,{configuration:r,ident:E,jsonResponse:!0,customErrorMessage:on.customPackageError})),b=Object.keys(v.versions).sort(DG.default.compareLoose),T=v["dist-tags"].latest||b[b.length-1],L=kr.validRange(E.range);if(L){let le=DG.default.maxSatisfying(b,L);le!==null?T=le:(p.reportWarning(0,`Unmet range ${W.prettyRange(r,E.range)}; falling back to the latest version`),u=!0)}else Object.hasOwn(v["dist-tags"],E.range)?T=v["dist-tags"][E.range]:E.range!=="unknown"&&(p.reportWarning(0,`Unknown tag ${W.prettyRange(r,E.range)}; falling back to the latest version`),u=!0);let U=v.versions[T],J={...v,...U,version:T,versions:b},te;if(a!==null){te={};for(let le of a){let pe=J[le];if(typeof pe<"u")te[le]=pe;else{p.reportWarning(1,`The ${de.pretty(r,le,de.Type.CODE)} field doesn't exist inside ${W.prettyIdent(r,E)}'s information`),u=!0;continue}}}else this.json||(delete J.dist,delete J.readme,delete J.users),te=J;p.reportJson(te),this.json||n.push(te)}});PG.inspect.styles.name="cyan";for(let p of n)(p!==n[0]||u)&&this.context.stdout.write(` +`),this.context.stdout.write(`${(0,PG.inspect)(p,{depth:1/0,colors:!0,compact:!1})} +`);return A.exitCode()}};H0.paths=[["npm","info"]],H0.usage=nt.Usage({category:"Npm-related commands",description:"show information about a package",details:"\n This command fetches information about a package from the npm registry and prints it in a tree format.\n\n The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\n\n Append `@` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\n\n If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\n\n By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\n ",examples:[["Show all available information about react (except the `dist`, `readme`, and `users` fields)","yarn npm info react"],["Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)","yarn npm info react --json"],["Show all available information about react@16.12.0","yarn npm info react@16.12.0"],["Show all available information about react@next","yarn npm info react@next"],["Show the description of react","yarn npm info react --fields description"],["Show all available versions of react","yarn npm info react --fields versions"],["Show the readme of react","yarn npm info react --fields readme"],["Show a few fields of react","yarn npm info react --fields homepage,repository"]]});function SG(t){if(Array.isArray(t)){let e=[];for(let r of t)r=SG(r),r&&e.push(r);return e}else if(typeof t=="object"&&t!==null){let e={};for(let r of Object.keys(t)){if(r.startsWith("_"))continue;let o=SG(t[r]);o&&(e[r]=o)}return e}else return t||null}Ye();Ye();qt();var DBe=$e(A2()),j0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Login to the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Login to the publish registry"});this.alwaysAuth=ge.Boolean("--always-auth",{description:"Set the npmAlwaysAuth configuration"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=await tF({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Nt.start({configuration:r,stdout:this.context.stdout,includeFooter:!1},async n=>{let u=await _vt({configuration:r,registry:o,report:n,stdin:this.context.stdin,stdout:this.context.stdout}),A=`/-/user/org.couchdb.user:${encodeURIComponent(u.name)}`,p=await on.put(A,u,{attemptedAs:u.name,configuration:r,registry:o,jsonResponse:!0,authType:on.AuthType.NO_AUTH});return await Uvt(o,p.token,{alwaysAuth:this.alwaysAuth,scope:this.scope}),n.reportInfo(0,"Successfully logged in")})).exitCode()}};j0.paths=[["npm","login"]],j0.usage=nt.Usage({category:"Npm-related commands",description:"store new login info to access the npm registry",details:"\n This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\n\n Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n ",examples:[["Login to the default registry","yarn npm login"],["Login to the registry linked to the @my-scope registry","yarn npm login --scope my-scope"],["Login to the publish registry for the current package","yarn npm login --publish"]]});async function tF({scope:t,publish:e,configuration:r,cwd:o}){return t&&e?Zn.getScopeRegistry(t,{configuration:r,type:Zn.RegistryType.PUBLISH_REGISTRY}):t?Zn.getScopeRegistry(t,{configuration:r}):e?Zn.getPublishRegistry((await AC(r,o)).manifest,{configuration:r}):Zn.getDefaultRegistry({configuration:r})}async function Uvt(t,e,{alwaysAuth:r,scope:o}){let a=u=>A=>{let p=je.isIndexableObject(A)?A:{},h=p[u],E=je.isIndexableObject(h)?h:{};return{...p,[u]:{...E,...r!==void 0?{npmAlwaysAuth:r}:{},npmAuthToken:e}}},n=o?{npmScopes:a(o)}:{npmRegistries:a(t)};return await Ve.updateHomeConfiguration(n)}async function _vt({configuration:t,registry:e,report:r,stdin:o,stdout:a}){r.reportInfo(0,`Logging in to ${de.pretty(t,e,de.Type.URL)}`);let n=!1;if(e.match(/^https:\/\/npm\.pkg\.github\.com(\/|$)/)&&(r.reportInfo(0,"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions."),n=!0),r.reportSeparator(),t.env.YARN_IS_TEST_ENV)return{name:t.env.YARN_INJECT_NPM_USER||"",password:t.env.YARN_INJECT_NPM_PASSWORD||""};let{username:u,password:A}=await(0,DBe.prompt)([{type:"input",name:"username",message:"Username:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a},{type:"password",name:"password",message:n?"Token:":"Password:",required:!0,onCancel:()=>process.exit(130),stdin:o,stdout:a}]);return r.reportSeparator(),{name:u,password:A}}Ye();Ye();qt();var aw=new Set(["npmAuthIdent","npmAuthToken"]),q0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Logout of the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Logout of the publish registry"});this.all=ge.Boolean("-A,--all",!1,{description:"Logout of all registries"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o=async()=>{let n=await tF({configuration:r,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),u=await Ve.find(this.context.cwd,this.context.plugins),A=W.makeIdent(this.scope??null,"pkg");return!Zn.getAuthConfiguration(n,{configuration:u,ident:A}).get("npmAuthToken")};return(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{if(this.all&&(await jvt(),n.reportInfo(0,"Successfully logged out from everything")),this.scope){await PBe("npmScopes",this.scope),await o()?n.reportInfo(0,`Successfully logged out from ${this.scope}`):n.reportWarning(0,"Scope authentication settings removed, but some other ones settings still apply to it");return}let u=await tF({configuration:r,cwd:this.context.cwd,publish:this.publish});await PBe("npmRegistries",u),await o()?n.reportInfo(0,`Successfully logged out from ${u}`):n.reportWarning(0,"Registry authentication settings removed, but some other ones settings still apply to it")})).exitCode()}};q0.paths=[["npm","logout"]],q0.usage=nt.Usage({category:"Npm-related commands",description:"logout of the npm registry",details:"\n This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\n\n Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n\n Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\n ",examples:[["Logout of the default registry","yarn npm logout"],["Logout of the @my-scope scope","yarn npm logout --scope my-scope"],["Logout of the publish registry for the current package","yarn npm logout --publish"],["Logout of all registries","yarn npm logout --all"]]});function Hvt(t,e){let r=t[e];if(!je.isIndexableObject(r))return!1;let o=new Set(Object.keys(r));if([...aw].every(n=>!o.has(n)))return!1;for(let n of aw)o.delete(n);if(o.size===0)return t[e]=void 0,!0;let a={...r};for(let n of aw)delete a[n];return t[e]=a,!0}async function jvt(){let t=e=>{let r=!1,o=je.isIndexableObject(e)?{...e}:{};o.npmAuthToken&&(delete o.npmAuthToken,r=!0);for(let a of Object.keys(o))Hvt(o,a)&&(r=!0);if(Object.keys(o).length!==0)return r?o:e};return await Ve.updateHomeConfiguration({npmRegistries:t,npmScopes:t})}async function PBe(t,e){return await Ve.updateHomeConfiguration({[t]:r=>{let o=je.isIndexableObject(r)?r:{};if(!Object.hasOwn(o,e))return r;let a=o[e],n=je.isIndexableObject(a)?a:{},u=new Set(Object.keys(n));if([...aw].every(p=>!u.has(p)))return r;for(let p of aw)u.delete(p);if(u.size===0)return Object.keys(o).length===1?void 0:{...o,[e]:void 0};let A={};for(let p of aw)A[p]=void 0;return{...o,[e]:{...n,...A}}}})}Ye();qt();var G0=class extends ut{constructor(){super(...arguments);this.access=ge.String("--access",{description:"The access for the published package (public or restricted)"});this.tag=ge.String("--tag","latest",{description:"The tag on the registry that the package should be attached to"});this.tolerateRepublish=ge.Boolean("--tolerate-republish",!1,{description:"Warn and exit when republishing an already existing version of a package"});this.otp=ge.String("--otp",{description:"The OTP token to use with the command"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);if(a.manifest.private)throw new it("Private workspaces cannot be published");if(a.manifest.name===null||a.manifest.version===null)throw new it("Workspaces must have valid names and versions to be published on an external registry");await o.restoreInstallState();let n=a.manifest.name,u=a.manifest.version,A=Zn.getPublishRegistry(a.manifest,{configuration:r});return(await Nt.start({configuration:r,stdout:this.context.stdout},async h=>{if(this.tolerateRepublish)try{let E=await on.get(on.getIdentUrl(n),{configuration:r,registry:A,ident:n,jsonResponse:!0});if(!Object.hasOwn(E,"versions"))throw new zt(15,'Registry returned invalid data for - missing "versions" field');if(Object.hasOwn(E.versions,u)){h.reportWarning(0,`Registry already knows about version ${u}; skipping.`);return}}catch(E){if(E.originalError?.response?.statusCode!==404)throw E}await un.maybeExecuteWorkspaceLifecycleScript(a,"prepublish",{report:h}),await CA.prepareForPack(a,{report:h},async()=>{let E=await CA.genPackList(a);for(let T of E)h.reportInfo(null,T);let I=await CA.genPackStream(a,E),v=await je.bufferStream(I),b=await sw.getGitHead(a.cwd),C=await sw.makePublishBody(a,v,{access:this.access,tag:this.tag,registry:A,gitHead:b});await on.put(on.getIdentUrl(n),C,{configuration:r,registry:A,ident:n,otp:this.otp,jsonResponse:!0})}),h.reportInfo(0,"Package archive published")})).exitCode()}};G0.paths=[["npm","publish"]],G0.usage=nt.Usage({category:"Npm-related commands",description:"publish the active workspace to the npm registry",details:'\n This command will pack the active workspace into a fresh archive and upload it to the npm registry.\n\n The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\n\n Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka "private packages"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\n ',examples:[["Publish the active workspace","yarn npm publish"]]});Ye();qt();var SBe=$e(zn());Ye();Pt();qt();var Y0=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String({required:!1})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n;if(typeof this.package<"u")n=W.parseIdent(this.package);else{if(!a)throw new rr(o.cwd,this.context.cwd);if(!a.manifest.name)throw new it(`Missing 'name' field in ${ue.fromPortablePath(K.join(a.cwd,dr.manifest))}`);n=a.manifest.name}let u=await Rv(n,r),p={children:je.sortMap(Object.entries(u),([h])=>h).map(([h,E])=>({value:de.tuple(de.Type.RESOLUTION,{descriptor:W.makeDescriptor(n,h),locator:W.makeLocator(n,E)})}))};return $s.emitTree(p,{configuration:r,json:this.json,stdout:this.context.stdout})}};Y0.paths=[["npm","tag","list"]],Y0.usage=nt.Usage({category:"Npm-related commands",description:"list all dist-tags of a package",details:` + This command will list all tags of a package from the npm registry. + + If the package is not specified, Yarn will default to the current workspace. + `,examples:[["List all tags of package `my-pkg`","yarn npm tag list my-pkg"]]});async function Rv(t,e){let r=`/-/package${on.getIdentUrl(t)}/dist-tags`;return on.get(r,{configuration:e,ident:t,jsonResponse:!0,customErrorMessage:on.customPackageError})}var W0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=W.parseDescriptor(this.package,!0),u=n.range;if(!SBe.default.valid(u))throw new it(`The range ${de.pretty(r,n.range,de.Type.RANGE)} must be a valid semver version`);let A=Zn.getPublishRegistry(a.manifest,{configuration:r}),p=de.pretty(r,n,de.Type.IDENT),h=de.pretty(r,u,de.Type.RANGE),E=de.pretty(r,this.tag,de.Type.CODE);return(await Nt.start({configuration:r,stdout:this.context.stdout},async v=>{let b=await Rv(n,r);Object.hasOwn(b,this.tag)&&b[this.tag]===u&&v.reportWarning(0,`Tag ${E} is already set to version ${h}`);let C=`/-/package${on.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await on.put(C,u,{configuration:r,registry:A,ident:n,jsonRequest:!0,jsonResponse:!0}),v.reportInfo(0,`Tag ${E} added to version ${h} of package ${p}`)})).exitCode()}};W0.paths=[["npm","tag","add"]],W0.usage=nt.Usage({category:"Npm-related commands",description:"add a tag for a specific version of a package",details:` + This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten. + `,examples:[["Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`","yarn npm tag add my-pkg@2.3.4-beta.4 beta"]]});Ye();qt();var V0=class extends ut{constructor(){super(...arguments);this.package=ge.String();this.tag=ge.String()}async execute(){if(this.tag==="latest")throw new it("The 'latest' tag cannot be removed.");let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=W.parseIdent(this.package),u=Zn.getPublishRegistry(a.manifest,{configuration:r}),A=de.pretty(r,this.tag,de.Type.CODE),p=de.pretty(r,n,de.Type.IDENT),h=await Rv(n,r);if(!Object.hasOwn(h,this.tag))throw new it(`${A} is not a tag of package ${p}`);return(await Nt.start({configuration:r,stdout:this.context.stdout},async I=>{let v=`/-/package${on.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await on.del(v,{configuration:r,registry:u,ident:n,jsonResponse:!0}),I.reportInfo(0,`Tag ${A} removed from package ${p}`)})).exitCode()}};V0.paths=[["npm","tag","remove"]],V0.usage=nt.Usage({category:"Npm-related commands",description:"remove a tag from a package",details:` + This command will remove a tag from a package from the npm registry. + `,examples:[["Remove the `beta` tag from package `my-pkg`","yarn npm tag remove my-pkg beta"]]});Ye();Ye();qt();var K0=class extends ut{constructor(){super(...arguments);this.scope=ge.String("-s,--scope",{description:"Print username for the registry configured for a given scope"});this.publish=ge.Boolean("--publish",!1,{description:"Print username for the publish registry"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),o;return this.scope&&this.publish?o=Zn.getScopeRegistry(this.scope,{configuration:r,type:Zn.RegistryType.PUBLISH_REGISTRY}):this.scope?o=Zn.getScopeRegistry(this.scope,{configuration:r}):this.publish?o=Zn.getPublishRegistry((await AC(r,this.context.cwd)).manifest,{configuration:r}):o=Zn.getDefaultRegistry({configuration:r}),(await Nt.start({configuration:r,stdout:this.context.stdout},async n=>{let u;try{u=await on.get("/-/whoami",{configuration:r,registry:o,authType:on.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?W.makeIdent(this.scope,""):void 0})}catch(A){if(A.response?.statusCode===401||A.response?.statusCode===403){n.reportError(41,"Authentication failed - your credentials may have expired");return}else throw A}n.reportInfo(0,u.username)})).exitCode()}};K0.paths=[["npm","whoami"]],K0.usage=nt.Usage({category:"Npm-related commands",description:"display the name of the authenticated user",details:"\n Print the username associated with the current authentication settings to the standard output.\n\n When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\n\n When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\n ",examples:[["Print username for the default registry","yarn npm whoami"],["Print username for the registry on a given scope","yarn npm whoami --scope company"]]});var qvt={configuration:{npmPublishAccess:{description:"Default access of the published packages",type:"STRING",default:null},npmAuditExcludePackages:{description:"Array of glob patterns of packages to exclude from npm audit",type:"STRING",default:[],isArray:!0},npmAuditIgnoreAdvisories:{description:"Array of glob patterns of advisory IDs to exclude from npm audit",type:"STRING",default:[],isArray:!0}},commands:[_0,H0,j0,q0,G0,W0,Y0,V0,K0]},Gvt=qvt;var NG={};Kt(NG,{PatchCommand:()=>X0,PatchCommitCommand:()=>z0,PatchFetcher:()=>Uv,PatchResolver:()=>_v,default:()=>lDt,patchUtils:()=>Dm});Ye();Ye();Pt();nA();var Dm={};Kt(Dm,{applyPatchFile:()=>nF,diffFolders:()=>TG,ensureUnpatchedDescriptor:()=>bG,ensureUnpatchedLocator:()=>sF,extractPackageToDisk:()=>FG,extractPatchFlags:()=>RBe,isParentRequired:()=>QG,isPatchDescriptor:()=>iF,isPatchLocator:()=>J0,loadPatchFiles:()=>Ov,makeDescriptor:()=>oF,makeLocator:()=>kG,makePatchHash:()=>RG,parseDescriptor:()=>Lv,parseLocator:()=>Mv,parsePatchFile:()=>Nv,unpatchDescriptor:()=>sDt,unpatchLocator:()=>oDt});Ye();Pt();Ye();Pt();var Yvt=/^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*/;function lw(t){return K.relative(Bt.root,K.resolve(Bt.root,ue.toPortablePath(t)))}function Wvt(t){let e=t.trim().match(Yvt);if(!e)throw new Error(`Bad header line: '${t}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var Vvt=420,Kvt=493;var xBe=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),Jvt=t=>({header:Wvt(t),parts:[]}),zvt={["@"]:"header",["-"]:"deletion",["+"]:"insertion",[" "]:"context",["\\"]:"pragma",undefined:"context"};function Xvt(t){let e=[],r=xBe(),o="parsing header",a=null,n=null;function u(){a&&(n&&(a.parts.push(n),n=null),r.hunks.push(a),a=null)}function A(){u(),e.push(r),r=xBe()}for(let p=0;p0?"patch":"mode change",J=null;switch(U){case"rename":{if(!E||!I)throw new Error("Bad parser state: rename from & to not given");e.push({type:"rename",semverExclusivity:o,fromPath:lw(E),toPath:lw(I)}),J=I}break;case"file deletion":{let te=a||C;if(!te)throw new Error("Bad parse state: no path given for file deletion");e.push({type:"file deletion",semverExclusivity:o,hunk:L&&L[0]||null,path:lw(te),mode:rF(p),hash:v})}break;case"file creation":{let te=n||T;if(!te)throw new Error("Bad parse state: no path given for file creation");e.push({type:"file creation",semverExclusivity:o,hunk:L&&L[0]||null,path:lw(te),mode:rF(h),hash:b})}break;case"patch":case"mode change":J=T||n;break;default:je.assertNever(U);break}J&&u&&A&&u!==A&&e.push({type:"mode change",semverExclusivity:o,path:lw(J),oldMode:rF(u),newMode:rF(A)}),J&&L&&L.length&&e.push({type:"patch",semverExclusivity:o,path:lw(J),hunks:L,beforeHash:v,afterHash:b})}if(e.length===0)throw new Error("Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string");return e}function rF(t){let e=parseInt(t,8)&511;if(e!==Vvt&&e!==Kvt)throw new Error(`Unexpected file mode string: ${t}`);return e}function Nv(t){let e=t.split(/\n/g);return e[e.length-1]===""&&e.pop(),Zvt(Xvt(e))}function $vt(t){let e=0,r=0;for(let{type:o,lines:a}of t.parts)switch(o){case"context":r+=a.length,e+=a.length;break;case"deletion":e+=a.length;break;case"insertion":r+=a.length;break;default:je.assertNever(o);break}if(e!==t.header.original.length||r!==t.header.patched.length){let o=a=>a<0?a:`+${a}`;throw new Error(`hunk header integrity check failed (expected @@ ${o(t.header.original.length)} ${o(t.header.patched.length)} @@, got @@ ${o(e)} ${o(r)} @@)`)}}Ye();Pt();var cw=class extends Error{constructor(r,o){super(`Cannot apply hunk #${r+1}`);this.hunk=o}};async function uw(t,e,r){let o=await t.lstatPromise(e),a=await r();typeof a<"u"&&(e=a),await t.lutimesPromise(e,o.atime,o.mtime)}async function nF(t,{baseFs:e=new Rn,dryRun:r=!1,version:o=null}={}){for(let a of t)if(!(a.semverExclusivity!==null&&o!==null&&!kr.satisfiesWithPrereleases(o,a.semverExclusivity)))switch(a.type){case"file deletion":if(r){if(!e.existsSync(a.path))throw new Error(`Trying to delete a file that doesn't exist: ${a.path}`)}else await uw(e,K.dirname(a.path),async()=>{await e.unlinkPromise(a.path)});break;case"rename":if(r){if(!e.existsSync(a.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${a.fromPath}`)}else await uw(e,K.dirname(a.fromPath),async()=>{await uw(e,K.dirname(a.toPath),async()=>{await uw(e,a.fromPath,async()=>(await e.movePromise(a.fromPath,a.toPath),a.toPath))})});break;case"file creation":if(r){if(e.existsSync(a.path))throw new Error(`Trying to create a file that already exists: ${a.path}`)}else{let n=a.hunk?a.hunk.parts[0].lines.join(` +`)+(a.hunk.parts[0].noNewlineAtEndOfFile?"":` +`):"";await e.mkdirpPromise(K.dirname(a.path),{chmod:493,utimes:[vi.SAFE_TIME,vi.SAFE_TIME]}),await e.writeFilePromise(a.path,n,{mode:a.mode}),await e.utimesPromise(a.path,vi.SAFE_TIME,vi.SAFE_TIME)}break;case"patch":await uw(e,a.path,async()=>{await rDt(a,{baseFs:e,dryRun:r})});break;case"mode change":{let u=(await e.statPromise(a.path)).mode;if(bBe(a.newMode)!==bBe(u))continue;await uw(e,a.path,async()=>{await e.chmodPromise(a.path,a.newMode)})}break;default:je.assertNever(a);break}}function bBe(t){return(t&64)>0}function kBe(t){return t.replace(/\s+$/,"")}function tDt(t,e){return kBe(t)===kBe(e)}async function rDt({hunks:t,path:e},{baseFs:r,dryRun:o=!1}){let a=await r.statSync(e).mode,u=(await r.readFileSync(e,"utf8")).split(/\n/),A=[],p=0,h=0;for(let I of t){let v=Math.max(h,I.header.patched.start+p),b=Math.max(0,v-h),C=Math.max(0,u.length-v-I.header.original.length),T=Math.max(b,C),L=0,U=0,J=null;for(;L<=T;){if(L<=b&&(U=v-L,J=QBe(I,u,U),J!==null)){L=-L;break}if(L<=C&&(U=v+L,J=QBe(I,u,U),J!==null))break;L+=1}if(J===null)throw new cw(t.indexOf(I),I);A.push(J),p+=L,h=U+I.header.original.length}if(o)return;let E=0;for(let I of A)for(let v of I)switch(v.type){case"splice":{let b=v.index+E;u.splice(b,v.numToDelete,...v.linesToInsert),E+=v.linesToInsert.length-v.numToDelete}break;case"pop":u.pop();break;case"push":u.push(v.line);break;default:je.assertNever(v);break}await r.writeFilePromise(e,u.join(` +`),{mode:a})}function QBe(t,e,r){let o=[];for(let a of t.parts)switch(a.type){case"context":case"deletion":{for(let n of a.lines){let u=e[r];if(u==null||!tDt(u,n))return null;r+=1}a.type==="deletion"&&(o.push({type:"splice",index:r-a.lines.length,numToDelete:a.lines.length,linesToInsert:[]}),a.noNewlineAtEndOfFile&&o.push({type:"push",line:""}))}break;case"insertion":o.push({type:"splice",index:r,numToDelete:0,linesToInsert:a.lines}),a.noNewlineAtEndOfFile&&o.push({type:"pop"});break;default:je.assertNever(a.type);break}return o}var iDt=/^builtin<([^>]+)>$/;function Aw(t,e){let{protocol:r,source:o,selector:a,params:n}=W.parseRange(t);if(r!=="patch:")throw new Error("Invalid patch range");if(o===null)throw new Error("Patch locators must explicitly define their source");let u=a?a.split(/&/).map(E=>ue.toPortablePath(E)):[],A=n&&typeof n.locator=="string"?W.parseLocator(n.locator):null,p=n&&typeof n.version=="string"?n.version:null,h=e(o);return{parentLocator:A,sourceItem:h,patchPaths:u,sourceVersion:p}}function iF(t){return t.range.startsWith("patch:")}function J0(t){return t.reference.startsWith("patch:")}function Lv(t){let{sourceItem:e,...r}=Aw(t.range,W.parseDescriptor);return{...r,sourceDescriptor:e}}function Mv(t){let{sourceItem:e,...r}=Aw(t.reference,W.parseLocator);return{...r,sourceLocator:e}}function sDt(t){let{sourceItem:e}=Aw(t.range,W.parseDescriptor);return e}function oDt(t){let{sourceItem:e}=Aw(t.reference,W.parseLocator);return e}function bG(t){if(!iF(t))return t;let{sourceItem:e}=Aw(t.range,W.parseDescriptor);return e}function sF(t){if(!J0(t))return t;let{sourceItem:e}=Aw(t.reference,W.parseLocator);return e}function FBe({parentLocator:t,sourceItem:e,patchPaths:r,sourceVersion:o,patchHash:a},n){let u=t!==null?{locator:W.stringifyLocator(t)}:{},A=typeof o<"u"?{version:o}:{},p=typeof a<"u"?{hash:a}:{};return W.makeRange({protocol:"patch:",source:n(e),selector:r.join("&"),params:{...A,...p,...u}})}function oF(t,{parentLocator:e,sourceDescriptor:r,patchPaths:o}){return W.makeDescriptor(t,FBe({parentLocator:e,sourceItem:r,patchPaths:o},W.stringifyDescriptor))}function kG(t,{parentLocator:e,sourcePackage:r,patchPaths:o,patchHash:a}){return W.makeLocator(t,FBe({parentLocator:e,sourceItem:r,sourceVersion:r.version,patchPaths:o,patchHash:a},W.stringifyLocator))}function TBe({onAbsolute:t,onRelative:e,onProject:r,onBuiltin:o},a){let n=a.lastIndexOf("!");n!==-1&&(a=a.slice(n+1));let u=a.match(iDt);return u!==null?o(u[1]):a.startsWith("~/")?r(a.slice(2)):K.isAbsolute(a)?t(a):e(a)}function RBe(t){let e=t.lastIndexOf("!");return{optional:(e!==-1?new Set(t.slice(0,e).split(/!/)):new Set).has("optional")}}function QG(t){return TBe({onAbsolute:()=>!1,onRelative:()=>!0,onProject:()=>!1,onBuiltin:()=>!1},t)}async function Ov(t,e,r){let o=t!==null?await r.fetcher.fetch(t,r):null,a=o&&o.localPath?{packageFs:new gn(Bt.root),prefixPath:K.relative(Bt.root,o.localPath)}:o;o&&o!==a&&o.releaseFs&&o.releaseFs();let n=await je.releaseAfterUseAsync(async()=>await Promise.all(e.map(async u=>{let A=RBe(u),p=await TBe({onAbsolute:async h=>await oe.readFilePromise(h,"utf8"),onRelative:async h=>{if(a===null)throw new Error("Assertion failed: The parent locator should have been fetched");return await a.packageFs.readFilePromise(K.join(a.prefixPath,h),"utf8")},onProject:async h=>await oe.readFilePromise(K.join(r.project.cwd,h),"utf8"),onBuiltin:async h=>await r.project.configuration.firstHook(E=>E.getBuiltinPatch,r.project,h)},u);return{...A,source:p}})));for(let u of n)typeof u.source=="string"&&(u.source=u.source.replace(/\r\n?/g,` +`));return n}async function FG(t,{cache:e,project:r}){let o=r.storedPackages.get(t.locatorHash);if(typeof o>"u")throw new Error("Assertion failed: Expected the package to be registered");let a=sF(t),n=r.storedChecksums,u=new Qi,A=await oe.mktempPromise(),p=K.join(A,"source"),h=K.join(A,"user"),E=K.join(A,".yarn-patch.json"),I=r.configuration.makeFetcher(),v=[];try{let b,C;if(t.locatorHash===a.locatorHash){let T=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u});v.push(()=>T.releaseFs?.()),b=T,C=T}else b=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>b.releaseFs?.()),C=await I.fetch(t,{cache:e,project:r,fetcher:I,checksums:n,report:u}),v.push(()=>C.releaseFs?.());await Promise.all([oe.copyPromise(p,b.prefixPath,{baseFs:b.packageFs}),oe.copyPromise(h,C.prefixPath,{baseFs:C.packageFs}),oe.writeJsonPromise(E,{locator:W.stringifyLocator(t),version:o.version})])}finally{for(let b of v)b()}return oe.detachTemp(A),h}async function TG(t,e){let r=ue.fromPortablePath(t).replace(/\\/g,"/"),o=ue.fromPortablePath(e).replace(/\\/g,"/"),{stdout:a,stderr:n}=await Ur.execvp("git",["-c","core.safecrlf=false","diff","--src-prefix=a/","--dst-prefix=b/","--ignore-cr-at-eol","--full-index","--no-index","--no-renames","--text",r,o],{cwd:ue.toPortablePath(process.cwd()),env:{...process.env,GIT_CONFIG_NOSYSTEM:"1",HOME:"",XDG_CONFIG_HOME:"",USERPROFILE:""}});if(n.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH. +The following error was reported by 'git': +${n}`);let u=r.startsWith("/")?A=>A.slice(1):A=>A;return a.replace(new RegExp(`(a|b)(${je.escapeRegExp(`/${u(r)}/`)})`,"g"),"$1/").replace(new RegExp(`(a|b)${je.escapeRegExp(`/${u(o)}/`)}`,"g"),"$1/").replace(new RegExp(je.escapeRegExp(`${r}/`),"g"),"").replace(new RegExp(je.escapeRegExp(`${o}/`),"g"),"")}function RG(t,e){let r=[];for(let{source:o}of t){if(o===null)continue;let a=Nv(o);for(let n of a){let{semverExclusivity:u,...A}=n;u!==null&&e!==null&&!kr.satisfiesWithPrereleases(e,u)||r.push(JSON.stringify(A))}}return wn.makeHash(`${3}`,...r).slice(0,6)}Ye();function NBe(t,{configuration:e,report:r}){for(let o of t.parts)for(let a of o.lines)switch(o.type){case"context":r.reportInfo(null,` ${de.pretty(e,a,"grey")}`);break;case"deletion":r.reportError(28,`- ${de.pretty(e,a,de.Type.REMOVED)}`);break;case"insertion":r.reportError(28,`+ ${de.pretty(e,a,de.Type.ADDED)}`);break;default:je.assertNever(o.type)}}var Uv=class{supports(e,r){return!!J0(e)}getLocalPath(e,r){return null}async fetch(e,r){let o=r.checksums.get(e.locatorHash)||null,[a,n,u]=await r.cache.fetchPackageFromCache(e,o,{onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${W.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,r),...r.cacheOptions});return{packageFs:a,releaseFs:n,prefixPath:W.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:u}}async patchPackage(e,r){let{parentLocator:o,sourceLocator:a,sourceVersion:n,patchPaths:u}=Mv(e),A=await Ov(o,u,r),p=await oe.mktempPromise(),h=K.join(p,"current.zip"),E=await r.fetcher.fetch(a,r),I=W.getIdentVendorPath(e),v=new zi(h,{create:!0,level:r.project.configuration.get("compressionLevel")});await je.releaseAfterUseAsync(async()=>{await v.copyPromise(I,E.prefixPath,{baseFs:E.packageFs,stableSort:!0})},E.releaseFs),v.saveAndClose();for(let{source:b,optional:C}of A){if(b===null)continue;let T=new zi(h,{level:r.project.configuration.get("compressionLevel")}),L=new gn(K.resolve(Bt.root,I),{baseFs:T});try{await nF(Nv(b),{baseFs:L,version:n})}catch(U){if(!(U instanceof cw))throw U;let J=r.project.configuration.get("enableInlineHunks"),te=!J&&!C?" (set enableInlineHunks for details)":"",le=`${W.prettyLocator(r.project.configuration,e)}: ${U.message}${te}`,pe=Ae=>{!J||NBe(U.hunk,{configuration:r.project.configuration,report:Ae})};if(T.discardAndClose(),C){r.report.reportWarningOnce(66,le,{reportExtra:pe});continue}else throw new zt(66,le,pe)}T.saveAndClose()}return new zi(h,{level:r.project.configuration.get("compressionLevel")})}};Ye();var _v=class{supportsDescriptor(e,r){return!!iF(e)}supportsLocator(e,r){return!!J0(e)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,o){let{patchPaths:a}=Lv(e);return a.every(n=>!QG(n))?e:W.bindDescriptor(e,{locator:W.stringifyLocator(r)})}getResolutionDependencies(e,r){let{sourceDescriptor:o}=Lv(e);return{sourceDescriptor:r.project.configuration.normalizeDependency(o)}}async getCandidates(e,r,o){if(!o.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{parentLocator:a,patchPaths:n}=Lv(e),u=await Ov(a,n,o.fetchOptions),A=r.sourceDescriptor;if(typeof A>"u")throw new Error("Assertion failed: The dependency should have been resolved");let p=RG(u,A.version);return[kG(e,{parentLocator:a,sourcePackage:A,patchPaths:n,patchHash:p})]}async getSatisfying(e,r,o,a){let[n]=await this.getCandidates(e,r,a);return{locators:o.filter(u=>u.locatorHash===n.locatorHash),sorted:!1}}async resolve(e,r){let{sourceLocator:o}=Mv(e);return{...await r.resolver.resolve(o,r),...e}}};Ye();Pt();qt();var z0=class extends ut{constructor(){super(...arguments);this.save=ge.Boolean("-s,--save",!1,{description:"Add the patch to your resolution entries"});this.patchFolder=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=K.resolve(this.context.cwd,ue.toPortablePath(this.patchFolder)),u=K.join(n,"../source"),A=K.join(n,"../.yarn-patch.json");if(!oe.existsSync(u))throw new it("The argument folder didn't get created by 'yarn patch'");let p=await TG(u,n),h=await oe.readJsonPromise(A),E=W.parseLocator(h.locator,!0);if(!o.storedPackages.has(E.locatorHash))throw new it("No package found in the project for the given locator");if(!this.save){this.context.stdout.write(p);return}let I=r.get("patchFolder"),v=K.join(I,`${W.slugifyLocator(E)}.patch`);await oe.mkdirPromise(I,{recursive:!0}),await oe.writeFilePromise(v,p);let b=[],C=new Map;for(let T of o.storedPackages.values()){if(W.isVirtualLocator(T))continue;let L=T.dependencies.get(E.identHash);if(!L)continue;let U=W.ensureDevirtualizedDescriptor(L),J=bG(U),te=o.storedResolutions.get(J.descriptorHash);if(!te)throw new Error("Assertion failed: Expected the resolution to have been registered");if(!o.storedPackages.get(te))throw new Error("Assertion failed: Expected the package to have been registered");let pe=o.tryWorkspaceByLocator(T);if(pe)b.push(pe);else{let Ae=o.originalPackages.get(T.locatorHash);if(!Ae)throw new Error("Assertion failed: Expected the original package to have been registered");let ye=Ae.dependencies.get(L.identHash);if(!ye)throw new Error("Assertion failed: Expected the original dependency to have been registered");C.set(ye.descriptorHash,ye)}}for(let T of b)for(let L of Mt.hardDependencies){let U=T.manifest[L].get(E.identHash);if(!U)continue;let J=oF(U,{parentLocator:null,sourceDescriptor:W.convertLocatorToDescriptor(E),patchPaths:[K.join(dr.home,K.relative(o.cwd,v))]});T.manifest[L].set(U.identHash,J)}for(let T of C.values()){let L=oF(T,{parentLocator:null,sourceDescriptor:W.convertLocatorToDescriptor(E),patchPaths:[K.join(dr.home,K.relative(o.cwd,v))]});o.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:W.stringifyIdent(L),description:T.range}},reference:L.range})}await o.persist()}};z0.paths=[["patch-commit"]],z0.usage=nt.Usage({description:"generate a patch out of a directory",details:"\n By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\n\n With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\n\n Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\n "});Ye();Pt();qt();var X0=class extends ut{constructor(){super(...arguments);this.update=ge.Boolean("-u,--update",!1,{description:"Reapply local patches that already apply to this packages"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let u=W.parseLocator(this.package);if(u.reference==="unknown"){let A=je.mapAndFilter([...o.storedPackages.values()],p=>p.identHash!==u.identHash?je.mapAndFilter.skip:W.isVirtualLocator(p)?je.mapAndFilter.skip:J0(p)!==this.update?je.mapAndFilter.skip:p);if(A.length===0)throw new it("No package found in the project for the given locator");if(A.length>1)throw new it(`Multiple candidate packages found; explicitly choose one of them (use \`yarn why \` to get more information as to who depends on them): +${A.map(p=>` +- ${W.prettyLocator(r,p)}`).join("")}`);u=A[0]}if(!o.storedPackages.has(u.locatorHash))throw new it("No package found in the project for the given locator");await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=sF(u),h=await FG(u,{cache:n,project:o});A.reportJson({locator:W.stringifyLocator(p),path:ue.fromPortablePath(h)});let E=this.update?" along with its current modifications":"";A.reportInfo(0,`Package ${W.prettyLocator(r,p)} got extracted with success${E}!`),A.reportInfo(0,`You can now edit the following folder: ${de.pretty(r,ue.fromPortablePath(h),"magenta")}`),A.reportInfo(0,`Once you are done run ${de.pretty(r,`yarn patch-commit -s ${process.platform==="win32"?'"':""}${ue.fromPortablePath(h)}${process.platform==="win32"?'"':""}`,"cyan")} and Yarn will store a patchfile based on your changes.`)})}};X0.paths=[["patch"]],X0.usage=nt.Usage({description:"prepare a package for patching",details:"\n This command will cause a package to be extracted in a temporary directory intended to be editable at will.\n\n Once you're done with your changes, run `yarn patch-commit -s path` (with `path` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\n\n Calling the command when you already have a patch won't import it by default (in other words, the default behavior is to reset existing patches). However, adding the `-u,--update` flag will import any current patch.\n "});var aDt={configuration:{enableInlineHunks:{description:"If true, the installs will print unmatched patch hunks",type:"BOOLEAN",default:!1},patchFolder:{description:"Folder where the patch files must be written",type:"ABSOLUTE_PATH",default:"./.yarn/patches"}},commands:[z0,X0],fetchers:[Uv],resolvers:[_v]},lDt=aDt;var OG={};Kt(OG,{PnpmLinker:()=>Hv,default:()=>pDt});Ye();Pt();qt();var Hv=class{getCustomDataKey(){return JSON.stringify({name:"PnpmLinker",version:3})}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the pnpm linker to be enabled");let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=a.pathsByLocator.get(e.locatorHash);if(typeof n>"u")throw new it(`Couldn't find ${W.prettyLocator(r.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return n.packageLocation}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let o=this.getCustomDataKey(),a=r.project.linkersCustomData.get(o);if(!a)throw new it(`The project in ${de.pretty(r.project.configuration,`${r.project.cwd}/package.json`,de.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=e.match(/(^.*\/node_modules\/(@[^/]*\/)?[^/]+)(\/.*$)/);if(n){let p=a.locatorByPath.get(n[1]);if(p)return p}let u=e,A=e;do{A=u,u=K.dirname(A);let p=a.locatorByPath.get(A);if(p)return p}while(u!==A);return null}makeInstaller(e){return new LG(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="pnpm"}},LG=class{constructor(e){this.opts=e;this.asyncActions=new je.AsyncActions(10);this.customData={pathsByLocator:new Map,locatorByPath:new Map};this.indexFolderPromise=PD(oe,{indexPath:K.join(e.project.configuration.get("globalFolder"),"index")})}attachCustomData(e){}async installPackage(e,r,o){switch(e.linkType){case"SOFT":return this.installPackageSoft(e,r,o);case"HARD":return this.installPackageHard(e,r,o)}throw new Error("Assertion failed: Unsupported package link type")}async installPackageSoft(e,r,o){let a=K.resolve(r.packageFs.getRealPath(),r.prefixPath),n=this.opts.project.tryWorkspaceByLocator(e)?K.join(a,dr.nodeModules):null;return this.customData.pathsByLocator.set(e.locatorHash,{packageLocation:a,dependenciesLocation:n}),{packageLocation:a,buildRequest:null}}async installPackageHard(e,r,o){let a=cDt(e,{project:this.opts.project}),n=a.packageLocation;this.customData.locatorByPath.set(n,W.stringifyLocator(e)),this.customData.pathsByLocator.set(e.locatorHash,a),o.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await oe.mkdirPromise(n,{recursive:!0}),await oe.copyPromise(n,r.prefixPath,{baseFs:r.packageFs,overwrite:!1,linkStrategy:{type:"HardlinkFromIndex",indexPath:await this.indexFolderPromise,autoRepair:!0}})}));let A=W.isVirtualLocator(e)?W.devirtualizeLocator(e):e,p={manifest:await Mt.tryFind(r.prefixPath,{baseFs:r.packageFs})??new Mt,misc:{hasBindingGyp:mA.hasBindingGyp(r)}},h=this.opts.project.getDependencyMeta(A,e.version),E=mA.extractBuildRequest(e,p,h,{configuration:this.opts.project.configuration});return{packageLocation:n,buildRequest:E}}async attachInternalDependencies(e,r){if(this.opts.project.configuration.get("nodeLinker")!=="pnpm"||!LBe(e,{project:this.opts.project}))return;let o=this.customData.pathsByLocator.get(e.locatorHash);if(typeof o>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${W.stringifyLocator(e)})`);let{dependenciesLocation:a}=o;!a||this.asyncActions.reduce(e.locatorHash,async n=>{await oe.mkdirPromise(a,{recursive:!0});let u=await uDt(a),A=new Map(u),p=[n],h=(I,v)=>{let b=v;LBe(v,{project:this.opts.project})||(this.opts.report.reportWarningOnce(0,"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies"),b=W.devirtualizeLocator(v));let C=this.customData.pathsByLocator.get(b.locatorHash);if(typeof C>"u")throw new Error(`Assertion failed: Expected the package to have been registered (${W.stringifyLocator(v)})`);let T=W.stringifyIdent(I),L=K.join(a,T),U=K.relative(K.dirname(L),C.packageLocation),J=A.get(T);A.delete(T),p.push(Promise.resolve().then(async()=>{if(J){if(J.isSymbolicLink()&&await oe.readlinkPromise(L)===U)return;await oe.removePromise(L)}await oe.mkdirpPromise(K.dirname(L)),process.platform=="win32"&&this.opts.project.configuration.get("winLinkType")==="junctions"?await oe.symlinkPromise(C.packageLocation,L,"junction"):await oe.symlinkPromise(U,L)}))},E=!1;for(let[I,v]of r)I.identHash===e.identHash&&(E=!0),h(I,v);!E&&!this.opts.project.tryWorkspaceByLocator(e)&&h(W.convertLocatorToDescriptor(e),e),p.push(ADt(a,A)),await Promise.all(p)})}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the pnpm linker")}async finalizeInstall(){let e=OBe(this.opts.project);if(this.opts.project.configuration.get("nodeLinker")!=="pnpm")await oe.removePromise(e);else{let r;try{r=new Set(await oe.readdirPromise(e))}catch{r=new Set}for(let{dependenciesLocation:o}of this.customData.pathsByLocator.values()){if(!o)continue;let a=K.contains(e,o);if(a===null)continue;let[n]=a.split(K.sep);r.delete(n)}await Promise.all([...r].map(async o=>{await oe.removePromise(K.join(e,o))}))}return await this.asyncActions.wait(),await MG(e),this.opts.project.configuration.get("nodeLinker")!=="node-modules"&&await MG(MBe(this.opts.project)),{customData:this.customData}}};function MBe(t){return K.join(t.cwd,dr.nodeModules)}function OBe(t){return K.join(MBe(t),".store")}function cDt(t,{project:e}){let r=W.slugifyLocator(t),o=OBe(e),a=K.join(o,r,"package"),n=K.join(o,r,dr.nodeModules);return{packageLocation:a,dependenciesLocation:n}}function LBe(t,{project:e}){return!W.isVirtualLocator(t)||!e.tryWorkspaceByLocator(t)}async function uDt(t){let e=new Map,r=[];try{r=await oe.readdirPromise(t,{withFileTypes:!0})}catch(o){if(o.code!=="ENOENT")throw o}try{for(let o of r)if(!o.name.startsWith("."))if(o.name.startsWith("@")){let a=await oe.readdirPromise(K.join(t,o.name),{withFileTypes:!0});if(a.length===0)e.set(o.name,o);else for(let n of a)e.set(`${o.name}/${n.name}`,n)}else e.set(o.name,o)}catch(o){if(o.code!=="ENOENT")throw o}return e}async function ADt(t,e){let r=[],o=new Set;for(let a of e.keys()){r.push(oe.removePromise(K.join(t,a)));let n=W.tryParseIdent(a)?.scope;n&&o.add(`@${n}`)}return Promise.all(r).then(()=>Promise.all([...o].map(a=>MG(K.join(t,a)))))}async function MG(t){try{await oe.rmdirPromise(t)}catch(e){if(e.code!=="ENOENT"&&e.code!=="ENOTEMPTY")throw e}}var fDt={linkers:[Hv]},pDt=fDt;var YG={};Kt(YG,{StageCommand:()=>Z0,default:()=>vDt,stageUtils:()=>lF});Ye();Pt();qt();Ye();Pt();var lF={};Kt(lF,{ActionType:()=>UG,checkConsensus:()=>aF,expandDirectory:()=>jG,findConsensus:()=>qG,findVcsRoot:()=>_G,genCommitMessage:()=>GG,getCommitPrefix:()=>UBe,isYarnFile:()=>HG});Pt();var UG=(n=>(n[n.CREATE=0]="CREATE",n[n.DELETE=1]="DELETE",n[n.ADD=2]="ADD",n[n.REMOVE=3]="REMOVE",n[n.MODIFY=4]="MODIFY",n))(UG||{});async function _G(t,{marker:e}){do if(!oe.existsSync(K.join(t,e)))t=K.dirname(t);else return t;while(t!=="/");return null}function HG(t,{roots:e,names:r}){if(r.has(K.basename(t)))return!0;do if(!e.has(t))t=K.dirname(t);else return!0;while(t!=="/");return!1}function jG(t){let e=[],r=[t];for(;r.length>0;){let o=r.pop(),a=oe.readdirSync(o);for(let n of a){let u=K.resolve(o,n);oe.lstatSync(u).isDirectory()?r.push(u):e.push(u)}}return e}function aF(t,e){let r=0,o=0;for(let a of t)a!=="wip"&&(e.test(a)?r+=1:o+=1);return r>=o}function qG(t){let e=aF(t,/^(\w\(\w+\):\s*)?\w+s/),r=aF(t,/^(\w\(\w+\):\s*)?[A-Z]/),o=aF(t,/^\w\(\w+\):/);return{useThirdPerson:e,useUpperCase:r,useComponent:o}}function UBe(t){return t.useComponent?"chore(yarn): ":""}var hDt=new Map([[0,"create"],[1,"delete"],[2,"add"],[3,"remove"],[4,"update"]]);function GG(t,e){let r=UBe(t),o=[],a=e.slice().sort((n,u)=>n[0]-u[0]);for(;a.length>0;){let[n,u]=a.shift(),A=hDt.get(n);t.useUpperCase&&o.length===0&&(A=`${A[0].toUpperCase()}${A.slice(1)}`),t.useThirdPerson&&(A+="s");let p=[u];for(;a.length>0&&a[0][0]===n;){let[,E]=a.shift();p.push(E)}p.sort();let h=p.shift();p.length===1?h+=" (and one other)":p.length>1&&(h+=` (and ${p.length} others)`),o.push(`${A} ${h}`)}return`${r}${o.join(", ")}`}var gDt="Commit generated via `yarn stage`",dDt=11;async function _Be(t){let{code:e,stdout:r}=await Ur.execvp("git",["log","-1","--pretty=format:%H"],{cwd:t});return e===0?r.trim():null}async function mDt(t,e){let r=[],o=e.filter(h=>K.basename(h.path)==="package.json");for(let{action:h,path:E}of o){let I=K.relative(t,E);if(h===4){let v=await _Be(t),{stdout:b}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),C=await Mt.fromText(b),T=await Mt.fromFile(E),L=new Map([...T.dependencies,...T.devDependencies]),U=new Map([...C.dependencies,...C.devDependencies]);for(let[J,te]of U){let le=W.stringifyIdent(te),pe=L.get(J);pe?pe.range!==te.range&&r.push([4,`${le} to ${pe.range}`]):r.push([3,le])}for(let[J,te]of L)U.has(J)||r.push([2,W.stringifyIdent(te)])}else if(h===0){let v=await Mt.fromFile(E);v.name?r.push([0,W.stringifyIdent(v.name)]):r.push([0,"a package"])}else if(h===1){let v=await _Be(t),{stdout:b}=await Ur.execvp("git",["show",`${v}:${I}`],{cwd:t,strict:!0}),C=await Mt.fromText(b);C.name?r.push([1,W.stringifyIdent(C.name)]):r.push([1,"a package"])}else throw new Error("Assertion failed: Unsupported action type")}let{code:a,stdout:n}=await Ur.execvp("git",["log",`-${dDt}`,"--pretty=format:%s"],{cwd:t}),u=a===0?n.split(/\n/g).filter(h=>h!==""):[],A=qG(u);return GG(A,r)}var yDt={[0]:[" A ","?? "],[4]:[" M "],[1]:[" D "]},EDt={[0]:["A "],[4]:["M "],[1]:["D "]},HBe={async findRoot(t){return await _G(t,{marker:".git"})},async filterChanges(t,e,r,o){let{stdout:a}=await Ur.execvp("git",["status","-s"],{cwd:t,strict:!0}),n=a.toString().split(/\n/g),u=o?.staged?EDt:yDt;return[].concat(...n.map(p=>{if(p==="")return[];let h=p.slice(0,3),E=K.resolve(t,p.slice(3));if(!o?.staged&&h==="?? "&&p.endsWith("/"))return jG(E).map(I=>({action:0,path:I}));{let v=[0,4,1].find(b=>u[b].includes(h));return v!==void 0?[{action:v,path:E}]:[]}})).filter(p=>HG(p.path,{roots:e,names:r}))},async genCommitMessage(t,e){return await mDt(t,e)},async makeStage(t,e){let r=e.map(o=>ue.fromPortablePath(o.path));await Ur.execvp("git",["add","--",...r],{cwd:t,strict:!0})},async makeCommit(t,e,r){let o=e.map(a=>ue.fromPortablePath(a.path));await Ur.execvp("git",["add","-N","--",...o],{cwd:t,strict:!0}),await Ur.execvp("git",["commit","-m",`${r} + +${gDt} +`,"--",...o],{cwd:t,strict:!0})},async makeReset(t,e){let r=e.map(o=>ue.fromPortablePath(o.path));await Ur.execvp("git",["reset","HEAD","--",...r],{cwd:t,strict:!0})}};var CDt=[HBe],Z0=class extends ut{constructor(){super(...arguments);this.commit=ge.Boolean("-c,--commit",!1,{description:"Commit the staged files"});this.reset=ge.Boolean("-r,--reset",!1,{description:"Remove all files from the staging area"});this.dryRun=ge.Boolean("-n,--dry-run",!1,{description:"Print the commit message and the list of modified files without staging / committing"});this.update=ge.Boolean("-u,--update",!1,{hidden:!0})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o}=await St.find(r,this.context.cwd),{driver:a,root:n}=await wDt(o.cwd),u=[r.get("cacheFolder"),r.get("globalFolder"),r.get("virtualFolder"),r.get("yarnPath")];await r.triggerHook(I=>I.populateYarnPaths,o,I=>{u.push(I)});let A=new Set;for(let I of u)for(let v of IDt(n,I))A.add(v);let p=new Set([r.get("rcFilename"),dr.lockfile,dr.manifest]),h=await a.filterChanges(n,A,p),E=await a.genCommitMessage(n,h);if(this.dryRun)if(this.commit)this.context.stdout.write(`${E} +`);else for(let I of h)this.context.stdout.write(`${ue.fromPortablePath(I.path)} +`);else if(this.reset){let I=await a.filterChanges(n,A,p,{staged:!0});I.length===0?this.context.stdout.write("No staged changes found!"):await a.makeReset(n,I)}else h.length===0?this.context.stdout.write("No changes found!"):this.commit?await a.makeCommit(n,h,E):(await a.makeStage(n,h),this.context.stdout.write(E))}};Z0.paths=[["stage"]],Z0.usage=nt.Usage({description:"add all yarn files to your vcs",details:"\n This command will add to your staging area the files belonging to Yarn (typically any modified `package.json` and `.yarnrc.yml` files, but also linker-generated files, cache data, etc). It will take your ignore list into account, so the cache files won't be added if the cache is ignored in a `.gitignore` file (assuming you use Git).\n\n Running `--reset` will instead remove them from the staging area (the changes will still be there, but won't be committed until you stage them back).\n\n Since the staging area is a non-existent concept in Mercurial, Yarn will always create a new commit when running this command on Mercurial repositories. You can get this behavior when using Git by using the `--commit` flag which will directly create a commit.\n ",examples:[["Adds all modified project files to the staging area","yarn stage"],["Creates a new commit containing all modified project files","yarn stage --commit"]]});async function wDt(t){let e=null,r=null;for(let o of CDt)if((r=await o.findRoot(t))!==null){e=o;break}if(e===null||r===null)throw new it("No stage driver has been found for your current project");return{driver:e,root:r}}function IDt(t,e){let r=[];if(e===null)return r;for(;;){(e===t||e.startsWith(`${t}/`))&&r.push(e);let o;try{o=oe.statSync(e)}catch{break}if(o.isSymbolicLink())e=K.resolve(K.dirname(e),oe.readlinkSync(e));else break}return r}var BDt={commands:[Z0]},vDt=BDt;var WG={};Kt(WG,{default:()=>FDt});Ye();Ye();Pt();var GBe=$e(zn());Ye();var jBe=$e(ZH()),DDt="e8e1bd300d860104bb8c58453ffa1eb4",PDt="OFCNCOG2CU",qBe=async(t,e)=>{let r=W.stringifyIdent(t),a=SDt(e).initIndex("npm-search");try{return(await a.getObject(r,{attributesToRetrieve:["types"]})).types?.ts==="definitely-typed"}catch{return!1}},SDt=t=>(0,jBe.default)(PDt,DDt,{requester:{async send(r){try{let o=await rn.request(r.url,r.data||null,{configuration:t,headers:r.headers});return{content:o.body,isTimedOut:!1,status:o.statusCode}}catch(o){return{content:o.response.body,isTimedOut:!1,status:o.response.statusCode}}}}});var YBe=t=>t.scope?`${t.scope}__${t.name}`:`${t.name}`,xDt=async(t,e,r,o)=>{if(r.scope==="types")return;let{project:a}=t,{configuration:n}=a;if(!(n.get("tsEnableAutoTypes")??oe.existsSync(K.join(a.cwd,"tsconfig.json"))))return;let A=n.makeResolver(),p={project:a,resolver:A,report:new Qi};if(!await qBe(r,n))return;let E=YBe(r),I=W.parseRange(r.range).selector;if(!kr.validRange(I)){let L=n.normalizeDependency(r),U=await A.getCandidates(L,{},p);I=W.parseRange(U[0].reference).selector}let v=GBe.default.coerce(I);if(v===null)return;let b=`${zc.Modifier.CARET}${v.major}`,C=W.makeDescriptor(W.makeIdent("types",E),b),T=je.mapAndFind(a.workspaces,L=>{let U=L.manifest.dependencies.get(r.identHash)?.descriptorHash,J=L.manifest.devDependencies.get(r.identHash)?.descriptorHash;if(U!==r.descriptorHash&&J!==r.descriptorHash)return je.mapAndFind.skip;let te=[];for(let le of Mt.allDependencies){let pe=L.manifest[le].get(C.identHash);typeof pe>"u"||te.push([le,pe])}return te.length===0?je.mapAndFind.skip:te});if(typeof T<"u")for(let[L,U]of T)t.manifest[L].set(U.identHash,U);else{try{let L=n.normalizeDependency(C);if((await A.getCandidates(L,{},p)).length===0)return}catch{return}t.manifest[zc.Target.DEVELOPMENT].set(C.identHash,C)}},bDt=async(t,e,r)=>{if(r.scope==="types")return;let{project:o}=t,{configuration:a}=o;if(!(a.get("tsEnableAutoTypes")??oe.existsSync(K.join(o.cwd,"tsconfig.json"))))return;let u=YBe(r),A=W.makeIdent("types",u);for(let p of Mt.allDependencies)typeof t.manifest[p].get(A.identHash)>"u"||t.manifest[p].delete(A.identHash)},kDt=(t,e)=>{e.publishConfig&&e.publishConfig.typings&&(e.typings=e.publishConfig.typings),e.publishConfig&&e.publishConfig.types&&(e.types=e.publishConfig.types)},QDt={configuration:{tsEnableAutoTypes:{description:"Whether Yarn should auto-install @types/ dependencies on 'yarn add'",type:"BOOLEAN",isNullable:!0,default:null}},hooks:{afterWorkspaceDependencyAddition:xDt,afterWorkspaceDependencyRemoval:bDt,beforeWorkspacePacking:kDt}},FDt=QDt;var XG={};Kt(XG,{VersionApplyCommand:()=>$0,VersionCheckCommand:()=>eg,VersionCommand:()=>tg,default:()=>XDt,versionUtils:()=>gw});Ye();Ye();qt();var gw={};Kt(gw,{Decision:()=>pw,applyPrerelease:()=>XBe,applyReleases:()=>zG,applyStrategy:()=>uF,clearVersionFiles:()=>VG,getUndecidedDependentWorkspaces:()=>qv,getUndecidedWorkspaces:()=>cF,openVersionFile:()=>hw,requireMoreDecisions:()=>KDt,resolveVersionFiles:()=>jv,suggestStrategy:()=>JG,updateVersionFiles:()=>KG,validateReleaseDecision:()=>fw});Ye();Pt();Nl();qt();var zBe=$e(JBe()),BA=$e(zn()),VDt=/^(>=|[~^]|)(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$/,pw=(u=>(u.UNDECIDED="undecided",u.DECLINE="decline",u.MAJOR="major",u.MINOR="minor",u.PATCH="patch",u.PRERELEASE="prerelease",u))(pw||{});function fw(t){let e=BA.default.valid(t);return e||je.validateEnum((0,zBe.default)(pw,"UNDECIDED"),t)}async function jv(t,{prerelease:e=null}={}){let r=new Map,o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return r;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=K.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Vi(A);for(let[h,E]of Object.entries(p.releases||{})){if(E==="decline")continue;let I=W.parseIdent(h),v=t.tryWorkspaceByIdent(I);if(v===null)throw new Error(`Assertion failed: Expected a release definition file to only reference existing workspaces (${K.basename(u)} references ${h})`);if(v.manifest.version===null)throw new Error(`Assertion failed: Expected the workspace to have a version (${W.prettyLocator(t.configuration,v.anchoredLocator)})`);let b=v.manifest.raw.stableVersion??v.manifest.version,C=r.get(v),T=uF(b,fw(E));if(T===null)throw new Error(`Assertion failed: Expected ${b} to support being bumped via strategy ${E}`);let L=typeof C<"u"?BA.default.gt(T,C)?T:C:T;r.set(v,L)}}return e&&(r=new Map([...r].map(([n,u])=>[n,XBe(u,{current:n.manifest.version,prerelease:e})]))),r}async function VG(t){let e=t.configuration.get("deferredVersionFolder");!oe.existsSync(e)||await oe.removePromise(e)}async function KG(t,e){let r=new Set(e),o=t.configuration.get("deferredVersionFolder");if(!oe.existsSync(o))return;let a=await oe.readdirPromise(o);for(let n of a){if(!n.endsWith(".yml"))continue;let u=K.join(o,n),A=await oe.readFilePromise(u,"utf8"),p=Vi(A),h=p?.releases;if(!!h){for(let E of Object.keys(h)){let I=W.parseIdent(E),v=t.tryWorkspaceByIdent(I);(v===null||r.has(v))&&delete p.releases[E]}Object.keys(p.releases).length>0?await oe.changeFilePromise(u,Ba(new Ba.PreserveOrdering(p))):await oe.unlinkPromise(u)}}}async function hw(t,{allowEmpty:e=!1}={}){let r=t.configuration;if(r.projectCwd===null)throw new it("This command can only be run from within a Yarn project");let o=await ra.fetchRoot(r.projectCwd),a=o!==null?await ra.fetchBase(o,{baseRefs:r.get("changesetBaseRefs")}):null,n=o!==null?await ra.fetchChangedFiles(o,{base:a.hash,project:t}):[],u=r.get("deferredVersionFolder"),A=n.filter(b=>K.contains(u,b)!==null);if(A.length>1)throw new it(`Your current branch contains multiple versioning files; this isn't supported: +- ${A.map(b=>ue.fromPortablePath(b)).join(` +- `)}`);let p=new Set(je.mapAndFilter(n,b=>{let C=t.tryWorkspaceByFilePath(b);return C===null?je.mapAndFilter.skip:C}));if(A.length===0&&p.size===0&&!e)return null;let h=A.length===1?A[0]:K.join(u,`${wn.makeHash(Math.random().toString()).slice(0,8)}.yml`),E=oe.existsSync(h)?await oe.readFilePromise(h,"utf8"):"{}",I=Vi(E),v=new Map;for(let b of I.declined||[]){let C=W.parseIdent(b),T=t.getWorkspaceByIdent(C);v.set(T,"decline")}for(let[b,C]of Object.entries(I.releases||{})){let T=W.parseIdent(b),L=t.getWorkspaceByIdent(T);v.set(L,fw(C))}return{project:t,root:o,baseHash:a!==null?a.hash:null,baseTitle:a!==null?a.title:null,changedFiles:new Set(n),changedWorkspaces:p,releaseRoots:new Set([...p].filter(b=>b.manifest.version!==null)),releases:v,async saveAll(){let b={},C=[],T=[];for(let L of t.workspaces){if(L.manifest.version===null)continue;let U=W.stringifyIdent(L.anchoredLocator),J=v.get(L);J==="decline"?C.push(U):typeof J<"u"?b[U]=fw(J):p.has(L)&&T.push(U)}await oe.mkdirPromise(K.dirname(h),{recursive:!0}),await oe.changeFilePromise(h,Ba(new Ba.PreserveOrdering({releases:Object.keys(b).length>0?b:void 0,declined:C.length>0?C:void 0,undecided:T.length>0?T:void 0})))}}}function KDt(t){return cF(t).size>0||qv(t).length>0}function cF(t){let e=new Set;for(let r of t.changedWorkspaces)r.manifest.version!==null&&(t.releases.has(r)||e.add(r));return e}function qv(t,{include:e=new Set}={}){let r=[],o=new Map(je.mapAndFilter([...t.releases],([n,u])=>u==="decline"?je.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n])),a=new Map(je.mapAndFilter([...t.releases],([n,u])=>u!=="decline"?je.mapAndFilter.skip:[n.anchoredLocator.locatorHash,n]));for(let n of t.project.workspaces)if(!(!e.has(n)&&(a.has(n.anchoredLocator.locatorHash)||o.has(n.anchoredLocator.locatorHash)))&&n.manifest.version!==null)for(let u of Mt.hardDependencies)for(let A of n.manifest.getForScope(u).values()){let p=t.project.tryWorkspaceByDescriptor(A);p!==null&&o.has(p.anchoredLocator.locatorHash)&&r.push([n,p])}return r}function JG(t,e){let r=BA.default.clean(e);for(let o of Object.values(pw))if(o!=="undecided"&&o!=="decline"&&BA.default.inc(t,o)===r)return o;return null}function uF(t,e){if(BA.default.valid(e))return e;if(t===null)throw new it(`Cannot apply the release strategy "${e}" unless the workspace already has a valid version`);if(!BA.default.valid(t))throw new it(`Cannot apply the release strategy "${e}" on a non-semver version (${t})`);let r=BA.default.inc(t,e);if(r===null)throw new it(`Cannot apply the release strategy "${e}" on the specified version (${t})`);return r}function zG(t,e,{report:r}){let o=new Map;for(let a of t.workspaces)for(let n of Mt.allDependencies)for(let u of a.manifest[n].values()){let A=t.tryWorkspaceByDescriptor(u);if(A===null||!e.has(A))continue;je.getArrayWithDefault(o,A).push([a,n,u.identHash])}for(let[a,n]of e){let u=a.manifest.version;a.manifest.version=n,BA.default.prerelease(n)===null?delete a.manifest.raw.stableVersion:a.manifest.raw.stableVersion||(a.manifest.raw.stableVersion=u);let A=a.manifest.name!==null?W.stringifyIdent(a.manifest.name):null;r.reportInfo(0,`${W.prettyLocator(t.configuration,a.anchoredLocator)}: Bumped to ${n}`),r.reportJson({cwd:ue.fromPortablePath(a.cwd),ident:A,oldVersion:u,newVersion:n});let p=o.get(a);if(!(typeof p>"u"))for(let[h,E,I]of p){let v=h.manifest[E].get(I);if(typeof v>"u")throw new Error("Assertion failed: The dependency should have existed");let b=v.range,C=!1;if(b.startsWith(Xn.protocol)&&(b=b.slice(Xn.protocol.length),C=!0,b===a.relativeCwd))continue;let T=b.match(VDt);if(!T){r.reportWarning(0,`Couldn't auto-upgrade range ${b} (in ${W.prettyLocator(t.configuration,h.anchoredLocator)})`);continue}let L=`${T[1]}${n}`;C&&(L=`${Xn.protocol}${L}`);let U=W.makeDescriptor(v,L);h.manifest[E].set(I,U)}}}var JDt=new Map([["%n",{extract:t=>t.length>=1?[t[0],t.slice(1)]:null,generate:(t=0)=>`${t+1}`}]]);function XBe(t,{current:e,prerelease:r}){let o=new BA.default.SemVer(e),a=o.prerelease.slice(),n=[];o.prerelease=[],o.format()!==t&&(a.length=0);let u=!0,A=r.split(/\./g);for(let p of A){let h=JDt.get(p);if(typeof h>"u")n.push(p),a[0]===p?a.shift():u=!1;else{let E=u?h.extract(a):null;E!==null&&typeof E[0]=="number"?(n.push(h.generate(E[0])),a=E[1]):(n.push(h.generate()),u=!1)}}return o.prerelease&&(o.prerelease=[]),`${t}-${n.join(".")}`}var $0=class extends ut{constructor(){super(...arguments);this.all=ge.Boolean("--all",!1,{description:"Apply the deferred version changes on all workspaces"});this.dryRun=ge.Boolean("--dry-run",!1,{description:"Print the versions without actually generating the package archive"});this.prerelease=ge.String("--prerelease",{description:"Add a prerelease identifier to new versions",tolerateBoolean:!0});this.recursive=ge.Boolean("-R,--recursive",{description:"Release the transitive workspaces as well"});this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);if(!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState({restoreResolutions:!1});let u=await Nt.start({configuration:r,json:this.json,stdout:this.context.stdout},async A=>{let p=this.prerelease?typeof this.prerelease!="boolean"?this.prerelease:"rc.%n":null,h=await jv(o,{prerelease:p}),E=new Map;if(this.all)E=h;else{let I=this.recursive?a.getRecursiveWorkspaceDependencies():[a];for(let v of I){let b=h.get(v);typeof b<"u"&&E.set(v,b)}}if(E.size===0){let I=h.size>0?" Did you want to add --all?":"";A.reportWarning(0,`The current workspace doesn't seem to require a version bump.${I}`);return}zG(o,E,{report:A}),this.dryRun||(p||(this.all?await VG(o):await KG(o,[...E.keys()])),A.reportSeparator())});return u.hasErrors()?u.exitCode():await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n})}};$0.paths=[["version","apply"]],$0.usage=nt.Usage({category:"Release-related commands",description:"apply all the deferred version bumps at once",details:` + This command will apply the deferred version changes and remove their definitions from the repository. + + Note that if \`--prerelease\` is set, the given prerelease identifier (by default \`rc.%d\`) will be used on all new versions and the version definitions will be kept as-is. + + By default only the current workspace will be bumped, but you can configure this behavior by using one of: + + - \`--recursive\` to also apply the version bump on its dependencies + - \`--all\` to apply the version bump on all packages in the repository + + Note that this command will also update the \`workspace:\` references across all your local workspaces, thus ensuring that they keep referring to the same workspaces even after the version bump. + `,examples:[["Apply the version change to the local workspace","yarn version apply"],["Apply the version change to all the workspaces in the local workspace","yarn version apply --all"]]});Ye();Pt();qt();var AF=$e(zn());var eg=class extends ut{constructor(){super(...arguments);this.interactive=ge.Boolean("-i,--interactive",{description:"Open an interactive interface used to set version bumps"})}async execute(){return this.interactive?await this.executeInteractive():await this.executeStandard()}async executeInteractive(){SC(this.context);let{Gem:r}=await Promise.resolve().then(()=>(AQ(),Dj)),{ScrollableItems:o}=await Promise.resolve().then(()=>(gQ(),hQ)),{FocusRequest:a}=await Promise.resolve().then(()=>(Sj(),Xwe)),{useListInput:n}=await Promise.resolve().then(()=>(pQ(),Zwe)),{renderForm:u}=await Promise.resolve().then(()=>(EQ(),yQ)),{Box:A,Text:p}=await Promise.resolve().then(()=>$e(ic())),{default:h,useCallback:E,useState:I}=await Promise.resolve().then(()=>$e(sn())),v=await Ve.find(this.context.cwd,this.context.plugins),{project:b,workspace:C}=await St.find(v,this.context.cwd);if(!C)throw new rr(b.cwd,this.context.cwd);await b.restoreInstallState();let T=await hw(b);if(T===null||T.releaseRoots.size===0)return 0;if(T.root===null)throw new it("This command can only be run on Git repositories");let L=()=>h.createElement(A,{flexDirection:"row",paddingBottom:1},h.createElement(A,{flexDirection:"column",width:60},h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select workspaces.")),h.createElement(A,null,h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},""),"/",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to select release strategies."))),h.createElement(A,{flexDirection:"column"},h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to save.")),h.createElement(A,{marginLeft:1},h.createElement(p,null,"Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to abort.")))),U=({workspace:ye,active:ae,decision:we,setDecision:Pe})=>{let g=ye.manifest.raw.stableVersion??ye.manifest.version;if(g===null)throw new Error(`Assertion failed: The version should have been set (${W.prettyLocator(v,ye.anchoredLocator)})`);if(AF.default.prerelease(g)!==null)throw new Error(`Assertion failed: Prerelease identifiers shouldn't be found (${g})`);let Ee=["undecided","decline","patch","minor","major"];n(we,Ee,{active:ae,minus:"left",plus:"right",set:Pe});let De=we==="undecided"?h.createElement(p,{color:"yellow"},g):we==="decline"?h.createElement(p,{color:"green"},g):h.createElement(p,null,h.createElement(p,{color:"magenta"},g)," \u2192 ",h.createElement(p,{color:"green"},AF.default.valid(we)?we:AF.default.inc(g,we)));return h.createElement(A,{flexDirection:"column"},h.createElement(A,null,h.createElement(p,null,W.prettyLocator(v,ye.anchoredLocator)," - ",De)),h.createElement(A,null,Ee.map(ce=>h.createElement(A,{key:ce,paddingLeft:2},h.createElement(p,null,h.createElement(r,{active:ce===we})," ",ce)))))},J=ye=>{let ae=new Set(T.releaseRoots),we=new Map([...ye].filter(([Pe])=>ae.has(Pe)));for(;;){let Pe=qv({project:T.project,releases:we}),g=!1;if(Pe.length>0){for(let[Ee]of Pe)if(!ae.has(Ee)){ae.add(Ee),g=!0;let De=ye.get(Ee);typeof De<"u"&&we.set(Ee,De)}}if(!g)break}return{relevantWorkspaces:ae,relevantReleases:we}},te=()=>{let[ye,ae]=I(()=>new Map(T.releases)),we=E((Pe,g)=>{let Ee=new Map(ye);g!=="undecided"?Ee.set(Pe,g):Ee.delete(Pe);let{relevantReleases:De}=J(Ee);ae(De)},[ye,ae]);return[ye,we]},le=({workspaces:ye,releases:ae})=>{let we=[];we.push(`${ye.size} total`);let Pe=0,g=0;for(let Ee of ye){let De=ae.get(Ee);typeof De>"u"?g+=1:De!=="decline"&&(Pe+=1)}return we.push(`${Pe} release${Pe===1?"":"s"}`),we.push(`${g} remaining`),h.createElement(p,{color:"yellow"},we.join(", "))},Ae=await u(({useSubmit:ye})=>{let[ae,we]=te();ye(ae);let{relevantWorkspaces:Pe}=J(ae),g=new Set([...Pe].filter(ne=>!T.releaseRoots.has(ne))),[Ee,De]=I(0),ce=E(ne=>{switch(ne){case a.BEFORE:De(Ee-1);break;case a.AFTER:De(Ee+1);break}},[Ee,De]);return h.createElement(A,{flexDirection:"column"},h.createElement(L,null),h.createElement(A,null,h.createElement(p,{wrap:"wrap"},"The following files have been modified in your local checkout.")),h.createElement(A,{flexDirection:"column",marginTop:1,paddingLeft:2},[...T.changedFiles].map(ne=>h.createElement(A,{key:ne},h.createElement(p,null,h.createElement(p,{color:"grey"},ue.fromPortablePath(T.root)),ue.sep,ue.relative(ue.fromPortablePath(T.root),ue.fromPortablePath(ne)))))),T.releaseRoots.size>0&&h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"Because of those files having been modified, the following workspaces may need to be released again (note that private workspaces are also shown here, because even though they won't be published, releasing them will allow us to flag their dependents for potential re-release):")),g.size>3?h.createElement(A,{marginTop:1},h.createElement(le,{workspaces:T.releaseRoots,releases:ae})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:Ee%2===0,radius:1,size:2,onFocusRequest:ce},[...T.releaseRoots].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:ae.get(ne)||"undecided",setDecision:ee=>we(ne,ee)}))))),g.size>0?h.createElement(h.Fragment,null,h.createElement(A,{marginTop:1},h.createElement(p,{wrap:"wrap"},"The following workspaces depend on other workspaces that have been marked for release, and thus may need to be released as well:")),h.createElement(A,null,h.createElement(p,null,"(Press ",h.createElement(p,{bold:!0,color:"cyanBright"},"")," to move the focus between the workspace groups.)")),g.size>5?h.createElement(A,{marginTop:1},h.createElement(le,{workspaces:g,releases:ae})):null,h.createElement(A,{marginTop:1,flexDirection:"column"},h.createElement(o,{active:Ee%2===1,radius:2,size:2,onFocusRequest:ce},[...g].map(ne=>h.createElement(U,{key:ne.cwd,workspace:ne,decision:ae.get(ne)||"undecided",setDecision:ee=>we(ne,ee)}))))):null)},{versionFile:T},{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});if(typeof Ae>"u")return 1;T.releases.clear();for(let[ye,ae]of Ae)T.releases.set(ye,ae);await T.saveAll()}async executeStandard(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);return await o.restoreInstallState(),(await Nt.start({configuration:r,stdout:this.context.stdout},async u=>{let A=await hw(o);if(A===null||A.releaseRoots.size===0)return;if(A.root===null)throw new it("This command can only be run on Git repositories");if(u.reportInfo(0,`Your PR was started right after ${de.pretty(r,A.baseHash.slice(0,7),"yellow")} ${de.pretty(r,A.baseTitle,"magenta")}`),A.changedFiles.size>0){u.reportInfo(0,"You have changed the following files since then:"),u.reportSeparator();for(let v of A.changedFiles)u.reportInfo(null,`${de.pretty(r,ue.fromPortablePath(A.root),"gray")}${ue.sep}${ue.relative(ue.fromPortablePath(A.root),ue.fromPortablePath(v))}`)}let p=!1,h=!1,E=cF(A);if(E.size>0){p||u.reportSeparator();for(let v of E)u.reportError(0,`${W.prettyLocator(r,v.anchoredLocator)} has been modified but doesn't have a release strategy attached`);p=!0}let I=qv(A);for(let[v,b]of I)h||u.reportSeparator(),u.reportError(0,`${W.prettyLocator(r,v.anchoredLocator)} doesn't have a release strategy attached, but depends on ${W.prettyWorkspace(r,b)} which is planned for release.`),h=!0;(p||h)&&(u.reportSeparator(),u.reportInfo(0,"This command detected that at least some workspaces have received modifications without explicit instructions as to how they had to be released (if needed)."),u.reportInfo(0,"To correct these errors, run `yarn version check --interactive` then follow the instructions."))})).exitCode()}};eg.paths=[["version","check"]],eg.usage=nt.Usage({category:"Release-related commands",description:"check that all the relevant packages have been bumped",details:"\n **Warning:** This command currently requires Git.\n\n This command will check that all the packages covered by the files listed in argument have been properly bumped or declined to bump.\n\n In the case of a bump, the check will also cover transitive packages - meaning that should `Foo` be bumped, a package `Bar` depending on `Foo` will require a decision as to whether `Bar` will need to be bumped. This check doesn't cross packages that have declined to bump.\n\n In case no arguments are passed to the function, the list of modified files will be generated by comparing the HEAD against `master`.\n ",examples:[["Check whether the modified packages need a bump","yarn version check"]]});Ye();qt();var fF=$e(zn());var tg=class extends ut{constructor(){super(...arguments);this.deferred=ge.Boolean("-d,--deferred",{description:"Prepare the version to be bumped during the next release cycle"});this.immediate=ge.Boolean("-i,--immediate",{description:"Bump the version immediately"});this.strategy=ge.String()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!a)throw new rr(o.cwd,this.context.cwd);let n=r.get("preferDeferredVersions");this.deferred&&(n=!0),this.immediate&&(n=!1);let u=fF.default.valid(this.strategy),A=this.strategy==="decline",p;if(u)if(a.manifest.version!==null){let E=JG(a.manifest.version,this.strategy);E!==null?p=E:p=this.strategy}else p=this.strategy;else{let E=a.manifest.version;if(!A){if(E===null)throw new it("Can't bump the version if there wasn't a version to begin with - use 0.0.0 as initial version then run the command again.");if(typeof E!="string"||!fF.default.valid(E))throw new it(`Can't bump the version (${E}) if it's not valid semver`)}p=fw(this.strategy)}if(!n){let I=(await jv(o)).get(a);if(typeof I<"u"&&p!=="decline"){let v=uF(a.manifest.version,p);if(fF.default.lt(v,I))throw new it(`Can't bump the version to one that would be lower than the current deferred one (${I})`)}}let h=await hw(o,{allowEmpty:!0});return h.releases.set(a,p),await h.saveAll(),n?0:await this.cli.run(["version","apply"])}};tg.paths=[["version"]],tg.usage=nt.Usage({category:"Release-related commands",description:"apply a new version to the current package",details:"\n This command will bump the version number for the given package, following the specified strategy:\n\n - If `major`, the first number from the semver range will be increased (`X.0.0`).\n - If `minor`, the second number from the semver range will be increased (`0.X.0`).\n - If `patch`, the third number from the semver range will be increased (`0.0.X`).\n - If prefixed by `pre` (`premajor`, ...), a `-0` suffix will be set (`0.0.0-0`).\n - If `prerelease`, the suffix will be increased (`0.0.0-X`); the third number from the semver range will also be increased if there was no suffix in the previous version.\n - If `decline`, the nonce will be increased for `yarn version check` to pass without version bump.\n - If a valid semver range, it will be used as new version.\n - If unspecified, Yarn will ask you for guidance.\n\n For more information about the `--deferred` flag, consult our documentation (https://yarnpkg.com/features/release-workflow#deferred-versioning).\n ",examples:[["Immediately bump the version to the next major","yarn version major"],["Prepare the version to be bumped to the next major","yarn version major --deferred"]]});var zDt={configuration:{deferredVersionFolder:{description:"Folder where are stored the versioning files",type:"ABSOLUTE_PATH",default:"./.yarn/versions"},preferDeferredVersions:{description:"If true, running `yarn version` will assume the `--deferred` flag unless `--immediate` is set",type:"BOOLEAN",default:!1}},commands:[$0,eg,tg]},XDt=zDt;var ZG={};Kt(ZG,{WorkspacesFocusCommand:()=>rg,WorkspacesForeachCommand:()=>op,default:()=>ePt});Ye();Ye();qt();var rg=class extends ut{constructor(){super(...arguments);this.json=ge.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.production=ge.Boolean("--production",!1,{description:"Only install regular dependencies by omitting dev dependencies"});this.all=ge.Boolean("-A,--all",!1,{description:"Install the entire project"});this.workspaces=ge.Rest()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd),n=await Lr.find(r);await o.restoreInstallState({restoreResolutions:!1});let u;if(this.all)u=new Set(o.workspaces);else if(this.workspaces.length===0){if(!a)throw new rr(o.cwd,this.context.cwd);u=new Set([a])}else u=new Set(this.workspaces.map(A=>o.getWorkspaceByIdent(W.parseIdent(A))));for(let A of u)for(let p of this.production?["dependencies"]:Mt.hardDependencies)for(let h of A.manifest.getForScope(p).values()){let E=o.tryWorkspaceByDescriptor(h);E!==null&&u.add(E)}for(let A of o.workspaces)u.has(A)?this.production&&A.manifest.devDependencies.clear():(A.manifest.installConfig=A.manifest.installConfig||{},A.manifest.installConfig.selfReferences=!1,A.manifest.dependencies.clear(),A.manifest.devDependencies.clear(),A.manifest.peerDependencies.clear(),A.manifest.scripts.clear());return await o.installWithNewReport({json:this.json,stdout:this.context.stdout},{cache:n,persistProject:!1})}};rg.paths=[["workspaces","focus"]],rg.usage=nt.Usage({category:"Workspace-related commands",description:"install a single workspace and its dependencies",details:"\n This command will run an install as if the specified workspaces (and all other workspaces they depend on) were the only ones in the project. If no workspaces are explicitly listed, the active one will be assumed.\n\n Note that this command is only very moderately useful when using zero-installs, since the cache will contain all the packages anyway - meaning that the only difference between a full install and a focused install would just be a few extra lines in the `.pnp.cjs` file, at the cost of introducing an extra complexity.\n\n If the `-A,--all` flag is set, the entire project will be installed. Combine with `--production` to replicate the old `yarn install --production`.\n "});Ye();Ye();Ye();qt();var dw=$e(Zo()),$Be=$e(nd());Za();var op=class extends ut{constructor(){super(...arguments);this.from=ge.Array("--from",{description:"An array of glob pattern idents or paths from which to base any recursion"});this.all=ge.Boolean("-A,--all",{description:"Run the command on all workspaces of a project"});this.recursive=ge.Boolean("-R,--recursive",{description:"Run the command on the current workspace and all of its recursive dependencies"});this.worktree=ge.Boolean("-W,--worktree",{description:"Run the command on all workspaces of the current worktree"});this.verbose=ge.Boolean("-v,--verbose",{description:"Prefix each output line with the name of the originating workspace"});this.parallel=ge.Boolean("-p,--parallel",!1,{description:"Run the commands in parallel"});this.interlaced=ge.Boolean("-i,--interlaced",!1,{description:"Print the output of commands in real-time instead of buffering it"});this.jobs=ge.String("-j,--jobs",{description:"The maximum number of parallel tasks that the execution will be limited to; or `unlimited`",validator:LR([Vs(["unlimited"]),oI(NR(),[OR(),MR(1)])])});this.topological=ge.Boolean("-t,--topological",!1,{description:"Run the command after all workspaces it depends on (regular) have finished"});this.topologicalDev=ge.Boolean("--topological-dev",!1,{description:"Run the command after all workspaces it depends on (regular + dev) have finished"});this.include=ge.Array("--include",[],{description:"An array of glob pattern idents or paths; only matching workspaces will be traversed"});this.exclude=ge.Array("--exclude",[],{description:"An array of glob pattern idents or paths; matching workspaces won't be traversed"});this.publicOnly=ge.Boolean("--no-private",{description:"Avoid running the command on private workspaces"});this.since=ge.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.dryRun=ge.Boolean("-n,--dry-run",{description:"Print the commands that would be run, without actually running them"});this.commandName=ge.String();this.args=ge.Proxy()}async execute(){let r=await Ve.find(this.context.cwd,this.context.plugins),{project:o,workspace:a}=await St.find(r,this.context.cwd);if(!this.all&&!a)throw new rr(o.cwd,this.context.cwd);await o.restoreInstallState();let n=this.cli.process([this.commandName,...this.args]),u=n.path.length===1&&n.path[0]==="run"&&typeof n.scriptName<"u"?n.scriptName:null;if(n.path.length===0)throw new it("Invalid subcommand name for iteration - use the 'run' keyword if you wish to execute a script");let A=ae=>{!this.dryRun||this.context.stdout.write(`${ae} +`)},p=()=>{let ae=this.from.map(we=>dw.default.matcher(we));return o.workspaces.filter(we=>{let Pe=W.stringifyIdent(we.anchoredLocator),g=we.relativeCwd;return ae.some(Ee=>Ee(Pe)||Ee(g))})},h=[];if(this.since?(A("Option --since is set; selecting the changed workspaces as root for workspace selection"),h=Array.from(await ra.fetchChangedWorkspaces({ref:this.since,project:o}))):this.from?(A("Option --from is set; selecting the specified workspaces"),h=[...p()]):this.worktree?(A("Option --worktree is set; selecting the current workspace"),h=[a]):this.recursive?(A("Option --recursive is set; selecting the current workspace"),h=[a]):this.all&&(A("Option --all is set; selecting all workspaces"),h=[...o.workspaces]),this.dryRun&&!this.all){for(let ae of h)A(` +- ${ae.relativeCwd} + ${W.prettyLocator(r,ae.anchoredLocator)}`);h.length>0&&A("")}let E;if(this.recursive?this.since?(A("Option --recursive --since is set; recursively selecting all dependent workspaces"),E=new Set(h.map(ae=>[...ae.getRecursiveWorkspaceDependents()]).flat())):(A("Option --recursive is set; recursively selecting all transitive dependencies"),E=new Set(h.map(ae=>[...ae.getRecursiveWorkspaceDependencies()]).flat())):this.worktree?(A("Option --worktree is set; recursively selecting all nested workspaces"),E=new Set(h.map(ae=>[...ae.getRecursiveWorkspaceChildren()]).flat())):E=null,E!==null&&(h=[...new Set([...h,...E])],this.dryRun))for(let ae of E)A(` +- ${ae.relativeCwd} + ${W.prettyLocator(r,ae.anchoredLocator)}`);let I=[],v=!1;if(u?.includes(":")){for(let ae of o.workspaces)if(ae.manifest.scripts.has(u)&&(v=!v,v===!1))break}for(let ae of h){if(u&&!ae.manifest.scripts.has(u)&&!v&&!(await un.getWorkspaceAccessibleBinaries(ae)).has(u)){A(`Excluding ${ae.relativeCwd} because it doesn't have a "${u}" script`);continue}if(!(u===r.env.npm_lifecycle_event&&ae.cwd===a.cwd)){if(this.include.length>0&&!dw.default.isMatch(W.stringifyIdent(ae.anchoredLocator),this.include)&&!dw.default.isMatch(ae.relativeCwd,this.include)){A(`Excluding ${ae.relativeCwd} because it doesn't match the --include filter`);continue}if(this.exclude.length>0&&(dw.default.isMatch(W.stringifyIdent(ae.anchoredLocator),this.exclude)||dw.default.isMatch(ae.relativeCwd,this.exclude))){A(`Excluding ${ae.relativeCwd} because it matches the --include filter`);continue}if(this.publicOnly&&ae.manifest.private===!0){A(`Excluding ${ae.relativeCwd} because it's a private workspace and --no-private was set`);continue}I.push(ae)}}if(this.dryRun)return 0;let b=this.verbose??this.context.stdout.isTTY,C=this.parallel?this.jobs==="unlimited"?1/0:Number(this.jobs)||Math.ceil(Ji.availableParallelism()/2):1,T=C===1?!1:this.parallel,L=T?this.interlaced:!0,U=(0,$Be.default)(C),J=new Map,te=new Set,le=0,pe=null,Ae=!1,ye=await Nt.start({configuration:r,stdout:this.context.stdout,includePrefix:!1},async ae=>{let we=async(Pe,{commandIndex:g})=>{if(Ae)return-1;!T&&b&&g>1&&ae.reportSeparator();let Ee=ZDt(Pe,{configuration:r,verbose:b,commandIndex:g}),[De,ce]=ZBe(ae,{prefix:Ee,interlaced:L}),[ne,ee]=ZBe(ae,{prefix:Ee,interlaced:L});try{b&&ae.reportInfo(null,`${Ee} Process started`);let Ie=Date.now(),ke=await this.cli.run([this.commandName,...this.args],{cwd:Pe.cwd,stdout:De,stderr:ne})||0;De.end(),ne.end(),await ce,await ee;let ht=Date.now();if(b){let H=r.get("enableTimers")?`, completed in ${de.pretty(r,ht-Ie,de.Type.DURATION)}`:"";ae.reportInfo(null,`${Ee} Process exited (exit code ${ke})${H}`)}return ke===130&&(Ae=!0,pe=ke),ke}catch(Ie){throw De.end(),ne.end(),await ce,await ee,Ie}};for(let Pe of I)J.set(Pe.anchoredLocator.locatorHash,Pe);for(;J.size>0&&!ae.hasErrors();){let Pe=[];for(let[De,ce]of J){if(te.has(ce.anchoredDescriptor.descriptorHash))continue;let ne=!0;if(this.topological||this.topologicalDev){let ee=this.topologicalDev?new Map([...ce.manifest.dependencies,...ce.manifest.devDependencies]):ce.manifest.dependencies;for(let Ie of ee.values()){let ke=o.tryWorkspaceByDescriptor(Ie);if(ne=ke===null||!J.has(ke.anchoredLocator.locatorHash),!ne)break}}if(!!ne&&(te.add(ce.anchoredDescriptor.descriptorHash),Pe.push(U(async()=>{let ee=await we(ce,{commandIndex:++le});return J.delete(De),te.delete(ce.anchoredDescriptor.descriptorHash),ee})),!T))break}if(Pe.length===0){let De=Array.from(J.values()).map(ce=>W.prettyLocator(r,ce.anchoredLocator)).join(", ");ae.reportError(3,`Dependency cycle detected (${De})`);return}let Ee=(await Promise.all(Pe)).find(De=>De!==0);pe===null&&(pe=typeof Ee<"u"?1:pe),(this.topological||this.topologicalDev)&&typeof Ee<"u"&&ae.reportError(0,"The command failed for workspaces that are depended upon by other workspaces; can't satisfy the dependency graph")}});return pe!==null?pe:ye.exitCode()}};op.paths=[["workspaces","foreach"]],op.usage=nt.Usage({category:"Workspace-related commands",description:"run a command on all workspaces",details:"\n This command will run a given sub-command on current and all its descendant workspaces. Various flags can alter the exact behavior of the command:\n\n - If `-p,--parallel` is set, the commands will be ran in parallel; they'll by default be limited to a number of parallel tasks roughly equal to half your core number, but that can be overridden via `-j,--jobs`, or disabled by setting `-j unlimited`.\n\n - If `-p,--parallel` and `-i,--interlaced` are both set, Yarn will print the lines from the output as it receives them. If `-i,--interlaced` wasn't set, it would instead buffer the output from each process and print the resulting buffers only after their source processes have exited.\n\n - If `-t,--topological` is set, Yarn will only run the command after all workspaces that it depends on through the `dependencies` field have successfully finished executing. If `--topological-dev` is set, both the `dependencies` and `devDependencies` fields will be considered when figuring out the wait points.\n\n - If `-A,--all` is set, Yarn will run the command on all the workspaces of a project.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If `-W,--worktree` is set, Yarn will find workspaces to run the command on by looking at the current worktree.\n\n - If `--from` is set, Yarn will use the packages matching the 'from' glob as the starting point for any recursive search.\n\n - If `--since` is set, Yarn will only run the command on workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `--dry-run` is set, Yarn will explain what it would do without actually doing anything.\n\n - The command may apply to only some workspaces through the use of `--include` which acts as a whitelist. The `--exclude` flag will do the opposite and will be a list of packages that mustn't execute the script. Both flags accept glob patterns (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n Adding the `-v,--verbose` flag (automatically enabled in interactive terminal environments) will cause Yarn to print more information; in particular the name of the workspace that generated the output will be printed at the front of each line.\n\n If the command is `run` and the script being run does not exist the child workspace will be skipped without error.\n ",examples:[["Publish all packages","yarn workspaces foreach -A npm publish --tolerate-republish"],["Run the build script on all descendant packages","yarn workspaces foreach -A run build"],["Run the build script on current and all descendant packages in parallel, building package dependencies first","yarn workspaces foreach -Apt run build"],["Run the build script on several packages and all their dependencies, building dependencies first","yarn workspaces foreach -Rpt --from '{workspace-a,workspace-b}' run build"]]}),op.schema=[lI("all",Gu.Forbids,["from","recursive","since","worktree"],{missingIf:"undefined"}),UR(["all","recursive","since","worktree"],{missingIf:"undefined"})];function ZBe(t,{prefix:e,interlaced:r}){let o=t.createStreamReporter(e),a=new je.DefaultStream;a.pipe(o,{end:!1}),a.on("finish",()=>{o.end()});let n=new Promise(A=>{o.on("finish",()=>{A(a.active)})});if(r)return[a,n];let u=new je.BufferStream;return u.pipe(a,{end:!1}),u.on("finish",()=>{a.end()}),[u,n]}function ZDt(t,{configuration:e,commandIndex:r,verbose:o}){if(!o)return null;let n=`[${W.stringifyIdent(t.anchoredLocator)}]:`,u=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],A=u[r%u.length];return de.pretty(e,n,A)}var $Dt={commands:[rg,op]},ePt=$Dt;var fC=()=>({modules:new Map([["@yarnpkg/cli",o2],["@yarnpkg/core",s2],["@yarnpkg/fslib",Vw],["@yarnpkg/libzip",x1],["@yarnpkg/parsers",tI],["@yarnpkg/shell",T1],["clipanion",pI],["semver",tPt],["typanion",Ko],["@yarnpkg/plugin-essentials",tH],["@yarnpkg/plugin-compat",oH],["@yarnpkg/plugin-constraints",BH],["@yarnpkg/plugin-dlx",vH],["@yarnpkg/plugin-exec",SH],["@yarnpkg/plugin-file",bH],["@yarnpkg/plugin-git",eH],["@yarnpkg/plugin-github",FH],["@yarnpkg/plugin-http",TH],["@yarnpkg/plugin-init",RH],["@yarnpkg/plugin-interactive-tools",Lj],["@yarnpkg/plugin-link",Mj],["@yarnpkg/plugin-nm",Cq],["@yarnpkg/plugin-npm",EG],["@yarnpkg/plugin-npm-cli",xG],["@yarnpkg/plugin-pack",hG],["@yarnpkg/plugin-patch",NG],["@yarnpkg/plugin-pnp",lq],["@yarnpkg/plugin-pnpm",OG],["@yarnpkg/plugin-stage",YG],["@yarnpkg/plugin-typescript",WG],["@yarnpkg/plugin-version",XG],["@yarnpkg/plugin-workspace-tools",ZG]]),plugins:new Set(["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-constraints","@yarnpkg/plugin-dlx","@yarnpkg/plugin-exec","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-interactive-tools","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm","@yarnpkg/plugin-stage","@yarnpkg/plugin-typescript","@yarnpkg/plugin-version","@yarnpkg/plugin-workspace-tools"])});function rve({cwd:t,pluginConfiguration:e}){let r=new as({binaryLabel:"Yarn Package Manager",binaryName:"yarn",binaryVersion:tn??""});return Object.assign(r,{defaultContext:{...as.defaultContext,cwd:t,plugins:e,quiet:!1,stdin:process.stdin,stdout:process.stdout,stderr:process.stderr}})}function rPt(t){if(je.parseOptionalBoolean(process.env.YARN_IGNORE_NODE))return!0;let r=process.versions.node,o=">=18.12.0";if(kr.satisfiesWithPrereleases(r,o))return!0;let a=new it(`This tool requires a Node version compatible with ${o} (got ${r}). Upgrade Node, or set \`YARN_IGNORE_NODE=1\` in your environment.`);return as.defaultContext.stdout.write(t.error(a)),!1}async function nve({selfPath:t,pluginConfiguration:e}){return await Ve.find(ue.toPortablePath(process.cwd()),e,{strict:!1,usePathCheck:t})}function nPt(t,e,{yarnPath:r}){if(!oe.existsSync(r))return t.error(new Error(`The "yarn-path" option has been set, but the specified location doesn't exist (${r}).`)),1;process.on("SIGINT",()=>{});let o={stdio:"inherit",env:{...process.env,YARN_IGNORE_PATH:"1"}};try{(0,eve.execFileSync)(process.execPath,[ue.fromPortablePath(r),...e],o)}catch(a){return a.status??1}return 0}function iPt(t,e){let r=null,o=e;return e.length>=2&&e[0]==="--cwd"?(r=ue.toPortablePath(e[1]),o=e.slice(2)):e.length>=1&&e[0].startsWith("--cwd=")?(r=ue.toPortablePath(e[0].slice(6)),o=e.slice(1)):e[0]==="add"&&e[e.length-2]==="--cwd"&&(r=ue.toPortablePath(e[e.length-1]),o=e.slice(0,e.length-2)),t.defaultContext.cwd=r!==null?K.resolve(r):K.cwd(),o}function sPt(t,{configuration:e}){if(!e.get("enableTelemetry")||tve.isCI||!process.stdout.isTTY)return;Ve.telemetry=new cC(e,"puba9cdc10ec5790a2cf4969dd413a47270");let o=/^@yarnpkg\/plugin-(.*)$/;for(let a of e.plugins.keys())uC.has(a.match(o)?.[1]??"")&&Ve.telemetry?.reportPluginName(a);t.binaryVersion&&Ve.telemetry.reportVersion(t.binaryVersion)}function ive(t,{configuration:e}){for(let r of e.plugins.values())for(let o of r.commands||[])t.register(o)}async function oPt(t,e,{selfPath:r,pluginConfiguration:o}){if(!rPt(t))return 1;let a=await nve({selfPath:r,pluginConfiguration:o}),n=a.get("yarnPath"),u=a.get("ignorePath");if(n&&!u)return nPt(t,e,{yarnPath:n});delete process.env.YARN_IGNORE_PATH;let A=iPt(t,e);sPt(t,{configuration:a}),ive(t,{configuration:a});let p=t.process(A,t.defaultContext);return p.help||Ve.telemetry?.reportCommandName(p.path.join(" ")),await t.run(p,t.defaultContext)}async function the({cwd:t=K.cwd(),pluginConfiguration:e=fC()}={}){let r=rve({cwd:t,pluginConfiguration:e}),o=await nve({pluginConfiguration:e,selfPath:null});return ive(r,{configuration:o}),r}async function sk(t,{cwd:e=K.cwd(),selfPath:r,pluginConfiguration:o}){let a=rve({cwd:e,pluginConfiguration:o});try{process.exitCode=await oPt(a,t,{selfPath:r,pluginConfiguration:o})}catch(n){as.defaultContext.stdout.write(a.error(n)),process.exitCode=1}finally{await oe.rmtempPromise()}}sk(process.argv.slice(2),{cwd:K.cwd(),selfPath:ue.toPortablePath(ue.resolve(process.argv[1])),pluginConfiguration:fC()});})(); +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ +/*! + * buildToken + * Builds OAuth token prefix (helper function) + * + * @name buildToken + * @function + * @param {GitUrl} obj The parsed Git url object. + * @return {String} token prefix + */ +/*! + * fill-range + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Licensed under the MIT License. + */ +/*! + * is-extglob + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + */ +/*! + * is-glob + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ +/*! + * is-number + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Released under the MIT License. + */ +/*! + * is-windows + * + * Copyright © 2015-2018, Jon Schlinkert. + * Released under the MIT License. + */ +/*! + * to-regex-range + * + * Copyright (c) 2015-present, Jon Schlinkert. + * Released under the MIT License. + */ +/** + @license + Copyright (c) 2015, Rebecca Turner + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + */ +/** + @license + Copyright Joyent, Inc. and other Node contributors. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to permit + persons to whom the Software is furnished to do so, subject to the + following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN + NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +/** + @license + Copyright Node.js contributors. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + IN THE SOFTWARE. +*/ +/** + @license + The MIT License (MIT) + + Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ +/** @license React v0.18.0 + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/** @license React v0.24.0 + * react-reconciler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +/** @license React v16.13.1 + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ diff --git a/tgui/.yarn/sdks/eslint/bin/eslint.js b/tgui/.yarn/sdks/eslint/bin/eslint.js new file mode 100644 index 000000000000..9ef98e400b47 --- /dev/null +++ b/tgui/.yarn/sdks/eslint/bin/eslint.js @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require eslint/bin/eslint.js + require(absPnpApiPath).setup(); + } +} + +// Defer to the real eslint/bin/eslint.js your application uses +module.exports = absRequire(`eslint/bin/eslint.js`); diff --git a/tgui/.yarn/sdks/eslint/lib/api.js b/tgui/.yarn/sdks/eslint/lib/api.js new file mode 100644 index 000000000000..653b22bae06f --- /dev/null +++ b/tgui/.yarn/sdks/eslint/lib/api.js @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require eslint + require(absPnpApiPath).setup(); + } +} + +// Defer to the real eslint your application uses +module.exports = absRequire(`eslint`); diff --git a/tgui/.yarn/sdks/eslint/lib/unsupported-api.js b/tgui/.yarn/sdks/eslint/lib/unsupported-api.js new file mode 100644 index 000000000000..30fdf158b475 --- /dev/null +++ b/tgui/.yarn/sdks/eslint/lib/unsupported-api.js @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require eslint/use-at-your-own-risk + require(absPnpApiPath).setup(); + } +} + +// Defer to the real eslint/use-at-your-own-risk your application uses +module.exports = absRequire(`eslint/use-at-your-own-risk`); diff --git a/tgui/.yarn/sdks/eslint/package.json b/tgui/.yarn/sdks/eslint/package.json new file mode 100644 index 000000000000..f9672f35449d --- /dev/null +++ b/tgui/.yarn/sdks/eslint/package.json @@ -0,0 +1,14 @@ +{ + "name": "eslint", + "version": "8.56.0-sdk", + "main": "./lib/api.js", + "type": "commonjs", + "bin": { + "eslint": "./bin/eslint.js" + }, + "exports": { + "./package.json": "./package.json", + ".": "./lib/api.js", + "./use-at-your-own-risk": "./lib/unsupported-api.js" + } +} diff --git a/tgui/.yarn/sdks/integrations.yml b/tgui/.yarn/sdks/integrations.yml new file mode 100644 index 000000000000..aa9d0d0ad81a --- /dev/null +++ b/tgui/.yarn/sdks/integrations.yml @@ -0,0 +1,5 @@ +# This file is automatically generated by @yarnpkg/sdks. +# Manual changes might be lost! + +integrations: + - vscode diff --git a/tgui/.yarn/sdks/prettier/bin/prettier.cjs b/tgui/.yarn/sdks/prettier/bin/prettier.cjs new file mode 100644 index 000000000000..5efad688e739 --- /dev/null +++ b/tgui/.yarn/sdks/prettier/bin/prettier.cjs @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require prettier/bin/prettier.cjs + require(absPnpApiPath).setup(); + } +} + +// Defer to the real prettier/bin/prettier.cjs your application uses +module.exports = absRequire(`prettier/bin/prettier.cjs`); diff --git a/tgui/.yarn/sdks/prettier/index.cjs b/tgui/.yarn/sdks/prettier/index.cjs new file mode 100644 index 000000000000..8758e367a725 --- /dev/null +++ b/tgui/.yarn/sdks/prettier/index.cjs @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require prettier + require(absPnpApiPath).setup(); + } +} + +// Defer to the real prettier your application uses +module.exports = absRequire(`prettier`); diff --git a/tgui/.yarn/sdks/prettier/package.json b/tgui/.yarn/sdks/prettier/package.json new file mode 100644 index 000000000000..d2b89e5f34b1 --- /dev/null +++ b/tgui/.yarn/sdks/prettier/package.json @@ -0,0 +1,7 @@ +{ + "name": "prettier", + "version": "3.1.1-sdk", + "main": "./index.cjs", + "type": "commonjs", + "bin": "./bin/prettier.cjs" +} diff --git a/tgui/.yarn/sdks/typescript/bin/tsc b/tgui/.yarn/sdks/typescript/bin/tsc new file mode 100644 index 000000000000..454b950b7e8f --- /dev/null +++ b/tgui/.yarn/sdks/typescript/bin/tsc @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript/bin/tsc + require(absPnpApiPath).setup(); + } +} + +// Defer to the real typescript/bin/tsc your application uses +module.exports = absRequire(`typescript/bin/tsc`); diff --git a/tgui/.yarn/sdks/typescript/bin/tsserver b/tgui/.yarn/sdks/typescript/bin/tsserver new file mode 100644 index 000000000000..d7a605684df9 --- /dev/null +++ b/tgui/.yarn/sdks/typescript/bin/tsserver @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript/bin/tsserver + require(absPnpApiPath).setup(); + } +} + +// Defer to the real typescript/bin/tsserver your application uses +module.exports = absRequire(`typescript/bin/tsserver`); diff --git a/tgui/.yarn/sdks/typescript/lib/tsc.js b/tgui/.yarn/sdks/typescript/lib/tsc.js new file mode 100644 index 000000000000..2f62fc96c0a0 --- /dev/null +++ b/tgui/.yarn/sdks/typescript/lib/tsc.js @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript/lib/tsc.js + require(absPnpApiPath).setup(); + } +} + +// Defer to the real typescript/lib/tsc.js your application uses +module.exports = absRequire(`typescript/lib/tsc.js`); diff --git a/tgui/.yarn/sdks/typescript/lib/tsserver.js b/tgui/.yarn/sdks/typescript/lib/tsserver.js new file mode 100644 index 000000000000..bbb1e46501b5 --- /dev/null +++ b/tgui/.yarn/sdks/typescript/lib/tsserver.js @@ -0,0 +1,225 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +const moduleWrapper = tsserver => { + if (!process.versions.pnp) { + return tsserver; + } + + const {isAbsolute} = require(`path`); + const pnpApi = require(`pnpapi`); + + const isVirtual = str => str.match(/\/(\$\$virtual|__virtual__)\//); + const isPortal = str => str.startsWith("portal:/"); + const normalize = str => str.replace(/\\/g, `/`).replace(/^\/?/, `/`); + + const dependencyTreeRoots = new Set(pnpApi.getDependencyTreeRoots().map(locator => { + return `${locator.name}@${locator.reference}`; + })); + + // VSCode sends the zip paths to TS using the "zip://" prefix, that TS + // doesn't understand. This layer makes sure to remove the protocol + // before forwarding it to TS, and to add it back on all returned paths. + + function toEditorPath(str) { + // We add the `zip:` prefix to both `.zip/` paths and virtual paths + if (isAbsolute(str) && !str.match(/^\^?(zip:|\/zip\/)/) && (str.match(/\.zip\//) || isVirtual(str))) { + // We also take the opportunity to turn virtual paths into physical ones; + // this makes it much easier to work with workspaces that list peer + // dependencies, since otherwise Ctrl+Click would bring us to the virtual + // file instances instead of the real ones. + // + // We only do this to modules owned by the the dependency tree roots. + // This avoids breaking the resolution when jumping inside a vendor + // with peer dep (otherwise jumping into react-dom would show resolution + // errors on react). + // + const resolved = isVirtual(str) ? pnpApi.resolveVirtual(str) : str; + if (resolved) { + const locator = pnpApi.findPackageLocator(resolved); + if (locator && (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || isPortal(locator.reference))) { + str = resolved; + } + } + + str = normalize(str); + + if (str.match(/\.zip\//)) { + switch (hostInfo) { + // Absolute VSCode `Uri.fsPath`s need to start with a slash. + // VSCode only adds it automatically for supported schemes, + // so we have to do it manually for the `zip` scheme. + // The path needs to start with a caret otherwise VSCode doesn't handle the protocol + // + // Ref: https://github.com/microsoft/vscode/issues/105014#issuecomment-686760910 + // + // 2021-10-08: VSCode changed the format in 1.61. + // Before | ^zip:/c:/foo/bar.zip/package.json + // After | ^/zip//c:/foo/bar.zip/package.json + // + // 2022-04-06: VSCode changed the format in 1.66. + // Before | ^/zip//c:/foo/bar.zip/package.json + // After | ^/zip/c:/foo/bar.zip/package.json + // + // 2022-05-06: VSCode changed the format in 1.68 + // Before | ^/zip/c:/foo/bar.zip/package.json + // After | ^/zip//c:/foo/bar.zip/package.json + // + case `vscode <1.61`: { + str = `^zip:${str}`; + } break; + + case `vscode <1.66`: { + str = `^/zip/${str}`; + } break; + + case `vscode <1.68`: { + str = `^/zip${str}`; + } break; + + case `vscode`: { + str = `^/zip/${str}`; + } break; + + // To make "go to definition" work, + // We have to resolve the actual file system path from virtual path + // and convert scheme to supported by [vim-rzip](https://github.com/lbrayner/vim-rzip) + case `coc-nvim`: { + str = normalize(resolved).replace(/\.zip\//, `.zip::`); + str = resolve(`zipfile:${str}`); + } break; + + // Support neovim native LSP and [typescript-language-server](https://github.com/theia-ide/typescript-language-server) + // We have to resolve the actual file system path from virtual path, + // everything else is up to neovim + case `neovim`: { + str = normalize(resolved).replace(/\.zip\//, `.zip::`); + str = `zipfile://${str}`; + } break; + + default: { + str = `zip:${str}`; + } break; + } + } else { + str = str.replace(/^\/?/, process.platform === `win32` ? `` : `/`); + } + } + + return str; + } + + function fromEditorPath(str) { + switch (hostInfo) { + case `coc-nvim`: { + str = str.replace(/\.zip::/, `.zip/`); + // The path for coc-nvim is in format of //zipfile://.yarn/... + // So in order to convert it back, we use .* to match all the thing + // before `zipfile:` + return process.platform === `win32` + ? str.replace(/^.*zipfile:\//, ``) + : str.replace(/^.*zipfile:/, ``); + } break; + + case `neovim`: { + str = str.replace(/\.zip::/, `.zip/`); + // The path for neovim is in format of zipfile:////.yarn/... + return str.replace(/^zipfile:\/\//, ``); + } break; + + case `vscode`: + default: { + return str.replace(/^\^?(zip:|\/zip(\/ts-nul-authority)?)\/+/, process.platform === `win32` ? `` : `/`) + } break; + } + } + + // Force enable 'allowLocalPluginLoads' + // TypeScript tries to resolve plugins using a path relative to itself + // which doesn't work when using the global cache + // https://github.com/microsoft/TypeScript/blob/1b57a0395e0bff191581c9606aab92832001de62/src/server/project.ts#L2238 + // VSCode doesn't want to enable 'allowLocalPluginLoads' due to security concerns but + // TypeScript already does local loads and if this code is running the user trusts the workspace + // https://github.com/microsoft/vscode/issues/45856 + const ConfiguredProject = tsserver.server.ConfiguredProject; + const {enablePluginsWithOptions: originalEnablePluginsWithOptions} = ConfiguredProject.prototype; + ConfiguredProject.prototype.enablePluginsWithOptions = function() { + this.projectService.allowLocalPluginLoads = true; + return originalEnablePluginsWithOptions.apply(this, arguments); + }; + + // And here is the point where we hijack the VSCode <-> TS communications + // by adding ourselves in the middle. We locate everything that looks + // like an absolute path of ours and normalize it. + + const Session = tsserver.server.Session; + const {onMessage: originalOnMessage, send: originalSend} = Session.prototype; + let hostInfo = `unknown`; + + Object.assign(Session.prototype, { + onMessage(/** @type {string | object} */ message) { + const isStringMessage = typeof message === 'string'; + const parsedMessage = isStringMessage ? JSON.parse(message) : message; + + if ( + parsedMessage != null && + typeof parsedMessage === `object` && + parsedMessage.arguments && + typeof parsedMessage.arguments.hostInfo === `string` + ) { + hostInfo = parsedMessage.arguments.hostInfo; + if (hostInfo === `vscode` && process.env.VSCODE_IPC_HOOK) { + const [, major, minor] = (process.env.VSCODE_IPC_HOOK.match( + // The RegExp from https://semver.org/ but without the caret at the start + /(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/ + ) ?? []).map(Number) + + if (major === 1) { + if (minor < 61) { + hostInfo += ` <1.61`; + } else if (minor < 66) { + hostInfo += ` <1.66`; + } else if (minor < 68) { + hostInfo += ` <1.68`; + } + } + } + } + + const processedMessageJSON = JSON.stringify(parsedMessage, (key, value) => { + return typeof value === 'string' ? fromEditorPath(value) : value; + }); + + return originalOnMessage.call( + this, + isStringMessage ? processedMessageJSON : JSON.parse(processedMessageJSON) + ); + }, + + send(/** @type {any} */ msg) { + return originalSend.call(this, JSON.parse(JSON.stringify(msg, (key, value) => { + return typeof value === `string` ? toEditorPath(value) : value; + }))); + } + }); + + return tsserver; +}; + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript/lib/tsserver.js + require(absPnpApiPath).setup(); + } +} + +// Defer to the real typescript/lib/tsserver.js your application uses +module.exports = moduleWrapper(absRequire(`typescript/lib/tsserver.js`)); diff --git a/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js b/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js new file mode 100644 index 000000000000..a68f028fe197 --- /dev/null +++ b/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js @@ -0,0 +1,225 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +const moduleWrapper = tsserver => { + if (!process.versions.pnp) { + return tsserver; + } + + const {isAbsolute} = require(`path`); + const pnpApi = require(`pnpapi`); + + const isVirtual = str => str.match(/\/(\$\$virtual|__virtual__)\//); + const isPortal = str => str.startsWith("portal:/"); + const normalize = str => str.replace(/\\/g, `/`).replace(/^\/?/, `/`); + + const dependencyTreeRoots = new Set(pnpApi.getDependencyTreeRoots().map(locator => { + return `${locator.name}@${locator.reference}`; + })); + + // VSCode sends the zip paths to TS using the "zip://" prefix, that TS + // doesn't understand. This layer makes sure to remove the protocol + // before forwarding it to TS, and to add it back on all returned paths. + + function toEditorPath(str) { + // We add the `zip:` prefix to both `.zip/` paths and virtual paths + if (isAbsolute(str) && !str.match(/^\^?(zip:|\/zip\/)/) && (str.match(/\.zip\//) || isVirtual(str))) { + // We also take the opportunity to turn virtual paths into physical ones; + // this makes it much easier to work with workspaces that list peer + // dependencies, since otherwise Ctrl+Click would bring us to the virtual + // file instances instead of the real ones. + // + // We only do this to modules owned by the the dependency tree roots. + // This avoids breaking the resolution when jumping inside a vendor + // with peer dep (otherwise jumping into react-dom would show resolution + // errors on react). + // + const resolved = isVirtual(str) ? pnpApi.resolveVirtual(str) : str; + if (resolved) { + const locator = pnpApi.findPackageLocator(resolved); + if (locator && (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || isPortal(locator.reference))) { + str = resolved; + } + } + + str = normalize(str); + + if (str.match(/\.zip\//)) { + switch (hostInfo) { + // Absolute VSCode `Uri.fsPath`s need to start with a slash. + // VSCode only adds it automatically for supported schemes, + // so we have to do it manually for the `zip` scheme. + // The path needs to start with a caret otherwise VSCode doesn't handle the protocol + // + // Ref: https://github.com/microsoft/vscode/issues/105014#issuecomment-686760910 + // + // 2021-10-08: VSCode changed the format in 1.61. + // Before | ^zip:/c:/foo/bar.zip/package.json + // After | ^/zip//c:/foo/bar.zip/package.json + // + // 2022-04-06: VSCode changed the format in 1.66. + // Before | ^/zip//c:/foo/bar.zip/package.json + // After | ^/zip/c:/foo/bar.zip/package.json + // + // 2022-05-06: VSCode changed the format in 1.68 + // Before | ^/zip/c:/foo/bar.zip/package.json + // After | ^/zip//c:/foo/bar.zip/package.json + // + case `vscode <1.61`: { + str = `^zip:${str}`; + } break; + + case `vscode <1.66`: { + str = `^/zip/${str}`; + } break; + + case `vscode <1.68`: { + str = `^/zip${str}`; + } break; + + case `vscode`: { + str = `^/zip/${str}`; + } break; + + // To make "go to definition" work, + // We have to resolve the actual file system path from virtual path + // and convert scheme to supported by [vim-rzip](https://github.com/lbrayner/vim-rzip) + case `coc-nvim`: { + str = normalize(resolved).replace(/\.zip\//, `.zip::`); + str = resolve(`zipfile:${str}`); + } break; + + // Support neovim native LSP and [typescript-language-server](https://github.com/theia-ide/typescript-language-server) + // We have to resolve the actual file system path from virtual path, + // everything else is up to neovim + case `neovim`: { + str = normalize(resolved).replace(/\.zip\//, `.zip::`); + str = `zipfile://${str}`; + } break; + + default: { + str = `zip:${str}`; + } break; + } + } else { + str = str.replace(/^\/?/, process.platform === `win32` ? `` : `/`); + } + } + + return str; + } + + function fromEditorPath(str) { + switch (hostInfo) { + case `coc-nvim`: { + str = str.replace(/\.zip::/, `.zip/`); + // The path for coc-nvim is in format of //zipfile://.yarn/... + // So in order to convert it back, we use .* to match all the thing + // before `zipfile:` + return process.platform === `win32` + ? str.replace(/^.*zipfile:\//, ``) + : str.replace(/^.*zipfile:/, ``); + } break; + + case `neovim`: { + str = str.replace(/\.zip::/, `.zip/`); + // The path for neovim is in format of zipfile:////.yarn/... + return str.replace(/^zipfile:\/\//, ``); + } break; + + case `vscode`: + default: { + return str.replace(/^\^?(zip:|\/zip(\/ts-nul-authority)?)\/+/, process.platform === `win32` ? `` : `/`) + } break; + } + } + + // Force enable 'allowLocalPluginLoads' + // TypeScript tries to resolve plugins using a path relative to itself + // which doesn't work when using the global cache + // https://github.com/microsoft/TypeScript/blob/1b57a0395e0bff191581c9606aab92832001de62/src/server/project.ts#L2238 + // VSCode doesn't want to enable 'allowLocalPluginLoads' due to security concerns but + // TypeScript already does local loads and if this code is running the user trusts the workspace + // https://github.com/microsoft/vscode/issues/45856 + const ConfiguredProject = tsserver.server.ConfiguredProject; + const {enablePluginsWithOptions: originalEnablePluginsWithOptions} = ConfiguredProject.prototype; + ConfiguredProject.prototype.enablePluginsWithOptions = function() { + this.projectService.allowLocalPluginLoads = true; + return originalEnablePluginsWithOptions.apply(this, arguments); + }; + + // And here is the point where we hijack the VSCode <-> TS communications + // by adding ourselves in the middle. We locate everything that looks + // like an absolute path of ours and normalize it. + + const Session = tsserver.server.Session; + const {onMessage: originalOnMessage, send: originalSend} = Session.prototype; + let hostInfo = `unknown`; + + Object.assign(Session.prototype, { + onMessage(/** @type {string | object} */ message) { + const isStringMessage = typeof message === 'string'; + const parsedMessage = isStringMessage ? JSON.parse(message) : message; + + if ( + parsedMessage != null && + typeof parsedMessage === `object` && + parsedMessage.arguments && + typeof parsedMessage.arguments.hostInfo === `string` + ) { + hostInfo = parsedMessage.arguments.hostInfo; + if (hostInfo === `vscode` && process.env.VSCODE_IPC_HOOK) { + const [, major, minor] = (process.env.VSCODE_IPC_HOOK.match( + // The RegExp from https://semver.org/ but without the caret at the start + /(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/ + ) ?? []).map(Number) + + if (major === 1) { + if (minor < 61) { + hostInfo += ` <1.61`; + } else if (minor < 66) { + hostInfo += ` <1.66`; + } else if (minor < 68) { + hostInfo += ` <1.68`; + } + } + } + } + + const processedMessageJSON = JSON.stringify(parsedMessage, (key, value) => { + return typeof value === 'string' ? fromEditorPath(value) : value; + }); + + return originalOnMessage.call( + this, + isStringMessage ? processedMessageJSON : JSON.parse(processedMessageJSON) + ); + }, + + send(/** @type {any} */ msg) { + return originalSend.call(this, JSON.parse(JSON.stringify(msg, (key, value) => { + return typeof value === `string` ? toEditorPath(value) : value; + }))); + } + }); + + return tsserver; +}; + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript/lib/tsserverlibrary.js + require(absPnpApiPath).setup(); + } +} + +// Defer to the real typescript/lib/tsserverlibrary.js your application uses +module.exports = moduleWrapper(absRequire(`typescript/lib/tsserverlibrary.js`)); diff --git a/tgui/.yarn/sdks/typescript/lib/typescript.js b/tgui/.yarn/sdks/typescript/lib/typescript.js new file mode 100644 index 000000000000..b5f4db25bee6 --- /dev/null +++ b/tgui/.yarn/sdks/typescript/lib/typescript.js @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = createRequire(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require typescript + require(absPnpApiPath).setup(); + } +} + +// Defer to the real typescript your application uses +module.exports = absRequire(`typescript`); diff --git a/tgui/.yarn/sdks/typescript/package.json b/tgui/.yarn/sdks/typescript/package.json new file mode 100644 index 000000000000..eb7dd745bc83 --- /dev/null +++ b/tgui/.yarn/sdks/typescript/package.json @@ -0,0 +1,10 @@ +{ + "name": "typescript", + "version": "5.3.3-sdk", + "main": "./lib/typescript.js", + "type": "commonjs", + "bin": { + "tsc": "./bin/tsc", + "tsserver": "./bin/tsserver" + } +} diff --git a/tgui/.yarnrc.yml b/tgui/.yarnrc.yml new file mode 100644 index 000000000000..299c4cc4c072 --- /dev/null +++ b/tgui/.yarnrc.yml @@ -0,0 +1,22 @@ +compressionLevel: mixed + +enableGlobalCache: false + +enableScripts: false + +logFilters: + - code: YN0004 + level: discard + - code: YN0062 + level: discard + +packageExtensions: + babel-plugin-inferno@*: + dependencies: + "@babel/core": "*" + +pnpEnableEsmLoader: false + +preferInteractive: true + +yarnPath: .yarn/releases/yarn-4.0.2.cjs diff --git a/tgui/README.md b/tgui/README.md index 66e4868a0832..17f89d2ea844 100644 --- a/tgui/README.md +++ b/tgui/README.md @@ -27,7 +27,7 @@ API to React. Take your time to read these guides: - [React guide](https://reactjs.org/docs/hello-world.html) - [Inferno documentation](https://infernojs.org/docs/guides/components) - - highlights differences with React. +highlights differences with React. If you were already familiar with an older, Ractive-based tgui, and want to translate concepts between old and new tgui, read this @@ -37,68 +37,69 @@ to translate concepts between old and new tgui, read this You will need these programs to start developing in tgui: -- [Node v12.13+](https://nodejs.org/en/download/) -- [Yarn v1.19+](https://yarnpkg.com/en/docs/install) -- [MSys2](https://www.msys2.org/) (optional) +- [Node v20](https://nodejs.org/en/download/) +- [Yarn v1.19+](https://yarnpkg.com/en/docs/install) (optional) +- [Git Bash](https://git-scm.com/downloads) + or [MSys2](https://www.msys2.org/) (optional) -> MSys2 closely replicates a unix-like environment which is necessary for -> the `bin/tgui` script to run. It comes with a robust "mintty" terminal -> emulator which is better than any standard Windows shell, it supports -> "git" out of the box (almost like Git for Windows, but better), has -> a "pacman" package manager, and you can install a text editor like "vim" -> for a full boomer experience. +**DO NOT install Chocolatey if Node installer asks you to!** ## Usage -**For MSys2, Git Bash, WSL, Linux or macOS users:** +**For Git Bash, MSys2, WSL, Linux or macOS users:** -First and foremost, change your directory to `tgui`. +Change your directory to `tgui`. -Run `bin/tgui --install-git-hooks` (optional) to install merge drivers -which will assist you in conflict resolution when rebasing your branches. +Run `bin/tgui --install-git-hooks` to install merge drivers which will +assist you in conflict resolution when rebasing your branches. Only has +to be done once. -Run one of the following: +Run `bin/tgui` with any of the options listed below. -- `bin/tgui` - build the project in production mode. -- `bin/tgui --dev` - launch a development server. - - tgui development server provides you with incremental compilation, - hot module replacement and logging facilities in all running instances - of tgui. In short, this means that you will instantly see changes in the - game as you code it. Very useful, highly recommended. - - In order to use it, you should start the game server first, connect to it - and wait until the world has been properly loaded and you are no longer - in the lobby. Start tgui dev server. You'll know that it's hooked correctly - if data gets dumped to the log when tgui windows are opened. -- `bin/tgui --dev --reload` - reload byond cache once. -- `bin/tgui --dev --debug` - run server with debug logging enabled. -- `bin/tgui --dev --no-hot` - disable hot module replacement (helps when - doing development on IE8). -- `bin/tgui --lint` - show problems with the code. -- `bin/tgui --lint --fix` - auto-fix problems with the code. -- `bin/tgui --analyze` - run a bundle analyzer. -- `bin/tgui --clean` - clean up project repo. -- `bin/tgui [webpack options]` - build the project with custom webpack - options. - -**For everyone else:** +**For Windows CMD or PowerShell users:** If you haven't opened the console already, you can do that by holding Shift and right clicking on the `tgui` folder, then pressing either `Open command window here` or `Open PowerShell window here`. -Run `yarn install` to install npm dependencies, then one of the following: +Run `.\bin\tgui.bat` with any of the options listed below. + +> If using PowerShell, you will receive errors if trying to run +> `.\bin\tgui.ps1`, because default Windows policy does not allow direct +> execution of PS1 scripts. Run `.\bin\tgui.bat` instead. + +**Available commands:** -- `yarn run build` - build the project in production mode. -- `yarn run watch` - launch a development server. -- `yarn run lint` - show problems with the code. -- `yarn run lint --fix` - auto-fix problems with the code. -- `yarn run analyze` - run a bundle analyzer. +- `bin/tgui` - Build the project in production mode. +- `bin/tgui --dev` - Launch a development server. + - tgui development server provides you with incremental compilation, + hot module replacement and logging facilities in all running instances + of tgui. In short, this means that you will instantly see changes in the + game as you code it. Very useful, highly recommended. + - In order to use it, you should start the game server first, connect to it + and wait until the world has been properly loaded and you are no longer + in the lobby. Start tgui dev server, and once it has finished building, + press F5 on any tgui window. You'll know that it's hooked correctly if + you see a green bug icon in titlebar and data gets dumped to the console. +- `bin/tgui --dev --reload` - Reload byond cache once. +- `bin/tgui --dev --debug` - Run server with debug logging enabled. +- `bin/tgui --dev --no-hot` - Disable hot module replacement (helps when +doing development on IE8). +- `bin/tgui --lint` - Show problems with the code. +- `bin/tgui --fix` - Auto-fix problems with the code. +- `bin/tgui --test` - Run tests. +- `bin/tgui --analyze` - Run a bundle analyzer. +- `bin/tgui --clean` - Clean up project repo. +- `bin/tgui --tgui-polyfill` - Build polyfills. You need to run it when updating any of the static (numbered) polyfills. +- `bin/tgui [webpack options]` - Build the project with custom webpack +options. + +**For everyone else:** -We also got some batch files in store, for those who don't like fiddling -with the console: +You can double-click these batch files to achieve the same thing: -- `bin/tgui-build.bat` - build the project in production mode. -- `bin/tgui-dev-server.bat` - launch a development server. +- `bin\tgui.bat` - Build the project in production mode. +- `bin\tgui-dev-server.bat` - Launch a development server. > Remember to always run a full build before submitting a PR. It creates > a compressed javascript bundle which is then referenced from DM code. @@ -110,18 +111,24 @@ with the console: **Development server doesn't find my BYOND cache!** This happens if your Documents folder in Windows has a custom location, for -example in `E:\Libraries\Documents`. Development server has no knowledge -of these non-standard locations, therefore you have to run the dev server -with an additional environmental variable, with a full path to BYOND cache. +example in `E:\Libraries\Documents`. Development server tries its best to find +this non-standard location (searches for a Windows Registry key), but it can +fail. You have to run the dev server with an additional environmental +variable, with a full path to BYOND cache. ``` -export BYOND_CACHE="E:/Libraries/Documents/BYOND/cache" -bin/tgui --dev +BYOND_CACHE="E:/Libraries/Documents/BYOND/cache" ``` -Note that in Windows, you have to go through Advanced System Settings, -System Properties and then open Environment Variables window to do the -same thing. You may need to reboot after this. +**Webpack errors out with some cryptic messages!** + +> Example: `No template for dependency: PureExpressionDependency` +Webpack stores its cache on disk since tgui 4.3, and it is very sensitive +to build configuration. So if you update webpack, or share the same cache +directory between development and production build, it will start +hallucinating. + +To fix this kind of problem, run `bin/tgui --clean` and try again. ## Developer Tools @@ -134,11 +141,11 @@ logs and time spent on rendering. Use this information to optimize your code, and try to keep re-renders below 16ms. **Kitchen Sink.** -Press `Ctrl+Alt+=` to open the KitchenSink interface. This interface is a +Press `F12` to open the KitchenSink interface. This interface is a playground to test various tgui components. **Layout Debugger.** -Press `Ctrl+Alt+-` to toggle the _layout debugger_. It will show outlines of +Press `F11` to toggle the *layout debugger*. It will show outlines of all tgui elements, which makes it easy to understand how everything comes together, and can reveal certain layout bugs which are not normally visible. @@ -149,30 +156,30 @@ together, and can reveal certain layout bugs which are not normally visible. - `/packages/tgui/index.js` - Application entry point. - `/packages/tgui/components` - Basic UI building blocks. - `/packages/tgui/interfaces` - Actual in-game interfaces. - Interface takes data via the `state` prop and outputs an html-like stucture, - which you can build using existing UI components. +Interface takes data via the `state` prop and outputs an html-like stucture, +which you can build using existing UI components. - `/packages/tgui/layouts` - Root level UI components, that affect the final - look and feel of the browser window. They usually hold various window - elements, like the titlebar and resize handlers, and control the UI theme. +look and feel of the browser window. They usually hold various window +elements, like the titlebar and resize handlers, and control the UI theme. - `/packages/tgui/routes.js` - This is where tgui decides which interface to - pull and render. +pull and render. - `/packages/tgui/layout.js` - A root-level component, holding the - window elements, like the titlebar, buttons, resize handlers. Calls - `routes.js` to decide which component to render. +window elements, like the titlebar, buttons, resize handlers. Calls +`routes.js` to decide which component to render. - `/packages/tgui/styles/main.scss` - CSS entry point. - `/packages/tgui/styles/functions.scss` - Useful SASS functions. - Stuff like `lighten`, `darken`, `luminance` are defined here. +Stuff like `lighten`, `darken`, `luminance` are defined here. - `/packages/tgui/styles/atomic` - Atomic CSS classes. - These are very simple, tiny, reusable CSS classes which you can use and - combine to change appearance of your elements. Keep them small. +These are very simple, tiny, reusable CSS classes which you can use and +combine to change appearance of your elements. Keep them small. - `/packages/tgui/styles/components` - CSS classes which are used - in UI components. These stylesheets closely follow the - [BEM](https://en.bem.info/methodology/) methodology. +in UI components. These stylesheets closely follow the +[BEM](https://en.bem.info/methodology/) methodology. - `/packages/tgui/styles/interfaces` - Custom stylesheets for your interfaces. - Add stylesheets here if you really need a fine control over your UI styles. +Add stylesheets here if you really need a fine control over your UI styles. - `/packages/tgui/styles/layouts` - Layout-related styles. - `/packages/tgui/styles/themes` - Contains all the various themes you can - use in tgui. Each theme must be registered in `webpack.config.js` file. +use in tgui. Each theme must be registered in `webpack.config.js` file. ## Component Reference @@ -180,8 +187,11 @@ See: [Component Reference](docs/component-reference.md). ## License -All code is licensed with the parent license of _tgstation_, **AGPL-3.0**. +Source code is covered by /tg/station's parent license - **AGPL-3.0** +(see the main [README](../README.md)), unless otherwise indicated. -See the main [README](../README.md) for more details. +Some files are annotated with a copyright header, which explicitly states +the copyright holder and license of the file. Most of the core tgui +source code is available under the **MIT** license. The Authors retain all copyright to their respective work here submitted. diff --git a/tgui/babel.config.js b/tgui/babel.config.js index 8b32d3ce491d..2dfafa259add 100644 --- a/tgui/babel.config.js +++ b/tgui/babel.config.js @@ -4,40 +4,37 @@ * @license MIT */ -const createBabelConfig = (options) => { - const { presets = [], plugins = [], removeConsole } = options; +const createBabelConfig = options => { + const { mode, presets = [], plugins = [] } = options; return { presets: [ - [ - require.resolve('@babel/preset-env'), - { - modules: 'commonjs', - useBuiltIns: 'entry', - corejs: '3', - spec: false, - loose: true, - targets: [], - }, - ], - require.resolve('@babel/preset-react'), + [require.resolve('@babel/preset-typescript'), { + allowDeclareFields: true, + }], + [require.resolve('@babel/preset-env'), { + modules: 'commonjs', + useBuiltIns: 'entry', + corejs: '3', + spec: false, + loose: true, + targets: [], + }], ...presets, - ].filter(Boolean), + ], plugins: [ - [ - require.resolve('@babel/plugin-proposal-class-properties'), - { - loose: true, - }, - ], + [require.resolve('@babel/plugin-transform-class-properties'), { + loose: true, + }], require.resolve('@babel/plugin-transform-jscript'), require.resolve('babel-plugin-inferno'), - removeConsole && require.resolve('babel-plugin-transform-remove-console'), + require.resolve('babel-plugin-transform-remove-console'), + require.resolve('common/string.babel-plugin.cjs'), ...plugins, - ].filter(Boolean), + ], }; }; -module.exports = (api) => { +module.exports = api => { api.cache(true); const mode = process.env.NODE_ENV; return createBabelConfig({ mode }); diff --git a/tgui/bin/tgui b/tgui/bin/tgui index eb1f200b31ea..863eb91c464b 100755 --- a/tgui/bin/tgui +++ b/tgui/bin/tgui @@ -1,4 +1,7 @@ #!/bin/bash +## Copyright (c) 2020 Aleksej Komarov +## SPDX-License-Identifier: MIT + set -e shopt -s globstar shopt -s expand_aliases @@ -23,8 +26,14 @@ fi base_dir="$(dirname "$(tgui-realpath "${0}")")/.." base_dir="$(tgui-realpath "${base_dir}")" -## Add locally installed node programs to path -PATH="${PATH}:node_modules/.bin" +## Fall back to running Yarn from the repo +if ! hash yarn 2>/dev/null; then + yarn_releases=("${base_dir}"/.yarn/releases/yarn-*.cjs) + yarn_release="${yarn_releases[0]}" + yarn() { + node "${yarn_release}" "${@}" + } +fi ## Functions @@ -38,35 +47,69 @@ task-install() { ## Runs webpack task-webpack() { - cd "${base_dir}/packages/tgui" - webpack "${@}" + cd "${base_dir}" + yarn run webpack-cli "${@}" } ## Runs a development server task-dev-server() { - cd "${base_dir}/packages/tgui-dev-server" - exec node --experimental-modules index.js "${@}" + cd "${base_dir}" + yarn node --experimental-modules packages/tgui-dev-server/index.js "${@}" } ## Run a linter through all packages -task-eslint() { +task-lint() { + cd "${base_dir}" + yarn run tsc + echo "tgui: type check passed" + yarn run eslint packages --ext .js,.jsx,.ts,.tsx,.cjs,.mjs "${@}" + echo "tgui: eslint check passed" +} + +task-test() { + cd "${base_dir}" + yarn run jest +} + +task-prettier() { cd "${base_dir}" - eslint ./packages "${@}" + npx prettier --check packages --write "${@}" +} + +task-polyfill() { + cd "${base_dir}" + yarn tgui-polyfill:build } ## Mr. Proper task-clean() { cd "${base_dir}" - rm -rf packages/tgui/public/.tmp + echo "tgui: cleaning build artifacts" + ## Build artifacts + rm -rf public/.tmp + rm -f public/*.map + rm -f public/*.hot-update.* + echo "tgui: cleaning Yarn artifacts" + ## Yarn artifacts + rm -rf .yarn/cache + rm -rf .yarn/unplugged + rm -rf .yarn/webpack + rm -rf .yarn/build-state.yml + rm -rf .yarn/install-state.gz + rm -f .pnp.* + echo "tgui: cleaning NPM artifacts" + ## NPM artifacts rm -rf **/node_modules rm -f **/package-lock.json + echo "tgui: All artifacts cleaned" } ## Validates current build against the build stored in git task-validate-build() { cd "${base_dir}" local diff - diff="$(git diff packages/tgui/public/tgui.bundle.*)" + diff="$(git diff --text public/*)" + echo ${diff} if [[ -n ${diff} ]]; then echo "Error: our build differs from the build committed into git." echo "Please rebuild tgui." @@ -117,16 +160,6 @@ if [[ ${1} == "--install-git-hooks" ]]; then exit 0 fi -## Continuous integration scenario -if [[ ${1} == "--ci" ]]; then - task-clean - task-install - task-eslint - task-webpack --mode=production - task-validate-build - exit 0 -fi - if [[ ${1} == "--clean" ]]; then task-clean exit 0 @@ -142,14 +175,14 @@ fi if [[ ${1} == '--lint' ]]; then shift 1 task-install - task-eslint "${@}" + task-lint "${@}" exit 0 fi -if [[ ${1} == '--lint-harder' ]]; then +if [[ ${1} == '--fix' ]]; then shift 1 task-install - task-eslint -c .eslintrc-harder.yml "${@}" + task-lint --fix "${@}" exit 0 fi @@ -160,10 +193,46 @@ if [[ ${1} == '--analyze' ]]; then exit 0 fi +## Jest test +if [[ ${1} == '--test' ]]; then + shift 1 + task-install + task-test "${@}" + exit 0 +fi + +## Continuous integration scenario +if [[ ${1} == "--ci" ]]; then + task-clean + task-install + task-prettier + task-test "${@}" + task-lint + task-webpack --mode=production + task-validate-build + exit 0 +fi + +## Run prettier +if [[ ${1} == '--prettier' ]]; then + shift 1 + task-prettier "${@}" + exit 0 +fi + +## Run prettier +if [[ ${1} == '--tgui-polyfill' ]]; then + shift 1 + task-install + task-polyfill "${@}" + exit 0 +fi + ## Make a production webpack build if [[ -z ${1} ]]; then task-install - task-eslint + task-lint --fix + task-prettier task-webpack --mode=production exit 0 fi diff --git a/tgui/bin/tgui-build.bat b/tgui/bin/tgui-build.bat deleted file mode 100644 index b22d9bf5c724..000000000000 --- a/tgui/bin/tgui-build.bat +++ /dev/null @@ -1,6 +0,0 @@ -@echo off -cd "%~dp0\.." -call yarn install -call yarn prettier --write -call yarn run build -timeout /t 9 diff --git a/tgui/bin/tgui-clean.bat b/tgui/bin/tgui-clean.bat new file mode 100644 index 000000000000..70b9ba73721c --- /dev/null +++ b/tgui/bin/tgui-clean.bat @@ -0,0 +1,9 @@ +@echo off +rem Copyright (c) 2020 Aleksej Komarov +rem SPDX-License-Identifier: MIT +call powershell.exe -NoLogo -ExecutionPolicy Bypass -File "%~dp0\tgui_.ps1" --clean %* +rem Pause if launched in a separate shell unless initiated from powershell +echo %PSModulePath% | findstr %USERPROFILE% >NUL +if %errorlevel% equ 0 exit 0 +echo %cmdcmdline% | find /i "/c" +if %errorlevel% equ 0 pause diff --git a/tgui/bin/tgui-dev-server.bat b/tgui/bin/tgui-dev-server.bat index 1b5bdcfb1db9..21b2ea4e962b 100644 --- a/tgui/bin/tgui-dev-server.bat +++ b/tgui/bin/tgui-dev-server.bat @@ -1,4 +1,9 @@ @echo off -cd "%~dp0\.." -call yarn install -call yarn run watch +rem Copyright (c) 2020 Aleksej Komarov +rem SPDX-License-Identifier: MIT +call powershell.exe -NoLogo -ExecutionPolicy Bypass -File "%~dp0\tgui_.ps1" --dev %* +rem Pause if launched in a separate shell unless initiated from powershell +echo %PSModulePath% | findstr %USERPROFILE% >NUL +if %errorlevel% equ 0 exit 0 +echo %cmdcmdline% | find /i "/c" +if %errorlevel% equ 0 pause diff --git a/tgui/bin/tgui-formatting.bat b/tgui/bin/tgui-formatting.bat deleted file mode 100644 index 1fe87c1bf4c8..000000000000 --- a/tgui/bin/tgui-formatting.bat +++ /dev/null @@ -1,5 +0,0 @@ -@echo off -cd "%~dp0\.." -call yarn install -call yarn prettier --write -timeout /t 9 diff --git a/tgui/bin/tgui-inspect-dev-tools.bat b/tgui/bin/tgui-inspect-dev-tools.bat new file mode 100644 index 000000000000..633dc3377f41 --- /dev/null +++ b/tgui/bin/tgui-inspect-dev-tools.bat @@ -0,0 +1,2 @@ +@echo off +start %systemroot%\system32\f12\IEChooser.exe diff --git a/tgui/bin/tgui.bat b/tgui/bin/tgui.bat new file mode 100644 index 000000000000..39aa279dcaa2 --- /dev/null +++ b/tgui/bin/tgui.bat @@ -0,0 +1,9 @@ +@echo off +rem Copyright (c) 2020 Aleksej Komarov +rem SPDX-License-Identifier: MIT +call powershell.exe -NoLogo -ExecutionPolicy Bypass -File "%~dp0\tgui_.ps1" %* +rem Pause if launched in a separate shell unless initiated from powershell +echo %PSModulePath% | findstr %USERPROFILE% >NUL +if %errorlevel% equ 0 exit 0 +echo %cmdcmdline% | find /i "/c" +if %errorlevel% equ 0 pause diff --git a/tgui/bin/tgui_.ps1 b/tgui/bin/tgui_.ps1 new file mode 100644 index 000000000000..6658aeb0cdd3 --- /dev/null +++ b/tgui/bin/tgui_.ps1 @@ -0,0 +1,193 @@ +## Copyright (c) 2020 Aleksej Komarov +## SPDX-License-Identifier: MIT + +## Initial set-up +## -------------------------------------------------------- + +## Enable strict mode and stop of first cmdlet error +Set-StrictMode -Version Latest +$ErrorActionPreference = "Stop" +$PSDefaultParameterValues['*:ErrorAction'] = 'Stop' + +## Validates exit code of external commands +function Throw-On-Native-Failure { + if (-not $?) { + exit 1 + } +} + +## Normalize current directory +$basedir = Split-Path $MyInvocation.MyCommand.Path +$basedir = Resolve-Path "$($basedir)\.." +Set-Location $basedir +[Environment]::CurrentDirectory = $basedir + + +## Functions +## -------------------------------------------------------- + +function yarn { + $YarnRelease = Get-ChildItem -Filter ".yarn\releases\yarn-*.cjs" | Select-Object -First 1 + node ".yarn\releases\$YarnRelease" @Args + Throw-On-Native-Failure +} + +function Remove-Quiet { + Remove-Item -ErrorAction SilentlyContinue @Args +} + +function task-install { + yarn install +} + +## Runs webpack +function task-webpack { + yarn run webpack-cli @Args +} + +## Runs a development server +function task-dev-server { + yarn node --experimental-modules "packages/tgui-dev-server/index.js" @Args +} + +## Run a linter through all packages +function task-lint { + yarn run tsc + Write-Output "tgui: type check passed" + yarn run eslint packages --ext ".js,.jsx,.ts,.tsx,.cjs,.mjs" @Args + Write-Output "tgui: eslint check passed" +} + +function task-test { + yarn run jest +} + +function task-prettier { + npx prettier --check packages --write @Args +} + +function task-polyfill { + yarn tgui-polyfill:build +} + +## Mr. Proper +function task-clean { + ## Build artifacts + Write-Output "tgui: cleaning build artifacts" + Remove-Quiet -Recurse -Force "public\.tmp" + Remove-Quiet -Force "public\*.map" + Remove-Quiet -Force "public\*.hot-update.*" + Write-Output "tgui: cleaning Yarn artifacts" + ## Yarn artifacts + Remove-Quiet -Recurse -Force ".yarn\cache" + Remove-Quiet -Recurse -Force ".yarn\unplugged" + Remove-Quiet -Recurse -Force ".yarn\webpack" + Remove-Quiet -Force ".yarn\build-state.yml" + Remove-Quiet -Force ".yarn\install-state.gz" + Remove-Quiet -Force ".yarn\install-target" + Remove-Quiet -Force ".pnp.*" + Write-Output "tgui: cleaning NPM artifacts" + ## NPM artifacts + Get-ChildItem -Path "." -Include "node_modules" -Recurse -File:$false | Remove-Item -Recurse -Force + Remove-Quiet -Force "package-lock.json" + Write-Output "tgui: All artifacts cleaned" +} + +## Validates current build against the build stored in git +function task-validate-build { + $diff = git diff --text public/* + Write-Output $diff + if ($diff) { + Write-Output "Error: our build differs from the build committed into git." + Write-Output "Please rebuild tgui." + exit 1 + } + Write-Output "tgui: build is ok" +} + +## Main +## -------------------------------------------------------- + +if ($Args.Length -gt 0) { + if ($Args[0] -eq "--clean") { + task-clean + exit 0 + } + + if ($Args[0] -eq "--dev") { + $Rest = $Args | Select-Object -Skip 1 + task-install + task-dev-server @Rest + exit 0 + } + + if ($Args[0] -eq "--lint") { + $Rest = $Args | Select-Object -Skip 1 + task-install + task-lint @Rest + exit 0 + } + + if ($Args[0] -eq "--fix") { + $Rest = $Args | Select-Object -Skip 1 + task-install + task-lint --fix @Rest + exit 0 + } + + ## Analyze the bundle + if ($Args[0] -eq "--analyze") { + task-install + task-webpack --mode=production --analyze + exit 0 + } + + ## Jest test + if ($Args[0] -eq "--test") { + $Rest = $Args | Select-Object -Skip 1 + task-install + task-test @Rest + exit 0 + } + + ## Continuous integration scenario + if ($Args[0] -eq "--ci") { + $Rest = $Args | Select-Object -Skip 1 + task-clean + task-install + task-prettier + task-test @Rest + task-lint + task-webpack --mode=production + task-validate-build + exit 0 + } + + ## ## Run prettier + if ($Args[0] -eq "--prettier") { + $Rest = $Args | Select-Object -Skip 1 + task-prettier @Rest + exit 0 + } + + ## ## Run prettier + if ($Args[0] -eq "--tgui-polyfill") { + $Rest = $Args | Select-Object -Skip 1 + task-install + task-polyfill @Rest + exit 0 + } +} + +## Make a production webpack build +if ($Args.Length -eq 0) { + task-install + task-lint --fix + task-prettier + task-webpack --mode=production + exit 0 +} + +## Run webpack with custom flags +task-install +task-webpack @Args diff --git a/tgui/docs/component-reference.md b/tgui/docs/component-reference.md index c892cb628be9..02af4e3aee99 100644 --- a/tgui/docs/component-reference.md +++ b/tgui/docs/component-reference.md @@ -28,6 +28,7 @@ Make sure to add new items to this list if you document new components. - [`Grid`](#grid) - [`Grid.Column`](#gridcolumn) - [`Icon`](#icon) + - [`Icon.Stack`](#iconstack) - [`Input`](#input) - [`Knob`](#knob) - [`LabeledControls`](#labeledcontrols) @@ -39,8 +40,10 @@ Make sure to add new items to this list if you document new components. - [`NoticeBox`](#noticebox) - [`NumberInput`](#numberinput) - [`ProgressBar`](#progressbar) + - [`RoundGauge`](#roundgauge) - [`Section`](#section) - [`Slider`](#slider) + - [`Stack`](#stack) - [`Table`](#table) - [`Table.Row`](#tablerow) - [`Table.Cell`](#tablecell) @@ -65,16 +68,16 @@ Event handlers are callbacks that you can attack to various element to listen for browser events. Inferno supports camelcase (`onClick`) and lowercase (`onclick`) event names. -- Camel case names are what's called _synthetic_ events, and are the - **preferred way** of handling events in React, for efficiency and - performance reasons. Please read - [Inferno Event Handling](https://infernojs.org/docs/guides/event-handling) - to understand what this is about. +- Camel case names are what's called *synthetic* events, and are the +**preferred way** of handling events in React, for efficiency and +performance reasons. Please read +[Inferno Event Handling](https://infernojs.org/docs/guides/event-handling) +to understand what this is about. - Lower case names are native browser events and should be used sparingly, - for example when you need an explicit IE8 support. **DO NOT** use - lowercase event handlers unless you really know what you are doing. +for example when you need an explicit IE8 support. **DO NOT** use +lowercase event handlers unless you really know what you are doing. - [Button](#button) component does not support the lowercase `onclick` event. - Use the camel case `onClick` instead. +Use the camel case `onClick` instead. ## `tgui/components` @@ -86,13 +89,13 @@ This component provides animations for numeric values. - `value: number` - Value to animate. - `initial: number` - Initial value to use in animation when element - first appears. If you set initial to `0` for example, number will always - animate starting from `0`, and if omitted, it will not play an initial - animation. +first appears. If you set initial to `0` for example, number will always +animate starting from `0`, and if omitted, it will not play an initial +animation. - `format: value => value` - Output formatter. - Example: `value => Math.round(value)`. - `children: (formattedValue, rawValue) => any` - Pull the animated number to - animate more complex things deeper in the DOM tree. +animate more complex things deeper in the DOM tree. - Example: `(_, value) => ` ### `BlockQuote` @@ -128,7 +131,9 @@ To workaround this problem, the Box children accept a render props function. This way, `Button` can pull out the `className` generated by the `Box`. ```jsx -{(props) => ``` -Flex item with `grow` property serves as a "filler", to separate the other -two flex items as far as possible from each other. +Flex item with `grow` property will grow to take all available empty space, +while flex items without grow will take the minimum amount of space. This +effectively places the last flex item to the very end of the flex container. **Props:** - See inherited props: [Box](#box) -- `spacing: number` - Spacing between flex items, in integer units - (1 unit - 0.5em). Does not directly relate to a flex css property - (adds a modifier class under the hood), and only integer numbers are - supported. +- ~~`spacing: number`~~ - **Removed in tgui 4.3**, +use [Stack](#stack) instead. - `inline: boolean` - Makes flexbox container inline, with similar behavior - to an `inline` property on a `Box`. +to an `inline` property on a `Box`. - `direction: string` - This establishes the main-axis, thus defining the - direction flex items are placed in the flex container. +direction flex items are placed in the flex container. - `row` (default) - left to right. - `row-reverse` - right to left. - `column` - top to bottom. - `column-reverse` - bottom to top. - `wrap: string` - By default, flex items will all try to fit onto one line. - You can change that and allow the items to wrap as needed with this property. +You can change that and allow the items to wrap as needed with this property. - `nowrap` (default) - all flex items will be on one line - `wrap` - flex items will wrap onto multiple lines, from top to bottom. - `wrap-reverse` - flex items will wrap onto multiple lines from bottom to top. @@ -421,22 +426,22 @@ two flex items as far as possible from each other. - `center` - items are centered on the cross axis. - `baseline` - items are aligned such as their baselines align. - `justify: string` - This defines the alignment along the main axis. - It helps distribute extra free space leftover when either all the flex - items on a line are inflexible, or are flexible but have reached their - maximum size. It also exerts some control over the alignment of items - when they overflow the line. +It helps distribute extra free space leftover when either all the flex +items on a line are inflexible, or are flexible but have reached their +maximum size. It also exerts some control over the alignment of items +when they overflow the line. - `flex-start` (default) - items are packed toward the start of the - flex-direction. + flex-direction. - `flex-end` - items are packed toward the end of the flex-direction. - `space-between` - items are evenly distributed in the line; first item is - on the start line, last item on the end line + on the start line, last item on the end line - `space-around` - items are evenly distributed in the line with equal space - around them. Note that visually the spaces aren't equal, since all the items - have equal space on both sides. The first item will have one unit of space - against the container edge, but two units of space between the next item - because that next item has its own spacing that applies. + around them. Note that visually the spaces aren't equal, since all the items + have equal space on both sides. The first item will have one unit of space + against the container edge, but two units of space between the next item + because that next item has its own spacing that applies. - `space-evenly` - items are distributed so that the spacing between any two - items (and the space to the edges) is equal. + items (and the space to the edges) is equal. - TBD (not all properties are supported in IE11). ### `Flex.Item` @@ -445,24 +450,24 @@ two flex items as far as possible from each other. - See inherited props: [Box](#box) - `order: number` - By default, flex items are laid out in the source order. - However, the order property controls the order in which they appear in the - flex container. -- `grow: number` - This defines the ability for a flex item to grow if - necessary. It accepts a unitless value that serves as a proportion. It - dictates what amount of the available space inside the flex container the - item should take up. This number is unit-less and is relative to other - siblings. -- `shrink: number` - This defines the ability for a flex item to shrink - if necessary. Inverse of `grow`. -- `basis: string` - This defines the default size of an element before any - flex-related calculations are done. Has to be a length (e.g. `20%`, `5rem`), - an `auto` or `content` keyword. +However, the order property controls the order in which they appear in the +flex container. +- `grow: number | boolean` - This defines the ability for a flex item to grow +if necessary. It accepts a unitless value that serves as a proportion. It +dictates what amount of the available space inside the flex container the +item should take up. This number is unit-less and is relative to other +siblings. +- `shrink: number | boolean` - This defines the ability for a flex item to +shrink if necessary. Inverse of `grow`. +- `basis: number | string` - This defines the default size of an element +before any flex-related calculations are done. Has to be a length +(e.g. `20%`, `5rem`), an `auto` or `content` keyword. - **Important:** IE11 flex is buggy, and auto width/height calculations - can sometimes end up in a circular dependency. This usually happens, when - working with tables inside flex (they have wacky internal widths and such). - Setting basis to `0` breaks the loop and fixes all of the problems. + can sometimes end up in a circular dependency. This usually happens, when + working with tables inside flex (they have wacky internal widths and such). + Setting basis to `0` breaks the loop and fixes all of the problems. - `align: string` - This allows the default alignment (or the one specified by - align-items) to be overridden for individual flex items. See: [Flex](#flex). +align-items) to be overridden for individual flex items. See: [Flex](#flex). ### `Grid` @@ -478,10 +483,14 @@ Example: ```jsx -
Hello world!
+
+ Hello world! +
-
Hello world!
+
+ Hello world! +
``` @@ -507,7 +516,6 @@ Renders one of the FontAwesome icons of your choice. To smoothen the transition from v4 to v5, we have added a v4 semantic to transform names with `-o` suffixes to FA Regular icons. For example: - - `square` will get transformed to `fas square` - `square-o` will get transformed to `far square` @@ -516,10 +524,26 @@ transform names with `-o` suffixes to FA Regular icons. For example: - See inherited props: [Box](#box) - `name: string` - Icon name. - `size: number` - Icon size. `1` is normal size, `2` is two times bigger. - Fractional numbers are supported. +Fractional numbers are supported. - `rotation: number` - Icon rotation, in degrees. - `spin: boolean` - Whether an icon should be spinning. Good for load - indicators. +indicators. + +### `Icon.Stack` + +Renders children icons on top of each other in order to make your own icon. + +```jsx + + + + +``` + +**Props:** + +- See inherited props: [Box](#box) +- `children: Icon` - Icons to stack. ### `Input` @@ -533,12 +557,12 @@ A basic text input, which allow users to enter text into a UI. - See inherited props: [Box](#box) - `value: string` - Value of an input. - `placeholder: string` - Text placed into Input box when it's empty, - otherwise nothing. Clears automatically when focused. +otherwise nothing. Clears automatically when focused. - `fluid: boolean` - Fill all available horizontal space. - `selfClear: boolean` - Clear after hitting enter, as well as remain focused - when this happens. Useful for things like chat inputs. +when this happens. Useful for things like chat inputs. - `onChange: (e, value) => void` - An event, which fires when you commit - the text by either unfocusing the input box, or by pressing the Enter key. +the text by either unfocusing the input box, or by pressing the Enter key. - `onInput: (e, value) => void` - An event, which fires on every keypress. ### `Knob` @@ -554,30 +578,40 @@ Single click opens an input box to manually type in a number. - `animated: boolean` - Animates the value if it was changed externally. - `bipolar: boolean` - Knob can be bipolar or unipolar. - `size: number` - Relative size of the knob. `1` is normal size, `2` is two - times bigger. Fractional numbers are supported. +times bigger. Fractional numbers are supported. - `color: string` - Color of the outer ring around the knob. - `value: number` - Value itself, controls the position of the cursor. - `unit: string` - Unit to display to the right of value. - `minValue: number` - Lowest possible value. - `maxValue: number` - Highest possible value. - `fillValue: number` - If set, this value will be used to set the fill - percentage of the outer ring independently of the main value. +percentage of the outer ring independently of the main value. - `ranges: { color: [from, to] }` - Applies a `color` to the outer ring around - the knob based on whether the value lands in the range between `from` and `to`. - See an example of this prop in [ProgressBar](#progressbar). +the knob based on whether the value lands in the range between `from` and `to`. +See an example of this prop in [ProgressBar](#progressbar). - `step: number` (default: 1) - Adjust value by this amount when - dragging the input. +dragging the input. - `stepPixelSize: number` (default: 1) - Screen distance mouse needs - to travel to adjust value by one `step`. +to travel to adjust value by one `step`. - `format: value => value` - Format value using this function before - displaying it. +displaying it. - `suppressFlicker: number` - A number in milliseconds, for which the input - will hold off from updating while events propagate through the backend. - Default is about 250ms, increase it if you still see flickering. +will hold off from updating while events propagate through the backend. +Default is about 250ms, increase it if you still see flickering. - `onChange: (e, value) => void` - An event, which fires when you release - the input, or successfully enter a number. +the input, or successfully enter a number. - `onDrag: (e, value) => void` - An event, which fires about every 500ms - when you drag the input up and down, on release and on manual editing. +when you drag the input up and down, on release and on manual editing. + +### `Popper` + +Popper lets you position elements so that they don't go out of the bounds of the window. See [popper.js](https://popper.js.org/) for more information. + +**Props:** + +- `popperContent: InfernoNode` - The content that will be put inside the popper. +- `options?: { ... }` - An object of options to pass to `createPopper`. See [https://popper.js.org/docs/v2/constructors/#options], but the one you want most is `placement`. Valid placements are "bottom", "top", "left", and "right". You can affix "-start" and "-end" to achieve something like top left or top right respectively. You can also use "auto" (with an optional "-start" or "-end"), where a best fit will be chosen. +- `additionalStyles: { ... }` - A map of CSS styles to add to the element that will contain the popper. ### `LabeledControls` @@ -605,7 +639,9 @@ column is labels, and second column is content. ```jsx - Content + + Content + ``` @@ -614,7 +650,13 @@ to perform some sort of action), there is a way to do that: ```jsx - }> + + Click me! + + )}> Content @@ -631,7 +673,7 @@ to perform some sort of action), there is a way to do that: - `label: string` - Item label. - `color: string` - Sets the color of the text. - `buttons: any` - Buttons to render aside the content. -- `content/children: any` - Content of this labeled item. +- `children: any` - Content of this labeled item. ### `LabeledList.Divider` @@ -641,7 +683,9 @@ Example: ```jsx - Content + + Content + ``` @@ -687,22 +731,22 @@ to fine tune the value, or single click it to manually type a number. - `minValue: number` - Lowest possible value. - `maxValue: number` - Highest possible value. - `step: number` (default: 1) - Adjust value by this amount when - dragging the input. +dragging the input. - `stepPixelSize: number` (default: 1) - Screen distance mouse needs - to travel to adjust value by one `step`. +to travel to adjust value by one `step`. - `width: string|number` - Width of the element, in `Box` units or pixels. - `height: string|numer` - Height of the element, in `Box` units or pixels. - `lineHeight: string|number` - lineHeight of the element, in `Box` units or pixels. - `fontSize: string|number` - fontSize of the element, in `Box` units or pixels. - `format: value => value` - Format value using this function before - displaying it. +displaying it. - `suppressFlicker: number` - A number in milliseconds, for which the input - will hold off from updating while events propagate through the backend. - Default is about 250ms, increase it if you still see flickering. +will hold off from updating while events propagate through the backend. +Default is about 250ms, increase it if you still see flickering. - `onChange: (e, value) => void` - An event, which fires when you release - the input, or successfully enter a number. +the input, or successfully enter a number. - `onDrag: (e, value) => void` - An event, which fires about every 500ms - when you drag the input up and down, on release and on manual editing. +when you drag the input up and down, on release and on manual editing. ### `ProgressBar` @@ -721,21 +765,52 @@ Usage of `ranges` prop: average: [0.25, 0.5], bad: [-Infinity, 0.25], }} - value={0.6} -/> + value={0.6} /> ``` **Props:** - `value: number` - Current progress as a floating point number between - `minValue` (default: 0) and `maxValue` (default: 1). Determines the - percentage and how filled the bar is. +`minValue` (default: 0) and `maxValue` (default: 1). Determines the +percentage and how filled the bar is. - `minValue: number` - Lowest possible value. - `maxValue: number` - Highest possible value. - `ranges: { color: [from, to] }` - Applies a `color` to the progress bar - based on whether the value lands in the range between `from` and `to`. +based on whether the value lands in the range between `from` and `to`. - `color: string` - Color of the progress bar. -- `content/children: any` - Content to render inside the progress bar. +- `children: any` - Content to render inside the progress bar. + +### `RoundGauge` + +The RoundGauge component provides a visual representation of a single metric, as well as being capable of showing informational or cautionary boundaries related to that metric. + +```jsx + +``` + +The alert on the gauge is optional, and will only be shown if the `alertAfter` prop is defined. When defined, the alert will begin to flash the respective color upon which the needle currently rests, as defined in the `ranges` prop. + +**Props:** + +- See inherited props: [Box](#box) +- `value: number` - The current value of the metric. +- `minValue: number` (default: 0) - The lower bound of the guage. +- `maxValue: number` (default: 1) - The upper bound of the guage. +- `ranges: { color: [from, to] }` (default: `{ "good": [0, 1] }`) - Provide regions of the guage to color between two specified values of the metric. +- `alertAfter: number` (optional) - When provided, will cause an alert symbol on the gauge to begin flashing in the color upon which the needle currently rest, as defined in `ranges`. +- `format: function(value) => string` (optional) - When provided, will be used to format the value of the metric for display. +- `size: number` (default: 1) - When provided scales the gauge. ### `Section` @@ -748,14 +823,22 @@ clearly indicates hierarchy. Section can also be titled to clearly define its purpose. ```jsx -
Here you can order supply crates.
+
+ Here you can order supply crates. +
``` If you want to have a button on the right side of an section title (for example, to perform some sort of action), there is a way to do that: ```jsx -
}> +
+ Send shuttle + + )}> Here you can order supply crates.
``` @@ -763,9 +846,12 @@ If you want to have a button on the right side of an section title - See inherited props: [Box](#box) - `title: string` - Title of the section. - `level: number` - Section level in hierarchy. Default is 1, higher number - means deeper level of nesting. Must be an integer number. +means deeper level of nesting. Must be an integer number. - `buttons: any` - Buttons to render aside the section title. -- `content/children: any` - Content of this section. +- `fill: boolean` - If true, fills all available vertical space. +- `fitted: boolean` - If true, removes all section padding. +- `scrollable: boolean` - Shows or hides the scrollbar. +- `children: any` - Content of this section. ### `Slider` @@ -784,23 +870,93 @@ Single click opens an input box to manually type in a number. - `minValue: number` - Lowest possible value. - `maxValue: number` - Highest possible value. - `fillValue: number` - If set, this value will be used to set the fill - percentage of the progress bar filler independently of the main value. +percentage of the progress bar filler independently of the main value. - `ranges: { color: [from, to] }` - Applies a `color` to the slider - based on whether the value lands in the range between `from` and `to`. - See an example of this prop in [ProgressBar](#progressbar). +based on whether the value lands in the range between `from` and `to`. +See an example of this prop in [ProgressBar](#progressbar). - `step: number` (default: 1) - Adjust value by this amount when - dragging the input. +dragging the input. - `stepPixelSize: number` (default: 1) - Screen distance mouse needs - to travel to adjust value by one `step`. +to travel to adjust value by one `step`. - `format: value => value` - Format value using this function before - displaying it. +displaying it. - `suppressFlicker: number` - A number in milliseconds, for which the input - will hold off from updating while events propagate through the backend. - Default is about 250ms, increase it if you still see flickering. +will hold off from updating while events propagate through the backend. +Default is about 250ms, increase it if you still see flickering. - `onChange: (e, value) => void` - An event, which fires when you release - the input, or successfully enter a number. +the input, or successfully enter a number. - `onDrag: (e, value) => void` - An event, which fires about every 500ms - when you drag the input up and down, on release and on manual editing. +when you drag the input up and down, on release and on manual editing. + +### `Stack` + +A higher-level component, that is based on [Flex](#flex). The main difference +from `Flex`, is that this component automatically adds spacing between +all stack items, reducing the boilerplate that you have to write! + +Consists of two elements: `` and ``. + +Stacks can be vertical by adding a `vertical` property. + +**Example:** + +```jsx + + + Button description + + + + + +``` + +**Example of a high-level window layout:** + +Stacks can be used for high level window layout. +Make sure to use the `fill` property. + +```jsx + + + + +
+ Sidebar +
+
+ + + +
+ Main content +
+
+ +
+ Bottom pane +
+
+
+
+
+
+
+``` + +**Props:** + +- See inherited props: [Flex](#flex) +- `fill: boolean` - If set, stack will fill all available height. +- `vertical: boolean` - If set, stack will work in vertical mode. + +### `Stack.Item` + +**Props:** + +- See inherited props: [Flex.Item](#flexitem) ### `Table` @@ -813,7 +969,9 @@ Example: ```jsx
" else dat += "" - var/img_src = "[mob_info.icon_state_normal].png" + var/img_src = SSassets.transport.get_asset_url("[mob_info.icon_state_normal].png") if(mob_info.is_shiny) - dat += "[mob_info.icon_state_shiny].png" + dat += SSassets.transport.get_asset_url("[mob_info.icon_state_shiny].png") dat += "" dat += "
- Hello world! + + Hello world! + Label @@ -842,7 +1000,7 @@ A straight forward mapping to `
` element. - See inherited props: [Box](#box) - `collapsing: boolean` - Collapses table cell to the smallest possible size, - and stops any text inside from wrapping. +and stops any text inside from wrapping. ### `Tabs` @@ -878,7 +1036,9 @@ Tabs also support a vertical configuration. This is usually paired with a ```jsx - ... + + ... + Tab content. @@ -890,7 +1050,7 @@ Tabs also support a vertical configuration. This is usually paired with a - See inherited props: [Box](#box) - `vertical: boolean` - Use a vertical configuration, where tabs will be - stacked vertically. +stacked vertically. - `children: Tab[]` - This component only accepts tabs as its children. ### `Tabs.Tab` @@ -902,8 +1062,8 @@ a lot of `Button` props. - See inherited props: [Button](#button) - `altSelection` - Whether the tab buttons select via standard select (color - change) or by adding a white indicator to the selected tab. - Intended for usage on interfaces where tab color has relevance. +change) or by adding a white indicator to the selected tab. +Intended for usage on interfaces where tab color has relevance. - `icon: string` - Tab icon. - `children: any` - Tab text. - `onClick: function` - Called when element is clicked. @@ -919,17 +1079,18 @@ it is recommended to use that prop instead. Usage: ```jsx - - Sample text. - - + + + Sample text. + + ``` **Props:** -- `position: string` - Tooltip position. -- `content/children: string` - Content of the tooltip. Must be a plain string. - Fragments or other elements are **not** supported. +- `position?: string` - Tooltip position. See [`Popper`](#Popper) for valid options. Defaults to "auto". +- `content: string` - Content of the tooltip. Must be a plain string. +Fragments or other elements are **not** supported. ## `tgui/layouts` @@ -942,21 +1103,27 @@ it in one way or another. Example: ```jsx - - Hello, world! + + + Hello, world! + ``` **Props:** +- See inherited props: [Box](#box) - `className: string` - Applies a CSS class to the element. - `theme: string` - A name of the theme. - For a list of themes, see `packages/tgui/styles/themes`. -- `resizable: boolean` - Controls resizability of the window. +- `title: string` - Window title. +- `width: number` - Window width. +- `height: number` - Window height. +- `noClose: boolean` - Controls the ability to close the window. - `children: any` - Child elements, which are rendered directly inside the - window. If you use a [Dimmer](#dimmer) or [Modal](#modal) in your UI, - they should be put as direct childs of a Window, otherwise you should be - putting your content into [Window.Content](#windowcontent). +window. If you use a [Dimmer](#dimmer) or [Modal](#modal) in your UI, +they should be put as direct childs of a Window, otherwise you should be +putting your content into [Window.Content](#windowcontent). ### `Window.Content` @@ -965,6 +1132,8 @@ Can be scrollable. **Props:** +- See inherited props: [Box](#box) - `className: string` - Applies a CSS class to the element. +- `fitted: boolean` - If true, removes all padding. - `scrollable: boolean` - Shows or hides the scrollbar. - `children: any` - Main content of your window. diff --git a/tgui/docs/migration-to-v4-from-v3.md b/tgui/docs/migration-to-v4-from-v3.md new file mode 100644 index 000000000000..6f047a6cc7ef --- /dev/null +++ b/tgui/docs/migration-to-v4-from-v3.md @@ -0,0 +1,91 @@ +# tgui Migration Guide to v4 from v3 + +## The Easy Part + +- Copy and replace the following files in bulk: + - `code/__DEFINES/tgui.dm` + - `code/controllers/subsystem/tgui.dm` + - `code/modules/tgui/**` + - `tgui/**` + - Except: `tgui/packages/tgui/interfaces` + - Manually resolve conflicts for files that were touched outside the + `interfaces` folder. +- Copy the updated `log_tgui` proc from: + - `code/__HELPERS/_logging.dm` + +If you have a dual nano/tgui setup, then make sure to rename all ui procs +on `/datum`, such as `ui_interact` to `tgui_interact`, to avoid namespace +clashing. Usual stuff. + +## Update `ui_interact` proc signatures + +First of all, tgui states need to move from `ui_interact` to `ui_state`. + +One way of doing it, is to just cherry pick those procs from upstream. + +If you want to search and replace manually, search for `state = GLOB`, and +extract those things into `ui_state` procs like so: + +```dm +.../ui_state(mob/user) + return GLOB.default_state +``` + +Then reduce `ui_interact` until you finish with something like this: + +```dm +.../ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "FooBar", "Foo Bar UI", 600, 400) + ui.open() +``` + +## Update asset delivery code + +Remove all asset code that injects stylesheets by modifying tgui's `basehtml`. +You no longer need to do that. + +Find all occurences of `asset.send(user)` in `ui_interact`, and refactor those +snippets to the following proc: + +```dm +.../ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/simple/foobar), + ) +``` + +## Check `ui_act` for new bugs + +Code behind `ui_act` was recently refactored to use JSON-encoded payloads +instead of just strings. Since it can now carry numbers and other complex +types, you should check that the code is type agnostic and does not break +due to an assumption that every parameter is a string. + +One of such offenders is the personal crafting interface, where it needlessly +compares parameters to `""` and `"0"`. You can now replace this code with +simple assignments, because an empty category will now be properly `null` +instead of an empty string. + +## Backend data changes + +Interfaces that relied on `config.window.id`, must now use +`window.__windowId__`, which is a global constant unique for the page +the script is running on (so you can be sure it never changes). + +In case of `ByondUi`, this parameter can be completely omitted, because +parent will always default to the current window id. + +Affected interfaces: + +- `CameraConsole` +- Any interface that uses the `ByondUi` component + +--- + +That's all folks! + +There is a lot of stuff that was refactored under the hood, but normal UI +stuff wouldn't and shouldn't touch it, so you should be good with just +going through the checklist above. diff --git a/tgui/docs/tutorial-and-examples.md b/tgui/docs/tutorial-and-examples.md index aeda9b57330d..dea1ede59452 100644 --- a/tgui/docs/tutorial-and-examples.md +++ b/tgui/docs/tutorial-and-examples.md @@ -5,23 +5,23 @@ Basic tgui backend code consists of the following vars and procs: ``` -ui_interact(mob/user, ui_key, datum/tgui/ui, force_open, - datum/tgui/master_ui, datum/ui_state/state) +ui_interact(mob/user, datum/tgui/ui) ui_data(mob/user) ui_act(action, params) +ui_state() ``` - `src_object` - The atom, which UI corresponds to in the game world. - `ui_interact` - The proc where you will handle a request to open an - interface. Typically, you would update an existing UI (if it exists), - or set up a new instance of UI by calling the `SStgui` subsystem. +interface. Typically, you would update an existing UI (if it exists), +or set up a new instance of UI by calling the `SStgui` subsystem. - `ui_data` - In this proc you munges whatever complex data your `src_object` - has into an associative list, which will then be sent to UI as a JSON string. +has into an associative list, which will then be sent to UI as a JSON string. - `ui_act` - This proc receives user actions and reacts to them by changing - the state of the game. -- `ui_state` (set in `ui_interact`) - This var dictates under what conditions - a UI may be interacted with. This may be the standard checks that check if - you are in range and conscious, or more. +the state of the game. +- `ui_state` - This proc dictates under what conditions a UI may be interacted +with. This may be the standard checks that check if you are in range and +conscious, or more. Once backend is complete, you create an new interface component on the frontend, which will receive this JSON data and render it on screen. @@ -37,10 +37,10 @@ powerful interactions for embedded objects or remote access. Let's start with a very basic hello world. ```dm -/obj/machinery/my_machine/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/machinery/my_machine/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "my_machine", name, 300, 300, master_ui, state) + ui = new(user, src, "MyMachine") ui.open() ``` @@ -48,9 +48,7 @@ This is the proc that defines our interface. There's a bit going on here, so let's break it down. First, we override the ui_interact proc on our object. This will be called by `interact` for you, which is in turn called by `attack_hand` (or `attack_self` for items). `ui_interact` is also called to update a UI (hence -the `try_update_ui`), so we accept an existing UI to update. The `state` is a -default argument so that a caller can overload it with named arguments -(`ui_interact(state = overloaded_state)`) if needed. +the `try_update_ui`), so we accept an existing UI to update. Inside the `if(!ui)` block (which means we are creating a new UI), we choose our template, title, and size; we can also set various options like `style` (for @@ -124,19 +122,25 @@ import { Window } from '../layouts'; export const SampleInterface = (props, context) => { const { act, data } = useBackend(context); // Extract `health` and `color` variables from the `data` object. - const { health, color } = data; + const { + health, + color, + } = data; return (
- {health} - {color} + + {health} + + + {color} +
@@ -149,22 +153,22 @@ export const SampleInterface = (props, context) => { Here are the key variables you get from a `useBackend(context)` function: - `config` is part of core tgui. It contains meta-information about the - interface and who uses it, BYOND refs to various objects, and so forth. - You are rarely going to use it, but sometimes it can be used to your - advantage when doing complex UIs. +interface and who uses it, BYOND refs to various objects, and so forth. +You are rarely going to use it, but sometimes it can be used to your +advantage when doing complex UIs. - `data` is the data returned from `ui_data` and `ui_static_data` procs in - your DM code. Pretty straight forward. +your DM code. Pretty straight forward. - Note, that javascript doesn't have associative arrays, so when you - return an associative list from DM, it will be available in `data` as a - javascript object instead of an array. You can use it normally - like so: `object.key`, so it's not a problem if it's representing a - data structure, but common `Array` methods, such as `array.map(item => ...)`, - are not available on it. Always prefer returning clean arrays from your - code, since arrays are easier to work with in javascript! + return an associative list from DM, it will be available in `data` as a + javascript object instead of an array. You can use it normally + like so: `object.key`, so it's not a problem if it's representing a + data structure, but common `Array` methods, such as `array.map(item => ...)`, + are not available on it. Always prefer returning clean arrays from your + code, since arrays are easier to work with in javascript! - `act(name, params)` is a function, which you can call to dispatch an action - to your DM code. It will be processed in `ui_act` proc. Action name will be - available in `params["action"]`, mixed together with the rest of parameters - you have passed in `params` object. +to your DM code. It will be processed in `ui_act` proc. Action name will be +available in `params["action"]`, mixed together with the rest of parameters +you have passed in `params` object. **Let's talk about the syntax.** @@ -175,19 +179,17 @@ expressions that look like html, and turns them into function calls. Take a look at this example: ```jsx -
You are in {status} condition!
+
+ You are in {status} condition! +
``` After compiling the code above, this is what it becomes: ```js -createElement( - 'div', +createElement('div', { className: 'color-' + status }, - 'You are in ', - status, - ' condition!' -); + 'You are in ', status, ' condition!'); ``` It is very important to remember, that JSX is just a javascript expression @@ -208,7 +210,11 @@ to a `` element. If `showProgress` is `false`, the whole expression evaluates to `false`, and `false` is not rendered by React. ```jsx -{showProgress && } + + {showProgress && ( + + )} + ``` You can also use the `||` operator (the logical OR), which works the same way, @@ -221,8 +227,10 @@ and builds a new array based on what was returned by that function. ```jsx - {items.map((item) => ( - + {items.map(item => ( + {item.content} ))} @@ -255,13 +263,22 @@ export const SampleInterface = (props, context) => { const HealthStatus = (props, context) => { const { act, data } = useBackend(context); - const { user } = props; - const { health, color } = data; + const { + user, + } = props; + const { + health, + color, + } = data; return ( -
+
- {health} - {color} + + {health} + + + {color} +
); @@ -275,10 +292,10 @@ here's what you need (note that you'll probably be forced to clean your shit up upon code review): ```dm -/obj/copypasta/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) // Remember to use the appropriate state. - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) +/obj/copypasta/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, ui_key, "copypasta", name, 300, 300, master_ui, state) + ui = new(user, src, "copypasta") ui.open() /obj/copypasta/ui_data(mob/user) @@ -308,19 +325,25 @@ import { Window } from '../layouts'; export const SampleInterface = (props, context) => { const { act, data } = useBackend(context); // Extract `health` and `color` variables from the `data` object. - const { health, color } = data; + const { + health, + color, + } = data; return (
- {health} - {color} + + {health} + + + {color} +
diff --git a/tgui/docs/writing-tests.md b/tgui/docs/writing-tests.md new file mode 100644 index 000000000000..99cb39e158a9 --- /dev/null +++ b/tgui/docs/writing-tests.md @@ -0,0 +1,23 @@ +## Jest + +You can now write and run unit tests in tgui. + +It's quite simple: create a file ending in `.test.ts` or `.spec.ts` (usually with the same filename as the file you're testing), and create a test case: + +```js +test('something', () => { + expect('a').toBe('a'); +}); +``` + +To run the tests, type the following into the terminal: + +``` +bin/tgui --test +``` + +There is an example test in `packages/common/react.spec.ts`. + +You can read more about Jest here: https://jestjs.io/docs/en/getting-started + +Note, that there is still no real solution to test UIs for now, even though a lot of the support is here (jest + jsdom). That will come later. diff --git a/tgui/global.d.ts b/tgui/global.d.ts new file mode 100644 index 000000000000..542788717ab6 --- /dev/null +++ b/tgui/global.d.ts @@ -0,0 +1,203 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +// Webpack asset modules. +// Should match extensions used in webpack config. +declare module '*.png' { + const content: string; + export default content; +} + +declare module '*.jpg' { + const content: string; + export default content; +} + +declare module '*.svg' { + const content: string; + export default content; +} + +namespace JSX { + interface IntrinsicElements { + marquee: any; + blink: any; + } +} + +type TguiMessage = { + type: string; + payload?: any; + [key: string]: any; +}; + +type ByondType = { + /** + * ID of the Byond window this script is running on. + * Can be used as a parameter to winget/winset. + */ + windowId: string; + + /** + * True if javascript is running in BYOND. + */ + IS_BYOND: boolean; + + /** + * Version of Trident engine of Internet Explorer. Null if N/A. + */ + TRIDENT: number | null; + + /** + * True if browser is IE8 or lower. + */ + IS_LTE_IE8: boolean; + + /** + * True if browser is IE9 or lower. + */ + IS_LTE_IE9: boolean; + + /** + * True if browser is IE10 or lower. + */ + IS_LTE_IE10: boolean; + + /** + * True if browser is IE11 or lower. + */ + IS_LTE_IE11: boolean; + + /** + * If `true`, unhandled errors and common mistakes result in a blue screen + * of death, which stops this window from handling incoming messages and + * closes the active instance of tgui datum if there was one. + * + * It can be defined in window.initialize() in DM, or changed in runtime + * here via this property to `true` or `false`. + * + * It is recommended that you keep this ON to detect hard to find bugs. + */ + strictMode: boolean; + + /** + * Makes a BYOND call. + * + * If path is empty, this will trigger a Topic call. + * You can reference a specific object by setting the "src" parameter. + * + * See: https://secure.byond.com/docs/ref/skinparams.html + */ + call(path: string, params: object): void; + + /** + * Makes an asynchronous BYOND call. Returns a promise. + */ + callAsync(path: string, params: object): Promise; + + /** + * Makes a Topic call. + * + * You can reference a specific object by setting the "src" parameter. + */ + topic(params: object): void; + + /** + * Runs a command or a verb. + */ + command(command: string): void; + + /** + * Retrieves all properties of the BYOND skin element. + * + * Returns a promise with a key-value object containing all properties. + */ + winget(id: string | null): Promise; + + /** + * Retrieves all properties of the BYOND skin element. + * + * Returns a promise with a key-value object containing all properties. + */ + winget(id: string | null, propName: '*'): Promise; + + /** + * Retrieves an exactly one property of the BYOND skin element, + * as defined in `propName`. + * + * Returns a promise with the value of that property. + */ + winget(id: string | null, propName: string): Promise; + + /** + * Retrieves multiple properties of the BYOND skin element, + * as defined in the `propNames` array. + * + * Returns a promise with a key-value object containing listed properties. + */ + winget(id: string | null, propNames: string[]): Promise; + + /** + * Assigns properties to BYOND skin elements in bulk. + */ + winset(props: object): void; + + /** + * Assigns properties to the BYOND skin element. + */ + winset(id: string | null, props: object): void; + + /** + * Sets a property on the BYOND skin element to a certain value. + */ + winset(id: string | null, propName: string, propValue: any): void; + + /** + * Parses BYOND JSON. + * + * Uses a special encoding to preserve `Infinity` and `NaN`. + */ + parseJson(text: string): any; + + /** + * Sends a message to `/datum/tgui_window` which hosts this window instance. + */ + sendMessage(type: string, payload?: any): void; + sendMessage(message: TguiMessage): void; + + /** + * Subscribe to incoming messages that were sent from `/datum/tgui_window`. + */ + subscribe(listener: (type: string, payload: any) => void): void; + + /** + * Subscribe to incoming messages *of some specific type* + * that were sent from `/datum/tgui_window`. + */ + subscribeTo(type: string, listener: (payload: any) => void): void; + + /** + * Loads a stylesheet into the document. + */ + loadCss(url: string): void; + + /** + * Loads a script into the document. + */ + loadJs(url: string): void; +}; + +/** + * Object that provides access to Byond Skin API and is available in + * any tgui application. + */ +const Byond: ByondType; + +interface Window { + Byond: ByondType; + __store__: Store; + __augmentStack__: (store: Store) => StackAugmentor; +} diff --git a/tgui/jest.config.js b/tgui/jest.config.js new file mode 100644 index 000000000000..5802332817f1 --- /dev/null +++ b/tgui/jest.config.js @@ -0,0 +1,14 @@ +module.exports = { + roots: ['/packages'], + testMatch: [ + '/packages/**/__tests__/*.{js,ts,tsx}', + '/packages/**/*.{spec,test}.{js,ts,tsx}', + ], + testEnvironment: 'jsdom', + testRunner: require.resolve('jest-circus/runner'), + transform: { + '^.+\\.(js|cjs|ts|tsx)$': require.resolve('babel-jest'), + }, + moduleFileExtensions: ['js', 'cjs', 'ts', 'tsx', 'json'], + resetMocks: true, +}; diff --git a/tgui/package.json b/tgui/package.json index 70f17d094752..d06d8edeb95b 100644 --- a/tgui/package.json +++ b/tgui/package.json @@ -1,31 +1,50 @@ { "private": true, - "name": "tgui", - "version": "3.0.0", + "name": "tgui-workspace", + "version": "4.4.0", + "packageManager": "yarn@4.0.2", "workspaces": [ "packages/*" ], - "scripts": { - "build": "eslint packages && cd packages/tgui && npx webpack --mode=production", - "watch": "cd packages/tgui-dev-server && set NODE_OPTIONS=--openssl-legacy-provider --no-experimental-fetch && node --experimental-modules index.js", - "analyze": "cd packages/tgui && npx webpack --mode=production --env.analyze=1", - "lint": "eslint packages", - "prettier": "prettier --check packages", - "prettier-write": "prettier --check packages --write" - }, "dependencies": { - "@babel/eslint-parser": "^7.22.15", - "@babel/core": "^7.23.2", - "@babel/preset-env": "^7.23.2", - "@babel/preset-react": "^7.22.15", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-transform-jscript": "^7.22.5", - "babel-plugin-inferno": "^6.7.0", + "@babel/core": "^7.23.3", + "@babel/eslint-parser": "^7.23.3", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-jscript": "^7.23.3", + "@babel/preset-env": "^7.23.3", + "@babel/preset-typescript": "^7.23.3", + "@types/jest": "^29.5.11", + "@types/jsdom": "^21.1.6", + "@types/node": "^20.10.6", + "@types/webpack": "^5.28.5", + "@types/webpack-env": "^1.18.4", + "@typescript-eslint/parser": "^6.18.0", + "babel-jest": "^29.7.0", + "babel-loader": "^8.3.0", + "babel-plugin-inferno": "^6.7.1", "babel-plugin-transform-remove-console": "^6.9.4", - "eslint": "^8.49.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^5.0.0", + "common": "workspace:*", + "css-loader": "^6.8.1", + "esbuild-loader": "^4.0.2", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "5.1.2", "eslint-plugin-react": "^7.33.2", - "prettier": "^3.0.3" + "eslint-plugin-unused-imports": "^3.0.0", + "file-loader": "^6.2.0", + "jest": "^29.7.0", + "jest-circus": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jsdom": "^23.1.0", + "mini-css-extract-plugin": "^2.7.6", + "prettier": "3.1.1", + "sass": "^1.69.7", + "sass-loader": "^13.3.2", + "style-loader": "^3.3.3", + "terser-webpack-plugin": "^5.3.10", + "typescript": "^5.3.3", + "webpack": "^5.89.0", + "webpack-bundle-analyzer": "^4.10.1", + "webpack-cli": "^5.1.4" } } diff --git a/tgui/packages/common/collections.spec.ts b/tgui/packages/common/collections.spec.ts new file mode 100644 index 000000000000..ef35a95cb3ea --- /dev/null +++ b/tgui/packages/common/collections.spec.ts @@ -0,0 +1,20 @@ +import { range, zip } from './collections'; + +// Type assertions, these will lint if the types are wrong. +const _zip1: [string, number] = zip(['a'], [1])[0]; + +describe('range', () => { + test('range(0, 5)', () => { + expect(range(0, 5)).toEqual([0, 1, 2, 3, 4]); + }); +}); + +describe('zip', () => { + test("zip(['a', 'b', 'c'], [1, 2, 3, 4])", () => { + expect(zip(['a', 'b', 'c'], [1, 2, 3, 4])).toEqual([ + ['a', 1], + ['b', 2], + ['c', 3], + ]); + }); +}); diff --git a/tgui/packages/common/collections.js b/tgui/packages/common/collections.ts similarity index 75% rename from tgui/packages/common/collections.js rename to tgui/packages/common/collections.ts index 315e39d4a147..1f0fb2d57958 100644 --- a/tgui/packages/common/collections.js +++ b/tgui/packages/common/collections.ts @@ -1,3 +1,9 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + /** * Converts a given collection to an array. * @@ -67,7 +73,7 @@ export const toKeyedArray = (obj, keyProp = 'key') => { * @returns {any[]} */ export const filter = (iterateeFn) => (collection) => { - if (collection === null && collection === undefined) { + if (collection === null || collection === undefined) { return collection; } if (Array.isArray(collection)) { @@ -94,7 +100,7 @@ export const filter = (iterateeFn) => (collection) => { * @returns {any[]} */ export const map = (iterateeFn) => (collection) => { - if (collection === null && collection === undefined) { + if (collection === null || collection === undefined) { return collection; } if (Array.isArray(collection)) { @@ -117,6 +123,26 @@ export const map = (iterateeFn) => (collection) => { throw new Error(`map() can't iterate on type ${typeof collection}`); }; +/** + * Given a collection, will run each element through an iteratee function. + * Will then filter out undefined values. + */ +export const filterMap = ( + collection: T[], + iterateeFn: (value: T) => U | undefined +): U[] => { + const finalCollection: U[] = []; + + for (const value of collection) { + const output = iterateeFn(value); + if (output !== undefined) { + finalCollection.push(output); + } + } + + return finalCollection; +}; + const COMPARATOR = (objA, objB) => { const criteriaA = objA.criteria; const criteriaB = objB.criteria; @@ -167,6 +193,15 @@ export const sortBy = return mappedArray; }; +export const sort = sortBy(); + +/** + * Returns a range of numbers from start to end, exclusively. + * For example, range(0, 5) will return [0, 1, 2, 3, 4]. + */ +export const range = (start: number, end: number): number[] => + new Array(end - start).fill(null).map((_, index) => index + start); + /** * A fast implementation of reduce. */ @@ -198,44 +233,52 @@ export const reduce = (reducerFn, initialValue) => (array) => { * is determined by the order they occur in the array. The iteratee is * invoked with one argument: value. */ -export const uniqBy = (iterateeFn) => (array) => { - const { length } = array; - const result = []; - const seen = iterateeFn ? [] : result; - let index = -1; - outer: while (++index < length) { - let value = array[index]; - const computed = iterateeFn ? iterateeFn(value) : value; - value = value !== 0 ? value : 0; - if (computed === computed) { - let seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; +/* eslint-disable indent */ +export const uniqBy = + (iterateeFn?: (value: T) => unknown) => + (array: T[]) => { + const { length } = array; + const result = []; + const seen = iterateeFn ? [] : result; + let index = -1; + outer: while (++index < length) { + let value: T | 0 = array[index]; + const computed = iterateeFn ? iterateeFn(value) : value; + value = value !== 0 ? value : 0; + if (computed === computed) { + let seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } } + if (iterateeFn) { + seen.push(computed); + } + result.push(value); + } else if (!seen.includes(computed)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); } - if (iterateeFn) { - seen.push(computed); - } - result.push(value); - } else if (!seen.includes(computed)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); } - } - return result; -}; + return result; + }; +/* eslint-enable indent */ + +export const uniq = uniqBy(); + +type Zip = { + [I in keyof T]: T[I] extends (infer U)[] ? U : never; +}[]; /** * Creates an array of grouped elements, the first of which contains * the first elements of the given arrays, the second of which contains * the second elements of the given arrays, and so on. - * - * @returns {any[]} */ -export const zip = (...arrays) => { +export const zip = (...arrays: T): Zip => { if (arrays.length === 0) { return; } diff --git a/tgui/packages/common/color.js b/tgui/packages/common/color.js new file mode 100644 index 000000000000..913f50747afb --- /dev/null +++ b/tgui/packages/common/color.js @@ -0,0 +1,62 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +const EPSILON = 0.0001; + +export class Color { + constructor(r = 0, g = 0, b = 0, a = 1) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } + + toString() { + return `rgba(${this.r | 0}, ${this.g | 0}, ${this.b | 0}, ${this.a | 0})`; + } +} + +/** + * Creates a color from the CSS hex color notation. + */ +Color.fromHex = (hex) => + new Color( + parseInt(hex.substr(1, 2), 16), + parseInt(hex.substr(3, 2), 16), + parseInt(hex.substr(5, 2), 16) + ); + +/** + * Linear interpolation of two colors. + */ +Color.lerp = (c1, c2, n) => + new Color( + (c2.r - c1.r) * n + c1.r, + (c2.g - c1.g) * n + c1.g, + (c2.b - c1.b) * n + c1.b, + (c2.a - c1.a) * n + c1.a + ); + +/** + * Loops up the color in the provided list of colors + * with linear interpolation. + */ +Color.lookup = (value, colors = []) => { + const len = colors.length; + if (len < 2) { + throw new Error('Needs at least two colors!'); + } + const scaled = value * (len - 1); + if (value < EPSILON) { + return colors[0]; + } + if (value >= 1 - EPSILON) { + return colors[len - 1]; + } + const ratio = scaled % 1; + const index = scaled | 0; + return Color.lerp(colors[index], colors[index + 1], ratio); +}; diff --git a/tgui/packages/common/events.js b/tgui/packages/common/events.js new file mode 100644 index 000000000000..7eeff511aa56 --- /dev/null +++ b/tgui/packages/common/events.js @@ -0,0 +1,41 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +export class EventEmitter { + constructor() { + this.listeners = {}; + } + + on(name, listener) { + this.listeners[name] = this.listeners[name] || []; + this.listeners[name].push(listener); + } + + off(name, listener) { + const listeners = this.listeners[name]; + if (!listeners) { + throw new Error(`There is no listeners for "${name}"`); + } + this.listeners[name] = listeners.filter((existingListener) => { + return existingListener !== listener; + }); + } + + emit(name, ...params) { + const listeners = this.listeners[name]; + if (!listeners) { + return; + } + for (let i = 0, len = listeners.length; i < len; i += 1) { + const listener = listeners[i]; + listener(...params); + } + } + + clear() { + this.listeners = {}; + } +} diff --git a/tgui/packages/tgui/interfaces/common/exhaustive.js b/tgui/packages/common/exhaustive.ts similarity index 89% rename from tgui/packages/tgui/interfaces/common/exhaustive.js rename to tgui/packages/common/exhaustive.ts index 99848610d116..bc41757515b0 100644 --- a/tgui/packages/tgui/interfaces/common/exhaustive.js +++ b/tgui/packages/common/exhaustive.ts @@ -14,6 +14,6 @@ * exhaustiveCheck(color); * } */ -export const exhaustiveCheck = (input) => { +export const exhaustiveCheck = (input: never) => { throw new Error(`Unhandled case: ${input}`); }; diff --git a/tgui/packages/common/fp.js b/tgui/packages/common/fp.js index 6b0bb531fdf6..990c7c53c510 100644 --- a/tgui/packages/common/fp.js +++ b/tgui/packages/common/fp.js @@ -1,3 +1,9 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + /** * Creates a function that returns the result of invoking the given * functions, where each successive invocation is supplied the return diff --git a/tgui/packages/common/keycodes.js b/tgui/packages/common/keycodes.js new file mode 100644 index 000000000000..19cfb302da41 --- /dev/null +++ b/tgui/packages/common/keycodes.js @@ -0,0 +1,96 @@ +/** + * All possible browser keycodes, in one file. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +export const KEY_BACKSPACE = 8; +export const KEY_TAB = 9; +export const KEY_ENTER = 13; +export const KEY_SHIFT = 16; +export const KEY_CTRL = 17; +export const KEY_ALT = 18; +export const KEY_PAUSE = 19; +export const KEY_CAPSLOCK = 20; +export const KEY_ESCAPE = 27; +export const KEY_SPACE = 32; +export const KEY_PAGEUP = 33; +export const KEY_PAGEDOWN = 34; +export const KEY_END = 35; +export const KEY_HOME = 36; +export const KEY_LEFT = 37; +export const KEY_UP = 38; +export const KEY_RIGHT = 39; +export const KEY_DOWN = 40; +export const KEY_INSERT = 45; +export const KEY_DELETE = 46; +export const KEY_0 = 48; +export const KEY_1 = 49; +export const KEY_2 = 50; +export const KEY_3 = 51; +export const KEY_4 = 52; +export const KEY_5 = 53; +export const KEY_6 = 54; +export const KEY_7 = 55; +export const KEY_8 = 56; +export const KEY_9 = 57; +export const KEY_A = 65; +export const KEY_B = 66; +export const KEY_C = 67; +export const KEY_D = 68; +export const KEY_E = 69; +export const KEY_F = 70; +export const KEY_G = 71; +export const KEY_H = 72; +export const KEY_I = 73; +export const KEY_J = 74; +export const KEY_K = 75; +export const KEY_L = 76; +export const KEY_M = 77; +export const KEY_N = 78; +export const KEY_O = 79; +export const KEY_P = 80; +export const KEY_Q = 81; +export const KEY_R = 82; +export const KEY_S = 83; +export const KEY_T = 84; +export const KEY_U = 85; +export const KEY_V = 86; +export const KEY_W = 87; +export const KEY_X = 88; +export const KEY_Y = 89; +export const KEY_Z = 90; +export const KEY_NUMPAD_0 = 96; +export const KEY_NUMPAD_1 = 97; +export const KEY_NUMPAD_2 = 98; +export const KEY_NUMPAD_3 = 99; +export const KEY_NUMPAD_4 = 100; +export const KEY_NUMPAD_5 = 101; +export const KEY_NUMPAD_6 = 102; +export const KEY_NUMPAD_7 = 103; +export const KEY_NUMPAD_8 = 104; +export const KEY_NUMPAD_9 = 105; +export const KEY_F1 = 112; +export const KEY_F2 = 113; +export const KEY_F3 = 114; +export const KEY_F4 = 115; +export const KEY_F5 = 116; +export const KEY_F6 = 117; +export const KEY_F7 = 118; +export const KEY_F8 = 119; +export const KEY_F9 = 120; +export const KEY_F10 = 121; +export const KEY_F11 = 122; +export const KEY_F12 = 123; +export const KEY_SEMICOLON = 186; +export const KEY_EQUAL = 187; +export const KEY_COMMA = 188; +export const KEY_MINUS = 189; +export const KEY_PERIOD = 190; +export const KEY_SLASH = 191; +export const KEY_LEFT_BRACKET = 219; +export const KEY_BACKSLASH = 220; +export const KEY_RIGHT_BRACKET = 221; +export const KEY_QUOTE = 222; diff --git a/tgui/packages/common/math.js b/tgui/packages/common/math.js index f87c3c971b49..0efd846ae0fe 100644 --- a/tgui/packages/common/math.js +++ b/tgui/packages/common/math.js @@ -1,3 +1,9 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + /** * Limits a number to the range between 'min' and 'max'. */ diff --git a/tgui/packages/common/package.json b/tgui/packages/common/package.json index fbd255ababce..c0e9b78c778f 100644 --- a/tgui/packages/common/package.json +++ b/tgui/packages/common/package.json @@ -1,6 +1,5 @@ { "private": true, "name": "common", - "version": "3.0.0", - "type": "module" + "version": "4.4.0" } diff --git a/tgui/packages/common/perf.js b/tgui/packages/common/perf.js new file mode 100644 index 000000000000..c2d6cb27db15 --- /dev/null +++ b/tgui/packages/common/perf.js @@ -0,0 +1,65 @@ +/** + * Ghetto performance measurement tools. + * + * Uses NODE_ENV to remove itself from production builds. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +const FPS = 60; +const FRAME_DURATION = 1000 / FPS; + +// True if Performance API is supported +const supportsPerf = !!window.performance?.now; +// High precision markers +let hpMarkersByName = {}; +// Low precision markers +let lpMarkersByName = {}; + +/** + * Marks a certain spot in the code for later measurements. + */ +const mark = (name, timestamp) => { + if (process.env.NODE_ENV !== 'production') { + if (supportsPerf && !timestamp) { + hpMarkersByName[name] = performance.now(); + } + lpMarkersByName[name] = timestamp || Date.now(); + } +}; + +/** + * Calculates and returns the difference between two markers as a string. + * + * Use logger.log() to print the measurement. + */ +const measure = (markerNameA, markerNameB) => { + if (process.env.NODE_ENV !== 'production') { + let markerA = hpMarkersByName[markerNameA]; + let markerB = hpMarkersByName[markerNameB]; + if (!markerA || !markerB) { + markerA = lpMarkersByName[markerNameA]; + markerB = lpMarkersByName[markerNameB]; + } + const duration = Math.abs(markerB - markerA); + return formatDuration(duration); + } +}; + +const formatDuration = (duration) => { + const durationInFrames = duration / FRAME_DURATION; + return ( + duration.toFixed(duration < 10 ? 1 : 0) + + 'ms ' + + '(' + + durationInFrames.toFixed(2) + + ' frames)' + ); +}; + +export const perf = { + mark, + measure, +}; diff --git a/tgui/packages/common/react.spec.ts b/tgui/packages/common/react.spec.ts new file mode 100644 index 000000000000..44102fdc9710 --- /dev/null +++ b/tgui/packages/common/react.spec.ts @@ -0,0 +1,20 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { classes } from './react'; + +describe('classes', () => { + test('empty', () => { + expect(classes([])).toBe(''); + }); + + test('result contains inputs', () => { + const output = classes(['foo', 'bar', false, true, 0, 1, 'baz']); + expect(output).toContain('foo'); + expect(output).toContain('bar'); + expect(output).toContain('baz'); + }); +}); diff --git a/tgui/packages/common/react.js b/tgui/packages/common/react.ts similarity index 58% rename from tgui/packages/common/react.js rename to tgui/packages/common/react.ts index a742f716a311..6789bb4edc65 100644 --- a/tgui/packages/common/react.js +++ b/tgui/packages/common/react.ts @@ -1,10 +1,13 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + /** * Helper for conditionally adding/removing classes in React - * - * @param {any[]} classNames - * @return {string} */ -export const classes = (classNames) => { +export const classes = (classNames: (string | BooleanLike)[]) => { let className = ''; for (let i = 0; i < classNames.length; i++) { const part = classNames[i]; @@ -19,9 +22,9 @@ export const classes = (classNames) => { * Normalizes children prop, so that it is always an array of VDom * elements. */ -export const normalizeChildren = (children) => { +export const normalizeChildren = (children: T | T[]) => { if (Array.isArray(children)) { - return children.flat().filter((value) => value); + return children.flat().filter((value) => value) as T[]; } if (typeof children === 'object') { return [children]; @@ -33,7 +36,7 @@ export const normalizeChildren = (children) => { * Shallowly checks if two objects are different. * Credit: https://github.com/developit/preact-compat */ -export const shallowDiffers = (a, b) => { +export const shallowDiffers = (a: object, b: object) => { let i; for (i in a) { if (!(i in b)) { @@ -58,8 +61,14 @@ export const pureComponentHooks = { }; /** - * A helper to determine whether to render an item. + * A helper to determine whether the object is renderable by React. */ -export const isFalsy = (value) => { - return value === undefined || value === null || value === false; +export const canRender = (value: unknown) => { + return value !== undefined && value !== null && typeof value !== 'boolean'; }; + +/** + * A common case in tgui, when you pass a value conditionally, these are + * the types that can fall through the condition. + */ +export type BooleanLike = number | boolean | null | undefined; diff --git a/tgui/packages/common/redux.js b/tgui/packages/common/redux.js index 8922044adbd9..7d3b27afbbe8 100644 --- a/tgui/packages/common/redux.js +++ b/tgui/packages/common/redux.js @@ -1,3 +1,9 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + import { compose } from './fp'; /** @@ -20,7 +26,9 @@ export const createStore = (reducer, enhancer) => { const dispatch = (action) => { currentState = reducer(currentState, action); - listeners.forEach((fn) => fn()); + for (let i = 0; i < listeners.length; i++) { + listeners[i](); + } }; // This creates the initial store by causing each reducer to be called @@ -65,3 +73,80 @@ export const applyMiddleware = (...middlewares) => { }; }; }; + +/** + * Combines reducers by running them in their own object namespaces as + * defined in reducersObj paramter. + * + * Main difference from redux/combineReducers is that it preserves keys + * in the state that are not present in the reducers object. This function + * is also more flexible than the redux counterpart. + */ +export const combineReducers = (reducersObj) => { + const keys = Object.keys(reducersObj); + let hasChanged = false; + return (prevState = {}, action) => { + const nextState = { ...prevState }; + for (let key of keys) { + const reducer = reducersObj[key]; + const prevDomainState = prevState[key]; + const nextDomainState = reducer(prevDomainState, action); + if (prevDomainState !== nextDomainState) { + hasChanged = true; + nextState[key] = nextDomainState; + } + } + return hasChanged ? nextState : prevState; + }; +}; + +/** + * A utility function to create an action creator for the given action + * type string. The action creator accepts a single argument, which will + * be included in the action object as a field called payload. The action + * creator function will also have its toString() overriden so that it + * returns the action type, allowing it to be used in reducer logic that + * is looking for that action type. + * + * @param {string} type The action type to use for created actions. + * @param {any} prepare (optional) a method that takes any number of arguments + * and returns { payload } or { payload, meta }. If this is given, the + * resulting action creator will pass it's arguments to this method to + * calculate payload & meta. + * + * @public + */ +export const createAction = (type, prepare = null) => { + const actionCreator = (...args) => { + if (!prepare) { + return { type, payload: args[0] }; + } + const prepared = prepare(...args); + if (!prepared) { + throw new Error('prepare function did not return an object'); + } + const action = { type }; + if ('payload' in prepared) { + action.payload = prepared.payload; + } + if ('meta' in prepared) { + action.meta = prepared.meta; + } + return action; + }; + actionCreator.toString = () => '' + type; + actionCreator.type = type; + actionCreator.match = (action) => action.type === type; + return actionCreator; +}; + +// Implementation specific +// -------------------------------------------------------- + +export const useDispatch = (context) => { + return context.store.dispatch; +}; + +export const useSelector = (context, selector) => { + return selector(context.store.getState()); +}; diff --git a/tgui/packages/common/storage.js b/tgui/packages/common/storage.js new file mode 100644 index 000000000000..7a08cbb2920b --- /dev/null +++ b/tgui/packages/common/storage.js @@ -0,0 +1,195 @@ +/** + * Browser-agnostic abstraction of key-value web storage. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +export const IMPL_MEMORY = 0; +export const IMPL_LOCAL_STORAGE = 1; +export const IMPL_INDEXED_DB = 2; + +const INDEXED_DB_VERSION = 1; +const INDEXED_DB_NAME = 'para-tgui'; +const INDEXED_DB_STORE_NAME = 'storage-v1'; + +const READ_ONLY = 'readonly'; +const READ_WRITE = 'readwrite'; + +const testGeneric = (testFn) => () => { + try { + return Boolean(testFn()); + } catch { + return false; + } +}; + +// Localstorage can sometimes throw an error, even if DOM storage is not +// disabled in IE11 settings. +// See: https://superuser.com/questions/1080011 +// prettier-ignore +const testLocalStorage = testGeneric(() => ( + window.localStorage && window.localStorage.getItem +)); + +// prettier-ignore +const testIndexedDb = testGeneric(() => ( + (window.indexedDB || window.msIndexedDB) + && (window.IDBTransaction || window.msIDBTransaction) +)); + +class MemoryBackend { + constructor() { + this.impl = IMPL_MEMORY; + this.store = {}; + } + + get(key) { + return this.store[key]; + } + + set(key, value) { + this.store[key] = value; + } + + remove(key) { + this.store[key] = undefined; + } + + clear() { + this.store = {}; + } +} + +class LocalStorageBackend { + constructor() { + this.impl = IMPL_LOCAL_STORAGE; + } + + get(key) { + const value = localStorage.getItem(key); + if (typeof value === 'string') { + return JSON.parse(value); + } + } + + set(key, value) { + localStorage.setItem(key, JSON.stringify(value)); + } + + remove(key) { + localStorage.removeItem(key); + } + + clear() { + localStorage.clear(); + } +} + +class IndexedDbBackend { + constructor() { + this.impl = IMPL_INDEXED_DB; + /** @type {Promise} */ + this.dbPromise = new Promise((resolve, reject) => { + const indexedDB = window.indexedDB || window.msIndexedDB; + const req = indexedDB.open(INDEXED_DB_NAME, INDEXED_DB_VERSION); + req.onupgradeneeded = () => { + try { + req.result.createObjectStore(INDEXED_DB_STORE_NAME); + } catch (err) { + reject(new Error('Failed to upgrade IDB: ' + req.error)); + } + }; + req.onsuccess = () => resolve(req.result); + req.onerror = () => { + reject(new Error('Failed to open IDB: ' + req.error)); + }; + }); + } + + getStore(mode) { + // prettier-ignore + return this.dbPromise.then((db) => db + .transaction(INDEXED_DB_STORE_NAME, mode) + .objectStore(INDEXED_DB_STORE_NAME)); + } + + async get(key) { + const store = await this.getStore(READ_ONLY); + return new Promise((resolve, reject) => { + const req = store.get(key); + req.onsuccess = () => resolve(req.result); + req.onerror = () => reject(req.error); + }); + } + + async set(key, value) { + // The reason we don't _save_ null is because IE 10 does + // not support saving the `null` type in IndexedDB. How + // ironic, given the bug below! + // See: https://github.com/mozilla/localForage/issues/161 + if (value === null) { + value = undefined; + } + // NOTE: We deliberately make this operation transactionless + const store = await this.getStore(READ_WRITE); + store.put(value, key); + } + + async remove(key) { + // NOTE: We deliberately make this operation transactionless + const store = await this.getStore(READ_WRITE); + store.delete(key); + } + + async clear() { + // NOTE: We deliberately make this operation transactionless + const store = await this.getStore(READ_WRITE); + store.clear(); + } +} + +/** + * Web Storage Proxy object, which selects the best backend available + * depending on the environment. + */ +class StorageProxy { + constructor() { + this.backendPromise = (async () => { + if (testIndexedDb()) { + try { + const backend = new IndexedDbBackend(); + await backend.dbPromise; + return backend; + } catch {} + } + if (testLocalStorage()) { + return new LocalStorageBackend(); + } + return new MemoryBackend(); + })(); + } + + async get(key) { + const backend = await this.backendPromise; + return backend.get(key); + } + + async set(key, value) { + const backend = await this.backendPromise; + return backend.set(key, value); + } + + async remove(key) { + const backend = await this.backendPromise; + return backend.remove(key); + } + + async clear() { + const backend = await this.backendPromise; + return backend.clear(); + } +} + +export const storage = new StorageProxy(); diff --git a/tgui/packages/common/string.babel-plugin.cjs b/tgui/packages/common/string.babel-plugin.cjs index 65b2be097353..97ca67c6ea4c 100644 --- a/tgui/packages/common/string.babel-plugin.cjs +++ b/tgui/packages/common/string.babel-plugin.cjs @@ -1,5 +1,7 @@ /** - * @file + * This plugin saves overall about 10KB on the final bundle size, so it's + * sort of worth it. + * * We are using a .cjs extension because: * * 1. Webpack CLI only supports CommonJS modules; @@ -9,8 +11,9 @@ * We need to copy-paste the whole "multiline" function because we can't * synchronously import an ES module from a CommonJS module. * - * This plugin saves overall about 10KB on the final bundle size, so it's - * sort of worth it. + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT */ /** diff --git a/tgui/packages/common/string.js b/tgui/packages/common/string.js index 43411211b69e..161e7a8a9c6f 100644 --- a/tgui/packages/common/string.js +++ b/tgui/packages/common/string.js @@ -1,3 +1,9 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + /** * Removes excess whitespace and indentation from the string. */ diff --git a/tgui/packages/common/target/npmlist.json b/tgui/packages/common/target/npmlist.json deleted file mode 100644 index 7c3764b28c51..000000000000 --- a/tgui/packages/common/target/npmlist.json +++ /dev/null @@ -1 +0,0 @@ -{ "name": "common", "version": "3.0.0" } diff --git a/tgui/packages/common/timer.js b/tgui/packages/common/timer.js index e3feb69ca9ca..0b1c68199e9f 100644 --- a/tgui/packages/common/timer.js +++ b/tgui/packages/common/timer.js @@ -1,3 +1,9 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + /** * Returns a function, that, as long as it continues to be invoked, will * not be triggered. The function will be called after it stops being @@ -21,3 +27,11 @@ export const debounce = (fn, time, immediate = false) => { } }; }; + +/** + * Suspends an asynchronous function for N milliseconds. + * + * @param {number} time + */ +export const sleep = (time) => + new Promise((resolve) => setTimeout(resolve, time)); diff --git a/tgui/packages/common/types.ts b/tgui/packages/common/types.ts new file mode 100644 index 000000000000..e68aadbdb11c --- /dev/null +++ b/tgui/packages/common/types.ts @@ -0,0 +1,8 @@ +/** + * Returns the arguments of a function F as an array. + */ +export type ArgumentsOf = F extends ( + ...args: infer A +) => unknown + ? A + : never; diff --git a/tgui/packages/common/uuid.js b/tgui/packages/common/uuid.js new file mode 100644 index 000000000000..f2eb4bb98f4e --- /dev/null +++ b/tgui/packages/common/uuid.js @@ -0,0 +1,19 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +/** + * Creates a UUID v4 string + * + * @return {string} + */ +export const createUuid = () => { + let d = new Date().getTime(); + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { + const r = (d + Math.random() * 16) % 16 | 0; + d = Math.floor(d / 16); + return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16); + }); +}; diff --git a/tgui/packages/common/vector.js b/tgui/packages/common/vector.js index d9538e6e7029..b1f85f7429db 100644 --- a/tgui/packages/common/vector.js +++ b/tgui/packages/common/vector.js @@ -1,14 +1,14 @@ -import { map, reduce, zipWith } from './collections'; - /** - * Creates a vector, with as many dimensions are there are arguments. + * N-dimensional vector manipulation functions. + * + * Vectors are plain number arrays, i.e. [x, y, z]. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT */ -export const vecCreate = (...components) => { - if (Array.isArray(components[0])) { - return [...components[0]]; - } - return components; -}; + +import { map, reduce, zipWith } from './collections'; const ADD = (a, b) => a + b; const SUB = (a, b) => a - b; diff --git a/tgui/packages/tgui-dev-server/dreamseeker.js b/tgui/packages/tgui-dev-server/dreamseeker.js new file mode 100644 index 000000000000..d1ca2a9ac539 --- /dev/null +++ b/tgui/packages/tgui-dev-server/dreamseeker.js @@ -0,0 +1,102 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { exec } from 'child_process'; +import { promisify } from 'util'; + +import { createLogger } from './logging.js'; +import { require } from './require.js'; + +const axios = require('axios'); +const logger = createLogger('dreamseeker'); + +const instanceByPid = new Map(); + +export class DreamSeeker { + constructor(pid, addr) { + this.pid = pid; + this.addr = addr; + this.client = axios.create({ + baseURL: `http://${addr}/`, + }); + } + + topic(params = {}) { + // prettier-ignore + const query = Object.keys(params) + .map(key => encodeURIComponent(key) + + '=' + encodeURIComponent(params[key])) + .join('&'); + logger.log( + `topic call at ${this.client.defaults.baseURL + '/dummy?' + query}`, + ); + return this.client.get('/dummy?' + query); + } +} + +/** + * @param {number[]} pids + * @returns {DreamSeeker[]} + */ +DreamSeeker.getInstancesByPids = async (pids) => { + if (process.platform !== 'win32') { + return []; + } + const instances = []; + const pidsToResolve = []; + for (let pid of pids) { + const instance = instanceByPid.get(pid); + if (instance) { + instances.push(instance); + } else { + pidsToResolve.push(pid); + } + } + if (pidsToResolve.length > 0) { + try { + const command = 'netstat -ano | findstr TCP | findstr 0.0.0.0:0'; + const { stdout } = await promisify(exec)(command, { + // Max buffer of 1MB (default is 200KB) + maxBuffer: 1024 * 1024, + }); + // Line format: + // proto addr mask mode pid + const entries = []; + const lines = stdout.split('\r\n'); + for (let line of lines) { + const words = line.match(/\S+/g); + if (!words || words.length === 0) { + continue; + } + const entry = { + addr: words[1], + pid: parseInt(words[4], 10), + }; + if (pidsToResolve.includes(entry.pid)) { + entries.push(entry); + } + } + const len = entries.length; + logger.log('found', len, plural('instance', len)); + for (let entry of entries) { + const { pid, addr } = entry; + const instance = new DreamSeeker(pid, addr); + instances.push(instance); + instanceByPid.set(pid, instance); + } + } catch (err) { + if (err.code === 'ERR_CHILD_PROCESS_STDIO_MAXBUFFER') { + logger.error(err.message, err.code); + } else { + logger.error(err); + } + return []; + } + } + return instances; +}; + +const plural = (word, n) => (n !== 1 ? word + 's' : word); diff --git a/tgui/packages/tgui-dev-server/index.js b/tgui/packages/tgui-dev-server/index.js index 1e7683080c8c..85489ebb0499 100644 --- a/tgui/packages/tgui-dev-server/index.js +++ b/tgui/packages/tgui-dev-server/index.js @@ -1,22 +1,30 @@ -import { setupWebpack, getWebpackConfig } from './webpack.js'; +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + import { reloadByondCache } from './reloader.js'; +import { createCompiler } from './webpack.js'; const noHot = process.argv.includes('--no-hot'); +const noTmp = process.argv.includes('--no-tmp'); const reloadOnce = process.argv.includes('--reload'); const setupServer = async () => { - const config = await getWebpackConfig({ + const compiler = await createCompiler({ mode: 'development', hot: !noHot, + devServer: true, + useTmpFolder: !noTmp, }); // Reload cache once if (reloadOnce) { - const bundleDir = config.output.path; - await reloadByondCache(bundleDir); + await reloadByondCache(compiler.bundleDir); return; } // Run a development server - await setupWebpack(config); + await compiler.watch(); }; setupServer(); diff --git a/tgui/packages/tgui-dev-server/link/client.js b/tgui/packages/tgui-dev-server/link/client.cjs similarity index 64% rename from tgui/packages/tgui-dev-server/link/client.js rename to tgui/packages/tgui-dev-server/link/client.cjs index 941a2e76d38f..b0e6f7bc9d44 100644 --- a/tgui/packages/tgui-dev-server/link/client.js +++ b/tgui/packages/tgui-dev-server/link/client.cjs @@ -1,3 +1,9 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + let socket; const queue = []; const subscribers = []; @@ -25,11 +31,9 @@ const ensureConnection = () => { }; } } -}; -if (process.env.NODE_ENV !== 'production') { window.onunload = () => socket && socket.close(); -} +}; const subscribe = (fn) => subscribers.push(fn); @@ -62,7 +66,11 @@ const serializeObject = (obj) => { } refs.push(value); // Error object - if (value instanceof Error) { + // prettier-ignore + const isError = value instanceof Error || ( + value.code && value.message && value.message.includes('Error') + ); + if (isError) { return { __error__: true, string: String(value), @@ -82,7 +90,7 @@ const serializeObject = (obj) => { return json; }; -const sendRawMessage = (msg) => { +const sendMessage = (msg) => { if (process.env.NODE_ENV !== 'production') { const json = serializeObject(msg); // Send message using WebSocket @@ -91,8 +99,8 @@ const sendRawMessage = (msg) => { if (socket.readyState === WebSocket.OPEN) { socket.send(json); } else { - // Keep only 10 latest messages in the queue - if (queue.length > 10) { + // Keep only 100 latest messages in the queue + if (queue.length > 100) { queue.shift(); } queue.push(json); @@ -102,17 +110,17 @@ const sendRawMessage = (msg) => { else { const DEV_SERVER_IP = process.env.DEV_SERVER_IP || '127.0.0.1'; const req = new XMLHttpRequest(); - req.open('POST', `http://${DEV_SERVER_IP}:3001`); - req.timeout = 500; + req.open('POST', `http://${DEV_SERVER_IP}:3001`, true); + req.timeout = 250; req.send(json); } } }; -export const sendLogEntry = (level, ns, ...args) => { +const sendLogEntry = (level, ns, ...args) => { if (process.env.NODE_ENV !== 'production') { try { - sendRawMessage({ + sendMessage({ type: 'log', payload: { level, @@ -124,38 +132,46 @@ export const sendLogEntry = (level, ns, ...args) => { } }; -export const setupHotReloading = () => { +const setupHotReloading = () => { if ( - process.env.NODE_ENV !== 'production' && - process.env.WEBPACK_HMR_ENABLED && - window.WebSocket + process.env.NODE_ENV === 'production' || + !process.env.WEBPACK_HMR_ENABLED || + !window.WebSocket ) { - if (module.hot) { - ensureConnection(); - sendLogEntry(0, null, 'setting up hot reloading'); - subscribe((msg) => { - const { type } = msg; - sendLogEntry(0, null, 'received', type); - if (type === 'hotUpdate') { - const status = module.hot.status(); - if (status !== 'idle') { - sendLogEntry(0, null, 'hot reload status:', status); - return; - } - module.hot - .check({ - ignoreUnaccepted: true, - ignoreDeclined: true, - ignoreErrored: true, - }) - .then((modules) => { - sendLogEntry(0, null, 'outdated modules', modules); - }) - .catch((err) => { - sendLogEntry(0, null, 'reload error', err); - }); + return; + } + if (module.hot) { + ensureConnection(); + sendLogEntry(0, null, 'setting up hot reloading'); + subscribe((msg) => { + const { type } = msg; + sendLogEntry(0, null, 'received', type); + if (type === 'hotUpdate') { + const status = module.hot.status(); + if (status !== 'idle') { + sendLogEntry(0, null, 'hot reload status:', status); + return; } - }); - } + module.hot + .check({ + ignoreUnaccepted: true, + ignoreDeclined: true, + ignoreErrored: true, + }) + .then((modules) => { + sendLogEntry(0, null, 'outdated modules', modules); + }) + .catch((err) => { + sendLogEntry(0, null, 'reload error', err); + }); + } + }); } }; + +module.exports = { + subscribe, + sendMessage, + sendLogEntry, + setupHotReloading, +}; diff --git a/tgui/packages/tgui-dev-server/link/retrace.js b/tgui/packages/tgui-dev-server/link/retrace.js index 0b0372d23f4e..083ddb37d1c1 100644 --- a/tgui/packages/tgui-dev-server/link/retrace.js +++ b/tgui/packages/tgui-dev-server/link/retrace.js @@ -1,10 +1,19 @@ -import { createLogger } from 'common/logging.js'; +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + import fs from 'fs'; import { basename } from 'path'; -import SourceMap from 'source-map'; -import StackTraceParser from 'stacktrace-parser'; + +import { createLogger } from '../logging.js'; +import { require } from '../require.js'; import { resolveGlob } from '../util.js'; +const SourceMap = require('source-map'); +const { parse: parseStackTrace } = require('stacktrace-parser'); + const logger = createLogger('retrace'); const { SourceMapConsumer } = SourceMap; @@ -22,7 +31,7 @@ export const loadSourceMaps = async (bundleDir) => { try { const file = basename(path).replace('.map', ''); const consumer = await new SourceMapConsumer( - JSON.parse(fs.readFileSync(path, 'utf8')) + JSON.parse(fs.readFileSync(path, 'utf8')), ); sourceMaps.push({ file, consumer }); } catch (err) { @@ -33,8 +42,12 @@ export const loadSourceMaps = async (bundleDir) => { }; export const retrace = (stack) => { + if (typeof stack !== 'string') { + logger.log('ERROR: Stack is not a string!', stack); + return stack; + } const header = stack.split(/\n\s.*at/)[0]; - const mappedStack = StackTraceParser.parse(stack) + const mappedStack = parseStackTrace(stack) .map((frame) => { if (!frame.file) { return frame; diff --git a/tgui/packages/tgui-dev-server/link/server.js b/tgui/packages/tgui-dev-server/link/server.js index b12760785991..2a1f551bf6eb 100644 --- a/tgui/packages/tgui-dev-server/link/server.js +++ b/tgui/packages/tgui-dev-server/link/server.js @@ -1,8 +1,17 @@ -import { createLogger, directLog } from 'common/logging.js'; +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + import http from 'http'; import { inspect } from 'util'; -import WebSocket from 'ws'; -import { retrace, loadSourceMaps } from './retrace.js'; + +import { createLogger, directLog } from '../logging.js'; +import { require } from '../require.js'; +import { loadSourceMaps, retrace } from './retrace.js'; + +const WebSocket = require('ws'); const logger = createLogger('link'); @@ -10,62 +19,66 @@ const DEBUG = process.argv.includes('--debug'); export { loadSourceMaps }; -export const setupLink = () => { - logger.log('setting up'); - const wss = setupWebSocketLink(); - setupHttpLink(); - return { - wss, - }; -}; +export const setupLink = () => new LinkServer(); -export const broadcastMessage = (link, msg) => { - const { wss } = link; - const clients = [...wss.clients]; - logger.log(`broadcasting ${msg.type} to ${clients.length} clients`); - for (let client of clients) { - const json = JSON.stringify(msg); - client.send(json); +class LinkServer { + constructor() { + logger.log('setting up'); + this.wss = null; + this.setupWebSocketLink(); + this.setupHttpLink(); } -}; -const deserializeObject = (str) => { - return JSON.parse(str, (key, value) => { - if (typeof value === 'object' && value !== null) { - if (value.__error__) { - if (!value.stack) { - return value.string; - } - return retrace(value.stack); - } - if (value.__number__) { - return parseFloat(value.__number__); - } - if (value.__undefined__) { - // NOTE: You should not rely on deserialized object's undefined, - // this is purely for inspection purposes. - return { - [inspect.custom]: () => undefined, - }; - } - return value; - } - return value; - }); -}; + // WebSocket-based client link + setupWebSocketLink() { + const port = 3000; + this.wss = new WebSocket.Server({ port }); + this.wss.on('connection', (ws) => { + logger.log('client connected'); + ws.on('message', (json) => { + const msg = deserializeObject(json); + this.handleLinkMessage(ws, msg); + }); + ws.on('close', () => { + logger.log('client disconnected'); + }); + }); + logger.log(`listening on port ${port} (WebSocket)`); + } -const handleLinkMessage = (msg) => { - const { type, payload } = msg; + // One way HTTP-based client link for IE8 + setupHttpLink() { + const port = 3001; + this.httpServer = http.createServer((req, res) => { + if (req.method === 'POST') { + let body = ''; + req.on('data', (chunk) => { + body += chunk.toString(); + }); + req.on('end', () => { + const msg = deserializeObject(body); + this.handleLinkMessage(null, msg); + res.end(); + }); + return; + } + res.write('Hello'); + res.end(); + }); + this.httpServer.listen(port); + logger.log(`listening on port ${port} (HTTP)`); + } - if (type === 'log') { - const { level, ns, args } = payload; - // Skip debug messages - if (level <= 0 && !DEBUG) { - return; - } - directLog( - ns, - ...args.map((arg) => { + handleLinkMessage(ws, msg) { + const { type, payload } = msg; + if (type === 'log') { + const { level, ns, args } = payload; + // Skip debug messages + if (level <= 0 && !DEBUG) { + return; + } + // prettier-ignore + directLog(ns, ...args.map(arg => { if (typeof arg === 'object') { return inspect(arg, { depth: Infinity, @@ -74,57 +87,59 @@ const handleLinkMessage = (msg) => { }); } return arg; - }) - ); - return; + })); + return; + } + if (type === 'relay') { + for (let client of this.wss.clients) { + if (client === ws) { + continue; + } + this.sendMessage(client, msg); + } + return; + } + logger.log('unhandled message', msg); } - logger.log('unhandled message', msg); -}; - -// WebSocket-based client link -const setupWebSocketLink = () => { - const port = 3000; - const wss = new WebSocket.Server({ port }); - - wss.on('connection', (ws) => { - logger.log('client connected'); - - ws.on('message', (json) => { - const msg = deserializeObject(json); - handleLinkMessage(msg); - }); - - ws.on('close', () => { - logger.log('client disconnected'); - }); - }); - - logger.log(`listening on port ${port} (WebSocket)`); - return wss; -}; - -// One way HTTP-based client link for IE8 -const setupHttpLink = () => { - const port = 3001; + sendMessage(ws, msg) { + ws.send(JSON.stringify(msg)); + } - const server = http.createServer((req, res) => { - if (req.method === 'POST') { - let body = ''; - req.on('data', (chunk) => { - body += chunk.toString(); - }); - req.on('end', () => { - const msg = deserializeObject(body); - handleLinkMessage(msg); - res.end(); - }); + broadcastMessage(msg) { + const clients = [...this.wss.clients]; + if (clients.length === 0) { return; } - res.write('Hello'); - res.end(); - }); + logger.log(`broadcasting ${msg.type} to ${clients.length} clients`); + for (let client of clients) { + const json = JSON.stringify(msg); + client.send(json); + } + } +} - server.listen(port); - logger.log(`listening on port ${port} (HTTP)`); +const deserializeObject = (str) => { + return JSON.parse(str, (key, value) => { + if (typeof value === 'object' && value !== null) { + if (value.__undefined__) { + // NOTE: You should not rely on deserialized object's undefined, + // this is purely for inspection purposes. + return { + [inspect.custom]: () => undefined, + }; + } + if (value.__number__) { + return parseFloat(value.__number__); + } + if (value.__error__) { + if (!value.stack) { + return value.string; + } + return retrace(value.stack); + } + return value; + } + return value; + }); }; diff --git a/tgui/packages/common/logging.js b/tgui/packages/tgui-dev-server/logging.js similarity index 91% rename from tgui/packages/common/logging.js rename to tgui/packages/tgui-dev-server/logging.js index ba3ae75d0246..4ec09008ff50 100644 --- a/tgui/packages/common/logging.js +++ b/tgui/packages/tgui-dev-server/logging.js @@ -1,3 +1,9 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + const inception = Date.now(); // Runtime detection @@ -41,7 +47,10 @@ const getPrefix = (() => { styles.bright, ]; } - return (ns) => [`${getTimestamp()} ${ns}`]; + // prettier-ignore + return ns => [ + `${getTimestamp()} ${ns}`, + ]; })(); /** diff --git a/tgui/packages/tgui-dev-server/package.json b/tgui/packages/tgui-dev-server/package.json index 18fcd54a417b..496e25c6c184 100644 --- a/tgui/packages/tgui-dev-server/package.json +++ b/tgui/packages/tgui-dev-server/package.json @@ -1,12 +1,13 @@ { "private": true, "name": "tgui-dev-server", - "version": "3.0.0", + "version": "5.0.0", "type": "module", "dependencies": { - "glob": "^7.1.4", - "source-map": "^0.7.3", - "stacktrace-parser": "^0.1.7", - "ws": "^7.4.6" + "axios": "^1.6.2", + "glob": "^7.2.0", + "source-map": "^0.7.4", + "stacktrace-parser": "^0.1.10", + "ws": "^8.14.2" } } diff --git a/tgui/packages/tgui-dev-server/reloader.js b/tgui/packages/tgui-dev-server/reloader.js index ca650be4b5e7..cb477a6523b0 100644 --- a/tgui/packages/tgui-dev-server/reloader.js +++ b/tgui/packages/tgui-dev-server/reloader.js @@ -1,8 +1,15 @@ -import { createLogger } from 'common/logging.js'; +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + import fs from 'fs'; import os from 'os'; import { basename } from 'path'; -import { promisify } from 'util'; + +import { DreamSeeker } from './dreamseeker.js'; +import { createLogger } from './logging.js'; import { resolveGlob, resolvePath } from './util.js'; import { regQuery } from './winreg.js'; @@ -37,7 +44,7 @@ export const findCacheRoot = async () => { const paths = await resolveGlob(pattern); if (paths.length > 0) { cacheRoot = paths[0]; - logger.log(`found cache at '${cacheRoot}'`); + onCacheRootFound(cacheRoot); return cacheRoot; } } @@ -46,14 +53,24 @@ export const findCacheRoot = async () => { logger.log('querying windows registry'); let userpath = await regQuery('HKCU\\Software\\Dantom\\BYOND', 'userpath'); if (userpath) { - cacheRoot = userpath.replace(/\\$/, '').replace(/\\/g, '/') + '/cache'; - logger.log(`found cache at '${cacheRoot}'`); + // prettier-ignore + cacheRoot = userpath + .replace(/\\$/, '') + .replace(/\\/g, '/') + + '/cache'; + onCacheRootFound(cacheRoot); return cacheRoot; } } logger.log('found no cache directories'); }; +const onCacheRootFound = (cacheRoot) => { + logger.log(`found cache at '${cacheRoot}'`); + // Plant a dummy browser window file, we'll be using this to avoid world topic. For byond 514. + fs.closeSync(fs.openSync(cacheRoot + '/dummy', 'w')); +}; + export const reloadByondCache = async (bundleDir) => { const cacheRoot = await findCacheRoot(); if (!cacheRoot) { @@ -65,18 +82,49 @@ export const reloadByondCache = async (bundleDir) => { logger.log('found no tmp folder in cache'); return; } - const assets = await resolveGlob(bundleDir, './*.+(bundle|hot-update).*'); + // Get dreamseeker instances + const pids = cacheDirs.map((cacheDir) => + parseInt(cacheDir.split('/cache/tmp').pop(), 10), + ); + const dssPromise = DreamSeeker.getInstancesByPids(pids); + // Copy assets + const assets = await resolveGlob( + bundleDir, + './*.+(bundle|chunk|hot-update).*', + ); for (let cacheDir of cacheDirs) { // Clear garbage - const garbage = await resolveGlob(cacheDir, './*.+(bundle|hot-update).*'); - for (let file of garbage) { - await promisify(fs.unlink)(file); + const garbage = await resolveGlob( + cacheDir, + './*.+(bundle|chunk|hot-update).*', + ); + try { + // Plant a dummy browser window file, we'll be using this to avoid world topic. For byond 515. + fs.closeSync(fs.openSync(cacheDir + '/dummy', 'w')); + + for (let file of garbage) { + fs.unlinkSync(file); + } + // Copy assets + for (let asset of assets) { + const destination = resolvePath(cacheDir, basename(asset)); + fs.writeFileSync(destination, fs.readFileSync(asset)); + } + logger.log(`copied ${assets.length} files to '${cacheDir}'`); + } catch (err) { + logger.error(`failed copying to '${cacheDir}'`); + logger.error(err); } - // Copy assets - for (let asset of assets) { - const destination = resolvePath(cacheDir, basename(asset)); - await promisify(fs.copyFile)(asset, destination); + } + // Notify dreamseeker + const dss = await dssPromise; + if (dss.length > 0) { + logger.log(`notifying dreamseeker`); + for (let dreamseeker of dss) { + dreamseeker.topic({ + tgui: 1, + type: 'cacheReloaded', + }); } - logger.log(`copied ${assets.length} files to '${cacheDir}'`); } }; diff --git a/tgui/packages/tgui-dev-server/require.js b/tgui/packages/tgui-dev-server/require.js new file mode 100644 index 000000000000..0551d630fc68 --- /dev/null +++ b/tgui/packages/tgui-dev-server/require.js @@ -0,0 +1,9 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { createRequire } from 'module'; + +export const require = createRequire(import.meta.url); diff --git a/tgui/packages/tgui-dev-server/util.js b/tgui/packages/tgui-dev-server/util.js index 21214172963d..79190fe189a4 100644 --- a/tgui/packages/tgui-dev-server/util.js +++ b/tgui/packages/tgui-dev-server/util.js @@ -1,22 +1,30 @@ -import glob from 'glob'; -import { resolve as resolvePath } from 'path'; +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + import fs from 'fs'; -import { promisify } from 'util'; +import path from 'path'; + +import { require } from './require.js'; + +const globPkg = require('glob'); -export { resolvePath }; +export const resolvePath = path.resolve; /** * Combines path.resolve with glob patterns. */ -export const resolveGlob = async (...sections) => { - const unsafePaths = await promisify(glob)(resolvePath(...sections), { +export const resolveGlob = (...sections) => { + const unsafePaths = globPkg.sync(path.resolve(...sections), { strict: false, silent: true, }); const safePaths = []; for (let path of unsafePaths) { try { - await promisify(fs.stat)(path); + fs.statSync(path); safePaths.push(path); } catch {} } diff --git a/tgui/packages/tgui-dev-server/webpack.js b/tgui/packages/tgui-dev-server/webpack.js index 77b4659ff385..e4fbdeb9f1e2 100644 --- a/tgui/packages/tgui-dev-server/webpack.js +++ b/tgui/packages/tgui-dev-server/webpack.js @@ -1,54 +1,84 @@ -import { createLogger } from 'common/logging.js'; +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + import fs from 'fs'; import { createRequire } from 'module'; -import { promisify } from 'util'; -import webpack from 'webpack'; -import { broadcastMessage, loadSourceMaps, setupLink } from './link/server.js'; +import { dirname } from 'path'; + +import { loadSourceMaps, setupLink } from './link/server.js'; +import { createLogger } from './logging.js'; import { reloadByondCache } from './reloader.js'; import { resolveGlob } from './util.js'; const logger = createLogger('webpack'); -export const getWebpackConfig = async (options) => { - const require = createRequire(import.meta.url); - const createConfig = await require('../tgui/webpack.config.js'); - return createConfig({}, options); +/** + * @param {any} config + * @return {WebpackCompiler} + */ +export const createCompiler = async (options) => { + const compiler = new WebpackCompiler(); + await compiler.setup(options); + return compiler; }; -export const setupWebpack = async (config) => { - logger.log('setting up'); - const bundleDir = config.output.path; - // Setup link - const link = setupLink(); - // Instantiate the compiler - const compiler = webpack(config); - // Clear garbage before compiling - compiler.hooks.watchRun.tapPromise('tgui-dev-server', async () => { - const files = await resolveGlob(bundleDir, './*.hot-update.*'); - logger.log(`clearing garbage (${files.length} files)`); - for (let file of files) { - await promisify(fs.unlink)(file); +class WebpackCompiler { + async setup(options) { + // Create a require context that is relative to project root + // and retrieve all necessary dependencies. + const requireFromRoot = createRequire(dirname(import.meta.url) + '/../..'); + const webpack = await requireFromRoot('webpack'); + const createConfig = await requireFromRoot('./webpack.config.js'); + const config = createConfig({}, options); + // Inject the HMR plugin into the config if we're using it + if (options.hot) { + config.plugins.push(new webpack.HotModuleReplacementPlugin()); } - logger.log('compiling'); - }); - // Start reloading when it's finished - compiler.hooks.done.tap('tgui-dev-server', async (stats) => { - // Load source maps - await loadSourceMaps(bundleDir); - // Reload cache - await reloadByondCache(bundleDir); - // Notify all clients that update has happened - broadcastMessage(link, { - type: 'hotUpdate', + this.webpack = webpack; + this.config = config; + this.bundleDir = config.output.path; + } + + async watch() { + logger.log('setting up'); + // Setup link + const link = setupLink(); + // Instantiate the compiler + const compiler = this.webpack.webpack(this.config); + // Clear garbage before compiling + compiler.hooks.watchRun.tapPromise('tgui-dev-server', async () => { + const files = await resolveGlob(this.bundleDir, './*.hot-update.*'); + logger.log(`clearing garbage (${files.length} files)`); + for (let file of files) { + fs.unlinkSync(file); + } + logger.log('compiling'); }); - }); - // Start watching - logger.log('watching for changes'); - compiler.watch({}, (err, stats) => { - if (err) { - logger.error('compilation error', err); - return; - } - logger.log(stats.toString(config.devServer.stats)); - }); -}; + // Start reloading when it's finished + compiler.hooks.done.tap('tgui-dev-server', async (stats) => { + // Load source maps + await loadSourceMaps(this.bundleDir); + // Reload cache + await reloadByondCache(this.bundleDir); + // Notify all clients that update has happened + link.broadcastMessage({ + type: 'hotUpdate', + }); + }); + // Start watching + logger.log('watching for changes'); + compiler.watch({}, (err, stats) => { + if (err) { + logger.error('compilation error', err); + return; + } + stats + .toString(this.config.devServer.stats) + .split('\n') + .forEach((line) => logger.log(line)); + }); + } +} diff --git a/tgui/packages/tgui-dev-server/winreg.js b/tgui/packages/tgui-dev-server/winreg.js index a8f755bb32d9..43a417019071 100644 --- a/tgui/packages/tgui-dev-server/winreg.js +++ b/tgui/packages/tgui-dev-server/winreg.js @@ -1,11 +1,16 @@ /** - * @file * Tools for dealing with Windows Registry bullshit. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT */ + import { exec } from 'child_process'; -import { createLogger } from 'common/logging.js'; import { promisify } from 'util'; +import { createLogger } from './logging.js'; + const logger = createLogger('winreg'); export const regQuery = async (path, key) => { @@ -31,8 +36,8 @@ export const regQuery = async (path, key) => { logger.error('could not find the start of the key value'); return null; } - const value = stdout.substring(indexOfValue + 4, indexOfEol); - return value; + + return stdout.substring(indexOfValue + 4, indexOfEol); } catch (err) { logger.error(err); return null; diff --git a/tgui/packages/tgui-panel/Notifications.js b/tgui/packages/tgui-panel/Notifications.js new file mode 100644 index 000000000000..2b92995287fa --- /dev/null +++ b/tgui/packages/tgui-panel/Notifications.js @@ -0,0 +1,28 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { Flex } from 'tgui/components'; + +export const Notifications = (props) => { + const { children } = props; + return
{children}
; +}; + +const NotificationsItem = (props) => { + const { rightSlot, children } = props; + return ( + + + {children} + + {rightSlot && ( + {rightSlot} + )} + + ); +}; + +Notifications.Item = NotificationsItem; diff --git a/tgui/packages/tgui-panel/Panel.js b/tgui/packages/tgui-panel/Panel.js new file mode 100644 index 000000000000..f32c0ed69beb --- /dev/null +++ b/tgui/packages/tgui-panel/Panel.js @@ -0,0 +1,130 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { Button, Section, Stack } from 'tgui/components'; +import { Pane } from 'tgui/layouts'; +import { NowPlayingWidget, useAudio } from './audio'; +import { ChatPanel, ChatTabs } from './chat'; +import { useGame } from './game'; +import { Notifications } from './Notifications'; +import { PingIndicator } from './ping'; +import { ReconnectButton } from './reconnect'; +import { SettingsPanel, useSettings } from './settings'; + +export const Panel = (props, context) => { + // IE8-10: Needs special treatment due to missing Flex support + if (Byond.IS_LTE_IE10) { + return ; + } + const audio = useAudio(context); + const settings = useSettings(context); + const game = useGame(context); + if (process.env.NODE_ENV !== 'production') { + const { useDebug, KitchenSink } = require('tgui/debug'); + const debug = useDebug(context); + if (debug.kitchenSink) { + return ; + } + } + return ( + + + +
+ + + + + + + + +
+
+ {audio.visible && ( + +
+ +
+
+ )} + {settings.visible && ( + + + + )} + +
+ + + + + {game.connectionLostAt && ( + }> + You are either AFK, experiencing lag or the connection has + closed. + + )} + {game.roundRestartedAt && ( + + The connection has been closed because the server is + restarting.
Please wait while you automatically + reconnect. +
+ )} +
+
+
+
+
+ ); +}; + +const HoboPanel = (props, context) => { + const settings = useSettings(context); + return ( + + + + {(settings.visible && ) || ( + + )} + + + ); +}; diff --git a/tgui/packages/tgui-panel/audio/NowPlayingWidget.js b/tgui/packages/tgui-panel/audio/NowPlayingWidget.js new file mode 100644 index 000000000000..6670fe0d5522 --- /dev/null +++ b/tgui/packages/tgui-panel/audio/NowPlayingWidget.js @@ -0,0 +1,72 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { toFixed } from 'common/math'; +import { useDispatch, useSelector } from 'common/redux'; +import { Button, Flex, Knob } from 'tgui/components'; +import { useSettings } from '../settings'; +import { selectAudio } from './selectors'; + +export const NowPlayingWidget = (props, context) => { + const audio = useSelector(context, selectAudio); + const dispatch = useDispatch(context); + const settings = useSettings(context); + const title = audio.meta?.title; + return ( + + {(audio.playing && ( + <> + + Now playing: + + + {title || 'Unknown Track'} + + + )) || ( + + Nothing to play. + + )} + {audio.playing && ( + + + + + +
+ {MESSAGE_TYPES.filter( + (typeDef) => !typeDef.important && !typeDef.admin + ).map((typeDef) => ( + + dispatch( + toggleAcceptedType({ + pageId: page.id, + type: typeDef.type, + }) + ) + } + > + {typeDef.name} + + ))} + + {MESSAGE_TYPES.filter( + (typeDef) => !typeDef.important && typeDef.admin + ).map((typeDef) => ( + + dispatch( + toggleAcceptedType({ + pageId: page.id, + type: typeDef.type, + }) + ) + } + > + {typeDef.name} + + ))} + +
+ + ); +}; diff --git a/tgui/packages/tgui-panel/chat/ChatPanel.js b/tgui/packages/tgui-panel/chat/ChatPanel.js new file mode 100644 index 000000000000..3bda6bdabfc3 --- /dev/null +++ b/tgui/packages/tgui-panel/chat/ChatPanel.js @@ -0,0 +1,74 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { shallowDiffers } from 'common/react'; +import { Component, createRef } from 'inferno'; +import { Button } from 'tgui/components'; +import { chatRenderer } from './renderer'; + +export class ChatPanel extends Component { + constructor() { + super(); + this.ref = createRef(); + this.state = { + scrollTracking: true, + }; + this.handleScrollTrackingChange = (value) => + this.setState({ + scrollTracking: value, + }); + } + + componentDidMount() { + chatRenderer.mount(this.ref.current); + chatRenderer.events.on( + 'scrollTrackingChanged', + this.handleScrollTrackingChange + ); + this.componentDidUpdate(); + } + + componentWillUnmount() { + chatRenderer.events.off( + 'scrollTrackingChanged', + this.handleScrollTrackingChange + ); + } + + componentDidUpdate(prevProps) { + requestAnimationFrame(() => { + chatRenderer.ensureScrollTracking(); + }); + const shouldUpdateStyle = + !prevProps || shallowDiffers(this.props, prevProps); + if (shouldUpdateStyle) { + chatRenderer.assignStyle({ + 'width': '100%', + 'white-space': 'pre-wrap', + 'font-size': this.props.fontSize, + 'line-height': this.props.lineHeight, + }); + } + } + + render() { + const { scrollTracking } = this.state; + return ( + <> +
+ {!scrollTracking && ( + + )} + + ); + } +} diff --git a/tgui/packages/tgui-panel/chat/ChatTabs.js b/tgui/packages/tgui-panel/chat/ChatTabs.js new file mode 100644 index 000000000000..e6833336ec4f --- /dev/null +++ b/tgui/packages/tgui-panel/chat/ChatTabs.js @@ -0,0 +1,70 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { useDispatch, useSelector } from 'common/redux'; +import { Box, Tabs, Flex, Button } from 'tgui/components'; +import { changeChatPage, addChatPage } from './actions'; +import { selectChatPages, selectCurrentChatPage } from './selectors'; +import { openChatSettings } from '../settings/actions'; + +const UnreadCountWidget = ({ value }) => ( + + {Math.min(value, 99)} + +); + +export const ChatTabs = (props, context) => { + const pages = useSelector(context, selectChatPages); + const currentPage = useSelector(context, selectCurrentChatPage); + const dispatch = useDispatch(context); + return ( + + + + {pages.map((page) => ( + 0 && ( + + ) + } + onClick={() => + dispatch( + changeChatPage({ + pageId: page.id, + }) + ) + } + > + {page.name} + + ))} + + + + + + Can freeze the chat for a while. + + + + ); +}; + +const TextHighlightSetting = (props, context) => { + const { id, ...rest } = props; + const highlightSettingById = useSelector(context, selectHighlightSettingById); + const dispatch = useDispatch(context); + const { + highlightColor, + highlightText, + highlightWholeMessage, + matchWord, + matchCase, + } = highlightSettingById[id]; + return ( + + + +